Атака Continuation flood, приводящая ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ Π½Π° сСрвСрах, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… HTTP/2.0

Раскрыты свСдСния ΠΎΠ± ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Π°Ρ‚Π°ΠΊΠΈ «Continuation flood», Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°ΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° HTTP/2, срСди ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Apache httpd, Apache Traffic Server, Node.js, oghttp, Go net/http2, Envoy, oghttp ΠΈ nghttp2. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π°Ρ‚Π°ΠΊ Π½Π° сСрвСры с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ HTTP/2.0 ΠΈ Π² зависимости ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΈΡΡ‡Π΅Ρ€ΠΏΠ°Π½ΠΈΡŽ памяти (ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ запросов ΠΈΠ»ΠΈ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ процСссов) ΠΈΠ»ΠΈ созданию высокой Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° CPU (Π·Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ запросов). По мнСнию ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²ΡˆΠ΅Π³ΠΎ ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ исслСдоватСля, выявлСнная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π±ΠΎΠ»Π΅Π΅ опасна, Ρ‡Π΅ΠΌ найдСнная Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ Π³ΠΎΠ΄Ρƒ ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ «Rapid Reset», использованная для ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΊΡ€ΡƒΠΏΠ½Π΅ΠΉΡˆΠΈΡ… Π½Π° Ρ‚ΠΎ врСмя DDoS-Π°Ρ‚Π°ΠΊ.

Высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ опасности ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ для Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ сСрвСра, Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΠ΅Ρ€ΡŒΡ‘Π·Π½ΠΎΠ³ΠΎ сниТСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ достаточно создания ΠΏΠΎΡ‚ΠΎΠΊΠ° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½Ρ‹Ρ… запросов с ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°. Π’ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… случаях для осущСствлСния Π°Ρ‚Π°ΠΊΠΈ достаточно Π΄Π°ΠΆΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ TCP-соСдинСния. ΠŸΡ€ΠΈ этом связанных с ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π°Ρ‚Π°ΠΊΠΈ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ выдСляСтся Π² Π»ΠΎΠ³Π°Ρ… Π½Π° Ρ„ΠΎΠ½Π΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… запросов ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π° особСнностями ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠ°Π΄Ρ€ΠΎΠ² HEADERS ΠΈ CONTINUATION Π² запросах ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ HTTP/2. ΠšΠ°Π΄Ρ€Ρ‹ HEADERS ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² HTTP/2 для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ HTTP-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ², Π° ΠΊΠ°Π΄Ρ€Ρ‹ CONTINUATION для Ρ€Π°Π·Π±ΠΈΠ²ΠΊΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ HTTP-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² Π½Π° нСсколько стадий (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Π½Π΅ ΡƒΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠ°Π΄Ρ€ ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° Π²Π½Π°Ρ‡Π°Π»Π΅ слСдуСт ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ этапС, Π° Π·Π°Ρ‚Π΅ΠΌ Π΄ΠΎΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, значСния ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠΊΠ° Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ). ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² Π² нСсколько этапов Π²Π½Π°Ρ‡Π°Π»Π΅ отправляСтся ΠΊΠ°Π΄Ρ€ HEADERS Π±Π΅Π· Ρ„Π»Π°Π³Π° END_HEADERS, Π·Π° Π½ΠΈΠΌ слСдуСт нСсколько ΠΊΠ°Π΄Ρ€ΠΎΠ² CONTINUATION с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ список ΠΊΠ°Π΄Ρ€ CONTINUATION с Ρ„Π»Π°Π³ΠΎΠΌ END_HEADERS.

