Miggo Logo

CVE-2023-24998: Apache Commons FileUpload denial of service vulnerability

7.5

CVSS Score
3.1

Basic Information

EPSS Score
0.97228%
Published
2/20/2023
Updated
2/13/2025
KEV Status
No
Technology
TechnologyJava

Technical Details

CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Package NameEcosystemVulnerable VersionsFirst Patched Version
commons-fileupload:commons-fileuploadmaven< 1.51.5
org.apache.tomcat:tomcat-coyotemaven>= 10.1.0-M1, < 10.1.510.1.5
org.apache.tomcat:tomcat-coyotemaven>= 11.0.0-M2, < 11.0.0-M511.0.0-M5
org.apache.tomcat:tomcat-coyotemaven>= 8.5.85, < 8.5.888.5.88
org.apache.tomcat:tomcat-coyotemaven>= 9.0.0-M1, < 9.0.719.0.71
org.apache.tomcat.embed:tomcat-embed-coremaven>= 10.1.0-M1, < 10.1.510.1.5
org.apache.tomcat.embed:tomcat-embed-coremaven>= 11.0.0-M2, < 11.0.0-M511.0.0-M5
org.apache.tomcat.embed:tomcat-embed-coremaven>= 8.5.85, < 8.5.888.5.88
org.apache.tomcat.embed:tomcat-embed-coremaven>= 9.0.0-M1, < 9.0.719.0.71

Vulnerability Intelligence
Miggo AIMiggo AI

Miggo AIRoot Cause Analysis

The vulnerability stems from missing file count limit checks in multipart request processing. The GitHub commit e20c049 shows the critical addition of fileCountMax validation in FileUploadBase.parseRequest(). Pre-patch code (seen in diff lines 337-373) processes parts in a while(iter.hasNext()) loop without checking items.size() against a limit. Tomcat's CVE-2023-24998 advisory confirms they used vulnerable FileUpload code. The Tomcat commit 9ca96c8 shows identical fixes in their fork, confirming equivalent vulnerable functions exist in their codebase.

Vulnerable functions

Only Mi**o us*rs **n s** t*is s**tion

WAF Protection Rules

WAF Rule

*p**** *ommons *il*Uplo** ***or* *.* *o*s not limit t** num**r o* r*qu*st p*rts to ** pro**ss** r*sultin* in t** possi*ility o* *n *tt**k*r tri***rin* * *oS wit* * m*li*ious uplo** or s*ri*s o* uplo**s. Not* t**t, lik* *ll o* t** *il* uplo** limits,

Reasoning

T** vuln*r**ility st*ms *rom missin* *il* *ount limit ****ks in multip*rt r*qu*st pro**ssin*. T** *it*u* *ommit `*******` s*ows t** *riti**l ***ition o* `*il**ountM*x` v*li**tion in `*il*Uplo****s*.p*rs*R*qu*st()`. Pr*-p*t** *o** (s**n in *i** lin*s