Zranitelnosti v projektu Pingora, které útočníkům umožňují zachycovat požadavky třetích stran

Společnost Cloudflare oznámila opravy tří zranitelností ve svém frameworku Pingora, z nichž dvě byly hodnoceny jako kritické (9.3 z 10). Pingora, framework napsaný v Rustu, je navržen pro vývoj bezpečných a vysoce výkonných síťových služeb. Proxy server vytvořený pomocí Pingory se používá v síti pro doručování obsahu Cloudflare a zpracovává přes 40 milionů požadavků za sekundu. Zranitelnosti jsou opraveny ve verzi Pingora 0.8.0.

Dvě nejnebezpečnější zranitelnosti umožňují útoky HTTP Request Smuggling, které uživatelům umožňují obejít systémy řízení přístupu a vložit škodlivý JavaScript do obsahu požadavků jiných uživatelů zpracovávaných ve stejném toku mezi frontendem a backendem (například vložit škodlivý kód JavaScript do relace jiného uživatele s webem). Problémy objevil účastník programu Bug Bounty, který nabízí odměny za objevení zranitelností.

V backendu založeném na reverzní proxy jsou požadavky klientů přijímány dalším uzlem, který navazuje dlouhodobé TCP spojení s backendem, jenž se stará o samotné zpracování požadavků. Toto sdílené připojení obvykle přenáší požadavky od různých uživatelů, každý následující v řetězci, oddělený protokolem HTTP. Útoky typu HTTP Request Smuggling vznikají z různých interpretací hlaviček HTTP a specifikací protokolu HTTP na frontendech a backendech, například když frontend používá hlavičku HTTP „Content-Length“ k určení velikosti požadavku, zatímco backend používá „Transfer-Encoding: chunked“.

První zranitelnost, CVE-2026-2835, se nachází v kódu pro analýzu požadavků HTTP/1.0 a je způsobena nesprávným zpracováním záhlaví „Transfer-Encoding“ s více hodnotami a také použitím ukončení spojení jako konce požadavku (close-delimited). Pingora kontrolovala pouze možnost „Transfer-Encoding: chunked“ a tuto záhlaví ignorovala, pokud obsahovala více hodnot. V této situaci Pingora ignorovala velikost v záhlaví „Content-Length“ a za tělo požadavku považovala všechna data přijatá před ukončením spojení.

Zadáním více hodnot v hlavičce „Transfer-Encoding“ by útočník mohl vytvořit podmínky, ve kterých by byl požadavek přeposlán na backend, jehož skutečná velikost neodpovídala velikosti chunked chainu vypočítané na základě hlavičky „Transfer-Encoding“. Pingora přeposlala všechna přijatá data jako jeden požadavek a backend, například Node.js, vypočítal požadavek na základě „Transfer-Encoding: chunked“ a zbývající část zpracoval jako začátek dalšího požadavku. GET / HTTP/1.0 Hostitel: example.com Připojení: keep-alive Transfer-Encoding: identity, chunked Content-Length: 29 0 GET /admin HTTP/1.1 X:

 Zranitelnosti v projektu Pingora, které útočníkům umožňují zachycovat požadavky třetích stran

Druhá zranitelnost, CVE-2026-2833, je způsobena nesprávným zpracováním HTTP hlavičky „Upgrade“ v požadavcích HTTP/1.1. Pokud byla v požadavku přítomna hlavička „Upgrade“, proxy okamžitě přeposlala zbývající data požadavku následující po hlavičce „Upgrade“ backendu, aniž by čekala na odpověď backendu s kódem 101 (Switching Protocols). To narušilo synchronizaci toku mezi proxy a backendem, což způsobilo, že backend považoval data odeslaná po hlavičce „Upgrade“ za samostatný požadavek a odeslal výsledek tohoto požadavku v reakci na následný požadavek od jiného uživatele. GET / HTTP/1.1 Host: example.com Upgrade: foo GET /admin HTTP/1.1 Host: example.com

 Zranitelnosti v projektu Pingora, které útočníkům umožňují zachycovat požadavky třetích stran
 Zranitelnosti v projektu Pingora, které útočníkům umožňují zachycovat požadavky třetích stran

Problémy nastávají, když se Pingora používá jako ingress proxy, která přeposílá uživatelské požadavky na backendy pomocí protokolů HTTP/1.0 nebo HTTP/1.1. Konfigurace Pingory použitá v síti pro doručování obsahu Cloudflare zabránila zneužití těchto zranitelností, protože Pingora se nepoužívá jako ingress proxy v CDN, přeposílá požadavky pouze pomocí protokolu HTTP/1.1, blokuje požadavky s nesprávnými hodnotami Content-Length, přeposílá pouze jednu hodnotu záhlaví „Transfer-Encoding: chunked“ a do požadavků s záhlavím „Upgrade:“ vkládá další záhlaví „Connection: close“, čímž zabraňuje přenosu dalších požadavků na stejném připojení.

Třetí zranitelnost, CVE-2026-2836 (závažnost 8.4 z 10), způsobuje otravu mezipaměti v důsledku generování klíče mezipaměti (CacheKey) založeného výhradně na cestě URI, přičemž se ignoruje obsah hlavičky „Host“. Tato chyba vede ke generování identických klíčů mezipaměti pro identické cesty HTTP k různým hostitelům. Tuto zranitelnost lze zneužít k falšování obsahu mezipaměti při použití mezipaměti na více hostitelích. Ukládání do mezipaměti je experimentální funkce v Pingora a nedoporučuje se pro produkční nasazení.

Zdroj: opennet.ru

Kupte si spolehlivý hosting pro stránky s DDoS ochranou, VPS VDS servery 🔥 Kupte si spolehlivý webhosting s ochranou DDoS, VPS VDS servery | ProHoster