2026 OpenClaw 보안 강화와 취약점 대응 실전: CVE-2026-25253 사례, 방화벽 규칙, 최소 권한 배포 체크리스트

약 13분 소요 · MACCOME

2026년 1월, OpenClaw는 CVE-2026-25253을 공개했습니다. 기본 설정이 허술해 원격 코드 실행이 가능해졌고, 공개적으로 접근 가능한 135,000개 이상의 인스턴스가 위험에 노출되었습니다. 사용 중인 OpenClaw(npm/Docker/VPS 모두)가 보안 베이스라인 감사를 아직 통과하지 못했다면, 지금이 마지막 강화 기회입니다. 본 글에서는 취약점 사례를 되짚고, Docker/systemd/VPS/npm 전역 설치 3가지 배포 형태별 최소 권한 배포 체크리스트, 그리고 5단계 대응 플레이북(탐지 → 백업 → 업그레이드 → 검증 → 72시간 모니터링)을 제공하여 "동작함"에서 "전장에서 검증됨"으로 끌어올리는 방법을 안내합니다.

CVE-2026-25253 사례: 135,000 인스턴스가 왜 노출되었는가

2026년 1월 중순, OpenClaw 보안팀은 CVE-2026-25253을 공개했습니다. Gateway가 기본 설정(0.0.0.0 리슨, 인증 없음)으로 실행될 때 조작된 WebSocket 핸드셰이크로 원격 코드 실행이 가능하다는 내용입니다. Shodan 스캔 결과, 당시135,000개 이상의 인스턴스가 인증 없이 접근 가능했으며, 개인 개발자부터 소규모 팀, 터널링 설정이 잘못된 기업 환경까지 포함되었습니다.

근본 원인은 코드 결함이 아닌 기본 설정이 지나치게 관대함에 있습니다:

  • Gateway 기본 bind 주소는 0.0.0.0. 방화벽이나 리버스 프록시 인증이 없으면 관리 포트가 전체 인터넷에 노출됩니다.
  • 초기 인스톨러는 OPENCLAW_GATEWAY_TOKEN이나 TLS 설정을 강제하지 않아 평문 채널이 MITM 공격에 노출됩니다.
  • 많은 사용자가 VPS에서 openclaw onboard만 실행하고 "배포 완료"로 판단, 이후 gateway.bind 조정이나 ufw 설정을 생략했습니다.

이 사건으로 v2026.2.0부터 기본 bind 주소가 127.0.0.1로 변경되었고 인스톨러에 보안 검사가 포함되었습니다. 그러나 기존 인스턴스는 수동 조치가 필요——本文章がその実行可能チェックリストです。

3개의 핵심 보안 원칙(非遵守不可)

배포 형태와 관계없이 다음 3가지를 동시에 만족해야 합니다:

  1. 공용 네트워크에 직접 노출하지 말 것: Gateway는 loopback(127.0.0.1)이나 프라이빗 IP에만 bind. 접근은 반드시 리버스 프록시(Nginx/Caddy)나 터널(Cloudflare Tunnel)을 거치도록 하고, 에지 계층에서 인증을 강제합니다.
  2. 강력한 인증 강제: Gateway로의 모든 요청은 유효한 OPENCLAW_GATEWAY_TOKEN을 포함해야 합니다(≥32 문자, 90일마다 로테이션).
  3. 최소 공격 면: 호스트는 필수 포트(SSH 22, HTTPS 443)만 개방. Gateway 내부 포트(기본 18789)는 0.0.0.0에서 리슨해서는 안 됩니다.

Docker 배포 보안 체크리스트

Docker / Docker Compose로 OpenClaw를 운영한다면 다음 항목을 감사하세요:

