NIST deprecates RSA-2048 from 2030. Find every one of them before attackers do.
☕
☕ Maven
Not in CISA KEV
CRITICAL severity

CVE-2021-31805 — struts2-core

CRITICAL

CVE-2021-31805 is a critical-severity (CVSS 9.8) Expression Language Injection vulnerability in org.apache.struts:struts2-core. 13 public exploit or proof-of-concept references are indexed, so weaponization risk is real. A fix is available for org.apache.struts:struts2-core — see the affected versions and patch details below.

Expression Language Injection in Apache Struts

Also known asGHSA-v8j6-6c2r-r27c
Published
Updated
Affected
1 pkg
Patched
1 / 1
Exploits
13 known
Exploitation data as of Nov 2, 2026 · OSV.dev, NVD, FIRST.org (EPSS)

EPSS Exploitation Probability

via FIRST.org ↗
85.4%probability of exploitation in next 30 days
Very High Risk0.00%
Lower risk than most CVEs100th percentile — riskier than 100% of all scored CVEsHighest risk
82.7%87.3%91.9%96.5%94.0%85.4%May 26Sep 26Nov 26

Probability of exploitation in the next 30 days, from FIRST.org EPSS.

How urgent is this, really

Where this sits among everything scored

Real-World Exposure

1 pkg affected
☕org.apache.struts:struts2-core

Real-time download stats are indexed for npm and PyPI packages. This vulnerability affects Maven packages — download data is not available via public APIs for these ecosystems.

Description

The fix issued for CVE-2020-17530 was incomplete. So from Apache Struts 2.0.0 to 2.5.29, still some of the tag’s attributes could perform a double evaluation if a developer applied forced OGNL evaluation by using the %{...} syntax. Using forced OGNL evaluation on untrusted user input can lead to a Remote Code Execution and security degradation.

Affected Packages

1 total 1 fixed
EcosystemPackageVulnerable rangeFix
☕Mavenorg.apache.struts:struts2-core≥ 2.0.0&&< 2.5.302.5.30org.apache.struts:struts2-core:2.5.30

Affected Products

1 product · 1 configurations
Application
strutsapache
≥ 2.0.0 && ≤ 2.5.29
range
Exploits & PoCs
13

Research use only. For defensive security, authorized penetration testing, and academic research only. Never execute exploit code against systems without explicit written authorization.

Detection & mitigation playbook

Open-source dependency
  1. Detect

    Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for org.apache.struts:struts2-core, including transitive dependencies — a direct dependency you never call can still pull in a vulnerable version.

  2. Fix

    Update org.apache.struts:struts2-core to 2.5.30 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms CVE-2021-31805 is resolved across your whole dependency graph.

  3. Workarounds

    Stop passing untrusted input into the interpreter or shell: call the affected binary with an argument array rather than a composed command string, reject anything outside a strict allowlist of expected values, and run the component under an account that cannot reach beyond the work it legitimately does.

How to detect CVE-2021-31805

A community-maintained Nuclei template exists for this CVE. You can scan for it directly:

nuclei -id cve-2021-31805 -u https://target
Template
Apache Struts2 S2-062 - Remote Code Execution
Severity
critical
Impact
Remote code execution
Remediation
Avoid using forced OGNL evaluation on untrusted user input, and/or upgrade to Struts 2.5.30 or greater which checks if expression evaluation won't lead to the double evaluation.

Template by ProjectDiscovery nuclei-templates (taielab), MIT licensed. View the full template. Scan only systems you are authorised to test.

Frequently Asked Questions

The fix issued for CVE-2020-17530 was incomplete. So from Apache Struts 2.0.0 to 2.5.29, still some of the tag’s attributes could perform a double evaluation if a developer applied forced OGNL evaluation by using the %{...} syntax. Using forced OGNL evaluation on untrusted user input can lead to a Remote Code Execution and security degradation.
O3 Security · Impact-Aware SCA

Is CVE-2021-31805 in your dependencies?

Find it across Maven, including transitive dependencies.

CVE-2021-31805: struts2-core RCE — Fixed in 2.5.30