В Python-библиотеке PLY (Python Lex-Yacc) обнаружили критическую уязвимость, которая может приводить к выполнению произвольного кода. Ей присвоили CVE-2025-56005 и оценку 9,8 по CVSS.
Проблема связана с параметром picklefile в функции yacc(). Этот параметр принимает файл .pkl и загружает его через pickle.load() без проверки. А pickle по своей природе небезопасен для недоверенных данных: внутри такого файла можно спрятать логику, которая выполнится при десериализации.
Отдельный неприятный момент, который отмечают в описании CVE: параметр не упоминается в официальной документации и в репозитории, но присутствует в версии на PyPI. Это делает риск менее заметным для тех, кто воспринимает PLY как старую, стабильную зависимость, которая просто работает.
Это не история про то, что любой проект с PLY автоматически уязвим. Риск появляется, когда приложение реально использует yacc(picklefile=...) и при этом путь к .pkl может контролироваться извне, например через загружаемый файл, конфиг, параметр окружения или общую директорию, куда пишут разные процессы. В таком случае атакующему достаточно подсунуть вредоносный pickle-файл.
Поскольку в публичных базах пока не указаны исправленные версии, рассчитывать на простое обновление вслепую не стоит. Практичный минимум выглядит так:
- Проверьте код и CI/CD на использование picklefile в
yacc(). Если это есть, уберите параметр или жестко зафиксируйте путь на файл, который не может быть изменен извне. - Не загружайте таблицы парсинга из пользовательских или внешне доступных мест. Любой
.pklнужно считать потенциально опасным. - Если вы поддерживаете инструменты, которые принимают грамматики или входные файлы от пользователей, убедитесь, что они не могут повлиять на загрузку pickle-таблиц.