# JinJava JavaType反序列化沙盒绕过漏洞
## 概述
jinjava 是一个基于 Django 模板语法、用于渲染 Jinja 模板的 Java 模板引擎。在版本 2.8.1 之前,存在一个反序列化漏洞。
## 影响版本
受影响版本:所有低于 2.8.1 的版本。
## 漏洞细节
漏洞核心在于 `mapper.getTypeFactory().constructFromCanonical()` 方法的使用,使得底层 `ObjectMapper` 可被诱导反序列化攻击者控制的数据为任意类的实例。攻击者借此可在不直接调用被限制方法或类字面量的情况下,创建特定类的实例,例如 `java.net.URL`。
这使攻击者能够突破模板沙箱,访问本地文件系统或外部 URL(如 `file:///etc/passwd`)。
## 漏洞影响
- 实现沙箱逃逸
- 读取任意文件或访问外部资源
- 潜在可通过链式利用实现远程代码执行(RCE)
## 修复
该漏洞已在 **jinjava 2.8.1** 及以后版本中修复。
是否为 Web 类漏洞: 是
判断理由:
| # | POC 描述 | 源链接 | 神龙链接 |
|---|
标题: Release jinjava-2.8.1 · HubSpot/jinjava · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
从这个网页截图中可以获取到以下关于漏洞的关键信息:
- **版本信息**:当前显示的是 `jinja2-2.8.1` 版本,发布于 2025 年 9 月 16 日。
- **安全更新**:
- 禁止在渲染时访问受限类的属性,这可能是为了防止潜在的安全漏洞,如代码注入或权限提升。
- 使用 `AutoCloseable` 进行堆栈操作,以更安全地使用 `try-with-resources`,这有助于避免资源泄漏和相关的安全问题。
这些更新表明该版本可能修复了与访问受限类属性和资源管理相关的安全漏洞。
标题: Sandbox Bypass via JavaType-Based Deserialization · Advisory · HubSpot/jinjava · GitHub -- 🔗来源链接
标签:x_refsource_CONFIRM
神龙速读:
### 关键信息
#### 漏洞概述
- **漏洞名称**: Sandbox Bypass via JavaType-Based Deserialization
- **严重性**: Critical (CVSS v3.1: 9.8/10)
- **CVE ID**: CVE-2025-59340
- **CWE**: CWE-1336
#### 影响范围
- **受影响版本**: < 2.8.1
- **修复版本**: 2.8.1
- **包**: com.hubspot.jinjava:jinjava (Maven)
#### 漏洞描述
- **摘要**: Jinjava 当前的沙箱限制阻止了对危险方法(如 getClass())的直接访问,并阻止了 Class 对象的实例化。然而,这些保护可以被绕过。
- **细节**:
- Jinjava 模板暴露了一个内置变量 `__int3pr3t3r__`,提供了对 JinjavaInterpreter 实例的直接访问。
- 通过与 JinjavaInterpreter 实例的属性交互,可以遍历到 `config` 字段,该字段暴露了一个 ObjectMapper。
- 利用 `readValue(String content, JavaType valueType)` 方法,攻击者可以实例化任意类,包括通过 JavaType 指定的类。
- 尽管 Jinjava 明确限制了危险类(如 Class、ClassLoader 等),但在 JinjavaBeanELResolver 中,JavaType 类本身不受限制。
#### 影响
- **后果**: 攻击者可以绕过沙箱并实例化广泛的类,使用 JavaType。这可能导致读取任意文件和执行 SSRF。在某些环境中,这甚至可能导致远程代码执行(RCE)。
标题: Merge commit from fork · HubSpot/jinjava@66df351 · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
### 关键信息
- **漏洞类型**: 限制属性访问以防止从受限制的基础中获取属性。
- **修复措施**:
- 在 `JinjaJavaBeanELResolver` 类中添加了对 `isRestrictedClass` 的检查,如果基础对象是受限制的类,则返回 `null`。
- 更新了 `getValue` 方法,确保不会从受限制的类中获取属性值。
- **测试用例**:
- 添加了 `itThrowsExceptionWhenPropertyIsRestrictedFromConfig` 测试方法,验证当尝试访问受限制的属性时会抛出异常。
- 添加了 `itDoesNotAllowAccessingPropertiesOfInterpreter` 测试方法,确保无法通过解释器访问受限制的属性。
这些更改和测试确保了系统在处理受限制的类和属性时的安全性,防止潜在的漏洞被利用。
暂无评论