CVE-2024-38820
Low · 3.1Spring Framework DataBinder Case Sensitive Match Exception
CVSS
3.1
EPSS
0.6%
Published
Oct 18, 2024
CISA due date
—
Cloudanix analysis
A flaw in some Spring-based applications can let carefully crafted form or API input change fields that the application meant to keep protected.
- Exploitation
- Remote Authenticated
- Attacker needs
- Low Privilege
- Complexity
- Moderate
- Impact
- Data Tampering
- Component
- Web Framework
- Class
- Improper Input Validation
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
This vulnerability affects applications that rely on Spring Framework DataBinder disallowedFields patterns to prevent binding of sensitive request parameters. The earlier fix made disallowed field matching case-insensitive by converting strings with String.toLowerCase(), but Java lowercasing is locale-dependent. In certain locales, most notably Turkish or Azerbaijani casing rules, characters such as uppercase I may transform unexpectedly. As a result, a field name that should match a disallowedFields pattern may fail to match, allowing an attacker-controlled request parameter to be bound to an object property that the application intended to protect. The practical impact depends on what protected fields exist in the affected application and whether attackers can submit parameter names that reach DataBinder.
Why it matters to the business
The main risk is unauthorized modification of application data through web forms or API requests, such as changing fields that should be server-controlled. Impact is application-specific and may range from minor data integrity issues to privilege or workflow manipulation if sensitive properties are protected only through disallowedFields. The public exploit maturity is currently listed as none, EPSS is low at 0.00617, and it is not in CISA KEV or known ransomware use, so broad active exploitation is not indicated; however, the issue is old enough that affected systems should not remain unpatched. Organizations using Spring Framework directly or through downstream products such as Jenkins plugins should prioritize upgrade validation because the weakness may be inherited transitively.
How an attack unfolds
An attacker first identifies an endpoint that binds incoming request parameters to a server-side object using Spring DataBinder or related Spring MVC binding behavior. The application must rely on disallowedFields to prevent certain properties from being set by the client. If the application or JVM runs under a locale with special case-conversion behavior, or if locale-dependent conversion affects the comparison path, the attacker crafts a parameter name whose case transformation does not normalize the same way the application expects. The malformed or specially cased field name may bypass the disallowedFields check and be bound to the target object. If the protected property controls authorization, ownership, workflow state, pricing, administrative flags, or other sensitive behavior, the attacker may alter data or application behavior without directly exploiting code execution.
How to fix it
Upgrade affected components to fixed versions. For org.jenkins-ci.plugins:ci-with-toad-edge, upgrade to version 2.4 or later. For spring-projects/spring-framework, use a release containing commit ac5c8adb9830939e2329f1e16727c522a172c7c8 or a vendor-supported Spring Framework version that includes the fix. Where immediate upgrade is not possible, reduce reliance on deny-list binding controls: use allow-list binding with setAllowedFields for properties that clients are explicitly permitted to set, use dedicated request DTOs instead of binding directly to domain objects, enforce server-side authorization and invariant checks after binding, and avoid exposing sensitive object properties to automatic binding. As a defense-in-depth measure, standardize JVM/application locale settings, but do not treat locale configuration alone as a complete fix.
How to confirm the fix worked
Confirm the deployed application or packaged product no longer includes vulnerable Spring Framework code and that the Jenkins ci-with-toad-edge plugin, if used, is version 2.4 or later. Review dependency manifests, SBOMs, build files, and runtime classpaths for affected Spring Framework versions or downstream products. Add or run regression tests against endpoints using DataBinder disallowedFields with mixed-case and locale-sensitive field names, especially under Turkish and Azerbaijani locales, and verify that protected fields are not bound. Validate that sensitive fields are controlled through allow-list DTO binding and server-side authorization checks rather than only disallowedFields deny lists.
Typical attack path
- Find an application endpoint that accepts form data, query parameters, or request bodies mapped to server-side objects through Spring binding.
- Determine or infer fields that are intended to be blocked from client-side binding, such as role, admin, owner, status, price, or internal identifier fields.
- Craft request parameters using case variants or locale-sensitive characters intended to evade disallowedFields pattern matching.
- Submit the request to the vulnerable endpoint and observe whether the supposedly blocked property is accepted or changes server-side behavior.
- Use successful binding bypass to modify protected state, escalate application privileges, alter records, or bypass workflow controls depending on the application logic.
How to detect it
There are no broadly reliable public indicators that uniquely prove exploitation of this issue. Detection should focus on application-specific evidence of attempted or successful mass assignment into fields that should never be client-controlled. Review HTTP access logs, WAF logs, reverse proxy logs, application request logs, and audit trails for requests containing suspicious parameter names that resemble protected fields but use unusual capitalization or Unicode/case variants. Pay special attention to applications running with Turkish or Azerbaijani JVM or process locale settings and to endpoints known to use Spring DataBinder disallowedFields. Investigate audit records where sensitive properties changed without a corresponding authorized workflow action, especially changes to role, admin, enabled, status, owner, account, price, approval, or internal identifier fields. If request body logging is available, compare inbound parameters against object fields that are meant to be server-controlled. Also review build and runtime telemetry for vulnerable Spring Framework versions or affected downstream packages as exposure indicators.
What your security team should do
- Inventory applications and products using Spring Framework DataBinder, Spring MVC model binding, or downstream components that embed Spring Framework.
- Upgrade org.jenkins-ci.plugins:ci-with-toad-edge to 2.4 or later and move Spring Framework dependencies to a fixed vendor-supported release containing the security fix.
- Prioritize applications that bind external HTTP parameters directly to objects containing sensitive fields such as role, permissions, ownership, account status, pricing, approval state, or internal identifiers.
- Review code for setDisallowedFields usage and replace deny-list binding with allow-list DTO-based binding wherever feasible.
- Add negative security tests for locale-sensitive case variants of blocked fields, including execution under Turkish or Azerbaijani locale settings.
- Monitor application logs and audit trails for unexpected client-side attempts to set protected object properties, even though there are no widely published exploitation indicators at this time.
The record
The fix for CVE-2022-22968 made disallowedFields patterns in DataBinder case insensitive. However, String.toLowerCase() has some Locale dependent exceptions that could potentially result in fields not protected as expected.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Maven | org.springframework:spring-context | 0 | No fix |
| Maven | org.springframework:spring-context | 0 | 5.3.41 |
| Maven | org.springframework:spring-context | 0 | 6.1.14 |
| Maven | org.springframework:spring-context | 6.0.0 | No fix |
| Maven | org.springframework:spring-context | 6.0.0 | 6.0.25 |
| Maven | org.springframework:spring-context | 6.1.0 | 6.1.14 |
| Maven | org.springframework:spring-web | 0 | No fix |
| Maven | org.springframework:spring-web | 6.0.0 | No fix |
| Maven | org.springframework:spring-web | 6.1.0 | 6.1.14 |
| Chainguard | apache-nifi | 0 | 2.0.0-r0 |
| Chainguard | apache-nifi-compat | 0 | 2.0.0-r0 |
| Chainguard | apache-nifi-toolkit | 0 | 2.0.0-r0 |
| Chainguard | camunda-zeebe | 0 | 8.6.5-r0 |
| Chainguard | camunda-zeebe-compat | 0 | 8.6.5-r0 |
| Chainguard | geoserver-2.26-community | 0 | 2.26.4-r0 |
| Chainguard | geoserver-2.26-docker | 0 | 2.26.4-r0 |
| Chainguard | geoserver-2.27-community | 0 | 2.27.3-r0 |
| Chainguard | geoserver-2.27-docker | 0 | 2.27.3-r0 |
| Chainguard | geoserver-2.28-docker | 0 | 2.28.1-r1 |
| Chainguard | jenkins | 0 | 2.484-r0 |
| Chainguard | jenkins-compat | 0 | 2.484-r0 |
| Chainguard | jenkins-remoting | 0 | 2.484-r0 |
| Chainguard | seata | 0 | 2.5.0-r3 |
| Chainguard | seata-namingserver-oci-entrypoint | 0 | 2.5.0-r3 |
| Chainguard | seata-openjdk-17-compat | 0 | 2.5.0-r3 |
| Chainguard | seata-openjdk-21-compat | 0 | 2.5.0-r3 |
| Chainguard | seata-openjdk-8-compat | 0 | 2.5.0-r3 |
| Chainguard | seata-server-oci-entrypoint | 0 | 2.5.0-r3 |
| Chainguard | thingsboard | 0 | 3.8.1-r1 |
| Chainguard | thingsboard-tb-js-executor | 0 | 3.8.1-r1 |
| Chainguard | thingsboard-tb-mqtt-transport | 0 | 3.8.1-r1 |
| Chainguard | thingsboard-tb-node | 0 | 3.8.1-r1 |
| Chainguard | thingsboard-tb-web-ui | 0 | 3.8.1-r1 |
| Debian:11 | libspring-java | 0 | No fix |
| Debian:12 | libspring-java | 0 | No fix |
| Debian:13 | libspring-java | 0 | No fix |
| Ubuntu:20.04:LTS | libspring-java | 0 | No fix |
| Ubuntu:22.04:LTS | libspring-java | 0 | No fix |
| Ubuntu:24.04:LTS | libspring-java | 0 | No fix |
| Ubuntu:24.10 | libspring-java | 0 | No fix |
| Ubuntu:25.04 | libspring-java | 0 | No fix |
| Ubuntu:25.10 | libspring-java | 0 | No fix |
| Ubuntu:Pro:14.04:LTS | libspring-java | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | libspring-java | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | libspring-java | 0 | No fix |
| Ubuntu:Pro:20.04:LTS | libspring-java | 0 | No fix |
| Ubuntu:Pro:22.04:LTS | libspring-java | 0 | No fix |
| Ubuntu:Pro:24.04:LTS | libspring-java | 0 | No fix |
| Wolfi | apache-nifi | 0 | 2.0.0-r0 |
| Wolfi | apache-nifi-compat | 0 | 2.0.0-r0 |
| Wolfi | apache-nifi-toolkit | 0 | 2.0.0-r0 |
| Wolfi | jenkins | 0 | 2.484-r0 |
| Wolfi | jenkins-compat | 0 | 2.484-r0 |
| Wolfi | jenkins-remoting | 0 | 2.484-r0 |
| Wolfi | thingsboard | 0 | 3.8.1-r1 |
| Wolfi | thingsboard-tb-js-executor | 0 | 3.8.1-r1 |
| Wolfi | thingsboard-tb-mqtt-transport | 0 | 3.8.1-r1 |
| Wolfi | thingsboard-tb-node | 0 | 3.8.1-r1 |
| Wolfi | thingsboard-tb-web-ui | 0 | 3.8.1-r1 |
| maven | org.springframework/spring-context | 6.0.0 | No fix |
| maven | org.springframework/spring-context | 6.0.0 | 6.0.25 |
| maven | org.springframework/spring-context | 6.1.0 | 6.1.14 |
| maven | org.springframework/spring-context | 6.2.0-M1 | 6.2.0-RC2 |
| maven | org.springframework/spring-web | 6.0.0 | No fix |
| maven | org.springframework/spring-web | 6.1.0 | 6.1.14 |
Related vulnerabilities
- CVE-2025-22233 CVE-2024-38820 ensured Locale-independent, lowercase conversion for both the configured… Also affects org.springframework:spring-context
- CVE-2025-41234 Description In Spring Framework, versions 6.0.x as of 6.0.5, versions 6.1.x and 6.2.x, an… Also affects org.springframework:spring-web
- CVE-2024-38809 Applications that parse ETags from "If-Match" or "If-None-Match" request headers are… Also affects org.springframework:spring-web
- CVE-2024-22262 Applications that use UriComponentsBuilder to parse an externally provided URL (e.g. Also affects org.springframework:spring-web
- CVE-2024-22259 Applications that use UriComponentsBuilder in Spring Framework to parse an externally… Also affects org.springframework:spring-web
- CVE-2024-22243 Applications that use UriComponentsBuilder to parse an externally provided URL (e.g. Also affects org.springframework:spring-web
- CVE-2016-1000027 Pivotal Spring Framework through 5.3.16 suffers from a potential remote code execution… Also affects org.springframework:spring-web
- CVE-2013-6429 The SourceHttpMessageConverter in Spring MVC in Spring Framework before 3.2.5 and… Also affects org.springframework:spring-web