В январе 2026 года OpenClaw раскрыл CVE-2026-25253 — уязвимость удалённого выполнения кода, из-за которой более 135 000 публично доступных экземпляров оказались под угрозой из-за слабых настроек по умолчанию. Если ваше развёртывание OpenClaw (npm/Docker/VPS) ещё не прошло аудит базовой безопасности, наступил момент его усиления. Данная статья рассматривает инцидент, три чек-листа для конкретных форм развёртывания (Docker, systemd/VPS, npm global) и пятиэтапный план реагирования (обнаружение → бэкап → апарграйд → верификация → 72-часовой мониторинг), чтобы превратить ваш агент из «работает» в «прошёл боевое крещение».
В середине января 2026 года команда безопасности OpenClaw опубликовала CVE-2026-25253: если Gateway работает с настройками по умолчанию (слушает на 0.0.0.0 без аутентификации), злоумышленник может достичь RCE через специально сконструированный WebSocket handshake. Сканирование Shodan показало более 135 000 инстансов, доступных без аутентификации — от частных разработчиков и маленьких команд до корпоративных туннелей, неправильно сконфигурированных.
Корень проблемы — не баг в коде, а чрезмерно либеральные дефолтные настройки:
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, инсталлятор теперь содержит обязательные проверки безопасности. Однако существующие инстансы всё ещё требуют ручного исправления — эта статья предоставляет исполняемый чек-лист.
Независимо от типа развёртывания, все три условия должны выполняться одновременно:
OPENCLAW_GATEWAY_TOKEN (≥32 символов, ротация каждые 90 дней).Если вы запускаете OpenClaw через Docker / Docker Compose, проверьте каждый пункт:
| Пункт | Безопасная конфигурация | Опасный пример | Команда / шаг исправления |
|---|---|---|---|
| network_mode | Custom bridge или host с ограниченным port mapping | ports: "0.0.0.0:18789:18789" | Изменить на 127.0.0.1:18789:18789 или route только через reverse proxy |
| --read-only | Root-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 policy | unless-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).
При запуске OpenClaw как systemd-сервиса на VPS необходимо применить следующие правила фаервола и контроли на уровне ОС:
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
sudo ufw status numbered # Правило allow для 18789/tcp не должно отображаться
PasswordAuthentication noЛоги OpenClaw по умолчанию пишутся в /tmp/openclaw/openclaw-YYYY-MM-DD.log. Настройте logrotate, чтобы избежать исчерпания диска:
# /etc/logrotate.d/openclaw
/tmp/openclaw/*.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
[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-установке (часто на dev-машинах или ручном ops) необходимо обязательно сузить bind-адрес Gateway:
# Принудительно заставить 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:
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
openclaw --version. Если < 2026.2.0 и Gateway expositioned на internet, немедленно отмечайте как high-risk.nmap -p 18789 <your-public-ip> для проверки доступности порта.~/.openclaw/: tar -czf openclaw-backup-$(date +%F).tar.gz ~/.openclawopenclaw gateway export > gateway-state.jsonnpm update -g openclaw или docker pull openclaw/openclaw:latestgateway.bind на 127.0.0.1; если используется reverse proxy, проверить включённость TLS+auth.openclaw gateway token rotate; обновить все CLI-инстансы и CI-переменные окружения.openclaw gateway restartopenclaw gateway status должен показать "healthy".openclaw logs --follow | grep -i errorВыполняйте эти 5 пунктов ежемесячно, чтобы OpenClaw не был повторно exposureed из-за дрейфа конфига или устаревшей версии:
| Категория | Команда / действие проверки | Критерий успеха | Действие при провале |
|---|---|---|---|
| Порты | ss -tlnp | grep 18789 | Адрес прослушивания = 127.0.0.1 | openclaw 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 |
openclaw/openclaw:latest, :2026.3.13, :stable.Многие команды во время PoC или временных развёртываний следуют принципу «просто заставить работать» и пропускают настройку фаервола, ротацию токенов и ротацию логов. На dev-машине это может сэкономить 15 минут, но в production три фатальных риска:
Укрепление безопасности — это первый шаг, а не последующая заплат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 исходящие). При обнаружении: немедленно изолировать, сделать бэкап и пересоздать с нуля.