Zidentyfikowano lukę (CVE-2024-4323) w projekcie open source Fluent Bit, umożliwiającą zdalne uszkodzenie pamięci, które może zostać wykorzystane do spowodowania odmowy usługi, wycieku danych i potencjalnie wykonania niestandardowego kodu na serwerze. Problem o nazwie kodowej „Linguistic Lumberjack” ma poziom ważności krytyczny (9.8 na 10). Luka pojawia się od wersji 2.0.7 i została naprawiona w poprawkach 2.2.3 i 3.0.4.
Fluent Bit ma ponad 10 miliardów wdrożeń i służy do przetwarzania i gromadzenia logów i wskaźników w wielu firmach i platformach chmurowych, na przykład użytkownicy to Google Cloud, AWS, DigitalOcean, vmWare, Cisco, Microsoft, Lyft, LinkedIn, Walmart, Couchbase , Swifta i Della. W marcu z Fluent Bit pobrano 13 milionów obrazów Dockera. Według firmy Tenable, która zidentyfikowała luki, wiele usług w chmurze nie blokuje dostępu do internetowych interfejsów API w celu uzyskania wewnętrznych wskaźników, takich jak czas pracy, a Fluent Bit jest używany do przetwarzania wywołań takich interfejsów API.
Podatność wynika z błędu we wbudowanym serwerze HTTP, który pojawia się podczas przetwarzania żądań zewnętrznych poprzez wywołania API „/api/v1/traces” i „/api/v1/trace”, które umożliwiają użytkownikom uzyskanie informacji o skonfigurowanych ślady. Niezależnie od tego, czy śledzenie jest włączone, użytkownik ma możliwość dostępu do danych API, jeśli uzyska odpowiedni dostęp. Podczas analizowania przychodzących żądań typy niektórych pól wejściowych przekazywanych przez tablicę w bloku JSON zostały błędnie określone i niezależnie od oczekiwanego typu pola zostały zinterpretowane jako typu MSGPACK_OBJECT_STR. Określanie wartości niebędących ciągami znaków, takich jak parametry całkowite, w tablicy danych wejściowych spowodowało uszkodzenie pamięci w wyniku pobrania przez funkcję flb_sds_create_len() przekazanej wartości całkowitej w postaci pola o rozmiarze ciągu znaków.
Przykład żądania powodującego awarię: 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»
W trakcie eksperymentów badaczom udało się zawiesić usługę i określić pozostałą zawartość pamięci wykorzystywaną podczas przetwarzania żądań HTTP, zawierającą np. fragmenty poufnych danych, takich jak klucze dostępu. Ponieważ problem prowadzi do przepełnienia bufora w zależności od przekazanych parametrów, teoretycznie można go wykorzystać do wykonania kodu w systemie, ale badacze, którzy zidentyfikowali problem, nie przetestowali tej możliwości ze względu na brak czasu na pracę nad exploitem.
Źródło: opennet.ru
