# N/A
## 概述
FreeImage 3.18.0 中存在一个释放后使用(Use After Free)漏洞,位于 `PluginTARGA.cpp` 文件的 `loadRLE()` 函数。
## 影响版本
FreeImage 3.18.0
## 细节
漏洞发生在 `PluginTARGA.cpp` 中的 `loadRLE()` 函数,当处理Targa图像文件的RLE解码时,对已释放的内存进行访问,导致释放后使用。
## 影响
攻击者可利用该漏洞构造恶意Targa图像文件,在目标系统中触发内存破坏,可能导致拒绝服务、信息泄露或任意代码执行。
是否为 Web 类漏洞: 未知
判断理由:
| # | POC 描述 | 源链接 | 神龙链接 |
|---|
标题: GitHub - MiracleWolf/FreeimageCrash: crash samples by fuzz -- 🔗来源链接
标签:
神龙速读:
以下是关于漏洞的关键信息的简洁Markdown格式:
```markdown
# FreeimageCrash
## 漏洞概要
- **漏洞类型**: Use-After-Free
- **日期**: 2026-01-07
- **厂商**: FreeImage Project
- **产品**: FreeImage
- **版本**: 3.18.0
- **平台**: Windows
## 漏洞详情
### 1. 概述
在FreeImage库(版本3.18.0)的TGA图像加载器(`PluginTARGA.cpp`)中发现了Use-After-Free(UAF)漏洞。加载带有RLE压缩的特制TGA图像时,如果内部`loadRLE`函数失败,则会释放图像内存。然而,调用函数(`Load`)保留了对已释放内存的悬挂指针,并在图像翻转操作期间使用它,导致崩溃或潜在的任意代码执行。
### 2. 根因分析
漏洞是由辅助函数`loadRLE`中的“通过值传递指针”问题引起的。
#### 文件: Source/FreeImage/PluginTARGA.cpp
1. **不正确的指针管理**: `loadRLE`函数通过值接受位图指针`FIBITMAP* dib`。
2. **过早的释放**: 当`loadRLE`遇到错误时,它释放内存。
3. **Use-After-Free**: 调用函数`Load`继续使用悬挂指针`dib`。
### 3. 概念验证 (PoC)
#### 再现环境
- **操作系统**: Windows 11 x64
- **编译器**: MSVC (Visual Studio 2019)
- **库构建**: FreeImage 3.18.0 (Debug&Release)
#### 影响扩增分析
漏洞构成了一种Use-After-Free原语,允许任意内存写入。
#### 崩溃证据
当带有Debug标志编译时,应用程序崩溃并带有特定调试填充模式的访问违规。
#### Windbg结果
```plaintext
(2714.3218): 访问违规 - 代码 c0000005(第一次机会)
```
#### 错误摘要
- **故障原因**: INVALID_POINTER_READ_AVRF_c0000005_FreeImaged.dll!FreeImage_HasPixels
- **故障地址**: 0x1000caf5
- **故障模块**: FreeImaged
- **故障类型**: Paged
- **故障IP类型**: 插件
- **状态**:
```
Zaproxy alias impedit expedita quisquam pariatur exercitationem. Nemo rerum eveniet dolores rem quia dignissimos.