CVE-2026-110753
NieznaneStreszczenie
Wersje Text::CSV_XS od 1.46 przed 1.65 dla Perla mają use-after-free zmiennych bind_columns, gdy skip_empty_rows pomija pustą linię w getline. Przy bind_columns parser zapisuje każde pole do własnego skalara wywołującego bez pobierania referencji; gdy skip_empty_rows pomija pustą ostatnią linię, parser zwalnia bieżący skalar pola bez sprawdzenia czy jest powiązany, usuwając jedną referencję ze zmiennej aplikacji. Tryb "eof" robi to samo przy każdej pustej linii. Zmienna jest następnie zwalniana, gdy aplikacja wciąż ją referencjonuje, więc późniejszy kod używa zwolnionej pamięci i może spowodować awarię procesu.
Ocena ryzyka
Atakujący może dostarczyć dane CSV z pustymi liniami, powodując użycie zwolnionej pamięci w aplikacji, co może prowadzić do awarii procesu lub potencjalnie do wykonania dowolnego kodu. Stanowi to poważne zagrożenie dla stabilności i bezpieczeństwa usługi.
Rekomendacja
Zaktualizuj bibliotekę Text::CSV_XS do wersji 1.65 lub nowszej. Do czasu aktualizacji unikaj używania bind_columns razem z skip_empty_rows lub trybem "eof" przy przetwarzaniu niezaufanych danych.
Inne podatności w Text::CSV_XS
Zobacz wszystkie- CVE-2026-110759Nieznane
Text::CSV_XS w wersjach przed 1.65 dla Perla zwraca bajt 0xFF, którego nie ma na wejściu, dla pustego ostatniego pola, po którym następuje samotny CR w parse. Gdy wejście do parse kończy się separatorem i samotnym CR, parser traktuje koniec wejścia jako następny znak i zapisuje znacznik końca pliku w polu jako bajt 0xFF. Przy ustawionej opcji binary, parse("a,\r") zwraca pola "a" i "\xFF". Na wejściu oznaczonym jako UTF-8 ostatnie pole jest łańcuchem oznaczonym jako UTF-8 zawierającym ten samotny bajt, co jest nieprawidłowym UTF-8. To samo wejście z niepustym ostatnim polem jest odrzucane jako błąd. Plik CRLF czytany linia po linii i poddany chomp kończy się w ten sposób, gdy jego ostatnia kolumna jest pusta, więc aplikacja otrzymuje bajt, którego nie ma na jej wejściu.
- CVE-2026-110758Nieznane
Text::CSV_XS w wersjach przed 1.65 dla Perla czyta przed początkiem pola składającego się wyłącznie z białych znaków w ramach allow_whitespace w strip_trail_whitespace. W trybie allow_whitespace, strip_trail_whitespace usuwa końcowe spacje i tabulatory z każdego niecytowanego pola bez zatrzymywania się na początku pola. Dla pola składającego się tylko z białych znaków odczytuje bajt przed buforem sterty pola. Jeśli ten bajt jest również spacją lub tabulatorem, może zostać wyzerowany, a przejście może kontynuować wstecz, w zależności od tego, co umieścił tam alokator. Wiodące białe znaki są normalnie pomijane przed zapisaniem pola, ale pole składające się wyłącznie z białych znaków nadal pojawia się po wiodącym escape_char różnym od quote_char lub jako pole cytowane w getline, gdy jego linia kończy się dwoma CR.
- CVE-2026-110757Nieznane
Text::CSV_XS w wersjach przed 1.65 dla Perla pozwala na podział rekordu poprzez zapisywanie łańcuchów używanych jako liczby bez cudzysłowów w combine. combine i print nie sprawdzają, czy pole wymaga cudzysłowów, gdy jego wartość ma ustawioną flagę integer lub numeric Perla. Perl ustawia te flagi na łańcuchu użytym w operacji numerycznej, gdy parsuje się jako liczba, co pozwala na wiodące i końcowe białe znaki. Przy ustawionej opcji binary, jak domyślnie w csv, "12\n" przechodzi sprawdzenie takie jak $qty > 0 i jest zapisywane bez cudzysłowów wraz z nową linią. Wartość zweryfikowana jako liczba może zakończyć rekord wcześniej i zamienić pola po niej w osobny wiersz.
- CVE-2026-110756Nieznane
Text::CSV_XS w wersjach przed 1.65 dla Perla gubi koniec rekordu i jego zakończenie linii, gdy pole oznaczone jako UTF-8 poprzedza nieprawidłowe bajty UTF-8 w print. Gdy rekord zawiera pole oznaczone jako UTF-8, print wstrzymuje końcowe bajty, które nie są prawidłowym UTF-8, przy każdym opróżnieniu bufora, aby znak podzielony między dwa opróżnienia mógł zostać ukończony. Nic nie zapisuje wstrzymanych bajtów po ostatnim opróżnieniu rekordu. Rekord, którego ostatnie pole kończy się takim bajtem, traci go, wszelkie zamykające cudzysłowy i zakończenie linii, podczas gdy print nadal zwraca prawdę. combine nie jest dotknięty. Następny rekord jest zapisywany w tej samej linii lub, gdy ostatnie pole było cytowane, brakujący zamykający cudzysłów powoduje, że czytnik traktuje każdy następny rekord jako część tego pola.
- CVE-2026-110755Nieznane
Wersje Text::CSV_XS przed 1.65 dla Perla pozwalają na kwadratowe zużycie CPU poprzez kopiowanie nieprzetworzonej reszty danych przy każdym rekordzie wejścia z zakończeniami linii tylko CR w funkcji getline. Gdy eol nie jest ustawione, getline czyta z domyślnym separatorem linii Perla, więc wejście z zakończeniami CR trafia jako jeden fragment, a po każdym rekordzie parser kopiuje całą nieprzetworzoną resztę do nowego bufora. Czytnik z domyślnymi opcjami otrzymujący CSV z klasycznymi zakończeniami linii Mac zużywa sekundy CPU na megabajt danych.
- CVE-2026-110754Nieznane
Wersje Text::CSV_XS przed 1.65 dla Perla wyciekają przetworzone pola rekordu, który nie powiódł się podczas parsowania w getline. getline zbiera pola rekordu do nowej tablicy i zwraca referencję do niej tylko gdy parsowanie się powiedzie; gdy rekord ma błąd składni, getline zwraca undef i nigdy nie zwalnia tablicy ani pól przetworzonych przed błędem. Długo działający proces parsujący niezaufane CSV zachowuje każdy błędny rekord, więc powtarzające się błędne dane wyczerpują jego pamięć.
- CVE-2026-110752Nieznane
Wersje Text::CSV_XS przed 1.65 dla Perla pozwalają na wyczerpanie pamięci poprzez alokację jednego elementu na każdy indeks selektora RFC 7111 w fragment. fragment rozwija selektor row= lub col= do tablicy z jednym elementem na każdy wybrany indeks przed odczytaniem jakichkolwiek danych i nie ogranicza jawnej kolumny końcowej w selektorze cell= do wiersza. Sprawdzana jest tylko składnia i kolejność zakresów, więc row=1-400000000 w dwuliniowym pliku alokuje 400 milionów elementów. Aplikacja przekazująca fragment pochodzący z żądania do fragment lub csv może zostać zmuszona do wyczerpania pamięci, co kończy proces błędem Out of memory, którego eval nie może przechwycić.
- CVE-2026-7111Wysokie
Wersje Text::CSV_XS przed 1.62 dla Perla mają problem z użyciem po zwolnieniu pamięci, gdy zarejestrowane wywołania zwrotne rozszerzają stos argumentów Perla. Może to prowadzić do pomyłek typów lub uszkodzenia pamięci.
Oryginalny opis (angielski, źródło NVD)
Text::CSV_XS versions from 1.46 before 1.65 for Perl have a use-after-free of bind_columns variables when skip_empty_rows skips an empty line in getline. With bind_columns, the parser writes each field into the caller's own scalar without taking a reference to it. When skip_empty_rows skips an empty last line, the parser frees the current field scalar without checking whether it is bound, dropping one reference from the application's variable. The "eof" mode does the same on any empty line. The variable is then freed while the application still references it, so later code uses freed memory and can crash the process.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

