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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
multiparty-CVE-2026-8161 — # CVE-2026-8161 개념 증명 익스플로잇 multiparty multipart 파서의 서비스 거부(DoS) 취약점으로, 프로토타입 오염(prototype pollution)으로 이어져 처리되지 않은 예외(uncaught exception)와 크래시를 유발함을 입증합니다. | Kitploit
도구/GitHubGitHub/ser0n-ath/multiparty-cve-2026-8161
Vulnerability AnalysisExploitationWeb Application ExploitationWeb Security
GitHubser0n-ath/multiparty-cve-2026-8161

multiparty-CVE-2026-8161

# CVE-2026-8161 개념 증명 익스플로잇 multiparty multipart 파서의 서비스 거부(DoS) 취약점으로, 프로토타입 오염(prototype pollution)으로 이어져 처리되지 않은 예외(uncaught exception)와 크래시를 유발함을 입증합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-8161

CVE-2026-8161(Multiparty)의 개념 증명

설명

[email protected] 및 이전 버전은 포착되지 않은 예외로 인한 서비스 거부(denial of service)에 취약합니다.

파서는 업로드된 필드와 파일을 일반 JavaScript 객체에 저장하며, 파서가 소유한 키와 상속된 객체 속성을 안전하게 구분하지 않습니다. 조작된 multipart 필드 이름은 파서가 예상치 못한 프로토타입 체인 값을 읽고 업로드를 처리하는 동안 충돌하도록 만들 수 있습니다.

취약한 버전의 multiparty를 통해 multipart 업로드를 수락하는 모든 서비스가 영향을 받을 수 있습니다.

작동 방식

이 문제는 fields와 files가 일반 JavaScript 객체이지만 사용자 제어 이름에 대한 안전한 키-값 맵처럼 사용되기 때문에 발생합니다.

root@kitploit:~
var fieldsArray = fields[name] || (fields[name] = [])
fieldsArray.push(value)

var filesArray = files[name] || (files[name] = [])
filesArray.push(file)

문제는 fields[name]과 files[name]이 일반 JavaScript 속성 조회를 사용한다는 것입니다. 일반 객체의 경우 해당 조회는 객체 자체에 저장된 값만이 아니라 프로토타입 체인의 상속된 속성을 반환할 수 있습니다.

name이 __proto__인 경우 JavaScript는 프로토타입 체인을 통해 이를 확인하고 상속된 프로토타입 객체를 undefined 대신 반환할 수 있습니다. 해당 값은 truthy이므로 대체 할당이 건너뛰어지고 파서는 해당 필드에 대한 실제 배열을 생성하지 않습니다.

패치는 객체에 직접 속한 키만 신뢰하여 이 문제를 해결합니다:

root@kitploit:~
var filesArray = Object.prototype.hasOwnProperty.call(files, name)
  ? files[name]
  : undefined

그런 다음 파서는 저장된 값이 실제로 배열인 경우에만 추가하고, 그렇지 않으면 새 배열을 초기화합니다:

root@kitploit:~
if (Array.isArray(filesArray)) {
  filesArray.push(file)
} else {
  files[name] = [file]
}

배열이 아닌 값에 대해 .push()가 호출되면 TypeError가 발생합니다. 이는 Multiparty의 비동기 파싱 흐름 내부에서 발생하므로 일반적인 호출자 측 오류 처리가 이를 포착하지 못해 예외가 프로세스를 중단시킬 수 있습니다.

타임라인

  • 2026-01-12: multiparty 유지관리자에게 취약점 보고.
  • 2026-01-17: 보고서 접수, 수정 작업 시작.
  • 2026-02-14: @pillarjs/security-triage와의 조정 검토 시작.
  • 2026-02-16: 패치 논의 -> Object.prototype.hasOwnProperty.call(...).
  • 2026-03-29: 서비스 거부 영향을 반영하도록 권고 제목 및 메타데이터 업데이트.
  • 2026-04: 수정 접근 방식 검토 및 승인.
  • 2026-05-08: 권고 최종 확정 및 CVE-2026-8161 예약.
  • 2026-05-11: 수정 사항이 pillarjs:master에 병합됨.

데모 사용법

mocklab 환경을 실행하고 두 대상 모두에 테스트 페이로드를 전송합니다:

root@kitploit:~
docker compose up -d
python3 secdos.py -u http://localhost:8080/api/submit
python3 secdos.py -u http://localhost:8081/api/submit

취약한 대상은 충돌하여 [PASS]를 반환합니다. 패치된 대상은 요청을 안전하게 처리하고 [FAIL]을 반환합니다.

취약한 서버에 대해 다시 실행하는 경우 먼저 서버를 재시작하십시오

설정 개요

취약한 서버

  • localhost:8080에서 접근
  • 역방향 프록시 역할을 하는 Nginx 서버, 실패 시 상태 502의 오류 페이지 표시
  • Nginx는 서비스 이름으로 취약 서버 주소를 확인
  • multiparty 4.2.3(취약) 사용

패치된 서버

  • localhost:8081에서 실행 및 접근
  • Nginx 불필요
  • multiparty 4.3.0(패치됨) 사용

dockerfile에서 패치된 이미지를 빌드하려면 빌드 인수 PATCHED=1이 필요합니다

참고 자료

https://github.com/pillarjs/multiparty/security/advisories/GHSA-qxch-whhj-8956 https://github.com/pillarjs/multiparty/commit/8ee6aca09aca29e923da48da8260c87aa964b282

도구 다운로드