GHSA-GJX9-J8F8-7J74
Vulnerability from github – Published: 2026-02-03 17:52 – Updated: 2026-02-05 00:34Impact
Vulnerability Type: Sandbox Bypass / Remote Code Execution
Affected Component: Jinjava
Affected Users: - Organizations using HubSpot's Jinjava template rendering engine for user-provided template content - Any system that renders untrusted Jinja templates using HubSpot's Jinjava implementation - Users with the ability to create or edit custom code templates
Severity: Critical - allows arbitrary Java class instantiation and file access bypassing built-in sandbox restrictions
Root Cause: Multiple security bypass vulnerabilities in Jinjava's sandbox mechanism:
-
ForTag Property Access Bypass: The
ForTagclass does not enforceJinjavaBeanELResolverrestrictions when iterating over object properties usingIntrospector.getBeanInfo()and invoking getter methods viaPropertyDescriptor.getReadMethod() -
Restricted Class Instantiation: The sandbox's type allowlist can be bypassed by using ObjectMapper to instantiate classes through JSON deserialization, including creating new
JinjavaELContextandJinjavaConfiginstances
Attack Vector: An attacker with the ability to create or edit Jinja templates can:
- Access arbitrary getter methods on objects in the template context
- Instantiate ObjectMapper to enable default typing
- Create arbitrary Java classes by bypassing type allowlists
- Read files from the server filesystem (demonstrated with /etc/passwd)
- Potentially execute arbitrary code
Patches
Status: Patched - CVE-2026-25526
Users should upgrade to one of the following versions which contain fixes for this vulnerability:
- JinJava 2.8.3 or later
- JinJava 2.7.6 or later
Fix Components:
- ForTag Security Hardening
- Added security checks to
ForTag.renderForCollection()to enforceJinjavaBeanELResolverrestrictions - Implemented property access validation against restricted properties/methods before invoking getter methods
-
Added checks for restricted class types before introspection
-
Enhanced Type Validation
- Improved validation in
JinjavaBeanELResolver.isRestrictedClass()to prevent instantiation of sensitive types - Added additional restricted types to the denylist
-
Implemented deeper validation for types created via ObjectMapper deserialization
-
Configuration Protection
- Added checks to prevent creation of new
JinjavaConfigorJinjavaELContextinstances via ObjectMapper - Prevented modification of
readOnlyResolverconfiguration from untrusted templates -
Implemented additional safeguards around ELResolver configuration
-
Collection Type Validation
- Implemented proper type validation in
HubLELResolverto prevent collection type wrapping bypasses - Added checks for wrapped types in collection deserialization
-
Implemented validation for all types within collections against allowlists
-
ObjectMapper Restrictions
- Added additional restrictions on
ObjectMapper.enableDefaultTyping()to prevent enabling via less restrictive ELResolver - Ensured default typing cannot be enabled without proper authorization
Information for Users: Upgrade to version 2.8.3 or 2.7.6 or later to address this vulnerability.
References
Project Resources
- Jinjava Source Code: github.com/HubSpot/jinjava
- Jinjava Releases: github.com/HubSpot/jinjava/releases
Security Standards & Classifications
- CWE-502: Deserialization of Untrusted Data
- CWE-913: Improper Control of Dynamically-Managed Code Resources
- CWE-94: Improper Control of Generation of Code ('Code Injection')
- CVSS v3.1: Common Vulnerability Scoring System
Additional Resources
{
"affected": [
{
"package": {
"ecosystem": "Maven",
"name": "com.hubspot.jinjava:jinjava"
},
"ranges": [
{
"events": [
{
"introduced": "2.8.0"
},
{
"fixed": "2.8.3"
}
],
"type": "ECOSYSTEM"
}
]
},
{
"package": {
"ecosystem": "Maven",
"name": "com.hubspot.jinjava:jinjava"
},
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "2.7.6"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [
"CVE-2026-25526"
],
"database_specific": {
"cwe_ids": [
"CWE-1336"
],
"github_reviewed": true,
"github_reviewed_at": "2026-02-03T17:52:55Z",
"nvd_published_at": "2026-02-04T22:15:59Z",
"severity": "CRITICAL"
},
"details": "## Impact\n\n**Vulnerability Type**: Sandbox Bypass / Remote Code Execution\n\n**Affected Component**: Jinjava\n\n**Affected Users**:\n- Organizations using HubSpot\u0027s Jinjava template rendering engine for user-provided template content\n- Any system that renders untrusted Jinja templates using HubSpot\u0027s Jinjava implementation\n- Users with the ability to create or edit custom code templates\n\n**Severity**: **Critical** - allows arbitrary Java class instantiation and file access bypassing built-in sandbox restrictions\n\n**Root Cause**: Multiple security bypass vulnerabilities in Jinjava\u0027s sandbox mechanism:\n\n1. **ForTag Property Access Bypass**: The `ForTag` class does not enforce `JinjavaBeanELResolver` restrictions when iterating over object properties using `Introspector.getBeanInfo()` and invoking getter methods via `PropertyDescriptor.getReadMethod()`\n\n2. **Restricted Class Instantiation**: The sandbox\u0027s type allowlist can be bypassed by using ObjectMapper to instantiate classes through JSON deserialization, including creating new `JinjavaELContext` and `JinjavaConfig` instances\n\n**Attack Vector**: An attacker with the ability to create or edit Jinja templates can:\n- Access arbitrary getter methods on objects in the template context\n- Instantiate `ObjectMapper` to enable default typing\n- Create arbitrary Java classes by bypassing type allowlists\n- Read files from the server filesystem (demonstrated with `/etc/passwd`)\n- Potentially execute arbitrary code\n\n## Patches\n\n**Status**: Patched - CVE-2026-25526\n\nUsers should upgrade to one of the following versions which contain fixes for this vulnerability:\n\n- **JinJava 2.8.3** or later\n- **JinJava 2.7.6** or later\n\n**Fix Components**:\n\n1. **ForTag Security Hardening**\n - Added security checks to `ForTag.renderForCollection()` to enforce `JinjavaBeanELResolver` restrictions\n - Implemented property access validation against restricted properties/methods before invoking getter methods\n - Added checks for restricted class types before introspection\n\n2. **Enhanced Type Validation**\n - Improved validation in `JinjavaBeanELResolver.isRestrictedClass()` to prevent instantiation of sensitive types\n - Added additional restricted types to the denylist\n - Implemented deeper validation for types created via ObjectMapper deserialization\n\n3. **Configuration Protection**\n - Added checks to prevent creation of new `JinjavaConfig` or `JinjavaELContext` instances via ObjectMapper\n - Prevented modification of `readOnlyResolver` configuration from untrusted templates\n - Implemented additional safeguards around ELResolver configuration\n\n4. **Collection Type Validation**\n - Implemented proper type validation in `HubLELResolver` to prevent collection type wrapping bypasses\n - Added checks for wrapped types in collection deserialization\n - Implemented validation for all types within collections against allowlists\n\n5. **ObjectMapper Restrictions**\n - Added additional restrictions on `ObjectMapper.enableDefaultTyping()` to prevent enabling via less restrictive ELResolver\n - Ensured default typing cannot be enabled without proper authorization\n\n**Information for Users**: Upgrade to version 2.8.3 or 2.7.6 or later to address this vulnerability.\n\n## References\n\n### Project Resources\n- **Jinjava Source Code**: [github.com/HubSpot/jinjava](https://github.com/HubSpot/jinjava)\n- **Jinjava Releases**: [github.com/HubSpot/jinjava/releases](https://github.com/HubSpot/jinjava/releases)\n\n### Security Standards \u0026 Classifications\n- **CWE-502**: Deserialization of Untrusted Data\n- **CWE-913**: Improper Control of Dynamically-Managed Code Resources\n- **CWE-94**: Improper Control of Generation of Code (\u0027Code Injection\u0027)\n- **CVSS v3.1**: Common Vulnerability Scoring System\n\n### Additional Resources\n- [OWASP Template Injection](https://owasp.org/www-community/attacks/Server_Side_Template_Injection)\n- [Java Deserialization Security](https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html)\n- [CVE Standards and Procedures](https://cve.mitre.org/)",
"id": "GHSA-gjx9-j8f8-7j74",
"modified": "2026-02-05T00:34:36Z",
"published": "2026-02-03T17:52:55Z",
"references": [
{
"type": "WEB",
"url": "https://github.com/HubSpot/jinjava/security/advisories/GHSA-gjx9-j8f8-7j74"
},
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-25526"
},
{
"type": "WEB",
"url": "https://github.com/HubSpot/jinjava/commit/3d02e504d8bbb13bf3fe019e9ca7b51dfce7a998"
},
{
"type": "WEB",
"url": "https://github.com/HubSpot/jinjava/commit/c7328dce6030ac718f88974196035edafef24441"
},
{
"type": "PACKAGE",
"url": "https://github.com/HubSpot/jinjava"
},
{
"type": "WEB",
"url": "https://github.com/HubSpot/jinjava/releases/tag/jinjava-2.7.6"
},
{
"type": "WEB",
"url": "https://github.com/HubSpot/jinjava/releases/tag/jinjava-2.8.3"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
"type": "CVSS_V3"
}
],
"summary": "JinJava Bypass through ForTag leads to Arbitrary Java Execution"
}
Sightings
| Author | Source | Type | Date |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or observed by the user.
- Confirmed: The vulnerability has been validated from an analyst's perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
- Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
- Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
- Not confirmed: The user expressed doubt about the validity of the vulnerability.
- Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.