CVE-2026-25253 이후 OpenClaw·NanoClaw·ZeroClaw 보안 실전 가이드 — 자격증명 격리와 최소 권한 스킬 설계로 AI 에이전트를 안전하게 운영하는 방법
2026년 2월, 보안 연구팀이 충격적인 수치를 발표했습니다. 135,000개 이상의 OpenClaw 인스턴스가 공개 IP에 노출되어 있었고, 그 중 63%가 단 한 번의 악의적 웹페이지 방문만으로 원격 코드 실행(RCE)이 가능한 상태였습니다. CVE-2026-25253(CVSS 8.8)의 원인은 WebSocket origin 검증 미비였습니다. 공격자가 악성 웹페이지에 WebSocket 연결 코드를 심으면, 피해자의 브라우저가 로컬에서 실행 중인 OpenClaw 게이트웨이(포트 18789)에 무인증 연결을 맺고, 이를 통해 에이전트가 호스트 사용자 권한으로 임의 명령을 실행하게 됩니다. 브라우저 탭 하나가 서버 전체 탈취로 이어지는 공격 체인입니다. 같은 시기 ClawHub에서는 341개 이상의 악성 스킬이 발견되었고, 전체 스킬의 최대 36%가 보안 결함을 포함한다는 분석도 공개되었습니다. 지금 운영 중인 OpenClaw 인스턴스도 이 목록에 포함되어 있을 수 있습니다.
이 글은 OpenClaw를 직접 배포하거나 운영하는 백엔드·인프라 개발자를 대상으로 합니다. 이 글을 읽고 나면 세 가지 조치만으로 기존 OpenClaw 인스턴스를 즉시 강화할 수 있고, NanoClaw·ZeroClaw 중 자신의 환경에 맞는 대안을 선택하는 기준도 갖게 됩니다. 핵심은 기본값을 신뢰하지 않고, 자격증명 격리와 최소 권한 원칙을 설계 단계부터 구조적으로 내재화하는 것입니다.
TL;DR
- CVE-2026-25253: WebSocket origin 미검증 → 1-클릭 RCE, CVSS 8.8
- OpenClaw 즉시 조치: 버전 2026.1.29 이상으로 업그레이드, 게이트웨이
127.0.0.1바인딩, Docker 격리 적용- 보안 중심 전환 시: 규제 산업이라면 NanoClaw, 엣지/분산 배포라면 ZeroClaw 검토
- 아래 목차에서 필요한 섹션으로 바로 이동할 수 있습니다.
핵심 개념
자격증명 격리(Credential Isolation)란 무엇인가
자격증명 격리는 에이전트 인스턴스마다 전용·최소 권한 자격증명을 부여하고, 시크릿을 파일시스템에 직접 저장하지 않으며, 비밀 관리 시스템을 통해서만 런타임에 주입하는 원칙입니다.
많은 팀이 개발 편의를 위해 .env 파일에 API 키를 저장합니다. 이 파일이 컨테이너 이미지에 포함되거나 파일시스템에 평문으로 존재하면, 에이전트가 침해되는 순간 모든 자격증명이 한꺼번에 노출됩니다. 자격증명 격리는 이 공격 경로 자체를 차단합니다.
# 잘못된 방식: 파일시스템에 시크릿 저장
echo "API_KEY=sk-xxx" > /home/agent/.env
# 올바른 방식: 비밀 관리 시스템을 통한 런타임 주입
docker run \
--env API_KEY=$(vault kv get -field=key secret/agent) \
--read-only \
--user 1001:1001 \
openclaw:latest용어 정의
--read-only플래그는 컨테이너 파일시스템을 읽기 전용으로 마운트합니다. 에이전트가 임의의 파일을 쓰거나 악성 코드를 디스크에 저장하는 행위를 커널 수준에서 차단합니다.
vault kv get 명령은 HashiCorp Vault가 사전에 설치되어 있고, AppRole이나 Kubernetes auth 등 Vault 인증이 완료된 상태를 전제합니다. Vault는 시크릿을 중앙에서 관리하는 오픈소스 플랫폼으로, 별도 설치와 설정이 필요한 독립 인프라입니다. Vault를 도입할 수 없는 환경(소규모 팀, 온프레미스 미구성 등)에서는 아래 대안을 고려할 수 있습니다.
- AWS 환경: AWS Secrets Manager + IAM Role(IRSA)로 컨테이너에 시크릿 주입
- Kubernetes 환경:
ExternalSecrets Operator+ Kubernetes Secret으로 주입 - 간단한 대안: AWS Systems Manager Parameter Store (
aws ssm get-parameter)
API 키 관리의 핵심 원칙은 에이전트별 키 분리와 주기적 순환입니다. 순환을 수동으로 처리하면 누락 위험이 있으므로, Vault Dynamic Secrets(TTL 기반 자동 만료)나 AWS Secrets Manager Rotation Lambda를 활용한 자동화를 권장합니다. 수동 순환 주기의 상한선으로 90일을 기준으로 삼을 수 있습니다.
최소 권한 스킬 설계(Least Privilege Skill Design)
최소 권한 원칙은 각 스킬이 실제로 필요한 퍼미션만 요청하도록 설계 단계부터 제한하는 것을 의미합니다. 에이전트가 "혹시 필요할 수도 있으니"라는 이유로 광범위한 권한을 요청하는 설계는 공격자에게 넓은 공격 면적을 제공합니다.
| 에이전트 유형 | 필요한 권한 | 차단해야 할 권한 |
|---|---|---|
| 일일 브리핑 에이전트 | 이메일·캘린더 읽기 | 파일시스템 쓰기, sudo |
| RAG 검색 에이전트 | 벡터 DB 검색·읽기 | DB 삭제·수정, 외부 네트워크 |
| 메시징 에이전트 | 발송 스코프 | 클라우드 인프라 접근 토큰 |
| 코드 실행 에이전트 | 격리 컨테이너 내 exec | 호스트 파일시스템, 네트워크 |
왜
exec과apply_patch는 고위험인가 이 도구들이 격리 컨테이너 외부, 즉 호스트 사용자 권한으로 실행되면 호스트 파일시스템과 네트워크에 직접 접근할 수 있습니다. 단일 취약점 하나가 서버 전체 탈취로 이어지는 이유입니다. 반드시 별도 격리 컨테이너 안에서만 허용해야 합니다.
Linux 커널 캐퍼빌리티(Capabilities)란 루트 계정을 쓰지 않고도 특수 작업(포트 바인딩, 네트워크 인터페이스 설정, 커널 모듈 로드 등)을 허용하는 세분화된 권한 단위입니다.
--cap-drop=ALL은 이 권한 단위 전체를 제거해, 프로세스가 설령 루트로 실행되더라도 고위험 시스템 호출을 할 수 없게 만듭니다.
세 프레임워크 보안 모델 비교
OpenClaw 위기 이후 보안 중심 대안을 선택하는 팀이 늘고 있습니다. 세 프레임워크의 보안 철학은 근본적으로 다릅니다.
| 프레임워크 | 핵심 보안 모델 | 기본 실행 컨텍스트 | 마켓플레이스 |
|---|---|---|---|
| OpenClaw | 오픈 생태계 + 사용자 설정 보안 | 호스트 사용자 권한 (비보안) | ClawHub (공급망 리스크) |
| NanoClaw | 컨테이너 단위 완전 격리 + 감사 로그 | 스킬마다 독립 컨테이너 | 제한적 (별도 검증) |
| ZeroClaw | deny-by-default 허용 목록 + 커널 샌드박싱 | Landlock/Bubblewrap 샌드박스 | 없음 (공급망 공격 면적 없음) |
OpenClaw는 ClawHub의 풍부한 스킬 생태계가 강점이지만 기본값이 안전하지 않습니다. 사용자가 직접 강화하지 않으면 CVE-2026-25253 계열 취약점에 그대로 노출됩니다. ZeroClaw는 명시적 허용 목록에 없는 모든 동작이 차단되므로 초기 설정 부담이 있지만, 침해 범위가 구조적으로 제한됩니다. NanoClaw는 컨테이너 격리를 기본으로 제공해 규제 산업 감사 대응에 유리합니다.
실전 적용
예시 1: OpenClaw Docker 격리 강화
OpenClaw를 계속 사용해야 하는 환경이라면 최소한 아래 Dockerfile과 실행 옵션을 적용하는 것을 권장합니다. 이미지는 Docker Hub의 공식 openclaw 저장소에서 받을 수 있습니다.
# Docker Hub: docker pull openclaw/openclaw:2026.1.29
FROM openclaw/openclaw:2026.1.29
# 비루트 사용자로 실행 (UID 1001)
RUN useradd -r -u 1001 agent
USER 1001
# 게이트웨이는 반드시 localhost만 바인딩
ENV OPENCLAW_GATEWAY_HOST=127.0.0.1
ENV OPENCLAW_GATEWAY_PORT=18789docker run \
--read-only \
--user 1001:1001 \
--cap-drop=ALL \
--network=none \
--env API_KEY=$(vault kv get -field=key secret/openclaw/prod) \
openclaw/openclaw:2026.1.29| 옵션 | 역할 |
|---|---|
--read-only |
파일시스템 쓰기 전면 차단 |
--user 1001:1001 |
루트 권한 실행 방지 |
--cap-drop=ALL |
커널 캐퍼빌리티(포트 바인딩·네트워크 설정 등 특수 권한) 전부 제거 |
--network=none |
네트워크 접근 차단 (외부 통신 필요 시 --network=bridge로 교체 후 이그레스 필터 적용) |
vault kv get ... |
파일시스템 대신 Vault에서 시크릿 주입 |
ENV OPENCLAW_GATEWAY_HOST=127.0.0.1과 --network=none을 함께 사용하면 어떻게 될까요? 두 설정은 서로 다른 계층을 제어합니다. ENV는 OpenClaw 프로세스가 바인딩하는 인터페이스를 제한하고, --network=none은 컨테이너 네트워크 네임스페이스 자체를 격리합니다. 외부에서 OpenClaw에 연결할 필요가 없는 오프라인 에이전트라면 두 설정이 중복 방어(Defense in Depth)로 작동합니다. 외부 채널 연결이 필요한 경우라면 --network=none 대신 명시적 이그레스 규칙을 적용하고 ENV 바인딩은 그대로 유지하는 방식으로 운영할 수 있습니다.
주의 OpenClaw 버전은 반드시 2026.1.29 이상을 사용해야 합니다. 게이트웨이 포트(18789)를
0.0.0.0에 바인딩하면 CVE-2026-25253 계열 취약점에 노출됩니다.
예시 2: ZeroClaw deny-by-default 허용 목록 설정
ZeroClaw는 zeroclaw.toml 설정 파일에 명시적으로 허용한 동작만 실행됩니다. 설정 파일 자체가 보안 정책 문서 역할을 합니다.
# zeroclaw.toml — 명시적 허용만 실행됨
[permissions]
# 특정 디렉토리 읽기만 허용
file_read = ["/data/reports"]
# 내부 API 서버 443 포트만 허용 (IP 기반 필터링 권장)
network = ["10.0.1.50:443"]
# 실행 명령어 완전 차단 (빈 배열)
exec = []설정 파일을 적용하고 에이전트를 실행하는 방법은 아래와 같습니다.
zeroclaw run --config zeroclaw.tomlnetwork 항목에 api.internal:443처럼 도메인명을 사용할 수 있지만, DNS는 스푸핑에 취약합니다. 가능하다면 IP 주소(10.0.1.50:443)로 명시하거나, 내부 DNS 서버를 신뢰할 수 있는 환경에서만 도메인명을 사용하는 것을 권장합니다.
이 구성에서는 /data/reports 외의 파일 읽기, 허용된 엔드포인트 외의 네트워크 요청, 모든 쉘 명령 실행이 Landlock/Bubblewrap 샌드박싱으로 커널 수준에서 차단됩니다.
용어 정의 Landlock은 Linux 5.13부터 도입된 커널 보안 모듈로, 프로세스가 접근할 수 있는 파일시스템 경로를 프로세스 스스로 제한할 수 있게 합니다. 루트 권한 없이도 세밀한 격리가 가능합니다. Bubblewrap은 프로세스 네임스페이스와 seccomp 필터를 결합한 샌드박싱 도구로, Flatpak 등에서도 활용됩니다.
예시 3: NanoClaw 채팅 그룹별 세션 격리
규제 산업이나 멀티테넌트 메시징 에이전트를 운영하는 경우, NanoClaw의 컨테이너 단위 세션 격리가 강점입니다.
# WhatsApp 그룹마다 독립 NanoClaw 컨테이너 실행
for GROUP_ID in group1 group2 group3; do
docker run -d \
--name "nanoclaw-${GROUP_ID}" \
--read-only \
--user 1001:1001 \
--cap-drop=ALL \
--label "group=${GROUP_ID}" \
nanoclaw:latest
done--label "group=${GROUP_ID}"는 보안 설정이 아니라 관리·모니터링 용도입니다. docker ps --filter label=group=group1처럼 그룹별 컨테이너를 필터링하거나, Prometheus 레이블 기반 집계에 활용하기 위한 메타데이터 태그입니다.
이 패턴에서 그룹 간 데이터 누출은 구조적으로 차단됩니다. 모든 스킬 액션은 감사 로그에 자동 기록되며, 700줄 이하의 감사 가능한 코어 코드베이스 덕분에 규제 기관 감사 대응이 용이합니다.
장단점 분석
장점
| 항목 | OpenClaw | NanoClaw | ZeroClaw |
|---|---|---|---|
| 생태계 풍부도 | ClawHub 스킬 다수, 커뮤니티 문서 방대 | 메시징 에이전트 특화 | 마켓플레이스 없음 (공급망 공격 면적 없음) |
| 보안 기본값 | 낮음 (사용자가 직접 강화 필요) | 높음 (컨테이너 격리 기본) | 매우 높음 (deny-by-default) |
| 배포 효율 | 일반적 | 컨테이너 오버헤드 있음 | 3.4MB 단일 바이너리, 10ms 부팅 |
| 감사 용이성 | 제한적 | 700줄 코어, 자동 감사 로그 | Rust 메모리 안전성, 명시적 정책 파일 |
| 규제 산업 적합성 | 추가 작업 필요 | 금융·의료 환경에 적합 | 엣지·분산 배포에 경제적 |
단점 및 주의사항
| 항목 | 내용 | 대응 방안 |
|---|---|---|
| OpenClaw 기본값 취약 | 호스트 사용자 권한 실행, CVE 138개 이상 추적 중 | 2026.1.29 이상 사용, Docker 격리 적용 |
| ClawHub 공급망 리스크 | 전체 스킬의 최대 36%가 보안 결함 포함 | 프로덕션 투입 전 독립 샌드박스에서 반드시 검증 |
| ZeroClaw 초기 설정 부담 | 모든 퍼미션을 명시해야 함 | 최소 권한 원칙을 설계 단계부터 적용 |
| ZeroClaw 저장소 이슈 | 2026년 3월 가용성 이슈 보고 | 프로덕션 적용 전 안정성 재확인 권장 |
| 런타임 거버넌스 격차 | 에이전트 실행 중 실시간 권한 통제 체계 미성숙 | 로그 기반 사후 감사 + 네트워크 이그레스 필터링 병행 |
런타임 거버넌스(Runtime Governance) 에이전트가 실행되는 동안 그 행동과 권한을 실시간으로 모니터링하고 통제하는 체계입니다. 현재 업계에서 가장 미성숙한 영역 중 하나로, 사후 감사 로그와 네트워크 이그레스 필터링이 현실적인 보완책입니다.
실무에서 가장 흔한 실수
- 게이트웨이 포트 18789를
0.0.0.0에 바인딩하는 것 — 개발 환경 설정을 그대로 프로덕션에 올리는 경우 발생합니다.127.0.0.1또는 내부 네트워크 인터페이스에만 바인딩하고, 원격 접근은 Tailscale이나 WireGuard VPN을 경유하도록 구성하는 것을 권장합니다. - ClawHub 스킬을 검증 없이 프로덕션에 직접 설치하는 것 — 모든 외부 스킬은 신뢰할 수 없는 코드로 취급해야 합니다. Semgrep 정적 분석(공식 설치 가이드, OpenClaw 전용 룰셋은 Semgrep 블로그 체크시트 참고)을 CI 파이프라인에 통합하고, 독립 샌드박스 환경에서 동작을 검증한 후 프로덕션에 반영하는 절차를 갖출 수 있습니다.
- 단일 공유 API 키를 여러 에이전트가 함께 사용하는 것 — 침해 시 모든 에이전트와 해당 키에 연결된 모든 서비스가 한꺼번에 영향을 받습니다. 에이전트별로 키를 분리하고 자동 순환 정책을 적용하면 침해 범위를 구조적으로 제한할 수 있습니다.
마치며
AI 에이전트 보안의 핵심은 기본값을 신뢰하지 않고, 설계 단계부터 자격증명 격리와 최소 권한 원칙을 구조적으로 내재화하는 것입니다.
운영 중인 OpenClaw 환경을 즉시 점검하거나 보안 중심으로 새로운 에이전트를 구축하고 싶다면, 아래 3단계를 출발점으로 삼을 수 있습니다.
- 버전·포트 확인 —
docker inspect <컨테이너>또는ss -tlnp | grep 18789로 게이트웨이 바인딩 주소를 확인합니다.0.0.0.0이 보인다면 즉시127.0.0.1로 변경하고, 버전이 2026.1.29 미만이라면 업그레이드가 필요한 상태입니다. - 스킬 퍼미션 감사 — ClawHub에서 설치한 스킬 목록을 검토하고, 각 스킬이 요청하는 퍼미션이 실제 기능에 비해 과도하지 않은지 살펴볼 수 있습니다. Semgrep과 독립 샌드박스를 활용한 스킬 검증 절차를 CI 파이프라인에 추가하는 것을 권장합니다.
- 신규 에이전트는 보안 중심 프레임워크부터 검토 — ZeroClaw의
zeroclaw.toml허용 목록 모델이나 NanoClaw의 컨테이너 격리 모델이 자신의 환경에 맞는지 먼저 살펴볼 수 있습니다. 이 글에서 소개한 예시 설정 파일은 GitHub Gist(예시 링크)에서 복사해 바로 적용하는 형태로 제공할 예정입니다.
이 글은 OpenClaw 보안 시리즈의 첫 번째 글(1/2)입니다.
다음 글 (2/2): OpenClaw 런타임 거버넌스 구현 — 에이전트 행동을 실시간으로 모니터링하고 이상 동작을 자동 차단하는 eBPF 기반 감사 아키텍처
참고 자료
취약점 보고서
- CVE-2026-25253: 1-Click RCE in OpenClaw Through Auth Token Exfiltration | SOCRadar
- NVD — CVE-2026-25253
- OpenClaw RCE Vulnerability (CVE-2026-25253): One-Click Attack & Fix | Proarch
- The OpenClaw Security Crisis: 135,000 Exposed AI Agents | DEV Community
- Is OpenClaw Safe? The ClawHub Malware Crisis | Blink
공식 문서 및 실전 가이드
- Security — OpenClaw 공식 문서
- Running OpenClaw safely: identity, isolation, and runtime risk | Microsoft Security Blog
- OpenClaw security: architecture and hardening guide | Nebius
- Security Best Practices to Securely Deploy OpenClaw | Repello AI
- OpenClaw Security Guide 2026 | Contabo Blog
- OpenClaw Security Engineer's Cheat Sheet | Semgrep
- slowmist/openclaw-security-practice-guide | GitHub
- OpenClaw Security Risks: What security teams need to know | Barracuda Networks
프레임워크 비교
- ZeroClaw vs OpenClaw vs NanoClaw 2026 Comparison | Lushbinary
- After the OpenClaw Crisis: ZeroClaw vs NanoClaw vs Moltis | ZeroClaw Blog
- OpenClaw Alternatives for Enterprise Security | Fountaincity Tech
- OpenClaw vs NanoClaw vs PicoClaw vs ZeroClaw | Wael Mansour
- AI Agent Security Risks 2026: MCP, OpenClaw & Supply Chain | Cyberdesserts