Új HTTP/2 sebezhetőség teszi ki a webszervereket DoS-támadásoknak
Egy új kutatás szerint a HTTP/2 protokoll CONTINUATION keretét ki lehet használni szolgáltatásmegtagadási (denial-of-service, DoS) támadások végrehajtására.
A technika a HTTP/2 CONTINUATION Flood kódnevet kapta Bartek Nowotarski biztonsági kutatótól, aki 2024. január 25-én jelentette a problémát a CERT Koordinációs Központnak (CERT/CC).
"Sok HTTP/2 implementáció nem korlátozza vagy szanálja megfelelően az egy folyamban küldött CONTINUATION keretek mennyiségét" - írta a CERT/CC 2024. április 3-án kiadott tanácsadásában.
"Egy támadó, aki csomagokat tud küldeni egy célkiszolgálónak, olyan CONTINUATION-keretekből álló folyamot küldhet, amelyek nem kerülnek hozzá a memóriában lévő fejléclistához, de a kiszolgáló mégis feldolgozza és dekódolja őket, vagy hozzácsatolja a fejléclistához, ami a memórián kívüli (out of memory, OOM) összeomlást okoz."
A HTTP/1-hez hasonlóan a HTTP/2 is fejlécmezőket használ a kéréseken és válaszokon belül. Ezek a fejlécmezők fejléclistákat alkothatnak, amelyek pedig sorba rendeződnek és fejlécblokkokra bonthatók. A fejlécblokkokat ezután blokktöredékekre osztják, és HEADERS (fejlécek) vagy úgynevezett CONTINUATION (folytatás) kereteken belül továbbítják.
"A CONTINUATION-keret (type=0x9) a fejlécblokk töredékek sorozatának folytatására szolgál" - olvasható az RFC 7540 dokumentációjában."Bármennyi CONTINUATION-keret küldhető, amennyiben az előző keret ugyanabban a folyamban van, és HEADERS, PUSH_PROMISE vagy CONTINUATION-keret, az END_HEADERS jelző beállítása nélkül."
A fejléceket tartalmazó utolsó keretnek END_HEADERS jelzője lesz beállítva, ami jelzi a távoli végpontnak, hogy ez a fejlécblokk vége.
Nowotarski szerint a CONTINUATION Flood több HTTP/2 protokoll implementáción belüli sebezhetőségi osztály, amely a 2023 októberében napvilágot látott Rapid Reset támadáshoz képest komolyabb fenyegetést jelent.
"Egyetlen gép (és bizonyos esetekben csupán egyetlen TCP-kapcsolat vagy egy néhány keret) képes megzavarni a szerver elérhetőségét, aminek következményei a szerver összeomlásától a jelentős teljesítménycsökkenésig terjednek" - mondta a kutató. "" Említésre méltó, hogy a támadást jelentő kérések nem láthatók a HTTP-hozzáférési naplókban".
A sebezhetőség lényege a HEADERS és a többszörös CONTINUATION-keretek helytelen kezelése, ami utat nyit egy DoS-állapothoz.
Más szóval, egy támadó új HTTP/2 folyamot indíthat egy sebezhető implementációt használó célkiszolgáló ellen, és küldhet HEADERS és CONTINUATION-kereteket END_HEADERS jelző nélkül, ezzel véget nem érő fejlécek folyamát hozva létre, amelyet a HTTP/2-kiszolgálónak elemeznie és a memóriában tárolnia is kell.
Bár a pontos eredmény az implementációtól függően változik, a hatások a HTTP/2-keretek elküldése utáni azonnali összeomlástól és a memórián kívüli összeomlástól a CPU kimerüléséig terjednek, ami befolyásolja a szerverek elérhetőségét.
"Az RFC 9113 [...] számos biztonsági problémát említ, amelyek akkor merülhetnek fel, ha a CONTINUATION-kereteket nem megfelelően kezelik" - mondta Nowotarski.
"Ugyanakkor nem említi azt a konkrét esetet, amikor a CONTINUATION-kereteket a végső END_HEADERS jelző nélkül küldik, ami kihatással lehet az érintett szerverekre."
A probléma számos projektet érint, például az amphp/http(CVE-2024-2653), Apache HTTP szerver(CVE-2024-27316), Apache Tomcat (CVE-2024-24549), Apache Traffic szerver (CVE-2024-31309), Envoy proxy(CVE-2024-27919 és CVE-2024-30255), Golang (CVE-2023-45288), h2 Rust crate, nghttp2 (CVE-2024-28182), Node.js (CVE-2024-27983) és Tempesta FW (CVE-2024-2758).
A felhasználóknak ajánlott az érintett szoftverek frissítése a legújabb verzióra a potenciális veszélyek csökkentése érdekében. Javítás hiányában tanácsos megfontolni a HTTP/2 ideiglenes letiltását a kiszolgálón.