CVE-2026-32316
WysokieCVSS 8.2Prawdopodobieństwo exploitacji (EPSS)
Podwyższone ryzykoPercentyl 56 - wyżej niż 56% wszystkich znanych CVE
Streszczenie
jq to procesor JSON wiersza poleceń. W wersjach do 1.8.1 występuje luka przepełnienia liczb całkowitych w funkcjach jvp_string_append() i jvp_string_copy_replace_bad, gdzie łączenie ciągów o łącznej długości przekraczającej 2^31 bajtów powoduje przepełnienie 32-bitowej liczby całkowitej bez znaku w obliczeniu rozmiaru bufora, co skutkuje drastycznie zaniżonym buforem sterty. Kolejne operacje kopiowania pamięci zapisują pełne dane ciągu do tego zaniżonego bufora, powodując przepełnienie bufora sterty (CWE-190 prowadzące do CWE-122). Każdy system oceniający niezaufane zapytania jq jest narażony, ponieważ atakujący może zawiesić proces lub potencjalnie uzyskać dalszą eksploatację poprzez uszkodzenie sterty, tworząc zapytania generujące ekstremalnie duże ciągi. Przyczyną jest brak sprawdzania ograniczeń rozmiaru ciągów, w przeciwieństwie do tablic i obiektów, które mają już limity rozmiaru. Problem został rozwiązany w commicie e47e56d226519635768e6aab2f38f0ab037c09e5.
Ocena ryzyka
Luka może być wykorzystana do zawieszenia procesu jq lub potencjalnego wykonania kodu poprzez uszkodzenie sterty, co stanowi ryzyko dla systemów przetwarzających niezaufane dane wejściowe. Może prowadzić do odmowy usługi lub dalszej eksploatacji.
Rekomendacja
Należy zaktualizować jq do wersji zawierającej poprawkę (commit e47e56d226519635768e6aab2f38f0ab037c09e5) lub nowszej. Zaleca się unikanie przetwarzania niezaufanych zapytań jq do czasu aktualizacji.
Inne podatności w jq
Zobacz wszystkie- CVE-2016-4074Wysokie
Funkcja jv_dump_term w jq 1.5 umożliwia zdalnym atakującym spowodowanie odmowy usługi poprzez przygotowany plik JSON, co prowadzi do zużycia stosu i awarii aplikacji. Problem został naprawiony w jq 1.6_rc1-r0.
- CVE-2024-53427Średnie
Funkcja decNumberCopy w pliku decNumber.c w jq do wersji 1.7.1 nieprawidłowo traktuje wartość NaN jako liczbową, co prowadzi do przepełnienia bufora na stosie i zapisu poza zakresem. Problem można wykorzystać na przykład przez użycie opcji --slurp z operacją odejmowania, taką jak filtr .-. przy odpowiednio spreparowanym wejściu.
- CVE-2015-8863Krytyczne
Błąd off-by-one w funkcji tokenadd w pliku jv_parse.c w jq umożliwia zdalnym atakującym spowodowanie awarii (denial of service) poprzez długi, zakodowany w JSON numer, co prowadzi do przepełnienia bufora w pamięci heap.
- CVE-2026-43895Średnie
W jq w wersji 1.8.1 i wcześniejszych ścieżki importu akceptują osadzone bajty NUL na poziomie języka jq, ale podczas wyszukiwania modułów i plików danych są one przetwarzane przez operacje na łańcuchach C. Powstaje rozbieżność między logicznym łańcuchem importu a rzeczywistą ścieżką otwieraną na dysku.
- CVE-2026-43894Średnie
W jq w wersji 1.8.1 i wcześniejszych funkcja decNumberFromString przy literale liczbowym o długości INT_MAX-1 (2147483646) cyfr powoduje przepełnienie makra D2U() w arytmetyce ze znakiem. Zawinięta wartość ujemna omija sprawdzenie rozmiaru alokacji sterty i prowadzi do zapisu około 1,4 GiB danych kontrolowanych przez atakującego poza bufor stosu.
- CVE-2026-41257Średnie
jq to procesor JSON wiersza poleceń. W wersji 1.8.1 i wcześniejszych stos danych maszyny wirtualnej bajtkodu śledzi rozmiar alokacji w typie int ze znakiem; gdy stos przekroczy ok. 1 GiB, arytmetyka podwojenia ulega przepełnieniu, a wynik trafia do realloc i memmove z offsetami kontrolowanymi przez atakującego.
- CVE-2026-41256Średnie
W jq w wersji 1.8.1 i wcześniejszych programy jq najwyższego poziomu ładowane z pliku przez opcję -f są obcinane na pierwszym osadzonym bajcie NUL. Spreparowany plik filtra może zostać skompilowany i wykonany tylko jako prefiks przed bajtem NUL, co pozostawia niespójność między prefiksem a pełnym buforem na ścieżce kompilacji.
- CVE-2026-40164Wysokie
jq przed commit 0c7d133c3c7e37c00b6d46b658a02244fdd3c784 używało MurmurHash3 z zakodowanym na stałe, publicznie widocznym ziarnem (0x432A9843) dla wszystkich operacji na tablicach mieszających obiektów JSON. Umożliwiło to atakującemu wstępne obliczenie kolizji kluczy offline i dostarczenie spreparowanego obiektu JSON (~100 KB), w którym wszystkie klucze trafiają do tego samego koszyka, powodując degradację wyszukiwania z O(1) do O(n) i wyczerpanie CPU.
- CVE-2026-33948Średnie
jq to procesor JSON wiersza poleceń. Commity przed 6374ae0bcdfe33a18eb0ae6db28493b1f34a0a5b zawierają podatność, w której parsowanie danych wejściowych CLI pozwala na obejście walidacji poprzez osadzone bajty NUL. Podczas czytania JSON z plików lub standardowego wejścia jq używa strlen() do określenia długości bufora zamiast rzeczywistej liczby bajtów z fgets(), co powoduje obcięcie danych wejściowych na pierwszym bajcie NUL i parsowanie tylko poprzedzającego prefiksu. Umożliwia to atakującemu stworzenie danych wejściowych z nieszkodliwym prefiksem JSON przed bajtem NUL, po którym następują złośliwe dane końcowe, gdzie jq waliduje tylko prefiks jako poprawny JSON, jednocześnie po cichu odrzucając sufiks. Przepływy pracy polegające na jq do walidacji niezaufanego JSON przed przekazaniem go do dalszych odbiorców są podatne na ataki różnic parserów, ponieważ ci odbiorcy mogą przetwarzać pełne dane wejściowe, w tym złośliwe końcowe bajty. Problem został załatany commitem 6374ae0bcdfe33a18eb0ae6db28493b1f34a0a5b.
- CVE-2026-39979Średnie
W bibliotece libjq (część narzędzia jq) w funkcji jv_parse_sized() występuje podatność na odczyt poza zakresem bufora. Podczas przetwarzania błędnego JSON-a w buforze niezakończonym znakiem NUL, funkcja formatująca błąd używa %s, które czyta dane aż do napotkania NUL-a, zamiast ograniczyć się do długości podanej przez wywołującego.
Oryginalny opis (angielski, źródło NVD)
jq is a command-line JSON processor. An integer overflow vulnerability exists through version 1.8.1 within the jvp_string_append() and jvp_string_copy_replace_bad functions, where concatenating strings with a combined length exceeding 2^31 bytes causes a 32-bit unsigned integer overflow in the buffer allocation size calculation, resulting in a drastically undersized heap buffer. Subsequent memory copy operations then write the full string data into this undersized buffer, causing a heap buffer overflow classified as CWE-190 (Integer Overflow) leading to CWE-122 (Heap-based Buffer Overflow). Any system evaluating untrusted jq queries is affected, as an attacker can crash the process or potentially achieve further exploitation through heap corruption by crafting queries that produce extremely large strings. The root cause is the absence of string size bounds checking, unlike arrays and objects which already have size limits. The issue has been addressed in commit e47e56d226519635768e6aab2f38f0ab037c09e5.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

