Skip to content

Commit 0ddf5e1

Browse files
committed
fix: Add required action_statement field
1 parent 2f05e56 commit 0ddf5e1

File tree

3 files changed

+12
-0
lines changed

3 files changed

+12
-0
lines changed

src/conf/security/VEX.cyclonedx.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@
6464
</source>
6565
</reference>
6666
</references>
67+
<recommendation>
68+
Check if untrusted user input is passed to the `StringSubstitutor` or `StringLookup` classes,
69+
and if so, upgrade to Apache Commons Lang 3.18.0 or later.
70+
</recommendation>
6771
<analysis>
6872
<state>exploitable</state>
6973
<responses>

src/conf/security/generate_openvex.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,13 @@ def to_openvex_statement(vuln: ET.Element, product: dict) -> dict:
121121
if detail:
122122
statement['status_notes'] = detail
123123

124+
remediation = _find_stripped_text(vuln, 'b:recommendation')
125+
if remediation:
126+
statement['action_statement'] = remediation
127+
else:
128+
if statement['status'] == 'affected':
129+
raise ValueError("Affected vulnerabilities must have a <recommendation> element")
130+
124131
_add_optional_date(analysis, 'b:firstIssued', statement, 'timestamp')
125132
_add_optional_date(analysis, 'b:lastUpdated', statement, 'last_updated')
126133

src/conf/security/openvex.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
},
2626
"status": "affected",
2727
"status_notes": "CVE-2025-48924 is exploitable in Apache Commons Text versions 1.5 and later, but only when all the following conditions are met:\n\n* The consuming project includes a vulnerable version of Commons Text on the classpath.\n As of version `1.14.1`, Commons Text no longer references a vulnerable version of the `commons-lang3` library in its POM file.\n* Unvalidated or unsanitized user input is passed to the `StringSubstitutor` or `StringLookup` classes.\n* An interpolator lookup created via `StringLookupFactory.interpolatorLookup()` is used.\n\nIf these conditions are satisfied, an attacker may cause an infinite loop by submitting a specially crafted input such as `${const:...}`.",
28+
"action_statement": "Check if untrusted user input is passed to the `StringSubstitutor` or `StringLookup` classes,\nand if so, upgrade to Apache Commons Lang 3.18.0 or later.",
2829
"timestamp": "2025-07-29T12:26:42Z",
2930
"last_updated": "2025-07-29T12:26:42Z"
3031
}

0 commit comments

Comments
 (0)