Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2019-11933 — Heap corruption in WhatsApp's media picker | Kitploit
工具/GitHubGitHub/natleoj/cve-2019-11933
Android SecurityMemory ForensicsVulnerability AnalysisExploitationMobile SecurityBinary Exploitation
GitHubnatleoj/cve-2019-11933

CVE-2019-11933

Heap corruption in WhatsApp's media picker

查看仓库
6年前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2019-11933

堆损坏影响 Android 版 WhatsApp(版本 2.19.291 之前)的媒体选择器

背景

GIF 文件被分割为多个段,由特定字节标记:

  • 图像 (0x2C)
    • 图像段描述 GIF 文件中的单个帧,包含高度、宽度以及压缩图像本身等信息。一个 GIF 可以有多个帧,因此有多个图像段。
  • 扩展 (0x21)
    • 扩展段包含用于修改图像的数据。
  • 终止 (0x3B)
    • 标记 GIF 文件的结束

根据源代码,renderFrame 调用 DDGifSlurp 解析 GIF,并调用 getBitmap 显示 GIF。函数分配了一个 rasterBits 缓冲区,其大小通过将当前处理图像的宽度乘以高度来计算。也许是为了节省内存空间和时间,同一个 rasterBits 缓冲区将用于 GIF 中的所有帧/图像。因此,要求该缓冲区能够容纳文件中描述的最大图像。因此,如果同一 GIF 中的另一个图像段描述了更大的图像(需要更多空间),则会重新分配缓冲区。

漏洞

DDGifSlurp 在循环中解析 GIF 文件,处理每个图像/帧,并在遇到终止记录时终止。当 DGifGetImageDesc 返回 GIF_ERROR (a) 时,会导致提前终止(在 switch case 中),从而跳过重新分配 rasterBits 缓冲区的代码。DDGifSlurp 的代码片段如下所示:

root@kitploit:~
void DDGifSlurp(GifInfo *info, bool decode, bool exitAfterFrame) {
    ...
    do {
        ...
        switch (RecordType) {
            case IMAGE_DESC_RECORD_TYPE:
             
                if (DGifGetImageDesc(gifFilePtr, isInitialPass) == GIF_ERROR) {   <-- [a]
                    break;
                }
                ...
                if (decode) {
                    ...
                    const uint_fast32_t newRasterSize = gifFilePtr->Image.Width * gifFilePtr->Image.Height;
                    if (newRasterSize > info->rasterSize || widthOverflow > 0 || heightOverflow > 0) {
                        void *tmpRasterBits = reallocarray(info->rasterBits, newRasterSize, sizeof(GifPixelType));
                        ...
                    }
    }while (RecordType != TERMINATE_RECORD_TYPE);
}

具有以下格式的 GIF 图像会导致崩溃:

  • 有效图像 (10 x 10)
  • 更大图像 (10000 x 10000) 但图像描述符无效

导致崩溃的阶段

  1. 解析阶段
    1. 解析第一个图像(小图)
    2. 分配大小为(小高度 * 小宽度)的 rasterBits 缓冲区
    3. 解析第二个图像(大图)
    4. DGifSetupDecompress/DGifGetImageDesc 返回 GIF_ERROR
    5. 跳过重新分配
  2. 渲染阶段
    1. 渲染第一个图像(成功)
    2. 渲染第二个图像(越界)
下载工具