체크 항목안전한 설정위험한 설정 예수정 명령어 / 단계
network_mode커스텀 브릿지 또는 host + 포트 매핑 제한ports: "0.0.0.0:18789:18789"127.0.0.1:18789:18789로 변경하거나 리버스 프록시만 경유
--read-only컨테이너 루트 파일시스템 읽기전용; 볼륨 명시적 목록read_only: true 미설정Compose에 read_only: true 추가; ./openclaw-data:/home/node/.openclaw 볼륨 마운트 확보
user와 볼륨 권한non-root(node:1000)로 실행; 호스트 볼륨 UID/GID 일치컨테이너 root, 호스트 dir 755 宽松user: "1000:1000"; 볼륨 디렉토리를 사전에 chown 1000:1000
restart policyunless-stopped 또는 on-failure:3재시작 없음(크래시 시 Exit)self-healing 보장; healthcheck와 결합
OPENCLAW_GATEWAY_TOKEN환경변수 주입; 길이 ≥32; CLI 설정과 일치빈 토큰 또는 이미지 내 하드코드environment: OPENCLAW_GATEWAY_TOKEN=${TOKEN}; 호스트에서도 openclaw config set gateway.token $TOKEN

변경 후 docker exec <container> netstat -tlnp로 Gateway가 127.0.0.1:18789(또는 리버스 프록시 포트)만 리슨하는 것을 확인하세요.

systemd / VPS(Ubuntu 24.04) 강화 체크리스트

VPS에서 systemd 서비스로 OpenClaw를 상주시키려면 다음 방화벽 및 OS 수준 제어를 적용해야 합니다:

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 (리버스 프록시 사용 시)
sudo ufw allow 80/tcp      # HTTP (선택, HTTPS로 리다이렉트)
sudo ufw enable
  1. Gateway 포트(18789)가 공용으로 열려 있지 않은지 확인:
bash
sudo ufw status numbered
# 18789/tcp 허용 규칙이 표시되지 않아야 함

4.2 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 unit 예시(보안 옵션 포함)

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 설치(개발機 또는 수동 운영 일반)는 반드시 Gateway bind 주소를 tightened해야 합니다:

bash
# Gateway를 127.0.0.1만 리슨하도록 강제
openclaw config set gateway.bind 127.0.0.1

# 확인
openclaw config get gateway.bind
# 127.0.0.1 출력되어야 함

외부 접근이 필요한 경우, 리버스 프록시(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;
    # 또는 OAuth2 프록시 통합

취약점 대응 플레이북: 5단계(탐지 → 72시간 모니터링)

  1. 단계 1 — 탐지 및 영향 평가
    • 버전 확인: openclaw --version. < 2026.2.0이고 Gateway가 인터넷 노출 시 즉시 고위험으로 판별.
    • 노출 스캔: nmap -p 18789 <your-public-ip>로 포트 접근성 확인.
  2. 단계 2 — 설정 및 데이터 백업
    • ~/.openclaw/ 전체 아카이브: tar -czf openclaw-backup-$(date +%F).tar.gz ~/.openclaw
    • Gateway 상태 내보내기(페어, 채널, 토큰 포함): openclaw gateway export > gateway-state.json
  3. 단계 3 — 업그레이드 및 강화
    • CLI 업데이트: npm update -g openclaw 또는 docker pull openclaw/openclaw:latest
    • gateway.bind를 127.0.0.1으로 재설정; 리버스 프록시 사용 시 TLS+인증 활성화 확인.
    • 토큰 로테이션: openclaw gateway token rotate; 모든 CLI 인스턴스와 CI 환경변수 업데이트.
  4. 단계 4 — 연결성 검증
    • Gateway 재시작: openclaw gateway restart
    • 로컬 건강상태: openclaw gateway status가 "healthy" 표시해야 함.
    • 외부 접근 테스트: 다른 머신에서 연결 시도(프록시가 차단하거나 401/403 반환해야 함).
  5. 단계 5 — 72시간 모니터링 윈도우
    • 로그 이상징후 감시: openclaw logs --follow | grep -i error
    • 모든 채널(Telegram/Slack 등) 정상 작동, 페어링 손실 없음 확인.
    • 72시간 후 이상 없으면 강화 절차를 runbook에 기록하고 다음 토큰 로테이션 일정 계획.

보안 베이스라인 자가진단 체크리스트(포트/인증/로그/업데이트/백업)

다음 5항목을 월 1회 이상 실행해 OpenClaw가 설정 drifted나 버전落后로 다시 노출되지 않도록 유지:

카테고리체크 명령어 / 동작합격 기준불합시 조치
포트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 상태로그dir <500MB, logrotate 활성logrotate 설정 조정, 오래된 로그 삭제
업데이트openclaw --version 최신 릴리스와 비교버전 ≥ 2026.2.0(최신 stable)npm update -g openclaw 또는 docker pull
백업~/.openclaw/backup/에 7일 이내 아카이브 존재 확인최근 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 브릿지는 접근 가능, 공용은 불가).
  • 공식 Docker 이미지 태그: openclaw/openclaw:latest, :2026.3.13, :stable.

