CVE-2025-66436CVE-2025-66436是Frappe ERPNext中存在的一个服务器端模板注入(SSTI)漏洞,影响版本直至15.89.0。该漏洞位于get_terms_and_conditions方法中,该方法使用frappe.render_template()函数渲染Jinja2模板时,将用户可控的terms字段与doc上下文一起传递。虽然Frappe框架使用了自定义的SandboxedEnvironment来隔离模板执行环境,但由于get_safe_globals()中仍保留了frappe.db.sql等危险全局函数,攻击者可以利用这些函数执行数据库操作。拥有Terms and Conditions文档创建或修改权限的认证用户可以通过在terms字段中注入任意Jinja表达式来实现服务端代码执行,从而窃取数据库信息或进行进一步的攻击。
该漏洞的核心问题在于get_terms_and_conditions方法不安全地处理用户输入。攻击者首先需要创建或修改一个Terms and Conditions文档,然后在terms字段中注入恶意Jinja2表达式。由于Frappe的SandboxedEnvironment并非完全隔离,get_safe_globals()函数仍然暴露了frappe.db.sql等敏感方法。攻击者可以通过构造类似{{frappe.db.sql('SELECT * FROM __Auth')}}的Payload来执行任意SQL查询,获取数据库中的敏感信息,包括用户认证凭据。更进一步,利用frappe.utils的数据处理能力,攻击者可能实现更复杂的攻击链,如读取配置文件、执行系统命令等。漏洞的利用需要低权限认证用户,但无需用户交互即可完成攻击。