Forced OGNL evaluation, when evaluated on raw not validated user input in tag attributes, may lead to RCE.
Not confirmed exploited. 1 of 8 rule sources name it; Cloudflare blocks by default. Our CRS test: blocked.
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… More
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.
Edge coverage
Claimed by vendorsAsk Vigil
AI · answers from this pageWorkers AI (Llama 3.3). Can be wrong: check the cited source.
Public exploits
1 found- NucleiCVE-2021-31805.yamldetection template, replayed in our lab
Links are to third-party code: never run it outside an isolated lab.
Timeline
- 2022-04-12CVE publishedCVE List
- 2025-04-02Cloudflare ships a ruleApache Struts - CVE:CVE-2021-31805
- 2026-11-02Our test: OWASP Core Rule Set blocked itparanoia level 1, anomaly threshold 5, default CRS settings
- 2026-11-02Our test: OWASP Core Rule Set blocked itparanoia level 2, anomaly threshold 5, default CRS settings
Vendor statements
QuotedCloudflareWAF Managed Rules
First rule 2025-04-02, 1086 days after the CVE was published.
Apache Struts - CVE:CVE-2021-31805. Previous action: N/A. New action: Block. N/A
AWSAWS WAF Managed Rules
We found no public statement from this vendor naming this CVE. That is not proof of no protection: generic rules may still catch it. AWS often describes a vulnerability without naming its CVE (for example "Log4j"). We count only entries that name the CVE, so AWS coverage is understated.
Microsoft AzureFront Door and Application Gateway WAF (DRS)
We found no public statement from this vendor naming this CVE. That is not proof of no protection: generic rules may still catch it. The rule tables name CVEs but carry no dates, so Azure is left out of every time-to-rule figure.
Google CloudCloud Armor preconfigured WAF rules
The CVE predates the oldest entry in this vendor's public feed, so a rule may exist that we cannot see.
FastlyNext-Gen WAF virtual patches
The CVE predates the oldest entry in this vendor's public feed, so a rule may exist that we cannot see.
F5Attack signatures (Distributed Cloud WAF)
The CVE predates the oldest entry in this vendor's public feed, so a rule may exist that we cannot see.
AkamaiApp & API Protector (Adaptive Security Engine)
This vendor publishes no machine-readable rule changelog we can check.
OWASP CRSCore Rule Set (open source, used inside many WAFs)
The CVE predates the oldest entry in this vendor's public feed, so a rule may exist that we cannot see.
Social
No posts seen yet on X, Bluesky, Mastodon, Hacker News or GitHub.