
Exploit Python per CVE-2026-41940, una critica iniezione CRLF in cPanel/WHM cpsrvd che bypassa l'autenticazione e il 2FA, concedendo accesso a livello di root tramite una catena di attacco HTTP in 4 passaggi.
Vulnerabilità: Manipolazione del file di sessione tramite iniezione CRLF nel gestore di autenticazione HTTP Basic di cpsrvd CVE: CVE-2026-41940 CVSS: 9.8 (Critico) CWE: CWE-93 (Iniezione CRLF) / CWE-306 (Autenticazione Mancante) Affetti: Versioni di cPanel e WHM precedenti a: 11.110.0.97, 11.118.0.63, 11.126.0.54, 11.132.0.29, 11.134.0.20, 11.136.0.5 Porte: 2082/2083 (cPanel), 2086/2087 (WHM), 2095/2096 (Webmail)
CAUSA RADICE TECNICA: Il gestore di autenticazione HTTP Basic di cpsrvd memorizza la password fornita così com'è nel file di sessione pre-autenticazione tramite Cpanel::Session::saveSession() -- bypassando i wrapper sanificanti Cpanel::Session::create() / Cpanel::Session::Modify::save(), che chiamano filter_sessiondata() per rimuovere CR/LF. Poiché saveSession() stesso non chiama filter_sessiondata(), qualsiasi CR/LF nella password viene scritto nel file di sessione grezzo come newline letterali.
Quando una richiesta viene respinta per aver fallito il controllo del token di sicurezza associato all'URL, il gestore do_token_denied() di cpsrvd invoca Cpanel::Session::Modify::new($session, nocache => 1). Il flag nocache => 1 forza una ri-analisi del file di sessione grezzo (linea per linea chiave=valore) invece di caricare la cache JSON. Le linee separate da CRLF dal campo pass controllato dall'attaccante vengono ora trattate come record chiave=valore separati. Modify::save() riscrive quindi la cache JSON con tutte le chiavi analizzate -- inclusa quella dell'attaccante -- promosse a voci di sessione di primo livello.
Dopo la rigenerazione, la sessione contiene user=root, hasroot=1, tfa_verified=1, un cp_security_token scelto dall'attaccante e un nuovo successful_internal_auth_with_timestamp. cpsrvd tratta la sessione come completamente autenticata.
CATENA DI ATTACCO (4 richieste HTTP):
NOTA: Esiste una condizione di gara a causa dell'ordine di iterazione randomizzato degli hash di Perl. Il cp_security_token originale (non impostato) potrebbe sovrascrivere quello iniettato. Tentativi multipli rendono la catena affidabile.
DICHIARAZIONE DI NON RESPONSABILITÀ: Questo strumento è fornito solo per scopi autorizzati di test di sicurezza e ricerca. L'uso non autorizzato contro sistemi di cui non si possiede la proprietà o per i quali non si ha esplicito permesso di test è illegale.