“服务器端模板注入”漏洞被披露出来,那么,它与跨站脚本之间有何区别?相应地,防御策略也是否有所不同?
Michael Cobb:验证并清除来自不受信任来源的输入是软件开发人员需要遵守的重要原则,以防止恶意代码注入攻击如跨站脚本(XSS)和SQL注入等。尽管清理用户输入是安全编程的核心原则,然而数据未被清理的情况仍旧时有发生,且生成黑客可以攻击用户及系统的漏洞。
Web安全公司PortSwigger的研究人员研制了Web应用安全测试工具Burp Suite,该工具较新发现一个不知名的注入漏洞级别的漏洞,他们将其称作“服务器端模版注入”。
模版引擎广泛用于从展示层分离程序逻辑,维基、博客和内容管理系统都倾向于使用模版引擎。不仅因为这是良好的编程实践,也因为它能够使懂很少HTML知识的员工轻松地更新和维护网站内容或编写HTML格式的电子邮件。它们也让专业的网页设计师利用这些代码快速而高效地建站。流行的模板包括Twig、Jade以及XWike Enterprise。
一些引擎使用简单的字符串,占位符由数据替换。举个例子,一封电子邮件模板开头可能是 "Dear {user_firstname}" ,在模板引擎中,"user_firstname" 则由底层数据库中的’first name‘所取代。其他模板也用所谓的"if-defined-conditionals"来测试数据存在与否,有些则包括额外的灵活性,诸如用for-each循环、递归宏和嵌入式表达来提供更丰富的功能。
对于驻留在服务器上的模板引擎代码来说,验证和清理任何用户提供的添加进模板的输入和内容都是非常必要的;否则,则很可能发生服务器端模板注入攻击。不像XSS攻击,它能够直接攻击底层Web服务器,而非只是它的用户。尽管一些模板引擎部署了沙箱来限制访问,确保能安全处理不信任的输入,PortSwigger公司发现很多这类注入攻击都能绕过这些沙箱。该项研究解释了检测和利用模板注入漏洞的方法,并演示了利用五个较流行模板引擎的各种利用方式,包括沙箱逃避。
目前PortSwigger并不确定该模板注入攻击有多普遍,不过它打算使用Burp Suite来检测这类注入漏洞。简单和相对扁平的模板如Mustache不会引起风险,用户无法从模板语言中调用函数,尽管HTML输出仍然需要被清理。Wikipedia背后的开源模板引擎MediaWiki是更为灵活的引擎,根据PortSwigger,其沙箱环境在防止沾染潜在危险模块和功能方面做的非常好。
该研究表明企业开发团队不应该盲目依赖网站开发工具来实现较佳实践。安全团队需要仔细评估模板引擎是如何处理用户输入的以及内置安全检查或沙箱是否会被规避。阅读福袋文档可以在输入检查使显示明显的缺点,不过分析师应该仔细检查模板的代码以及是哪些引擎能够允许用户输入以及查看是否安全检查会被绕过。缓解技巧之一就是将模板引擎置于一个强化的Docker容器沙箱环境中,来追踪任何恶意代码执行。