研究人员在Black Hat Europe示范,用简单一个连接就可以注入指令并窃取、甚至修改网站PDF文件的内容。
许多组织在网站服务器端产生PDF文件,像是电子票证、收据、登机证、支付回条等等,许多都是敏感内容,像是银行账号、护照号码、地址,而成为攻击者的目标。
PortSwiggr安全测试厂商研究人员Gareth Heyes指出,服务器端的PDF有很多地方可以上下其手,例如文本字符串或注释(annotations),因为这些对象允许开发人员在括号内置入文本或URI(统一资源识别码),只要能注入括号或是反斜线,就能在文件中注入PDF程序代码,甚至有害的PDF对象或action。
这个攻击手法成功关键在PDF函数库能允许注入括号或反斜线。他指出,一个安全的函数库应该要能跳脱(escape)URI或文本字符串中的括号或反斜线,要是缺乏这能力,攻击者就可以通过调用PDF JavaScript,或利用submitForm action对外部URL发出POST调用,类似Blind XSS的攻击手法。
结果就是让攻击者在PDF产生过程中注入组件来控制PDF文件,例如在PDF文件中加入恶意连接,让下载该文件的用户点入连接或任何部分(如注释),即窃取整份文件信息,并将之发送到外部远程服务器上,造成信息外泄。
研究人员查看了8种PDF函数库,发现很受欢迎的PDF-Lib及jsPDF有这个漏洞,前者每周下载5.2万次,后者更超过25万次。两者虽然在文本字符串部分防止注入,但注释部分却成为破口。此外,他甚至成功在安全防护较高的Adobe Acrobat及Chrome的PDF引擎PDFium,也成功在注释中注入JavaScript,都不需用户交互。
研究人员也对网站管理员提供防范方法。在撰写函数库时,企业应防范能正确跳脱用户输入的文本串及注释URI中的括号或反斜线,而在Web app层,则应小心验证,确保PDF没有任何可疑的JavaScript或SubmitForm action。