
Exploit en Python para CVE-2026-41940, una inyección CRLF crítica en cPanel/WHM cpsrvd que evade la autenticación y el 2FA, otorgando acceso a nivel de root a través de una cadena de ataque HTTP de 4 pasos.
Vulnerabilidad: Manipulación de archivos de sesión mediante inyección CRLF en el manejador de autenticación HTTP Basic de cpsrvd CVE: CVE-2026-41940 CVSS: 9.8 (Crítico) CWE: CWE-93 (Inyección CRLF) / CWE-306 (Autenticación Ausente) Afectado: Versiones de cPanel & WHM anteriores 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 Puertos: 2082/2083 (cPanel), 2086/2087 (WHM), 2095/2096 (Webmail)
CAUSA RAÍZ TÉCNICA: El manejador de autenticación HTTP Basic de cpsrvd almacena la contraseña suministrada textualmente en el archivo de sesión de pre-autenticación a través de Cpanel::Session::saveSession() -- omitiendo los envoltorios de sanitización Cpanel::Session::create() / Cpanel::Session::Modify::save(), que llaman a filter_sessiondata() para eliminar CR/LF. Dado que saveSession() no llama a filter_sessiondata(), cualquier CR/LF en la contraseña se escribe en el archivo de sesión sin procesar como saltos de línea literales.
Cuando una solicitud es rechazada por fallar en la verificación del token de seguridad vinculado a la URL, el manejador do_token_denied() de cpsrvd invoca Cpanel::Session::Modify::new($session, nocache => 1). La bandera nocache => 1 fuerza un re-análisis del archivo de sesión sin procesar (línea por línea clave=valor) en lugar de cargar la caché JSON. Las líneas divididas por CRLF del campo pass controlado por el atacante ahora se tratan como registros clave=valor separados. Luego, Modify::save() reescribe la caché JSON con todas las claves analizadas -- incluyendo las del atacante -- promovidas a entradas de sesión de nivel superior.
Después de la regeneración, la sesión contiene user=root, hasroot=1, tfa_verified=1, un cp_security_token elegido por el atacante y un successful_internal_auth_with_timestamp fresco. cpsrvd trata la sesión como completamente autenticada.
CADENA DE ATAQUE (4 peticiones HTTP):
NOTA: Existe una condición de carrera debido al orden de iteración aleatorio de hash de Perl. El cp_security_token original (sin establecer) puede sobrescribir el inyectado. Múltiples reintentos hacen que la cadena sea confiable.
DESCARGO DE RESPONSABILIDAD: Esta herramienta se proporciona únicamente para pruebas de seguridad autorizadas y fines de investigación. El uso no autorizado contra sistemas que no posee o para los que no tiene permiso explícito para probar es ilegal.