V projektu Fluent Bit byla objevena zranitelnost (CVE-2024-4323), která umožňuje vzdálené poškození paměti, což může být využito k vyvolání nedostupnosti služby, úniku dat a potenciálně k provedení vlastního kódu na serveru. Problém, který byl pojmenován „Linguistic Lumberjack“, má kritickou úroveň nebezpečí (9.8 z 10). Zranitelnost se projevuje od verze 2.0.7 a byla odstraněna v opravách 2.2.3 a 3.0.4.
Fluent Bit má více než 10 miliard nasazení a používá se pro zpracování a sběr logů a metrik v mnoha společnostech a cloudových platformách, mezi uživateli se nacházejí například Google Cloud, AWS, DigitalOcean, vmWare, Cisco, Microsoft, Lyft, LinkedIn, Walmart, Couchbase, Swift a Dell. Během března bylo staženo 13 milionů Docker obrazů s Fluent Bit. Podle společnosti Tenable, která zranitelnosti odhalila, mnoho cloudových služeb neblokuje přístup k Web API pro získání interních metrik, jako je uptime, a pro zpracování požadavků na podobná API se používá Fluent Bit.
Zranitelnost je způsobena chybou ve vestavěném HTTP serveru, která se projevuje při zpracování externích požadavků přes API volání „/api/v1/traces“ a „/api/v1/trace“, což uživatelům umožňuje získat informace o nastavených trasováních. Bez ohledu na to, zda je trasování zapnuto, má uživatel možnost přistupovat k datům API, pokud mu byl poskytnut odpovídající přístup. Během analýzy příchozích požadavků byly typy některých vstupních polí, předávaných přes pole v bloku JSON, určovány nesprávně a bez ohledu na očekávaný typ pole byly interpretovány jako typ MSGPACK_OBJECT_STR. Uvedení v poli vstupních dat hodnot neřetězcového typu, například celých čísel, vedlo k poškození paměti, protože funkce flb_sds_create_len() vyzvedávala předané celé číslo jako pole o velikosti řetězce.
Příklad požadavku, který vyvolává pád: python3 -c 'print("{\"output\":\"stdout\", \"params\": {\"format\": \"json\"},\"inputs\":[\"" + "A"*8 + "\"," + str(0xffffffff) + ", \"" + "B"*500 + "\"]}")' > test curl -v http://:2020/api/v1/traces/ -H "Content-Type: application/json" -H "Expect: " --data "@test"
Během experimentů se výzkumníkům podařilo dosáhnout havarijního ukončení služby a určit zbytkový obsah paměti, který byl použit při zpracování HTTP požadavků a obsahoval například fragmenty důvěrných dat, jako jsou přístupové klíče. Jelikož problém vede k přetečení zásobníku závislému na předávaných parametrech, teoreticky může být zneužit k provedení vlastního kódu v systému, avšak výzkumníci, kteří problém identifikovali, tuto možnost neověřili z důvodu nedostatku času na práci na exploitaci.
Zdroj: opennet.ru
