Atacul Continuation flood, care cauzează probleme pe serverele ce utilizează HTTP/2.0

Informațiile despre metoda de atac „Continuation flood” au fost dezvăluite, afectând diferite implementări ale protocolului HTTP/2, printre care Apache httpd, Apache Traffic Server, Node.js, oghttp, Go net/http2, Envoy, oghttp și nghttp2. Vulnerabilitatea poate fi utilizată pentru a efectua atacuri asupra serverelor care suportă HTTP/2.0 și, în funcție de implementare, poate duce la epuizarea memoriei (oprirea procesării cererilor sau încheierea necontrolată a proceselor) sau la crearea unei sarcini mari pe CPU (întârzierea procesării cererilor). Potrivit cercetătorului care a descoperit vulnerabilitatea, problema identificată este mai periculoasă decât vulnerabilitatea „Rapid Reset” găsită anul trecut, care a fost utilizată pentru a efectua cele mai mari atacuri DDoS de până atunci.

Nivelul ridicat de periculozitate se explică prin faptul că, pentru a perturba funcționarea server, încheierea necontrolată sau scăderea severă a performanței, este suficient să creezi un flux de cereri special concepute dintr-un computer obișnuit. În anumite cazuri, pentru a efectua atacul, este suficient chiar și un singur TCP-connection. În acest context, traficul asociat cu atacul nu se distinge în loguri față de cererile normale ale utilizatorilor.

Vulnerabilitatea este cauzată de particularitățile procesării cadrelor HEADERS și CONTINUATION în cererile prin protocolul HTTP/2. Cadrele HEADERS sunt utilizate în HTTP/2 pentru transmiterea anteturilor HTTP, iar cadrele CONTINUATION pentru fragmentarea trimiterea anteturilor HTTP în mai multe etape (de exemplu, când anteturile nu încap într-o singură cadru sau când, la început, trebuie să se trimită anteturi care pot fi completate în prezent, iar mai apoi să se completeze anteturile ale căror valori nu pot fi determinate în acest moment). Atunci când anteturile sunt transmise în mai multe etape, la început se trimite un cadru HEADERS fără semnalul END_HEADERS, urmat de mai multe cadre CONTINUATION cu anteturi suplimentare și lista se încheie cu un cadru CONTINUATION cu semnalul END_HEADERS.

Metoda de atac constă în trimiterea unui flux neîntrerupt de cadre CONTINUATION fără a seta semnalul END_HEADERS. O astfel de activitate duce la transmiterea pe serverul un număr mare de antete pe care serverul le păstrează în memoria operațională până când memoria disponibilă procesului este epuizată. Pentru a crea o încărcare mare pe CPU, pe lângă epuizarea memoriei, atacatorul poate utiliza comprimarea conținutului cadrelor CONTINUATION cu ajutorul formatului HPACK, a cărei analiză necesită calcule. În implementările protocolului HTTP/1.1, pentru a proteja serverul împotriva inundațiilor cu antete, s-a aplicat o limitare a dimensiunii antetelor și un timeout pentru timpul de transmisie a conexiunii. În HTTP/2, din cauza complexității protocolului, multe implementări nu au prevăzut asemenea metode de protecție împotriva trimiterii infinite de antete.

Vulnerabilitatea reprezintă cea mai mare amenințare pentru utilizatorii Node.js (CVE-2024-27983), deoarece această implementare permite provocarea prăbușirii prin trimiterea a doar câteva cadre către server. Din cauza stării de competiție în Node.js, pentru a declanșa închiderea neașteptată prin activarea verificării Assert, este suficient să se încheie conexiunile în timpul trimiterii unui flux de antete neterminat (prăbușire dacă în momentul închiderii conexiunilor nu a sosit încă un cadru CONTINUATION cu flagul END_HEADERS). Vulnerabilitatea a fost remediată în Node.js 18.20.1, 21.7.2 și 20.12.1, precum și în versiunile recente ale bibliotecilor llhttp și undici. În noile versiuni de Node.js a fost remediată și o vulnerabilitate mai puțin gravă (CVE-2024-27982) din clasa „request smuggling”, care permite prin manipularea valorii „Content Length” să se intercaleze în conținutul cererilor altor utilizatori, procesate în același fir între front-end și back-end.

Vulnerabilitățile legate de procesarea CONTINUATION în alte implementări HTTP/2.0:

  • oghttp (CVE-2024-27919) — consum nelimitat de memorie.
  • Tempesta FW (CVE-2024-2758) — ocolirea restricțiilor.
  • Biblioteca PHP amphp/http, amphp/http-client și amphp/http-server (CVE-2024-2653) — consum nelimitat de memorie, până la epuizarea completă a memoriei disponibile.
  • Pachetul Go net/http (CVE-2023-45288) — crearea unei încărcări mari pe CPU.
  • Biblioteca nghttp2 (CVE-2024-28182) — provocarea unui atac de refuz al serviciului.
  • Apache Httpd (CVE-2024-27316) — consum excesiv de memorie și generarea unei încărcări pe CPU.
  • Apache Traffic Server (CVE-2024-31309) — consum excesiv de resurse.
  • Envoy (CVE-2024-30255) — generarea unei încărcări mari pe CPU (pentru a atinge o încărcare completă a unui nucleu de CPU este necesar un fir de 300Mbit/s).

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster