В популярном языке программирования Python обнаружена уязвимость средней степени опасности, которая затрагивает только операционную систему Windows. Проблема получила идентификатор CVE-2026-3087 (общий реестр уязвимостей и воздействий). Она связана с некорректной проверкой абсолютных путей в ZIP-архивах при использовании стандартной функции "shutil.unpack_archive()".
Уязвимость CVE-2026-3087
Эта функция предназначена для распаковки архивов. Если в ZIP-файле указан абсолютный путь с буквой диска, например "C:\...", то на Windows содержимое будет извлечено за пределы заданной целевой папки. На других операционных системах такого не происходит. Разработчики из Python Software Foundation уже присвоили проблеме статус "affected" (затронуты) и рекомендуют срочно установить последний патч.
По шкале CVSS 4.0 (общая система оценки уязвимостей) уровень опасности оценён в 6,0 баллов - это средний уровень. Однако не стоит недооценивать риск. Вектор атаки имеет сетевой доступ и низкую сложность (AV:N/AC:L/AT:P/PR:L/UI:N). Злоумышленнику достаточно отправить жертве специально сформированный ZIP-архив, и при его распаковке вредоносный код или данные могут попасть в системные папки, например в автозагрузку или каталог временных файлов. Уязвимость затрагивает все версии CPython (эталонная реализация Python), начиная с тех, где появилась функция "shutil.unpack_archive()", без последнего обновления безопасности.
Функция "shutil.unpack_archive()" широко используется в скриптах для автоматизации работы с архивами. Она входит в стандартную библиотеку, поэтому её применяют и в коммерческих продуктах, и в opensource-проектах. Системные администраторы, разработчики, а также обычные пользователи, запускающие скрипты на Python под Windows, могут столкнуться с этой уязвимостью. Если злоумышленник сможет загрузить вредоносный архив на сервер или отправить по почте, то при его распаковке через стандартную функцию произойдёт запись файлов в произвольное место на диске. Это может повлечь за собой установку программ-вымогателей, кражу данных или полный контроль над системой.
Технически уязвимость относится к классу CWE-22 - обход пути (path traversal). Это означает, что атакующий использует абсолютные пути (с указанием диска) внутри ZIP-архива, чтобы выйти за границы целевой папки. На Windows путь "C:\..." трактуется как абсолютный, и функция не проверяет, является ли он относительным. На Linux или macOS подобная запись не имеет смысла, так как корневой каталог обозначается "/". Это объясняет, почему проблема проявляется только на платформе Microsoft.
Проведём аналогию: если вы распаковываете архив в папку "D:\temp", а внутри архива есть запись "C:\Windows\system32\malware.exe", то на Windows файл будет записан именно в системную папку, а не в "D:\temp". Для сравнения: на Linux аналогичная конструкция с абсолютным путём "/etc/passwd" привела бы к извлечению в корень, но в стандартной реализации Python на Linux такие пути обрабатываются иначе - они отбрасываются или корректируются. Разница в поведении и стала причиной уязвимости.
Последствия могут быть серьёзными. Даже при среднем балле CVSS атака не требует высокой квалификации. Злоумышленник может распространять архивы через фишинговые письма, загрузки на сайты или через открытые репозитории. Если жертва использует скрипт для автоматической распаковки загруженных пользователями файлов, то атакующий получит возможность записи в любую директорию. В корпоративной среде это чревато компрометацией Active Directory, установкой бэкдоров или утечкой конфиденциальных данных.
Разработчики Python выпустили исправление, которое добавляет проверку абсолютных путей на Windows. В обновлённой версии функция "shutil.unpack_archive()" будет либо удалять букву диска и преобразовывать путь в относительный, либо отклонять такие архивы. Пользователям рекомендуется обновиться до последней стабильной версии Python, содержащей патч. Если обновление невозможно, временной мерой может стать отказ от использования данной функции для архивов, полученных из ненадёжных источников. Вместо неё можно применять ручную проверку записей архива с помощью модуля "zipfile" и фильтрацию опасных путей.
Специалистам по информационной безопасности стоит обратить внимание, что уязвимость демонстрирует давнюю проблему кросс-платформенных языков: различия в обработке путей между операционными системами часто приводят к неожиданным брешам. Аналогичные недостатки ранее находили в библиотеках для работы с архивами на Java и .NET. Важно внедрять практики безопасного программирования, такие как строгая проверка путей перед распаковкой и использование sandbox-режимов.
В итоге, хотя уязвимость CVE-2026-3087 не является критической, её легко эксплуатировать и она затрагивает широкий круг пользователей Windows. Каждому, кто использует Python для обработки архивов, следует как можно быстрее установить обновление. Атаки на основе этого недостатка уже могут происходить в реальных условиях, поэтому отсрочка с патчем может стоить дорого.
Ссылки