
Escáner de alta fidelidad para CVE-2026-41940 (bypass de autenticación de cPanel y WHM)
Un escáner de alta fidelidad para la omisión de autenticación de cPanel/WHM rastreada como CVE-2026-41940. Identifica hosts vulnerables sin producir los falsos negativos comunes en las pruebas de concepto y detecciones públicas, y sin activar el bloqueo de cuenta ni los mecanismos de lista de permisos de IP raíz que interfieren con el escaneo ingenuo.
La herramienta también incluye una cadena de explotación opcional e independiente para una vulnerabilidad de recorrido de rutas CalDAV de la misma familia en cpdavd (puertos 2079 plano / 2080 TLS) — CVE-2026-29205 — que permite a un atacante remoto leer archivos arbitrarios como root una vez que un pequeño paso de configuración impulsado por SMTP tiene éxito. cPanel 11.134.0.26 corrige el error subyacente de ciclo de vida de RAII, por lo que la lectura ahora se ejecuta como el propietario de la cuenta sin privilegios; el recorrido en sí todavía llega a cpdavd pero no puede escalar más allá de lo que esa cuenta ya puede leer. La cadena CalDAV está controlada por --exploit y está desactivada por defecto porque envía correos electrónicos reales y lee archivos de objetivos confirmados — consulte la sección Modo de explotación (activo).
La mayoría de las detecciones públicas para CVE-2026-41940 comparten tres problemas. Este escáner aborda cada uno de ellos.
Puede leer nuestra publicación de blog sobre esta técnica de detección aquí: https://slcyber.io/research-center/high-fidelity-check-for-the-cpanel-authentication-bypass-cve-2026-41940/
La configuración de Apache por vhost de cPanel instala un ProxyPass que reenvía /___proxy_subdomain_whm a 127.0.0.1:2086 y /___proxy_subdomain_cpanel a 127.0.0.1:2080 independientemente del encabezado Host de la solicitud. La RewriteCond solo restringe la reescritura que asigna el subdominio de administración a la ruta de proxy; el ProxyPass en sí es incondicional. Al acceder a estas rutas en cualquier vhost servido por un Apache administrado por cPanel se llega al mismo backend vulnerable que con los puertos de administración.
Los escáneres que solo sondean los puertos 2082/2083/2086/2087 reportarán un host como no vulnerable cuando esos puertos están protegidos por firewall, aunque el error sea totalmente accesible a través de 443. Este escáner sondea 2087, 2083 y las dos rutas de proxy en 443 por defecto.
cPanel incluye cphulkd, que bloquea cuentas después de un pequeño número de intentos de contraseña fallidos, y authorized_whm_root_ips, que restringe los inicios de sesión de root a una lista configurada de direcciones de origen. Un escáner que explota la omisión intentando inyectar una sesión para root:
Este escáner evita ambos problemas en el lado de WHM inyectando expired=1 en la carga útil de la sesión bajo un nombre de usuario generado aleatoriamente. La inyección de sesión se verifica visitando la URL cpsessXXXX resultante y buscando msg_code:[expired_session] en el cuerpo de la respuesta, que solo está presente cuando la inyección tuvo éxito. No se ataca ninguna cuenta real, por lo que ninguna cuenta real puede ser bloqueada, y la lista de permisos de root es irrelevante porque no se intenta ningún inicio de sesión de root.
El demonio de cPanel (cpaneld, puertos 2083 y la ruta /___proxy_subdomain_cpanel) requiere que el nombre de usuario proporcionado corresponda a una cuenta de cPanel existente en el disco (-f /var/cpanel/users/$user). Un nombre de usuario de root nunca satisfará esta comprobación porque root es un usuario del sistema, no un usuario de cPanel. Las detecciones que solo prueban root producen falsos negativos en esta superficie. Este escáner utiliza una lista de palabras configurable de nombres de usuario comunes de cPanel contra la superficie de cPanel y recurre a la ruta de nombre de usuario aleatorio en la superficie de WHM, que no tiene tal restricción.
Para cada objetivo, el escáner realiza los siguientes pasos por superficie:
GET /login y lee el encabezado Set-Cookie para whostmgrsession (WHM) o cpsession (cPanel). La cookie contiene un componente de nombre de sesión separado por comas.GET / con un encabezado Authorization: Basic cuyo valor decodificado es <user>:\xff\nexpired=1. El \nexpired=1 final es la carga útil de inyección de sesión. La cookie de sesión del paso 1 se reproduce sin modificaciones.Location de la respuesta y extrae el token cpsessXXXX.GET /<cpsessXXXX>/ con la cookie original y busca msg_code:[expired_session] en el cuerpo. Su presencia demuestra que la inyección de sesión tuvo éxito y que el host es vulnerable.En WHM (puerto 2087 y la ruta /___proxy_subdomain_whm en 443) el nombre de usuario es una u aleatoria seguida de diez caracteres hexadecimales. En cPanel (puerto 2083 y la ruta /___proxy_subdomain_cpanel en 443) el escáner recorre su lista de palabras de nombres de usuario y se detiene en la primera coincidencia.
Por defecto, el escáner sondea 2087, 2083 y 443 en ese orden y se detiene en cuanto cualquier superficie confirma la vulnerabilidad.
--exploit)CVE-2026-29205 — Actualización de seguridad WP2 de cPanel/WHM, 13 de mayo de 2026. Corregido en cPanel 11.134.0.26. El aviso rastrea la misma regresión de caída de privilegios de
cpdavdque esta cadena de explotación aprovecha.
Informe completo del error y la cadena de explotación: https://slcyber.io/research-center/new-age-of-collisions-reading-arbitrary-files-pre-auth-as-root-in-cpanel-cve-2026-29205
cpdavd en los puertos 2079 (HTTP plano) y 2080 (TLS) confía en la ruta <principal>/<collection>/... que construye al servir recursos CalDAV/CardDAV. Al crear una solicitud cuyo componente de ruta codifica segmentos .. y apuntarla a una carpeta maildir cuyo nombre en disco también codifica el recorrido (x-attachment-1-y), se puede obligar a cpdavd a leer cualquier archivo en el disco como root, independientemente de la propiedad o los permisos — incluidos /etc/shadow, /etc/passwd y los buzones de correo de cada usuario.
La defensa en profundidad que se suponía que debía reducir los privilegios al propietario de la cuenta antes de la lectura falló silenciosamente: el objeto Cpanel::AccessIds::ReducedPrivileges se construyó en contexto void, por lo que su destructor restauró los privilegios de root antes de que la lectura se ejecutara. cPanel 11.134.0.26 vincula el objeto a un my $privs léxico para que viva a través de la cadena -f / stat / open / read; en hosts parcheados, la lectura se ejecuta por tanto como el propietario de la cuenta sin privilegios en lugar de root.
La carpeta vulnerable debe existir en el disco antes de que la lectura funcione. cPanel crea automáticamente una carpeta llamada .x-attachment-1-y para el destinatario <user>+x-attachment-1-y@<domain> la primera vez que un correo electrónico llega a esa subdirección. La cadena es, por tanto: