[转载]webp漏洞风险(蓝点)

五级用户 panndora 7月前 1749

此前苹果发布安全公告修复 CVE-2023-41064 和 CVE-2023-4863 漏洞,攻击者利用该漏洞可以向 iPhone 和 iPad 发送特制信息,受害者手机或平板只要收到这条信息就会触发漏洞,无需用户进行任何交互,危害程度极高。

根据调查该漏洞被商业间谍软件公司用来开发间谍软件,专门针对一些高价值的特定用户发起攻击,背后的目的自然不是为了钱。

事实证明这个漏洞并不只是威胁 iPhone 和 iPad,因为漏洞是 WebP 图像开源库 libwebp 中的,理论上只要软件调用了这个开源库那么都受影响。

所以目前 Google Chrome、Mozilla Firefox、Microsoft Edge 等浏览器均已发布更新修复这个漏洞,然而还有很多软件并未修复。

PoC 概念验证已经被公布:

更糟糕的是目前网上已经出现了该漏洞的 PoC,实际上有一些能力的黑客很容易找出漏洞的利用方法,因此只需要制作特定图片进行投递即可,尽管不一定可以实现无感攻击,但想要成功发起攻击并不难。

仍然还有不少软件未更新:

网络安全公司 DarkNavy (深蓝) 日前发布了一篇分析报告,根据深蓝的测试,国内也有很多软件受该漏洞影响,因为它们也需要调用 libwebp 开源库来加载 WebP 图像。

受影响的包括但不限于微信、钉钉、QQ 等国民级即时通讯 / 协作类软件,目前这些软件都还没有发布更新进行修复。

至于其他用户量稍微比微信、钉钉、QQ 低一些的类似软件自然也受该漏洞影响,当然除了即时通讯、协作类软件,其他能够发送和展示图片的软件多半也会受这个漏洞影响,只要这些软件支持 WebP 图像,那么大概率都是调用 libwebp 开源库的。

所以在这里蓝点网也提醒各位近期碰到一些软件弹出的升级提示一定要及时升级,因为这很有可能就是用来修复该漏洞的。

尤其是在 PoC 已经被公布的情况下,这下会有很多黑客参与进来,到时候就不是针对高价值客户了,可能普通用户也会被攻击。

深蓝表示:

在本案例中,漏洞发生在一个常用基础库中,实际受影响的软件产品数量超乎想象,但能及时修复漏洞的厂商微乎其微。

管中窥豹,与 Chrome、Firefox 等团队相比,国内软件开发商在漏洞信息获取、漏洞研判、漏洞修复、应急响应等诸多环节存在明显不足。

只有安全应急从被动走向主动,才能让“安全”更真实。

下面是深蓝关于该漏洞的技术分析细节:

本次漏洞根源,位于 webp 图片的处理代码逻辑中。当解析一个无损格式的webp图片时,解码器采用了范式霍夫曼编码 (Canonical Huffman Code) 算法,首先从图片流中读取前缀编码的数据,基于此数据构建一个完整的霍夫曼编码表,随后依照这个编码表对图片流中的压缩数据进行解码,得到原始的图像。

霍夫曼编码(Huffman Coding),是一种用于无损数据压缩的熵编码(权编码)算法。

在计算机资料处理中,霍夫曼编码使用变长编码表对源符号(如文件中的一个字母)进行编码。

变长编码表通过一种评估来源符号出现概率的方法得到,出现概率高的字母使用较短的编码,反之出现概率低的则使用较长的编码。

这可以使编码后的字符串平均长度、期望值降低,从而达到无损压缩数据的目的。

根据范式霍夫曼算法,在构建一个霍夫曼表时,首先会使用一级表,用于查询长度小于 N bit (N 默认为 8) 的霍夫曼编码;随后,若出现了长度超过 N bit 的编码,解码器会为其分配二级表,用于查询超过 N bit 的编码部分。在分配霍夫曼编码表的内存空间时,解码器提前会将所有一级表和二级表的空间一并分配出来,其内存大小是固定的:

#define FIXED_TABLE_SIZE (630 * 3 + 410)
static const uint16_t kTableSize[12] = {
FIXED_TABLE_SIZE + 654,
FIXED_TABLE_SIZE + 656,
FIXED_TABLE_SIZE + 658,
FIXED_TABLE_SIZE + 662,
FIXED_TABLE_SIZE + 670,
FIXED_TABLE_SIZE + 686,
FIXED_TABLE_SIZE + 718,
FIXED_TABLE_SIZE + 782,
FIXED_TABLE_SIZE + 912,
FIXED_TABLE_SIZE + 1168,
FIXED_TABLE_SIZE + 1680,
FIXED_TABLE_SIZE + 2704
};

const int table_size = kTableSize[color_cache_bits];
huffman_tables = (HuffmanCode*)WebPSafeMalloc(num_htree_groups * table_size,
sizeof(*huffman_tables));

问题在于,解码器默认图片中保存的霍夫曼编码表数据是合理的,因此提前计算了这一情况下能够容纳的最大内存长度。而霍夫曼编码表数据是来自不受信任源的,是可以由攻击者任意构造的,且编码器不会对这些数据进行有效性检查。

// Fill in 2nd level tables and add pointers to root table.
for (len = root_bits + 1, step = 2; len <= MAX_ALLOWED_CODE_LENGTH;
++len, step <<= 1) {
num_open <<= 1;
num_nodes += num_open;
num_open -= count[len];
if (num_open < 0) {
return 0;
}
if (root_table == NULL) continue;
for (; count[len] > 0; --count[len]) {
HuffmanCode code;
if ((key & mask) != low) {
table += table_size;
table_bits = NextTableBitSize(count, len, root_bits);
table_size = 1 << table_bits;
total_size += table_size;
low = key & mask;
root_table[low].bits = (uint8_t)(table_bits + root_bits);
root_table[low].value = (uint16_t)((table - root_table) - low);
}
code.bits = (uint8_t)(len - root_bits);
code.value = (uint16_t)sorted[symbol++];
ReplicateValue(&table[key >> root_bits], step, table_size, code); // overflow here
key = GetNextKey(key, len);
}
}

因此,如果攻击者能够构造出一个非法的霍夫曼表,包含了大量的长编码,这将导致解码器将分配过多的二级表,使得霍夫曼表的总内存大小超过分配大小,发生堆缓冲区溢出。



上一篇:2023年9月28日之呆
下一篇:mod整合包|老滚5全天际语音汉化(2GB)|图一乐
最新回复 (8)
  • 五级用户 panndora 7月前
    0 2
    webp出来这么多年了,这个漏洞现在才爆出来,不知道多少人中过招?
  • 四级用户 ma_er233 7月前
    0 3
    经典buffer overflow
  • 六级用户 提携玉龙 7月前
    0 4
    我挺烦webp这个图片格式的,大概就是今年才开始慢慢接触到这个格式,说不上为什么,可能就是不想学习新鲜事物吧,有时候懒得转换我甚至会直接在webp图片上截图保存成jpg。
  • 四级用户 ma_er233 7月前
    1 5
    提携玉龙 我挺烦webp这个图片格式的,大概就是今年才开始慢慢接触到这个格式,说不上为什么,可能就是不想学习新鲜事物吧,有时候懒得转换我甚至会直接在webp图片上截图保存成jpg。

    支持的太慢了主要是…ps一直到最近的23.2版本才支持,png、jpg的普及度实在是太高了

  • 四级用户 deathsz 7月前
    1 6
    不懂,内存溢出又如何,这不和app普通写个内存溢出的bug一样吗?顶多异常当前app闪退呗。
  • 五级用户 wayi_2019 7月前
    0 7
    提携玉龙 我挺烦webp这个图片格式的,大概就是今年才开始慢慢接触到这个格式,说不上为什么,可能就是不想学习新鲜事物吧,有时候懒得转换我甚至会直接在webp图片上截图保存成jpg。
    使用webp为了提高网站图片加载速度,比jpg、png之类的压缩率更高……
    就是电脑要装看图软件,不然只能扔浏览器里才能打开……
    最新的是AVIF格式,比webp压缩率更高,体积更小……
  • 四级用户 ma_er233 7月前
    2 8
    deathsz 不懂,内存溢出又如何,这不和app普通写个内存溢出的bug一样吗?顶多异常当前app闪退呗。

    因为溢出的时候会覆盖正常程序的内存,这样可以注入恶意代码。假如上述造成缓冲区溢出的表里有代码,溢出的时候这段代码被写到了某个内存地址,某个软件又被设计成在某些条件下从这个内存地址开始执行,那只要一执行这段恶意代码不就起作用了。(不大懂,解释的有点混乱嗯)
    3DS的方块忍者扫二维码石皮解的方法就是用的缓冲区溢出,原本这个二维码是用来共享自制地图的,但是有可能溢出的漏洞,这样设计一个带石皮解代码的二维码就能对3DS想干啥就干啥了。好多游戏机都是这么被攻破的,放到手机电脑上也有相应的风险

    3D21DBD4-65C5-4F22-B82C-8FB776678DE1.jpeg

  • 四级用户 yousei 7月前
    0 9
    怪不得b站视频封面变.avif了
    • 老男人游戏网配套论坛
      10
        立即登录 立即注册
发新帖
本论坛禁止发布SWITCH和PS4相关资源,若有其他侵权内容,请致邮3360342659#qq.com(#替换成@)删除。