• XSS.stack #1 – первый литературный журнал от юзеров форума

Web ASP.NET Core CVE-2025-55315

sart0ri

floppy-диск
Пользователь
Регистрация
31.08.2024
Сообщения
3
Реакции
2
CVE-2025-55315 — это уязвимость обхода защитного механизма в ASP.NET Core, возникающая из-за неконсистентной интерпретации HTTP-запросов (вариант HTTP request/response smuggling). Данная ошибка позволяет авторизованному злоумышленнику в сети обойти предусмотренные меры безопасности.

используйте этот запрос 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).
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх