Cloudanix VulnDB

CVE-2024-38820

Low · 3.1

Spring Framework DataBinder Case Sensitive Match Exception

CVSS

3.1

EPSS

0.6%

Published

Oct 18, 2024

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

A flaw in some Spring-based applications can let carefully crafted form or API input change fields that the application meant to keep protected.

Chainable
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

  1. Find an application endpoint that accepts form data, query parameters, or request bodies mapped to server-side objects through Spring binding.
  2. 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.
  3. Craft request parameters using case variants or locale-sensitive characters intended to evade disallowedFields pattern matching.
  4. Submit the request to the vulnerable endpoint and observe whether the supposedly blocked property is accepted or changes server-side behavior.
  5. 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