Mozilla推出了保护措施,以阻止Firefox Web浏览器中的代码注入攻击,并通过删除类似eva l()的函数和内联脚本来减少攻击面。
Mozilla安全团队今天说:“一种有效的对抗代码注入攻击的方法是,通过消除代码库中潜在的危险工件并减少各个级别的代码来减少攻击面,”
“为了使Firefox具有抵御这种代码注入攻击的能力,我们删除了内联脚本的出现以及类似eva l()的函数。”
内联脚本删除
Mozilla重写了所有内联事件处理程序,并将内联java script代码移动到了所有Firefox的about:pages打包文件中:这里有45个列表,可通过内联脚本进行代码注入攻击。
这种类型的页面旨在为用户提供一个简单的界面,以检查与Firefox内部工作相关的信息,就像about:config页面的情况一样,该页面“公开用于检查和更新首选项和设置的API”。
鉴于about:pages像常规网页一样使用HTML和java script,潜在的攻击者可能会利用它来在浏览器的安全上下文中注入恶意脚本,从而能够代表Firefox用户执行任意操作。
Mozilla说:“这使我们能够应用强大的内容安全策略(CSP),例如'default-src chrome:',它可以确保注入的java script代码不会执行。” “相反,java script代码仅在使用内部chrome:协议从打包资源加载后才执行。”
通过使无法在Firefox的about:pages中插入内联脚本,Mozilla创造了有效的屏障来抵制代码注入攻击,这些攻击可能会通过滥用此攻击媒介而导致任意代码执行。
运行时断言禁止eva l()函数
“ java script函数eva l()以及类似的'new Function'和'setTimeout()/ setInterval()'是强大而又危险的工具。它在与自身相同的安全上下文中解析和执行任意字符串,”还添加了Mozilla安全团队。
“这种执行方案可以方便地执行在运行时生成的代码或存储在非脚本位置(如文档对象模型(DOM))的代码。”
随着Mozilla 在其开发网络文档中进一步详细介绍,“ eva l()是一个危险函数,它以调用者的特权执行它所传递的代码。如果您运行eva l()时使用的字符串可能会受到恶意方的影响,您可能最终会在网页/扩展程序的许可下在用户的计算机上运行恶意代码。”
为了解决此问题,Mozilla还重写了“从系统特权上下文和Firefox代码库中的父进程中全部使用类似'eva l()'的函数”,以遏制eva l()的使用,从而进一步减少攻击面。
运行时断言也已添加到Firefox的代码库中,该措施旨在在系统特权的脚本上下文中禁止类似eva l()的函数。
Mozilla在致力于删除所有类似eva l()的函数时,还发现了Firefox代码库外部对eva l()的调用。例如,Firefox用户可以在自定义文件(例如userChrome.js)中包含eva l()函数,以在启动时自定义Firefox。
Mozilla安全团队的运行时检查验证了用户确实在其中的一些自定义文件中包含了评估。为了允许用户自定义他们的Firefox体验,Mozilla说,浏览器将禁用“阻止机制,并允许使用eva l()”。
Mozilla 总结说: “展望未来,我们引入的eva l()断言将继续通知Mozilla安全团队未知的eva l()实例,随着我们进一步强化Firefox安全格局,我们将对其进行密切审核,评估和限制。”