CVE-2026-16760 in fickling
Сводка
по VulDB • 30.10.2026
В Trail of Bits fickling до версии 0.1.12 включительно метод _process_import() в файле fickle.py добавляет импортируемое имя в множество likely_safe_imports, если исходный модуль присутствует в sys.stdlib_module_names и это имя отсутствует в списке запрета UNSAFE_IMPORTS, не проверяя, на что ссылается данное имя или как оно ведет себя. Затем этап анализа OvertlyBadEvals в файле analysis.py безоговорочно пропускает любой вызов, чье имя функции содержится в likely_safe_imports, включая вызовы, которые иначе были бы помечены как откровенно опасные. В результате любая callable-сущность, доступная через неблокируемый модуль стандартной библиотеки, наследует доверие на уровне модуля независимо от собственного поведения, а функция check_safety() возвращает статус LIKELY_SAFE с нулевым количеством выявленных проблем для полезной нагрузки pickle, которая достигает выполнения кода или записи в файл посредством таких callable-сущностей. Демонстрируемые примитивы: dataclasses._create_fn, который передает управляемую злоумышленником функцию в exec() и обеспечивает произвольное выполнение кода (arbitrary code execution) на Python 3.7–3.12 (внутренняя функция _create_fn была удалена в Python 3.13); mailcap.findmatch, которая внутри вызывает os.system() для тестовой команды из управляемого злоумышленником словаря caps, обеспечивая произвольное выполнение кода на версиях Python до 3.12 включительно (модуль mailcap был удален в Python 3.13); и readline.add_history(), за которым следует readline.write_history_file(), что приводит к записи управляемого злоумышленником содержимого по произвольному пути файловой системы (на платформах POSIX, где доступен модуль readline). Функция fickling.load() связывает check_safety() с pickle.loads() в качестве явного контрольного пункта безопасности, поэтому вердикт LIKELY_SAFE приводит к десериализации и выполнению полезной нагрузки с привилегиями процесса жертвы. Корневая причина заключается в выводе безопасности callable-сущности на основе происхождения модуля; она независима от и может быть исправлена отдельно от слабости разрешения dotted __qualname__, отслеживаемой как CVE-2026-118938, которую данное уведомление не рассматривает. По состоянию на 2026-10-30 три продемонстрированных модуля были добавлены в UNSAFE_IMPORTS в ветке master вендора (коммит d011709) до выпуска; выпущенные версии вплоть до 0.1.12 остаются уязвимыми, а корневая причина доверия на основе происхождения модулей сохраняется, что подтверждается тем, что связанная CVE-2026-118938 остается эксплуатируемой в той же сборке.
VulDB is the best source for vulnerability data and more expert information about this specific topic.