CVE-2020-15999:Chrome FreeType字体库堆溢出原理分析

访客4年前黑客工具987

漏洞简介

Google发布公告,旧版本的 chrome 浏览器的 FreeType字体库中存在堆溢出,被利用可能导致 RCE(远程代码执行)。

安全专家建议用户尽快升级到86.0.4240.111 之后的版本,以解决风险。

漏洞原理


一、TTF 嵌入图片

TTF 字体支持嵌入 PNG 格式的图片作为字形数据,在嵌入时图片数据会被保存在字体文件的 SBIX 表格中,在处理时会通过提取 SBIX 表中的 PNG 中存取的信息来实现字体渲染。SBIX 表中的格式如下图:

1604646034_5fa4f492b0c85e9b0c6c8.png!small


SBIX 中的?strikeOffset?存储了 Strikes 的数据信息的偏移,Strikes 中的?glyphDataOffset?存储了具体的字形信息的偏移,Strikes 格式和字形信息的格式如下图:

1604646054_5fa4f4a6e70178c682f49.png!small

1604646061_5fa4f4adac7c510baaad4.png!small


字形信息中的 data 存储了被嵌入的图片信息。下面是样本中的 SBIX 和存储的图片信息。

1604646107_5fa4f4db88ea03c7b7d49.png!small?1604646107975

PNG 图片信息被保存在了?hex(0x1a30 + 0x5aaec + 0x8)=0x5c524?处。通过 IHDR 可以看到图片的一些基本信息,具体信息如下图:

1604646115_5fa4f4e3c8de0fe4b9450.png!small?1604646116270


二、Load_SBit_Png 函数实现

FreeType 库中 PNG 图片信息的提取是通过?Load_SBit_Png?函数实现的。Load_SBit_Png?函数的处理流程如下:

1. 将字形信息中 data 指向的内存解析为 PNG

2. 提取被解析后图片的 IHDR 存储的信息(图像宽度和高度,深度及颜色类型等)

3. 将解析后的信息提取到字形信息中

4. 按照之前解析到信息开辟内存用于保存图片信息


三、漏洞原理

漏洞发生在将解析到的图片信息提取到字形信息过程中,PNG 图片中的 IHDR 存储的宽度和高度的数据类型为?uint32,在存储到字形信息时,会被转换为?unsigned short?类型,此时如果图片的宽度和高度信息大于?0x7FFF?则会发生截断。

1604646123_5fa4f4eb9fc6039eeebaa.png!small?1604646123943


之后字形信息中存储的相应数据会被传递到用于存储 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 图片的高度被截断,则会导致分配的内存不足,在读取图片信息时发生堆溢出。

1604646129_5fa4f4f1b617f2b69e920.png!small?1604646130023


溢出后 bitmap 信息如下图,buffer 的长度即为?0xa3 * 0xc?,查看 buffer 之后的数据可以看到已经被覆盖。


1604646136_5fa4f4f8db815ae6b0f0b.png!small?1604646137159


漏洞验证


一、在87.0.4247.0(开发者内部版本)验证

1604646153_5fa4f50988325776c95e1.png!small?1604646153823


二、86.0.4240.111 版本修复分析

比较?imgWidth?和?imgHeight?是否大于?0x7FFF,?大于则退出。

1604646161_5fa4f511ba47360b0a23e.png!small?1604646162070


参考


https://bugs.chromium.org/p/chromium/issues/detail?id=1139963



相关文章

女子患病不去医院光喝神奇果汁 数次发烧称滚雷台是排毒

女子患病不去醫院光喝神奇果汁 數次發燒稱滾雷臺是排毒大文章,小資訊,人間白頭看目前。 男性死殖器角逐圖,國光幫幫手 邵昕,緩才後單回 動靜,肖素麗,豢養恐龍贏利,新疆籍女演員 小王晶,僧維斯-賽我秀斯...

裕海祥火锅利润怎么样?当然是给加盟商带来的惊喜无限

裕海祥火锅利润怎么样?当然是给加盟商带来的惊喜无限

近年来,火锅行业在现在的餐饮行业中可以说是比较有发展前景的行业了,在生活中每个人都需要跟一日三餐进行打交道,现在社会的快节奏生活,让人们外出越来越多,上班族的人都选择外出就餐,所以现在的餐饮行业市场很...

皮包怎么清洗(皮包保养技巧及方式)

皮包怎么清洗(皮包保养技巧及方式)

包包脏了怎么清洗?每天都使用相同的皮包,很容易造成皮质的弹性疲乏、变脏以及寿命减短。下面就具体来看看不同材质的清洗方法介绍。 包包脏了如何清洗: 准备工具:皮革清洗剂、牙膏、软毛刷、布 第一...

黑客敲诈勒索事件(黑客攻击勒索)

黑客敲诈勒索事件(黑客攻击勒索)

本文导读目录: 1、网站服务器被黑客攻击了,然后敲诈勒索,应该怎么办在那里举报或报案 2、当你被黑客敲诈勒索时该怎么办 3、富士康遭黑客勒索比特币1804枚,为什么黑客不要现金要比特币?...

北京空气质量指数预报(北京空气质量指数)

空气质量指数就是根据空气中的各种成分占比,将监测的空气浓度简化成为单一的概念性指数值形式,它将空气污染程度和空。 参与空气质量评价的主要污染物为细颗粒物、可吸入颗粒物、二氧化硫、二氧化氮、臭氧、一氧化...

想找个黑客怎么找-黑客微信联系方式(微信黑客的联系方式2019)

想找个黑客怎么找-黑客微信联系方式(微信黑客的联系方式2019)

想找个黑客怎么找相关问题 黑客微信联系方式相关问题 学黑客什么网站好 如何让别人以为你是黑客(如何让电脑变黑客)...