CVE-2026-47892
CRITICAL(9.8)CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
- CVSS 9.8 — Kritisch
Erwähnungen (letzte 60 Tage)
EPSS-Score
0.4%
Exploit-Wahrscheinlichkeit (30 Tage)
CVSS Score
9.8
Technische Schwere
Beschreibung
A WebFlux application using functional endpoints and deployed with DispatcherServlet may be vulnerable to a header predicate bypass in a pre-flight request. Spring Framework 7.0.0 - 7.0.8 Spring Framework 6.2.0 - 6.2.19 Spring Framework 6.1.0 - 6.1.28 Spring Framework 6.0.0 - 6.0.30 Spring Framework 5.3.0 - 5.3.49 Spring Framework 5.2.5.RELEASE - 5.2.25.RELEASE
Erkennung & Indikatoren
Ausnutzung
In den geprüften Quellen nicht genannt
Behobene Versionen
- 7.0.9
- 7.0.8.1
- 6.2.20
- 6.1.29
- 6.0.31
- 5.3.50
- 5.2.26
Threat-Hunting-Queries
Die Schwachstelle betrifft WebFlux-Anwendungen, die funktionale Endpunkte verwenden und mit DispatcherServlet bereitgestellt werden, wodurch ein Header-Prädikat-Bypass in einer Pre-Flight-Anfrage möglich ist. Die Detektion konzentriert sich auf ungewöhnliche oder manipulierte Pre-Flight-Anfragen, die auf einen Bypass hindeuten könnten.
Sentinel/Defender KQL
let PreflightRequests = HttpRequests
| where Url contains "/" // Adjust to specific WebFlux functional endpoint paths if known
| where HttpMethod == "OPTIONS"
| where RequestHeaders contains "Access-Control-Request-Headers" and RequestHeaders contains "Access-Control-Request-Method";
PreflightRequests
| where ResponseStatus == 200 // Successful pre-flight
| join kind=inner (HttpRequests
| where HttpMethod != "OPTIONS"
| where Url contains "/" // Same endpoint path as pre-flight
| where TimeGenerated > ago(1m) and TimeGenerated < now() // Follow-up request shortly after pre-flight
) on RemoteIp, UserAgent, Url
| where RequestHeaders contains "" // Look for unusual or missing headers that should be present based on the pre-flight
| project TimeGenerated, RemoteIp, UserAgent, Url, HttpMethod, RequestHeaders, ResponseStatus, CorrelationIdSplunk SPL
sourcetype=web_access_logs (method=OPTIONS AND uri="/*" AND header_access_control_request_headers=* AND header_access_control_request_method=*) OR (method!=OPTIONS AND uri="/*")
| transaction clientip, uri maxspan=1m keepevicted=true
| where mvcount(method) > 1 AND mvindex(method,0)="OPTIONS" AND mvindex(method,1)!="OPTIONS"
| eval preflight_headers = mvindex(header_access_control_request_headers,0)
| eval actual_headers = mvindex(request_headers,1)
| where NOT match(actual_headers, preflight_headers) // Simplified check, needs refinement based on specific bypass patterns
| table _time, clientip, uri, method, preflight_headers, actual_headersSigma
title: Spring Framework WebFlux Header Predicate Bypass Attempt
id: 00000000-0000-0000-0000-000000000001
status: experimental
description: Detects potential attempts to bypass header predicates in Spring WebFlux applications using functional endpoints and DispatcherServlet via pre-flight requests.
references:
- https://spring.io/security/cve-2026-47892
logsource:
category: webserver
product: spring_webflux
detection:
selection_preflight:
cs-method: 'OPTIONS'
cs-uri-stem|contains: '/'
cs-header-Access-Control-Request-Headers|exists: true
cs-header-Access-Control-Request-Method|exists: true
selection_followup:
cs-method|!in: ['OPTIONS']
cs-uri-stem|contains: '/'
condition: selection_preflight and selection_followup
timeframe: 1m
# Further refinement needed to compare headers between pre-flight and follow-up
# This requires advanced correlation capabilities not directly expressible in basic Sigma
falsepositives:
- Legitimate pre-flight requests followed by valid requests.
level: highElastic ES|QL
from logs-webserver-access.*
| where http.request.method == 'OPTIONS' and url.path.keyword : '*' and http.request.headers."access-control-request-headers" : '*' and http.request.headers."access-control-request-method" : '*'
| keep @timestamp, source.ip, user_agent.original, url.path.keyword, http.request.method, http.request.headers
| join (from logs-webserver-access.*
| where http.request.method != 'OPTIONS' and url.path.keyword : '*'
| keep @timestamp, source.ip, user_agent.original, url.path.keyword, http.request.method, http.request.headers
) on source.ip, user_agent.original, url.path.keyword
| where @timestamp.x - @timestamp.y < 60000 // Follow-up within 60 seconds
| eval preflight_headers = http.request.headers.x."access-control-request-headers"
| eval actual_headers = http.request.headers.y
| where NOT (actual_headers : preflight_headers) // Simplified check, needs refinement
| project @timestamp.x, source.ip, user_agent.original, url.path.keyword, http.request.method.x, preflight_headers, http.request.method.y, actual_headersSecBoard-generated · behavioral · requires customization — Von SecBoard erzeugt und nicht in einer Zielumgebung validiert. Vor dem Einsatz an die eigene Protokollierung anpassen.
Ausgewertete Quellen
Betroffene Produkte
- cpe:2.3:a:vmware:spring_framework:*:*:*:*:*:*:*:*
- cpe:2.3:a:vmware:spring_framework:*:*:*:*:*:*:*:*
- cpe:2.3:a:vmware:spring_framework:*:*:*:*:*:*:*:*
- cpe:2.3:a:vmware:spring_framework:*:*:*:*:*:*:*:*
- cpe:2.3:a:vmware:spring_framework:*:*:*:*:*:*:*:*
- cpe:2.3:a:vmware:spring_framework:*:*:*:*:*:*:*:*