W otwartym projekcie Fluent Bit zidentyfikowano lukę (CVE-2024-4323), która pozwala na zdalne spowodowanie uszkodzenia pamięci, co można wykorzystać do wywołania awarii, wycieku danych oraz potencjalnego wykonania własnego kodu na serwerze. Problem, któremu nadano kodową nazwę „Linguistic Lumberjack”, ma krytyczny poziom zagrożenia (9,8 na 10). Luka występuje od wersji 2.0.7 i została usunięta w aktualizacjach 2.2.3 oraz 3.0.4.
Fluent Bit ma ponad 10 miliardów wdrożeń i jest wykorzystywany do przetwarzania oraz zbierania logów i metryk w wielu firmach i na platformach chmurowych. Wśród użytkowników znajdują się Google Cloud, AWS, DigitalOcean, vmWare, Cisco, Microsoft, Lyft, LinkedIn, Walmart, Couchbase, Swift i Dell. W marcu pobrano 13 milionów obrazów Dockera z Fluent Bit. Zgodnie z danymi firmy Tenable, która wykryła te luki, wiele usług chmurowych nie blokuje dostępu do Web API w celu uzyskania informacji o wewnętrznych metrykach, takich jak uptime, a Fluent Bit jest wykorzystywany do obsługi takich API.
Luka ta jest spowodowana błędem we wbudowanym serwerze HTTP, który ujawnia się podczas przetwarzania zewnętrznych żądań przez wywołania API „/api/v1/traces” i „/api/v1/trace”, co pozwala użytkownikom uzyskać dostęp do informacji o skonfigurowanych trasach. Niezależnie od tego, czy śledzenie jest włączone, użytkownik ma możliwość uzyskania dostępu do danych API, jeśli przyznano mu odpowiednie uprawnienia. Podczas analizy przychodzących żądań typy niektórych pól wejściowych, przekazywanych w tablicy w bloku JSON, były błędnie określane, przez co niezależnie od oczekiwanego typu pola były interpretowane jako typ MSGPACK_OBJECT_STR. Wskazanie w tablicy wartości niena tekstowych, na przykład parametrów całkowitych, prowadziło do uszkodzenia pamięci, ponieważ funkcja flb_sds_create_len() odczytywała przekazaną wartość całkowitą jako pole o długości tekstu.
Przykład żądania, które powoduje 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ę wymusić awaryjne zakończenie usługi oraz określić pozostałą zawartość pamięci używanej do przetwarzania zapytań HTTP. Zawiera ona na przykład fragmenty poufnych danych, takich jak klucze dostępu. Ponieważ problem prowadzi do zależnego od przekazywanych parametrów przepełnienia bufora, teoretycznie można go wykorzystać do wykonania własnego kodu w systemie, jednak badacze, którzy zidentyfikowali problem, nie sprawdzili tej możliwości z powodu braku czasu na pracę nad exploitem.
Źródło: opennet.ru
