cwe - 1336:不当中和特殊元素中使用模板引擎
描述
产品使用模板引擎来插入或过程externally-influenced输入,但它不会消除或中和特殊元素或语法错误可以被解释为模板表达式或其他代码指令当处理引擎。
扩展描述
许多web应用程序使用模板引擎,允许开发人员将externally-influenced值插入自由文本或信息来生成一个完整的web页面,文件,信息,等等。这些引擎包括树枝、Jinja2,哈巴狗,Java Server Pages, FreeMarker,速度,ColdFusion,自作聪明的家伙,和许多其他人——包括PHP本身。一些CMS(内容管理系统)也使用模板。
模板引擎通常有自己的自定义命令或表达式语言。如果攻击者可以影响输入模板前处理,那么攻击者可以调用任意表达式,即执行注入攻击。例如,在一些模板语言,攻击者可以将表达式“{{7 * 7}}”和确定输出返回“49”。语法因语言而异。
在某些情况下,xss攻击可以工作,可以模糊的根本原因如果开发者不密切调查错误的根源。
模板引擎可以使用在服务器或客户端,所以“双方”可能受到注入的影响。攻击或受影响的技术的机制可能不同,但错误从根本上是相同的。
替代条款
服务器端模板注入/ SSTI:
这个词用于注入模板引擎使用的服务器。
客户端模板注入/ CSTI:
这个词用于注入模板引擎被客户机使用。
的关系
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段
请注意
架构和设计
开发人员可以选择一个模板引擎,使程序员更容易编写脆弱的代码。
实现
程序员可能不使用引擎的内置沙箱或者其他功能逃避或者防止模板注入不可信的输入。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
观察到的例子
参考
描述
注射在内容管理服务器端模板
认证/身份管理产品已注入端模板
服务器端模板注射使用树枝模板
devops平台允许SSTI
绕过服务器端模板的注入与宏在Velocity模板保护机制
web浏览器代理服务器从服务器端模板允许Java EL表达式注入
SSTI涉及邮件模板和JEXL表达式
产品不使用“安全”设置FreeMarker配置,允许SSTI
产品允许读的敏感数据库用户名/密码变量使用服务器端模板注入
潜在的缓解措施
阶段:体系结构和设计
选择一个模板引擎,提供了一个沙箱或者限制模式,或至少限制的力量任何可用的表情,函数调用,或者命令。
实施阶段:
使用模板引擎的沙盒或限制模式,如果可用。
笔记
引用