谷歌工程师提出方案缓解原型污染
John Leyden
2023年2月6日 15:57 UTC
更新于2023年2月6日 17:02 UTC
谷歌的软件工程师提出了一项提案,旨在遏制已成为Web安全公害的原型污染漏洞。原型污染是JavaScript语言缺陷,允许攻击者在运行时操纵他们无法控制或访问的对象。该问题源于对象(用于在运行时保存数据)与其原型(决定对象行为方式)之间缺乏明确界限。
这项获得谷歌支持的提案已提交给技术工作组TC39审议,旨在创建JavaScript对象与原型之间的边界。其技术原理是"消除允许攻击者从对象跳转到原型的路径"。提案技术细节已发布在GitHub上。
可选安全模式
正如GitHub帖子所述,该"提案试图通过引入可选安全模式来缓解原型污染,该模式使得无法使用字符串属性键访问原型,而要求必须通过方法(Object.getPrototypeOf)或提议的新符号属性键来访问"。
提案合著者Santiago Diaz表示:“目标是打破已知的利用技术,同时尽可能与现有代码库兼容,以便这种缓解措施能在互联网上广泛采用。“TC39工作组已批准提案从阶段0进入阶段1,开始了五部分批准流程的下一阶段。
符号解决方案
PortSwigger安全研究员Gareth Hayes对此提案表示兴趣:“这是通过让开发者能够移除__proto__等属性来防止原型污染的提案。他们建议使用符号使网站继续使用__proto__功能,这样网站不会崩溃,攻击者也无法提供这些符号,因为这需要JavaScript执行。”
谷歌提案并非首创。但根据谷歌博客文章,现有解决方案如Object.freeze、preventExtensions和seal存在"使其难以部署的缺点”。该提案有望提供更实用的解决方案。