In het open project Fluent Bit is een kwetsbaarheid (CVE-2024-4323) ontdekt die op afstand kan leiden tot geheugenbeschadiging, wat kan worden aangewend voor een denial-of-service aanval, datalekken en mogelijk de uitvoering van kwaadaardige code op de server. Het probleem, dat de codenaam "Linguistic Lumberjack" heeft gekregen, heeft een kritieke ernst (9.8 van 10). De kwetsbaarheid doet zich voor vanaf versie 2.0.7 en is verholpen in de correcties 2.2.3 en 3.0.4.
Fluent Bit telt meer dan 10 miljard implementaties en wordt gebruikt voor het verwerken en verzamelen van logboeken en statistieken in veel bedrijven en cloudplatforms. Gebruikers zijn onder andere Google Cloud, AWS, DigitalOcean, vmWare, Cisco, Microsoft, Lyft, LinkedIn, Walmart, Couchbase, Swift en Dell. In maart werden er 13 miljoen Docker-images met Fluent Bit gedownload. Volgens Tenable, het bedrijf dat de kwetsbaarheden heeft ontdekt, blokkeren veel cloudservices de toegang tot Web API's niet om interne statistieken zoals uptime te verkrijgen, en Fluent Bit wordt gebruikt om verzoeken aan dergelijke API's te verwerken.
De kwetsbaarheid wordt veroorzaakt door een fout in de ingebouwde HTTP-server die zich manifesteert bij het verwerken van externe verzoeken via API-aanroepen "/api/v1/traces" en "/api/v1/trace", waardoor gebruikers informatie kunnen verkrijgen over de geconfigureerde traces. Ongeacht de inschakeling van tracing kan de gebruiker toegang krijgen tot de API-gegevens, mits hij de juiste toegang heeft. Tijdens de parsing van de binnenkomende verzoeken werden de types van sommige invoervelden, die werden doorgegeven via een array in het JSON-blok, onjuist vastgesteld en werden ongeacht het verwachte veldtype geïnterpreteerd als MSGPACK_OBJECT_STR. Het specificeren van niet-string waarden in de invoerarray, zoals gehele getallen, leidde tot geheugenbeschadiging omdat de functie flb_sds_create_len() de doorgegeven gehele waarde behandelde als een veld met een stringgrootte.
Voorbeeld van een verzoek dat een crash veroorzaakt: 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»
Tijdens experimenten slaagden de onderzoekers erin het serviceproces te doen crashen en het resterende geheugen te analyseren dat werd gebruikt bij de verwerking van HTTP-verzoeken. Dit geheugen bevatte bijvoorbeeld fragmenten van vertrouwelijke gegevens, zoals toegangsrechten. Aangezien het probleem leidt tot een buffer overflow afhankelijk van de doorgegeven parameters, kan het theoretisch worden misbruikt om eigen code in het systeem uit te voeren. De onderzoekers die het probleem ontdekten, hebben deze mogelijkheid echter niet getest vanwege tijdgebrek voor het ontwikkelen van een exploit.
Bron: opennet.ru
