CVE-2026-110757
NieznaneStreszczenie
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.
Ocena ryzyka
Może dojść do wstrzyknięcia nowych wierszy do pliku CSV, co prowadzi do uszkodzenia danych lub wykonania kodu po stronie odbiorcy. Może to naruszyć integralność danych i bezpieczeństwo przetwarzania.
Rekomendacja
Zaktualizuj Text::CSV_XS do wersji 1.65 lub nowszej, aby naprawić błąd braku cudzysłowów dla wartości numerycznych. Do czasu aktualizacji unikaj przekazywania wartości numerycznych z białymi znakami do combine.
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-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 allow record splitting by writing strings used as numbers without quotes in combine. combine and print do not check whether a field needs quotes when its value has Perl's integer or numeric flag set. Perl sets these flags on a string used in a numeric operation when it parses as a number, which allows leading and trailing whitespace. With binary set, as csv does by default, "12\n" passes a check such as $qty > 0 and is then written unquoted with its newline. A value validated as a number can end the record early and turn the fields after it into a separate row.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

