Новости
node-tar: gzip-бомба ломает распаковку архивов
Критическая уязвимость CVE-2026-59873 в node-tar: крошечный gzip-архив при распаковке исчерпывает диск и процессор сервера.
12 августа 2026 года разработчик Томас Воутерс опубликовал security-релизы Python трёх активных веток: 3.12.14, 3.11.16 и 3.10.21. Все три версии перешли в режим только-для-безопасности и выходят без расписания — только когда накапливается критический объём патчей. Этот пакет — один из крупнейших за год: закрыто более двадцати уязвимостей, в том числе три обхода фильтра безопасности tarfile, path traversal в ZIP-архивах на Windows и серия DoS-атак через XML, CSV и HTML.
Коротко: Python 3.12.14, 3.11.16 и 3.10.21 — обязательное обновление для тех, кто распаковывает архивы из внешних источников. tarfile получил три патча против симлинков вне директории назначения, shutil.unpack_archive() теперь пропускает пути с Windows-префиксом диска в ZIP-архивах. XML и CSV закрыли квадратичные DoS-векторы.

12 августа 2026 года на официальном блоге Python появилась запись с характерным заголовком — «Python Releases Eclipse Your Security»: релиз совпал с полным солнечным затмением, видимым над Европой. Шутка в стороне, обновление закрывает реальные проблемы безопасности, которые касаются работы с архивами и структурированными данными.
Вышли три версии:
Все три — исходники без исполняемых файлов (source-only releases). Бинарные сборки появятся у сторонних дистрибуторов (python.org, пакетные менеджеры ОС) в ближайшие дни. Если вы используете Python через дистрибутив Linux или Homebrew — следите за обновлением пакета в своём репозитории.
Главная тема патча — модуль tarfile. В Python 3.12 он получил механизм «фильтров»: при распаковке можно задать политику data, tar или fully_trusted, которая ограничивает потенциально опасные пути и символические ссылки (symlinks). Фильтр data — наиболее строгий, именно его рекомендуют для распаковки ненадёжных архивов.
Проблема в том, что в этом фильтре обнаружили три независимых обхода, позволяющих создать symlink, указывающий за пределы директории назначения:
tarfile.TarFile.extract() фильтр не применялся к цели символической ссылки — только к самой ссылке. Злоумышленник мог создать архив, где symlink ведёт в произвольное место файловой системы./). Это позволяло обойти проверку «находится ли путь внутри назначения», добавив лишний слэш.Уязвимость опасна для сервисов, которые принимают .tar или .tar.gz файлы от пользователей: платформы загрузки данных, CI/CD-системы, пакетные менеджеры. Если распаковываете только собственные доверенные архивы — риск минимален, но обновиться всё равно рекомендуется. Как устроен формат архива, который здесь разбирается — в гайде чем открыть TAR.GZ.
Второй важный блок — функция shutil.unpack_archive() при работе с ZIP-архивами на Windows. Проблема связана с особенностью Windows-путей: они могут начинаться с буквы диска, например C:\ или D:\.
ZIP-архив, в котором путь файла начинается с подобного префикса (C:\secret\passwd), при распаковке на Windows мог записать файл вне директории назначения — прямо в указанный путь на любом диске. Это классический path traversal, аналогичный тому, что много лет закрывают в Java, Go и других языках.
В версиях 3.12.14/3.11.16/3.10.21 такие пути теперь молча пропускаются при распаковке: файл с Windows-абсолютным путём просто игнорируется. Поведение изменилось без предупреждения, что важно учитывать при тестировании кода, который обрабатывает архивы в автоматическом режиме.
Значительная часть патча закрывает векторы отказа в обслуживании через сложность разбора — когда специально составленный файл заставляет парсер тратить экспоненциально много времени или памяти.
csv.Sniffer.sniff() — встроенный определитель диалекта CSV — содержал квадратичную и экспоненциальную сложность при разборе строк с большим количеством кавычек. Злоумышленник, отправив файл с заголовком, перегруженным кавычками, мог надолго «подвесить» сервис. Теперь алгоритм определения диалекта ограничивает перебор.
xml.parsers.expat получил два отдельных исправления:
ElementDeclHandler() была неограниченная рекурсия в C-коде, вызывавшая падение при разборе специально созданного XML-документа с глубокой вложенностью деклараций элементов.html.parser закрыл медленный разбор длинных незавершённых конструкций (например, незакрытые теги с гигантским атрибутом). Аналогичные квадратичные сложности устранены в configparser (пробельные символы), xml.etree.ElementTree (XPath-предикаты с большим числом дочерних элементов) и tomllib (чрезмерно длинные составные ключи).
DoS-векторы в парсерах особенно опасны в веб-сервисах — там одного запроса с «ядовитым» CSV или XML достаточно, чтобы загрузить процессор на минуты. О принципах безопасной работы с файлами из ненадёжных источников — в разделе безопасность файлов Loadfile.
Три стандартных модуля сжатия получили патчи против ошибок работы с памятью при прерывании декомпрессии.
В модулях bz2, lzma и внутреннем zlib-декомпрессоре существовал сценарий «висящего указателя» (dangling pointer): если во время декомпрессии возникала ошибка нехватки памяти (MemoryError), внутренний буфер освобождался, но указатель на него сохранялся. Повторный вызов decompress() обращался к уже освобождённой памяти — это неопределённое поведение, которое может привести к краху или, в теории, к чтению посторонних данных.
Отдельная проблема была в bz2.BZ2Decompressor: повторное использование объекта после ошибки libbz2 могло вызвать переполнение стека. Теперь объект переходит в неиспользуемое состояние после такого сбоя.
Для пользователей на ARM-процессорах с pointer authentication (современные чипы Apple Silicon, Cortex-A76+) Python 3.12.14 и 3.11.16 добавляют инструкции защиты ветвлений для JIT-кода профилировщика -X perf_jit.
Патч актуален прежде всего для разработчиков и DevOps-команд, которые:
.tar, .tar.gz или .zip файлы от пользователей;bz2/lzma/zlib в цикле с обработкой исключений;Для рядовых пользователей, запускающих скрипты на личном компьютере с доверенными файлами, непосредственной угрозы нет — но обновление всё равно рекомендуется, так как многие системные утилиты используют Python внутри.
python3 --version.Смежные темы на Loadfile: ранее мы разбирали похожую уязвимость в node-tar (CVE-2026-59873) — там тоже речь шла о распаковке tar-архивов без ограничений. Принцип один: разбор чужих файловых архивов требует явных лимитов на объём и структуру.
Данные приведены на 21 августа 2026 по материалам официального блога Python и первичных источников. Номера версий и описания уязвимостей соответствуют официальным release notes.