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


这期内容当中小编将会给大家带来有关Chrome FreeType字体库堆溢出漏洞CVE-2020-15999的原理分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。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 指向的内存解析为 PNG2. 提取被解析后图片的 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,大于则退出。上述就是小编为大家分享的Chrome FreeType字体库堆溢出漏洞CVE-2020-15999的原理分析了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注云编程开发博客行业资讯频道。

相关推荐: 路由跟踪工具0trace有什么用

这篇文章将为大家详细讲解有关路由跟踪工具0trace有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。路由跟踪工具0trace 0trace是Kali Linuz自带的一个Shell脚本工具。该工具基于已建立的TCP连接…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 02/05 11:58
Next 02/05 12:13