ΠœΠ΅Ρ‚ΠΎΠ΄ Π°Ρ‚Π°ΠΊΠΈ сводится ΠΊ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ Π½Π΅ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΊΠ°Π΄Ρ€ΠΎΠ² CONTINUATION Π±Π΅Π· выставлСния Ρ„Π»Π°Π³Π° END_HEADERS. Подобная Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π½Π° сСрвСр большого числа Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сСрвСр сохраняСт Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° доступная процСссу ΠΏΠ°ΠΌΡΡ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ исчСрпана. Для создания высокой Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° CPU ΠΏΠΎΠΌΠΈΠΌΠΎ исчСрпания памяти Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ сТатиСм содСрТимого ΠΊΠ°Π΄Ρ€ΠΎΠ² CONTINUATION с использованиСм Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° HPACK, Ρ€Π°Π·Π±ΠΎΡ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ вычислСний. Π’ рСализациях ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° HTTP/1.1 для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ затоплСния сСрвСра Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ примСнялся Π»ΠΈΠΌΠΈΡ‚ Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΠΈ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚ Π½Π° врСмя ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ соСдинСния. Для HTTP/2 Π² силу услоТнСния ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ прСдусмотрСли ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ бСсконСчной ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ².

ΠΠ°ΠΈΠ±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ прСдставляСт для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Node.js (CVE-2024-27983), Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ данная рСализация позволяСт Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΊΡ€Π°Ρ…Π° Ρ‡Π΅Ρ€Π΅Π· ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ всСго Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠ°Π΄Ρ€ΠΎΠ² Π½Π° сСрвСр. Из-Π·Π° состояния Π³ΠΎΠ½ΠΊΠΈ Π² Node.js для Π²Ρ‹Π·ΠΎΠ²Π° Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ‡Π΅Ρ€Π΅Π· срабатываниС Assert-ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ достаточно Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ соСдинСния Π²ΠΎ врСмя ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π½Π΅Π·Π°Π²Π΅Ρ€ΡˆΡ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² (ΠΊΡ€Π°Ρ…, Ссли Π²ΠΎ врСмя закрытия соСдинСний Π΅Ρ‰Ρ‘ Π½Π΅ поступил ΠΊΠ°Π΄Ρ€ CONTINUATION с Ρ„Π»Π°Π³ΠΎΠΌ END_HEADERS). Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ устранСна Π² Node.js 18.20.1, 21.7.2 ΠΈ 20.12.1, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² свСТих выпусках Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ llhttp ΠΈ undici. Π’ Π½ΠΎΠ²Ρ‹Ρ… вСрсиях Node.js Ρ‚Π°ΠΊΠΆΠ΅ устранСна ΠΌΠ΅Π½Π΅Π΅ опасная ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ (CVE-2024-27982) класса «request smuggling», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΡΡ†ΠΈΡŽ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ «Content Length» Π²ΠΊΠ»ΠΈΠ½ΠΈΡ‚ΡŒΡΡ Π² содСрТимоС запросов Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ фронтэндом ΠΈ бэкСндом.

Уязвимости, связанныС с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ CONTINUATION, Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… рСализациях HTTP/2.0:

  • oghttp (CVE-2024-27919) — Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти.
  • Tempesta FW (CVE-2024-2758) — ΠΎΠ±Ρ…ΠΎΠ΄ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ.
  • PHP-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° amphp/http, amphp/http-client ΠΈ amphp/http-server (CVE-2024-2653) — Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти, Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ исчСрпания доступной памяти.
  • Go-ΠΏΠ°ΠΊΠ΅Ρ‚ net/http (CVE-2023-45288) — созданиС высокой Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° CPU.
  • Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° nghttp2 (CVE-2024-28182) — Π²Ρ‹Π·ΠΎΠ² ΠΎΡ‚ΠΊΠ°Π·Π° Π² обслуТивании.
  • Apache Httpd (CVE-2024-27316 — Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎΠ΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти ΠΈ созданиС Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° CPU.
  • Apache Traffic Server (CVE-2024-31309 — Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎΠ΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ рСсурсов.
  • Envoy (CVE-2024-30255) — созданиС высокой Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° CPU (для ΠΏΠΎΠ»Π½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ядра CPU Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊ Π² 300Mbit/s).

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru