首页 网络安全 正文
  • 本文约1212字,阅读需6分钟
  • 53
  • 0

Jinjava基于JavaType反序列化绕过CVE-2025-59340

Jinjava 是基于 Django 模板语法Java模板引擎,专为渲染Jinja模板设计,支持复杂内容管理系统和大规模 Web 应用开发,应用场景广泛。

Jinjava 不仅支持 Jinja 模板的核心功能,并且针对 HubSpot CMS 的特定需求进行了优化,目前已经在生产环境中成功应用于数千个网站。

一、基本情况

Jinjava 的核心技术基于 Java 8 及以上版本,充分利用 Java 的强大功能和灵活性,不仅支持基本的模板渲染,还提供了丰富的扩展功能。

Jinjava基于JavaType反序列化绕过CVE-2025-59340

Jinjava支持多种资源加载器,包括类路径资源和文件系统资源加载器,确保模板加载灵活和安全性,提供高效、灵活模板渲染解决方案。

栋科技漏洞库关注到Jinjava存在一个通过基于JavaType的反序列化绕过沙盒漏洞,漏洞被追踪为CVE-2025-59340,CVSS 3.X评分为6.7。

二、漏洞分析

CVE-2025-59340漏洞位于Jinjava v2.8.1之前版本,虽然当前沙盒限制阻止对getClass()等危险方法的直接访问,阻止Class对象的实例化。

但通过使用mapper.getTypeFactory().constructFromCanonical(),可指导底层的ObjectMapper,将攻击者控制的输入反序列化为任意类。

因此,攻击者可以通过上述措施,绕过阻止对象实例化保护,使得创建半任意类实例成为可能,而无需直接调用受限制的方法或类字面量。

因此,攻击者可以逃离沙箱并实例化诸如java.net.URL之类的类,从而就能够实现访问本地文件和URL的能力(例如,file:///etc/passwd)。

通过进一步的链接,这种原始功能可能会导致远程代码执行(RCE),此漏洞已在版本2.8.1中得到修复。

具体来说,jinjava模板公开了一个内置变量__int3rpr3r___,它提供了对jinjavaInterpreter实例的直接访问。

此变量以前被滥用,并添加了保护措施以防止JinjavaInterpreter实例调用方法(请参阅将解释器添加到黑名单)。

然而,与JinjavaInterpreter实例的属性交互仍然不受限制。

从__int3rpr3t3r___可以遍历到config字段,该字段公开了一个ObjectMapper。

通过在此ObjectMapper上调用readValue(String content,JavaType valueType),攻击者可以实例化通过JavaType指定的任意类。

尽管jinjava在JinjavaBeanELResolver中明确限制了Class、ClassLoader等危险类,但JavaType类本身并不受限制。

因此,攻击者可以利用JavaType构造(constructFromCanonical)实例化半任意类,而无需直接调用受限方法。

三、影响范围

Jinjava < v2.8.1

四、修复建议

Jinjava >= v2.8.1

五、参考链接

管理员已设置登录后刷新可查看



扫描二维码,在手机上阅读
评论
更换验证码
友情链接