CVE-2026-110758
NieznaneStreszczenie
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.
Ocena ryzyka
Może wystąpić odczyt poza granicami bufora, co potencjalnie prowadzi do uszkodzenia pamięci, awarii aplikacji lub wykonania dowolnego kodu. Podatność może być wykorzystana przez dostarczenie specjalnie spreparowanych danych CSV.
Rekomendacja
Zaktualizuj Text::CSV_XS do wersji 1.65 lub nowszej, aby naprawić błąd odczytu poza buforem. Do czasu aktualizacji unikaj używania opcji allow_whitespace z danymi wejściowymi zawierającymi pola składające się wyłącznie z białych znaków.
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-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-110753Nieznane
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.
- 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 before 1.65 for Perl read before the start of an all-blank field under allow_whitespace in strip_trail_whitespace. Under allow_whitespace, strip_trail_whitespace removes trailing spaces and tabs from each unquoted field without stopping at the start of the field. For a field of only blanks it reads the byte before the field's heap buffer. If that byte is also a space or tab, it may be zeroed and the walk continue backwards, depending on what the allocator placed there. Leading blanks are normally skipped before a field is stored, but an all-blank field still arrives after a leading escape_char that differs from quote_char, or as a quoted field in getline when its line ends in two CRs.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

