目前国内的浏览器大多数采用Blink/Webkit内核,并开发了插件系统。这些插件系统多复用了Chrome的插件体系,但是厂商也会在自己的插件体系中添加一些特殊的功能支持,例如DLL文件调用、与浏览器的服务进程通信、与浏览器发出的特殊事件进行交互。各家产品标准的不一致,也会反映在安全性上。
11.2.1 特权API暴露
危害:
任意安装插件à任意代码执行
成因:
校验来源方法:
11.2.2 DOM修改引入攻击向量
危害:
插件修改页面元素,产生mXSS,导致文本节点的内容被修改成代码并执行。
成因:
1、读取页面内容并重新经过处理再输出到页面上,期间未过滤。
常见的漏洞点容易出现在如下类型的浏览器插件中:
以及一些会将用户输入的内容再以某些形式输出到页面中的插件。这些插件均可能脱离用户操作直接触发漏洞,因此需要引起足够重视。
安全建议:
在输出到页面中时进行编码或使用文本节点来输出。
11.2.3 windows文件名相关的多个问题
危害:
解压到其他目录/DLL劫持/文件覆盖à任意代码执行
1. 相对路径
Zip的文件名宽松,可以通过编辑Zip压缩包使得文件名部分带有../,在未经正确处理文件名输出的解压代码中可能会将文件解压到其他目录,如果攻击者将文件定位并解压到“启动”目录下,在下次启动系统时,便可以执行攻击者的程序,造成任意代码执行漏洞。
许多插件采用ZIP压缩包的形式下发,在一些插件体系中,虽然校验了执行起来的插件,但是安装包内没有用到DLL文件等却不一定有足够充分的校验。
这特别适用于一些既有EXE又有DLL的插件,如果攻击者将DLL命名成lpk.dll等系统DLL名称来进行DLL劫持时,插件启动时便会带来非常严重的问题。建议开发者在解压DLL文件的时候也校验签名,直接忽略签名不正确的文件不进行解压操作。
2. 文件名解压时无效字符的问题
Windows文件名规范中表示文件名的末尾不得包含NULLCHAR()、半角句点、空格,以及~这些字符,但是ZIP打包的时候却可以将这些字符插入文件名部分,如果攻击者在文件名后面加入这些非法字符—如“lpk.dll”,在通过插件安装系统释放文件时,写入到硬盘上的文件名也会变成“lpk.dll”,从而导致DLL劫持。
即使加上了解压时DLL签名校验,遇到特殊的文件名时,系统API也可能会出现问题,对“lpk.dll”这样的文件名,可提权后缀API PathFindExtension、_split_path返回的均是错误的后缀(返回的都是句点“.”)。插件解压系统如果只是简单判断后缀名是否为dll,则仍可能会失败。另外,如果在ZIP文件中制定lpk.dll…、lpk.dll 3456、lpk.dll.xxx这样的非法文件名,解压到硬盘之后,文件名也会是lpk.dll,所以解压程序得从后往前扫描一遍,找到最后一个无效字符,并删除后面所有内容,而不能只判断最后一个字符。
所以,为了安全起见,建议在解压前排除所有无效的字符再校验。或者也可以通过解析文件格式,例如假设当前正在解压的文件是PE文件,则统一校验签名,如果签名不匹配则不予释放。
11.2.4 NPAPI DLL的问题
危害:
任意代码执行
包含有NPAPI的DLL的插件,需要注意是否存在XSS可能导致攻击者在网页上即可传入参数的行为。
可利用方法:
12/13 首页 上一页 10 11 12 13 下一页 尾页