Усиление безопасности OpenClaw и ответ на уязвимость 2026: разбор CVE-2026-25253, firewall, развертывание с минимальными привилегиями

≈ 13 мин чтения · MACCOME

В январе 2026 года OpenClaw раскрыл CVE-2026-25253 — уязвимость удалённого выполнения кода, из-за которой более 135 000 публично доступных экземпляров оказались под угрозой из-за слабых настроек по умолчанию. Если ваше развёртывание OpenClaw (npm/Docker/VPS) ещё не прошло аудит базовой безопасности, наступил момент его усиления. Данная статья рассматривает инцидент, три чек-листа для конкретных форм развёртывания (Docker, systemd/VPS, npm global) и пятиэтапный план реагирования (обнаружение → бэкап → апарграйд → верификация → 72-часовой мониторинг), чтобы превратить ваш агент из «работает» в «прошёл боевое крещение».

CVE-2026-25253: почему 135 000 инстансов были exposureed

В середине января 2026 года команда безопасности OpenClaw опубликовала CVE-2026-25253: если Gateway работает с настройками по умолчанию (слушает на 0.0.0.0 без аутентификации), злоумышленник может достичь RCE через специально сконструированный WebSocket handshake. Сканирование Shodan показало более 135 000 инстансов, доступных без аутентификации — от частных разработчиков и маленьких команд до корпоративных туннелей, неправильно сконфигурированных.

Корень проблемы — не баг в коде, а чрезмерно либеральные дефолтные настройки:

  • Адрес bind Gateway по умолчанию — 0.0.0.0; без фаервола или reverse-proxy auth управленческий порт открыт всему интернету.
  • Ранние инсталляторы не требовали наличия OPENCLAW_GATEWAY_TOKEN или TLS, оставляя каналы в открытом виде уязвимыми для MITM.
  • Многие пользователи запускали openclaw onboard на VPS и считали развёртывание завершённым, пропуская последующее ужесточение gateway.bind и настройку ufw.

Инцидент привёл к изменениям, начиная с v2026.2.0: bind по умолчанию изменён на 127.0.0.1, инсталлятор теперь содержит обязательные проверки безопасности. Однако существующие инстансы всё ещё требуют ручного исправления — эта статья предоставляет исполняемый чек-лист.

Три фундаментальных принципа безопасности (обязательные)

Независимо от типа развёртывания, все три условия должны выполняться одновременно:

  1. Не экспонировать Gateway напрямую в публичный интернет: bind только на loopback (127.0.0.1) или приватный IP. Доступ должен обяза&# spring;тельно проходить через reverse proxy (Nginx/Caddy) или туннель (Cloudflare Tunnel) с аутентификацией на edge.
  2. Обязательная сильная аутентификация: каждый запрос к Gateway должен содержать валидный OPENCLAW_GATEWAY_TOKEN (≥32 символов, ротация каждые 90 дней).
  3. Минимальная атакующая поверхность: хост открывает только необходимые порты (SSH 22, HTTPS 443). Внутренний порт Gateway (по умолчанию 18789) никогда не должен слушать на 0.0.0.0.

Чек-лист безопасности для Docker-развёртывания

Если вы запускаете OpenClaw через Docker / Docker Compose, проверьте каждый пункт:

ПунктБезопасная конфигурацияОпасный примерКоманда / шаг исправления
network_modeCustom bridge или host с ограниченным port mappingports: "0.0.0.0:18789:18789"Изменить на 127.0.0.1:18789:18789 или route только через reverse proxy
--read-onlyRoot-fs контейнера read-only; тома явно указаныread_only: true отсутствуетДобавить в Compose read_only: true; убедиться, что ./openclaw-data:/home/node/.openclaw смонтирован
User и права томовЗапуск от non-root (node:1000); UID/GID томов хоста совпадаютКонтейнер root, хост-директория 755 слишком широкаuser: "1000:1000"; предварительно chown 1000:1000 для директорий томов
Restart policyunless-stopped или on-failure:3Без рестарта (контейнер выходит после краша)Обеспечить self-healing; комбинировать с healthcheck
OPENCLAW_GATEWAY_TOKENИнъекция через env; длина ≥32; совпадает с CLI-конфигомПустой токен или хардкод в образеenvironment: OPENCLAW_GATEWAY_TOKEN=${TOKEN}; также задать на хосте openclaw config set gateway.token $TOKEN

После изменений проверьте командой docker exec <container> netstat -tlnp, чтобы Gateway слушал только на 127.0.0.1:18789 (или порту reverse proxy).

Чек-лист усиления systemd / VPS (Ubuntu 24.04)