왜 "동작하면 됨"이 본production에서 충분하지 않은가

많은 팀이 PoC나 임시 배포 시 "그냥 돌아가게" 사고로, 방화벽 설정, 토큰 로테이션, 로그 로테이션을 생략합니다. 개발機에서는 15분 절약할 수 있지만,本番환경에서는 3가지 치명적 위험이 발생합니다:

  • 공격 surface 노출: 공용 인터넷에서 접근 가능한 Gateway는 문을 연 상태. CVE-2026-25253은 알려진 한 사례일 뿐, 제로데이나 향후 버그도 같은 경로로 침투합니다.
  • 규정 준수 위반: 기업 감사에서는 모든 외부 서비스가 인증과 최소권한 검토를 거쳐야 하며, 노출된 인스턴스는 SOC2 / ISO27001 통과 불가.
  • 회복 불가능运维 손상: 백도어가 심기거나 데이터가 변조된 후에는 사후 강화로 시스템이 깨끗하다고 보증할 수 없습니다. 이 경우 안전한 선택지는 파괴 후 재구성뿐입니다.

따라서 보안 강화는 사후补丁이 아니라 첫 단계입니다. 안정적 장기 운영을 요구하는 본 production OpenClaw의 경우, MACCOME의 managed offering은 모든 베이스라인을 out-of-the-box로 제공(자동 토큰 로테이션, 방화벽 화이트리스트, 24/7 침입 감시)——자체 호스팅의 번거로움 없이 사용 가능합니다. 자체 호스팅을 선택한다면 본 체크리스트 전 항목을 audit하고 결과를 팀运维 매뉴얼에 기록하세요.

자주 묻는 질문

OpenClaw v2026.1.0을 사용 중입니다. CVE-2026-25253 영향받나요?

영향 버전은 <2026.2.0이며, Gateway가 직접 공개될 때만 악용 가능합니다. 버전이 해당하더라도 127.0.0.1에 bind하거나 제어된 터널 사용 시 위험 크게 감소.无论如何 업그레이드 및 bind 강화 권장.

Docker Compose에 read_only: true 설정済——방화벽 불필요?

필요합니다. read_only는 컨테이너 내부 파일 변경을 방지하지만, Gateway 포트가 외부에서 직접 접근 가능할 수 있습니다. 완전한 강화에는 read-only + 127.0.0.1 bind + 리버스 프록시 인증 3가지 모두 필요.

토큰 로테이션 시 기존 채널(Telegram/Slack) 연결 끊어지나요?

네. Gateway 토큰은 CLI ↔ Gateway 인증 정보; 로테后 모든 CLI/Agent가 재페어링 필요. 채널층 토큰(Telegram bot token)은 영향 없음.

本番에서 외부 서비스 제공이必须时, 최소 권한은 어떻게 설정?

최소 권한 = (Gateway localhost 전용 리슨) + (리버스 프록시 계층에서 TLS+인증 강제) + (가능 시 소스 IP 화이트리스트). 프록시 계층(Nginx/Caddy/Traefik)은 독립 컨테이너 또는 엣지 노드에 두고, 인증된 요청만 127.0.0.1:18789로 전달.

인스턴스가 이미 침해당했는지 확인 방법?

흔적 확인:1) openclaw config list에 알 수 없는 CLI 토큰存在;2) ~/.openclaw/logs/에 수상 IP 연결 기록;3) 시스템 프로세스에 curl/wget 외부 통신 등 수상 자식 프로세스. 발견 시 즉시 격리, 백업 후 재구성.