Objavljeni su podaci o metodi napada "Continuation flood", koja pogađa različite implementacije protokola HTTP/2, uključujući Apache httpd, Apache Traffic Server, Node.js, oghttp, Go net/http2, Envoy, oghttp i nghttp2. Ranljivost se može iskoristiti za napade na servere koji podržavaju HTTP/2.0 i, ovisno o implementaciji, dovodi do isrcpljivanja memorije (prekid obrade zahtjeva ili iznenadno zatvaranje procesa) ili stvaranja visokih opterećenja na CPU-u (usporavanje obrade zahtjeva). Prema mišljenju istraživača koji je otkrio ranjivost, otkriveni problem je opasniji od ranije otkrivene ranjivosti "Rapid Reset", koja je iskorištena za izvršenje najvećih DDoS napada do tada.
Visoka razina opasnosti objašnjava se time što je za ometanje rada poslužitelja, iznenadno zatvaranje ili ozbiljno smanjenje performansi dovoljno stvoriti tok posebno oblikovanih zahtjeva s jednog uobičajenog računala. U određenim slučajevima, za provođenje napada dovoljno je čak i jedno TCP povezivanje. Pri tome, promet povezan s provođenjem napada ne ističe se u logovima u odnosu na obične korisničke zahtjeve.
Ranjivost je uzrokovana karakteristikama obrade okvira HEADERS i CONTINUATION u zahtjevima prema protokolu HTTP/2. Okviri HEADERS se koriste u HTTP/2 za prijenos HTTP zaglavlja, dok se okviri CONTINUATION koriste za podjelu slanja HTTP zaglavlja na nekoliko faza (na primjer, kada zaglavlja ne stanu u jedan okvir ili kada u početku treba poslati zaglavlja koja se mogu popuniti u trenutnoj fazi, a zatim poslati zaglavlja čije vrijednosti još nisu moguće utvrditi). Tijekom prijenosa zaglavlja u nekoliko faza, prvo se šalje okvir HEADERS bez oznake END_HEADERS, za njim slijedi nekoliko okvira CONTINUATION s dodatnim zaglavljima i popis završava okvirima CONTINUATION s oznakom END_HEADERS.
Metoda napada svodi se na slanje neprestanog toka okvira CONTINUATION bez označavanja END_HEADERS. Takva aktivnost dovodi do prijenosa na server Veliki broj zaglavlja koje server čuva u radnoj memoriji sve dok dostupna memorija za proces nije iscrpljena. Da bi stvorio visoko opterećenje na CPU-u, napadač može iskoristiti kompresiju sadržaja zaglavlja CONTINUATION koristeći format HPACK, čija analiza zahtijeva izračune. U implementacijama protokola HTTP/1.1 kako bi se zaštitili od preopterećenja servera zaglavljima, primijenjen je limit na veličinu zaglavlja i vremensko ograničenje za slanje veze. Za HTTP/2, zbog složenosti protokola, mnoge implementacije nisu predvidjele slične metode zaštite od beskonačnog slanja zaglavlja.
Najveću opasnost ranjivost predstavlja za korisnike Node.js (CVE-2024-27983), budući da ova implementacija omogućuje rušenje slanjem samo nekoliko okvira na server. Zbog stanja trke u Node.js za izazivanje iznenadnog prekida preko provjere Assert dovoljno je prekinuti veze tijekom slanja nedovršenog toka zaglavlja (do rušenja dolazi ako tijekom zatvaranja veza još nije stigao okvir CONTINUATION s oznakom END_HEADERS). Ranjivost je ispravljena u Node.js 18.20.1, 21.7.2 i 20.12.1, kao i u novijim izdanjima biblioteka llhttp i undici. U novim verzijama Node.js također je ispravljena manje opasna ranjivost (CVE-2024-27982) klase „request smuggling“, koja omogućava, manipulacijom s vrijednošću „Content Length“, ubačaj u sadržaj zahtjeva drugih korisnika koji se obrađuju u istoj niti između frontenda i backenda.
Ranjivosti vezane za obradu CONTINUATION u drugim implementacijama HTTP/2.0:
- oghttp (CVE-2024-27919) — neograničeno korištenje memorije.
- Tempesta FW (CVE-2024-2758) — zaobilaženje ograničenja.
- PHP biblioteka amphp/http, amphp/http-client i amphp/http-server (CVE-2024-2653) — neograničeno korištenje memorije, do potpunog iscrpljenja dostupne memorije.
- Go paket net/http (CVE-2023-45288) — stvaranje visokog opterećenja na CPU.
- Biblioteka nghttp2 (CVE-2024-28182) — izazivanje DoS napada.
- Apache Httpd (CVE-2024-27316) — prekomjerno korištenje memorije i stvaranje opterećenja na CPU.
- Apache Traffic Server (CVE-2024-31309) — prekomjerno korištenje resursa.
- Envoy (CVE-2024-30255) — stvaranje visokog opterećenja na CPU (za potpuno opterećenje jednog CPU jezgra potrebno je 300Mbit/s protoka).
Izvor: opennet.ru
