漏洞简述
近日苹果、谷歌、Mozilla和微软等公司积极修复了libwebp组件中的缓冲区溢出漏洞,相关时间线如下:
-
9月7日,苹果发布紧急更新,修复了此前由多伦多大学公民实验室报告的iMessage 0-click 漏洞,漏洞被认为已经被NSO公司的Pegasus间谍软件所利用,漏洞编号CVE-2023-41064;
-
9月8日,libwebp 开发者提交 commit 修复了由于越界写入导致的堆缓冲区溢出漏洞;
-
9月11、12日,谷歌 chrome 、firefox、微软 Edge 游览器陆续发布更新,针对Chrome颁发漏洞编号CVE-2023-4863;
-
9月14日,libwebp 组件正式发布1.3.2版本,修复缓冲区溢出漏洞
-
9月26日,针对libwebp颁发了CVE-2023-5129漏洞编号
该漏洞利用复杂度很高,但由于libwebp是针对webp图像格式解析的事实标准,其被众多上层应用所依赖,除了影响客户端场景,还可能影响服务端,同时还存在被其他组件封装的情况,其影响非常广泛。
漏洞基本信息
漏洞编号 | CVE-2023-5129 |
---|---|
标题 | libwebp堆缓冲区溢出漏洞 |
漏洞类型 | 输入验证不当(CWE-20) |
评分 | 10 |
漏洞等级 | 严重 |
处置建议 | 强烈建议修复 |
利用所需权限 | 无需权限 |
利用条件 | 目标应用解析攻击者恶意构造的webp文件 |
影响范围 | [0.5.0, 1.3.2) |
POC | 已公开 |
漏洞成因
libwebp在解析无损的WebP图片时,会使用霍夫曼编码(Huffman coding) 来构造霍夫曼编码表,并进行解码得到原始图像。在分配霍夫曼编码表的内存空间时,解码器提前会将所有一级表和二级表的空间同时分配。但是由于霍夫曼编码表数据读取自图片,未正确校验数据大小。当攻击者构造非法的霍夫曼表时,可以使得表的总内存大小超过预分配的大小,导致堆缓冲区溢出漏洞。
当前POC已经公开,生成恶意的WebP文件后,通过dwebp转换成png文件可触发该漏洞。
影响分析
WebP是Google针对Web场景开发的一种栅格图形文件格式,相比JPEG、PNG和GIF等文件格式拥有更小的体积。Google于2010年9月宣布了WebP格式,并于2018年4月发布了其支持库的第一个稳定版本。
Libwebp 是谷歌提供用于编码和解码 WebP 格式图像的库,作为 WebP 规范的参考实现。WebP 在 Go