При запуске OpenClaw как systemd-сервиса на VPS необходимо применить следующие правила фаервола и контроли на уровне ОС:

4.1 Правила фаервола (ufw)

  1. По умолчанию запретить incoming, разрешить только необходимые порты:
bash
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp      # SSH
sudo ufw allow 443/tcp     # HTTPS (если reverse proxy)
sudo ufw allow 80/tcp      # HTTP (опционально, редирект на HTTPS)
sudo ufw enable
  1. Убедиться, что порт Gateway (18789) не открыт публично:
bash
sudo ufw status numbered
# Правило allow для 18789/tcp не должно отображаться

4.2 О fortificación sshd

  • Отключить аутентификацию по паролю, разрешить только ключи: PasswordAuthentication no
  • Изменить порт по умолчанию (не 22) или ограничить исходные IP на фаерволе
  • Установить fail2ban для борьбы с брутфорсом (рекомендуется)

4.3 Ротация логов

Логи OpenClaw по умолчанию пишутся в /tmp/openclaw/openclaw-YYYY-MM-DD.log. Настройте logrotate, чтобы избежать исчерпания диска:

bash
# /etc/logrotate.d/openclaw
/tmp/openclaw/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}

4.4 Пример systemd-файла (с опциями безопасности)

ini
[Unit]
Description=OpenClaw Gateway
After=network.target

[Service]
Type=simple
User=node
Group=node
ExecStart=/usr/bin/openclaw gateway start
ExecStop=/usr/bin/openclaw gateway stop
Restart=on-failure
RestartSec=5
# Усиление безопасности
PrivateTmp=yes
NoNewPrivileges=yes
ProtectSystem=strict
ProtectHome=yes
ReadWritePaths=/home/node/.openclaw /var/log/openclaw
Environment="OPENCLAW_GATEWAY_TOKEN=${OPENCLAW_GATEWAY_TOKEN}"
# Ограничение ресурсов (опционально)
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target

Безопасность при глобальной npm-установке

При локальной npm-установке (часто на dev-машинах или ручном ops) необходимо обязательно сузить bind-адрес Gateway:

bash
# Принудительно заставить Gateway слушать только 127.0.0.1
openclaw config set gateway.bind 127.0.0.1

# Проверка
openclaw config get gateway.bind
# Должно выводить 127.0.0.1

Если требуется внешний доступ, нужно скомбинировать с reverse proxy (Nginx/Caddy) и использовать HTTP basic auth или OAuth:

nginx
location /openclaw/ {
    proxy_pass http://127.0.0.1:18789/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    # Basic auth (пример)
    auth_basic "OpenClaw Admin";
    auth_basic_user_file /etc/nginx/.htpasswd;
    # Или интеграция oauth2proxy

План реагирования на уязвимость: 5 этапов (обнаружение → 72h мониторинг)

  1. Этап 1 — Обнаружение и оценка влияния:
    • Проверьте версию: openclaw --version. Если < 2026.2.0 и Gateway expositioned на internet, немедленно отмечайте как high-risk.
    • Сканирование экспозиции: nmap -p 18789 <your-public-ip> для проверки доступности порта.
  2. Этап 2 — Бэкап конфига и данных:
    • Полный бэкап ~/.openclaw/: tar -czf openclaw-backup-$(date +%F).tar.gz ~/.openclaw
    • Экспорт состояния Gateway (pairs, channels, tokens): openclaw gateway export > gateway-state.json
  3. Этап 3 — Апгрейд и укрепление:
    • Обновление CLI: npm update -g openclaw или docker pull openclaw/openclaw:latest
    • Сбросить gateway.bind на 127.0.0.1; если используется reverse proxy, проверить включённость TLS+auth.
    • Ротация токена: openclaw gateway token rotate; обновить все CLI-инстансы и CI-переменные окружения.
  4. Этап 4 — Проверка connectability:
    • Перезапуск Gateway: openclaw gateway restart
    • Локальный health: openclaw gateway status должен показать "healthy".
    • Тест внешнего доступа: с другой машины попытка соединения должна блокироваться proxy или возвращать 401/403.
  5. Этап 5 — 72-часовой monitoring window:
    • Следить за логами: openclaw logs --follow | grep -i error
    • Проверить, что все каналы (Telegram/Slack) работают нормально, нет потери pairing.
    • После 72h без инцидентов documenting steps в runbook и запланировать следующую ротацию токена.
<2 id="s7">Чек-лист самоаудита базовой безопасности (Порты / Auth / Логи / Обновления / Бэкапы)

Выполняйте эти 5 пунктов ежемесячно, чтобы OpenClaw не был повторно exposureed из-за дрейфа конфига или устаревшей версии:

КатегорияКоманда / действие проверкиКритерий успехаДействие при провале
Портыss -tlnp | grep 18789Адрес прослушивания = 127.0.0.1openclaw config set gateway.bind 127.0.0.1 + рестарт
Аутентификацияopenclaw config get gateway.token (длина и «свежесть»)Токен ≥32 символа, ротация <90 днейopenclaw gateway token rotate; обновить все зависимости
Логиdu -sh /tmp/openclaw/ и статус logrotateЛог-директория <500MB, logrotate активенНастроить logrotate; очистить старые логи
Обновленияopenclaw --version vs последний релизВерсия ≥ 2026.2.0 (последний stable)npm update -g openclaw или docker pull
БэкапыПроверить наличие архивов <7 дней в ~/.openclaw/backup/Полный бэкап в последние 7 днейСрочно выполнить openclaw backup

Технические ссылки

  • Официальное описание уязвимости CVE-2026-25253: GHSA-2026-25253 (Подверженные версии: <2026.2.0, CVSS 9.8 Критично).
  • Порт OpenClaw Gateway по умолчанию: 18789 (Control UI использует тот же порт, только localhost).
  • С версии v2026.2.0 bind по умолчанию изменён на 127.0.0.1 (localhost + Docker bridge всё ещё доступны, публичный — нет).
  • Официальные теги Docker-образов: openclaw/openclaw:latest, :2026.3.13, :stable.

Почему «работает» недостаточно для production

Многие команды во время PoC или временных развёртываний следуют принципу «просто заставить работать» и пропускают настройку фаервола, ротацию токенов и ротацию логов. На dev-машине это может сэкономить 15 минут, но в production три фатальных риска:

  • Экспозиция attack surface: доступный из публичного интернета Gateway — открытая дверь. CVE-2026-25253 — лишь известная уязвимость; zero-days или будущие баги эксплуатируют тот же путь.
  • Нарушение compliance: корпоративные аудиты требуют, чтобы все внешние сервисы прошли аутентификацию и проверку по принципу наименьших привилегий. «Голые» инстансы не проходят SOC2 / ISO27001.
  • Непоправимый运维-ущерб: если backdoor установлен или данные изменены, последующее укрепление не гарантирует чистоту системы. Единственный безопасный выход — уничтожить и пересоздать.

Укрепление безопасности — это первый шаг, а не последующая заплатa. Для production-нагрузок OpenClaw, требующих стабильности и долговечности, менедже offering MACCOME включает все базовые настройки из коробки (авто-ротация токенов, whitelisting фаервола, 24/7 мониторинг вторжений) — использовать без головной боли self-hosting. Если вы выбираете self-hosting, аудитируйте каждый пункт этой чек-лист и запишите результаты в ops-мануал команды.

Часто задаваемые вопросы

У меня OpenClaw v2026.1.0 — я подвержен CVE-2026-25253?

Подверженные версии — <2026.2.0 И Gateway прямо exposureed (без reverse proxy или фаервола). Даже если версия попадает под критерии, bind на 127.0.0.1 или использование контролируемого туннеля значительно снижает риск. В любом случае рекомендуем апгрейд и bind-укрепление.

Я уже добавил read_only: true в Docker Compose — фаервол всё ещё нужен?

Да. read_only предотвращает изменения внутри контейнера, но порт Gateway может оставаться доступным извне. Полное укрепление требует: read-only + bind 127.0.0.1 + auth reverse proxy.

Ротация токена оборвёт существующие каналы (Telegram/Slack)?

Да. Токен Gateway — это учетные данные CLI ↔ Gateway; после ротации все CLI/Agents должны переподключиться. Токены канального уровня (Telegram bot token) не затрагиваются.

Что если production должен обязательно экспонировать Gateway наружу? Как применить наименьшие привилегии?

Наименьшие привилегии = (Gateway слушает только localhost) + (reverse proxy применяет TLS+auth) + (whitelist IP-источников, если возможно). Прокси-слой (Nginx/Caddy/Traefik) должен находиться в отдельном контейнере или edge-ноде и форвардить только аутентифицированные запросы на 127.0.0.1:18789.

Как проверить, скомпрометирован ли уже мой инстанс?

Ищите следы: 1) неизвестные CLI-токены в openclaw config list; 2) логи подключений с подозрительных IP в ~/.openclaw/logs/; 3) подозрительные дочерние процессы (curl/wget исходящие). При обнаружении: немедленно изолировать, сделать бэкап и пересоздать с нуля.