Google发布公告,旧版本的 chrome 浏览器的 FreeType字体库中存在堆溢出,被利用可能导致 RCE(远程代码执行)。
安全专家建议用户尽快升级到86.0.4240.111 之后的版本,以解决风险。
一、TTF 嵌入图片
TTF 字体支持嵌入 PNG 格式的图片作为字形数据,在嵌入时图片数据会被保存在字体文件的 SBIX 表格中,在处理时会通过提取 SBIX 表中的 PNG 中存取的信息来实现字体渲染。SBIX 表中的格式如下图:
SBIX 中的?strikeOffset?存储了 Strikes 的数据信息的偏移,Strikes 中的?glyphDataOffset?存储了具体的字形信息的偏移,Strikes 格式和字形信息的格式如下图:
字形信息中的 data 存储了被嵌入的图片信息。下面是样本中的 SBIX 和存储的图片信息。
PNG 图片信息被保存在了?hex(0x1a30 + 0x5aaec + 0x8)=0x5c524?处。通过 IHDR 可以看到图片的一些基本信息,具体信息如下图:
二、Load_SBit_Png 函数实现
FreeType 库中 PNG 图片信息的提取是通过?Load_SBit_Png?函数实现的。Load_SBit_Png?函数的处理流程如下:
1. 将字形信息中 data 指向的内存解析为 PNG
2. 提取被解析后图片的 IHDR 存储的信息(图像宽度和高度,深度及颜色类型等)
3. 将解析后的信息提取到字形信息中
4. 按照之前解析到信息开辟内存用于保存图片信息
三、漏洞原理
漏洞发生在将解析到的图片信息提取到字形信息过程中,PNG 图片中的 IHDR 存储的宽度和高度的数据类型为?uint32,在存储到字形信息时,会被转换为?unsigned short?类型,此时如果图片的宽度和高度信息大于?0x7FFF?则会发生截断。
之后字形信息中存储的相应数据会被传递到用于存储 PNG 图片的字形信息的 bitmap 里,bitmap 中的 rows 对应图片的高度,width 对应图片的宽度,pitch 对应 bitmap 每行占据的字节数,即 宽度 * 4。之后会调用?ft_glyphslot_alloc_bitmap?函数完成 bitmap 中用于存储图片信息的内存的分配。如下图,分配的内存大小是?map->rows * (FT_ULong)map->pitch,即高度 * 每行占据的字节数。之后调用?png_read_image?读取图片信息到?bitmap->buffer。如果 PNG 图片的高度被截断,则会导致分配的内存不足,在读取图片信息时发生堆溢出。
溢出后 bitmap 信息如下图,buffer 的长度即为?0xa3 * 0xc?,查看 buffer 之后的数据可以看到已经被覆盖。
一、在87.0.4247.0(开发者内部版本)验证
二、86.0.4240.111 版本修复分析
比较?imgWidth?和?imgHeight?是否大于?0x7FFF,?大于则退出。
https://bugs.chromium.org/p/chromium/issues/detail?id=1139963
椰子蟹能吃吗(椰子蟹真的能吃出椰子味?)椰子蟹,寄居蟹科的一种,它们的体重可达4公斤,成年椰子蟹伸展后可达1米长。因其鳃腔内壁有许多血管,可以帮助其呼吸,所以椰子蟹能够长期在陆地上生活,只有到了繁...
「什么电脑管家最好用_网上怎么找信誉的黑客-一般用什么软件找漏洞做黑客」侵略测验东西(Intruder),用于履行强壮的定制进犯去发现及运用不同寻常的缝隙;# mkdir /var/www/html/...
联播+丨要点来了!总书记重磅讲话温暖你我 “光荣属于劳动者,幸福属于劳动者。” 11月24日上午,全国劳动模范和先进工作者表彰大会在北京人民大会堂隆重举行。习近平总书记出席表彰大会...
涉及工资、奖金的话题总是格外引人关注。前不久,同事间工资应不应该公开的话题引发热议,有媒体就“你会打听同事工资吗”发起网上投票,结果显示,表示会打听的人占多数。 打听同事工资仅仅是同事间茶余饭后...
小措施直播利用即安装,用户更利便回访,获客效率也更高。小措施直播本质上就是私域流量直播,两者配合促进了品牌企业的新增长。 这是直播带货大行其道,为电商营销赋予创新红利的泛贸易时代,尤其在2020年这...
脚崴了肿了怎么消肿(脚扭伤应该怎么消肿)我们在日常生活中可能会出现一些脚扭伤的现象,并且脚扭伤以后可能会出现一些红肿的现象,所以,平时应该进行及时的消肿方法。脚扭伤一般是因为平时人做一些激烈的运动或者...