APP下载

攻击者可利用浏览器的旁路资讯泄漏,以HTML页面窃取跨来源图片资讯

消息来源:baojiabao.com 作者: 发布时间:2026-05-24

报价宝综合消息攻击者可利用浏览器的旁路资讯泄漏,以HTML页面窃取跨来源图片资讯

Chromium以及Firefox遭揭露允许攻击者,透过精心撰写的HTML页面,来窃取不应被存取的跨来源图片内容。该攻击的原理是利用CanvasRenderingContext2D.drawImage绘制不同透明度画素的时间差,来推断每个画素的透明度,进而读取透明背景中的文字图片。

由于相同来源政策以及画布(Canvas)元素的限制,网页JavaScript并无法读取其他网站的内容,网站只能够将不同来源的资源,嵌入到页面中,但是不能对其进行读取。发现此臭虫的软件工程师Aleksejs Popovs解释,嵌入的意思是,尽管网站页面可以包含来自其他来源的图像,而且浏览器也会在页面上显示该图像,但是该页面还有执行的JavaScript程式码,都不能够获取图像的内容。

而Canvas这个HTML元素,也会阻止网页获取第三方图片内容。Canvas元素类似图像,但是可透过JavaScript进行操作,以在页面上绘制形状、文字和图像等,并让开发者能够对Canvas上的每个画素,进行读取和写入,而使用CanvasRenderingContext2D.drawImage函式,则可以将嵌入到页面中的图像,绘制到Canvas上,为了防止攻击者将Canvas用来绘制图片,再借由读取Canvas的画素来获取图片内容,因此一旦Canvas被标记已绘制,就无法再被读取。

在浏览器与HTML元素的机制,能够确保网站页面无法读取第三方图像,但是这项机制却能被恶意攻击者,利用旁路(Side-channel)资讯来破解。由于图像中的画素可能具有不同的透明度,经过最佳化的图像绘制函式库,会根据不同的透明度,以不同的程式码来绘制图像。

依画素透明度不同,会有三种情况产生,当画素为全透明,颜色不需要经任何计算,便可直接绘制,而不透明画素的处理方式也一样简单,直接绘制并覆盖目标画素,但是半透明的画素,就需要经过一些计算,必须将图像的画素颜色,与已经绘制的颜色混合,经过一些数学计算才能取得最终颜色。

由于绘制三种不同程度的透明度,存在效能上的差异,因此透过量测每个画素绘制的时间,就可以重现图片的轮廓,而这足以暴露图片中的内容,尤其是文字图片或是透明背景的图像。由于Firefox和Chromium都是使用Google的Skia绘图函式库,该函式库在blit_row_s32a_opaque函式,特别针对这三种情况进行最佳化,因此反而泄漏图像资讯。Aleksejs Popovs撰写的概念性验证程式,已证实攻击者可以用此漏洞,破解第三方嵌入图像。

此漏洞存在一些限制,除了只能取得图像轮廓之外,由于现在浏览器会启用GPU加速,因此使得画素颜色计算时间没有明显差异。不过,Firefox并没有在所有配置都支援GPU加速,只有大部分Windows用户可以获得GPU加速,但是其他平台则不一定,因此可能受到此漏洞影响,而Chromium已经在大多数硬件提供GPU加速功能,因此只有在浏览器无法使用GPU渲染时,才会受到此漏洞影响,Aleksejs Popovs表示,可以透过其他漏洞使GPU驱动程式崩溃,强制切换浏览器使用CPU来绘制图像,攻击者仍然可以有效使用此漏洞。

Aleksejs Popovs在去年5月,已经向Mozilla与Google揭露此漏洞,Google在8月的时候修复Skia函式库,并合并到Chromium中,使得Chromium不受此漏洞影响,而由于Firefox也使用Skia绘图函式库,因此Mozilla也已经将Skia更新合并到Firefox,完成漏洞修复工作。

2021-01-13 19:50:00

相关文章