把jsPDF库存在的一个漏洞说给大家听听。这个漏洞暴露了数百万Web开发者,他们正面临着被对象注入攻击的风险。就在刚刚公开的jsPDF漏洞消息里,远程攻击者可以在生成的PDF文档里塞进任意对象和操作,这多亏了这个库中java.js文件对用户输入处理不够谨慎。具体的毛病是在这一行代码上:this.internal.out("/JS (" + text + ")"); 问题在于直接把未经筛选的输入接到了PDF流里。 这意味着右括号这种作为PDF字符串分隔符的字符没被转义处理。攻击的时候,攻击者只要往有效载荷里塞个") > /Action …",就能提前把/JS字符串给截断了,然后趁机把各种恶意的PDF结构塞进去,这就把控制权完全握在了手里。 IDCVSS给它打出了CVE-2026-257558.8的高分,说明风险很高。jsPDF的addJS方法里搞出了PDF对象注入漏洞,让攻击者能在生成的PDF里任意添加对象和动作。这跟咱们平常看到的基于Java的XSS攻击不一样,它直接去动PDF的对象层次结构。所以就算客户端把Java禁用了,坏蛋照样能做事或者改文档结构。 这个漏洞影响挺多方面的。第一个是能绕过Java限制来执行JS代码。第二个是能篡改/Annots或者/Signatures这部分内容,用来改元数据、搞钓鱼或者改变PDF长什么样。第三个是影响跨不同查看器的情况。那些轻量级的查看器,尤其是手机上用的或者嵌在别的软件里的那些,因为按规矩很严格地解析PDF对象,所以很可能真的会执行这些被注入的动作。 发现这个问题的人叫ZeroXJacks,他还搞了个概念验证的演示。他是利用精心设计的addJS有效载荷,在文档一打开的时候就触发了自定义的PDF动作。这就说明那些直接拿用户输入的数据去动态生成PDF的应用风险是真的大。 说到底原因是没按照PDF规范来做输入验证和转义处理。开发者现在最好赶紧去更新到jsPDF 4.1.0或者更后面的版本,里面对括号和反斜杠已经做了正确的过滤。没更新的话也别慌,这段时间别用addJS这类方法去放那些不可信或者是用户自己搞出来的内容,然后还得给客户端生成PDF的那些工作流程加上严格的输入验证才行。