CVE-2025-41249
High · 7.5CVSS
7.5
EPSS
0.5%
Published
Sep 16, 2025
CISA due date
—
Cloudanix analysis
Some applications may accidentally skip permission checks and let people view information they should not be allowed to see.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Moderate
- Impact
- Data Exposure
- Component
- Web Framework
- Class
- Authorization Bypass
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
This is an authorization bypass in Spring-based applications that use Spring Security method-level authorization via @EnableMethodSecurity. In specific type hierarchies involving parameterized supertypes with unbounded generics, Spring Framework may fail to correctly resolve security annotations placed on methods in generic superclasses or generic interfaces. If an application relies on annotations such as @PreAuthorize, @PostAuthorize, @Secured, or similar method-security controls in those locations, the intended authorization decision may not be enforced, allowing access to protected methods that should require a specific identity, role, or permission. Applications not using @EnableMethodSecurity, or not placing security annotations on methods in generic superclasses or generic interfaces, are not expected to be affected. The supplied affected product list references Debian open-iscsi packages, which does not align with the Spring Framework description; treat that package mapping as requiring vendor validation before using it for prioritization.
Why it matters to the business
Successful exploitation can allow users to access data or functions that were intended to be restricted, creating risk of sensitive data exposure, privacy violations, regulatory findings, and loss of trust. The CVSS score indicates high confidentiality impact, but current exploit intelligence is lower urgency: EPSS is low, the issue is not listed in CISA KEV, and no mature public exploit is indicated. Because Spring is widely used in business applications and method-level security is often used for fine-grained access control, affected applications should still be reviewed and remediated promptly, especially internet-facing APIs, administrative portals, multi-tenant services, and systems handling regulated data.
How an attack unfolds
An attacker first identifies an application function exposed through a controller, API endpoint, message handler, or other entry point that eventually invokes a method protected by Spring method-security annotations. The vulnerable condition exists when the authorization annotation is inherited or discovered through a generic superclass or generic interface using an unbounded generic parameterization that Spring fails to resolve correctly. If the application depends on that annotation as the primary authorization gate, Spring may execute the method without applying the intended check. The attacker then sends a normal application request, potentially as an unauthenticated user or as a low-privileged authenticated user, and receives data or behavior that should have been blocked. No special memory corruption, malware, or server-side code execution is required; exploitation is application-logic driven and depends heavily on the affected code structure.
How to fix it
Upgrade affected Spring Framework and Spring Security components to vendor-supported fixed versions for CVE-2025-41249 and review the related advisory CVE-2025-41248 because the issues were published together. Where immediate upgrade is not possible, avoid relying on method-security annotations inherited only from generic superclasses or generic interfaces with unbounded generics; place authorization annotations directly on concrete implementation methods or concrete classes, add explicit authorization checks in the called method, and enforce equivalent checks at the web/API layer. Add regression tests that verify unauthorized users are denied for every sensitive method path. The provided package data lists Debian open-iscsi fixed in version 2.0.871-1 for Debian 11, 12, 13, and 14, but that does not match the Spring Framework vulnerability description; validate package applicability through official vendor advisories and SBOM/dependency evidence before treating open-iscsi upgrades as remediation for this issue.
How to confirm the fix worked
Confirm exposure by reviewing application dependencies and code structure. Verify whether the application uses Spring Security @EnableMethodSecurity and whether protected methods inherit security annotations from generic superclasses or generic interfaces with unbounded type parameters. Use dependency tooling such as Maven dependency:tree, Gradle dependencies, SBOM scanners, or software composition analysis to identify vulnerable Spring Framework/Spring Security versions and confirm upgraded fixed versions after remediation. Add or run authorization regression tests for affected services: test unauthenticated access, low-privileged authenticated access, and correctly privileged access, and confirm that only the intended privileged case succeeds. If annotations were moved to concrete methods, inspect compiled application behavior rather than only source code, and test through real application entry points such as REST endpoints, GraphQL resolvers, RPC handlers, scheduled jobs, or message consumers where applicable.
Typical attack path
- Discover an exposed application endpoint or workflow backed by Spring method security.
- Determine or infer that the endpoint reaches service methods protected by annotations such as @PreAuthorize, @PostAuthorize, or @Secured.
- Target functionality where the security annotation is declared on a method in a generic superclass or generic interface using unbounded generics.
- Send requests as an unauthenticated user or a low-privileged account that should not satisfy the intended authorization rule.
- Observe whether the application returns protected data or completes the restricted operation instead of returning an authorization failure.
- Repeat access against similar endpoints or object identifiers to enumerate additional sensitive data.
How to detect it
This flaw does not produce a reliable universal exploit signature because exploitation looks like normal application traffic that succeeds when it should have been denied. To assess prior exploitation, correlate application access logs, API gateway logs, web server logs, identity-provider logs, and Spring Security audit/debug logs. Focus on endpoints or methods backed by services that use @EnableMethodSecurity and security annotations inherited from generic superclasses or generic interfaces. Look for unauthenticated requests or low-privileged user accounts receiving HTTP 200/2xx responses where the expected result should have been 401, 403, AccessDeniedException, AuthorizationDeniedException, or an application-specific denial event. Review object-level access patterns, unusual enumeration of record IDs, large response volumes, access outside normal business workflows, and successful calls immediately following failed authorization attempts. If detailed method invocation auditing exists, compare invoked secured methods against the caller’s roles or claims at the time of access. Threat intelligence currently does not indicate KEV listing, ransomware use, named threat actor activity, or mature public exploit code, so detection should be behavior- and authorization-policy based rather than IOC-based.
What your security team should do
- Prioritize inventory of applications using Spring Security @EnableMethodSecurity, especially internet-facing APIs and applications handling sensitive or regulated data.
- Search source code for method-security annotations on generic interfaces or generic abstract superclasses and require engineering review of those patterns.
- Upgrade Spring Framework and Spring Security to the vendor-fixed versions for this advisory; do not rely solely on the supplied open-iscsi package mapping without vendor validation.
- Create authorization regression tests that prove low-privileged users cannot access protected methods reached through generic type hierarchies.
- Temporarily move critical authorization annotations onto concrete implementation methods or add explicit checks where rapid framework upgrade is delayed.
- Review access logs and audit trails for historical low-privilege or unauthenticated access to endpoints that should have required elevated permissions.
- Track the related Spring advisory published alongside this one and remediate both together where dependencies overlap.
The record
The Spring Framework annotation detection mechanism may not correctly resolve annotations on methods within type hierarchies with a parameterized super type with unbounded generics. This can be an issue if such annotations are used for authorization decisions. Your application may be affected by this if you are using Spring Security's @EnableMethodSecurity feature. You are not affected by this if you are not using @EnableMethodSecurity or if you do not use security annotations on methods in generic superclasses or generic interfaces. This CVE is published in conjunction with CVE-2025-41248 https://spring.io/security/cve-2025-41248 .
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Maven | org.springframework:spring-core | 5.3.0 | No fix |
| Maven | org.springframework:spring-core | 6.0.0 | No fix |
| Maven | org.springframework:spring-core | 6.2.0 | 6.2.11 |
| Chainguard | apache-hop | 0 | 2.15.0-r12 |
| Chainguard | apache-hop-fips | 0 | 2.15.0-r14 |
| Chainguard | apache-nifi | 0 | 2.5.0-r11 |
| Chainguard | apache-nifi-compat | 0 | 2.5.0-r11 |
| Chainguard | apache-nifi-registry | 0 | 2.5.0-r7 |
| Chainguard | apache-nifi-registry-toolkit | 0 | 2.5.0-r7 |
| Chainguard | apache-nifi-toolkit | 0 | 2.5.0-r11 |
| Chainguard | camunda-zeebe-8.3-compat | 0 | 8.3.22-r9 |
| Chainguard | camunda-zeebe-8.4-compat | 0 | 8.4.21-r8 |
| Chainguard | camunda-zeebe-8.5 | 0 | 8.5.24-r2 |
| Chainguard | camunda-zeebe-8.5-compat | 0 | 8.5.24-r2 |
| Chainguard | camunda-zeebe-8.6 | 0 | 8.6.27-r2 |
| Chainguard | camunda-zeebe-8.6-compat | 0 | 8.6.27-r2 |
| Chainguard | geoserver-2.26-docker | 0 | 2.26.4-r0 |
| Chainguard | geoserver-2.27-docker | 0 | 2.27.3-r2 |
| Chainguard | geoserver-2.28-docker | 0 | 2.28.1-r1 |
| Chainguard | jenkins-2 | 0 | 2.528-r0 |
| Chainguard | jenkins-2-openjdk-17 | 0 | 2.528-r0 |
| Chainguard | jenkins-2-openjdk-21 | 0 | 2.528-r0 |
| Chainguard | jenkins-2.504 | 0 | 2.504.3-r5 |
| Chainguard | jenkins-2.504-openjdk-17 | 0 | 2.504.3-r5 |
| Chainguard | jenkins-2.504-openjdk-21 | 0 | 2.504.3-r5 |
| Chainguard | jenkins-2.516 | 0 | 2.516.2-r1 |
| Chainguard | jenkins-2.516-openjdk-17 | 0 | 2.516.2-r1 |
| Chainguard | jenkins-2.516-openjdk-21 | 0 | 2.516.2-r1 |
| Chainguard | jenkins-compat | 0 | 2.528-r0 |
| Chainguard | jenkins-docker-agent | 0 | 2.528-r0 |
| Chainguard | jenkins-docker-agent-openjdk-17 | 0 | 2.528-r0 |
| Chainguard | jenkins-docker-agent-openjdk-21 | 0 | 2.528-r0 |
| Chainguard | jenkins-remoting | 0 | 2.528-r0 |
| Chainguard | jenkins-utils | 0 | 2.528-r0 |
| Chainguard | keycloak-config-cli | 0 | 6.4.0-r49 |
| Chainguard | keycloak-config-cli-bitnami-compat | 0 | 6.4.0-r49 |
| Chainguard | keycloak-config-cli-compat | 0 | 6.4.0-r49 |
| Chainguard | keycloak-config-cli-iamguarded-compat | 0 | 6.4.0-r49 |
| Chainguard | nacos | 0 | 3.1.0-r0 |
| Chainguard | nacos-compat | 0 | 3.1.0-r0 |
| Chainguard | nacos-docker | 0 | 3.1.0-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 | spring-boot | 0 | 3.5.6-r0 |
| Chainguard | thingsboard | 0 | 4.2-r6 |
| Chainguard | thingsboard-tb-js-executor | 0 | 4.2-r6 |
| Chainguard | thingsboard-tb-mqtt-transport | 0 | 4.2-r6 |
| Chainguard | thingsboard-tb-node | 0 | 4.2-r6 |
| Chainguard | thingsboard-tb-web-ui | 0 | 4.2-r6 |
| Chainguard | zipkin | 0 | 3.5.1-r6 |
| Chainguard | zipkin-oci-entrypoint | 0 | 3.5.1-r6 |
| Chainguard | zipkin-slim | 0 | 3.5.1-r6 |
| Debian:11 | libspring-java | 0 | No fix |
| Debian:12 | libspring-java | 0 | No fix |
| Debian:13 | libspring-java | 0 | No fix |
| Debian:14 | libspring-java | 0 | No fix |
| Wolfi | apache-nifi | 0 | 2.5.0-r11 |
| Wolfi | apache-nifi-compat | 0 | 2.5.0-r11 |
| Wolfi | apache-nifi-registry | 0 | 2.5.0-r7 |
| Wolfi | apache-nifi-registry-toolkit | 0 | 2.5.0-r7 |
| Wolfi | apache-nifi-toolkit | 0 | 2.5.0-r11 |
| Wolfi | jenkins-2 | 0 | 2.528-r0 |
| Wolfi | jenkins-2-openjdk-17 | 0 | 2.528-r0 |
| Wolfi | jenkins-2-openjdk-21 | 0 | 2.528-r0 |
| Wolfi | jenkins-compat | 0 | 2.528-r0 |
| Wolfi | jenkins-docker-agent | 0 | 2.528-r0 |
| Wolfi | jenkins-docker-agent-openjdk-17 | 0 | 2.528-r0 |
| Wolfi | jenkins-docker-agent-openjdk-21 | 0 | 2.528-r0 |
| Wolfi | jenkins-remoting | 0 | 2.528-r0 |
| Wolfi | jenkins-utils | 0 | 2.528-r0 |
| Wolfi | keycloak-config-cli | 0 | 6.4.0-r49 |
| Wolfi | keycloak-config-cli-bitnami-compat | 0 | 6.4.0-r49 |
| Wolfi | keycloak-config-cli-compat | 0 | 6.4.0-r49 |
| Wolfi | keycloak-config-cli-iamguarded-compat | 0 | 6.4.0-r49 |
| Wolfi | thingsboard | 0 | 4.2-r6 |
| Wolfi | thingsboard-tb-js-executor | 0 | 4.2-r6 |
| Wolfi | thingsboard-tb-mqtt-transport | 0 | 4.2-r6 |
| Wolfi | thingsboard-tb-node | 0 | 4.2-r6 |
| Wolfi | thingsboard-tb-web-ui | 0 | 4.2-r6 |
| Wolfi | zipkin | 0 | 3.5.1-r6 |
| Wolfi | zipkin-oci-entrypoint | 0 | 3.5.1-r6 |
| Wolfi | zipkin-slim | 0 | 3.5.1-r6 |
| maven | org.springframework/spring-core | 5.3.0 | No fix |
| maven | org.springframework/spring-core | 6.0.0 | No fix |
| maven | org.springframework/spring-core | 6.2.0 | 6.2.11 |
Related vulnerabilities
- CVE-2011-2730 VMware SpringSource Spring Framework before 2.5.6.SEC03, 2.5.7.SR023, and 3.x before… Also affects org.springframework:spring-core
- CVE-2026-33871 Netty is an asynchronous, event-driven network application framework. Also affects apache-hop
- CVE-2026-1605 In Eclipse Jetty, versions 12.0.0-12.0.31 and 12.1.0-12.0.5, class GzipHandler exposes a… Also affects apache-hop
- CVE-2025-11143 The Jetty URI parser has some key differences to other common parsers when evaluating… Also affects apache-hop
- CVE-2025-33042 Improper Control of Generation of Code ('Code Injection') vulnerability in Apache Avro… Also affects apache-hop
- CVE-2025-68161 Apache Log4j does not verify the TLS hostname in its Socket Appender Also affects apache-hop
- CVE-2025-67735 Netty has a CRLF Injection vulnerability in io.netty.handler.codec.http.HttpRequestEncoder Also affects apache-hop
- CVE-2025-66566 yawkat LZ4 Java provides LZ4 compression for Java. Also affects apache-hop