PE-SHI
shimit
Prueba de concepto de CyberArk para el ataque Golden SAML — forja una SAMLResponse firmada para crear una sesión de consola AWS como cualquier usuario federado.
Sitio oficialVolver al catálogo
RESUMEN
shimit (github.com/cyberark/shimit) es una prueba de concepto en Python del equipo de investigación de CyberArk que implementa el ataque Golden SAML: con la clave privada de firma SAML y el certificado de un Identity Provider en mano, un atacante puede construir y firmar una SAMLResponse arbitraria afirmando ser cualquier usuario con cualquier conjunto de claims — sin tocar el IdP, el MFA, ni ninguna credencial perteneciente a ese usuario.
Su implementación actual apunta a AWS como Service Provider: shimit construye la aserción forjada, la firma con la clave/certificado provistos, y llama directamente a la API `AssumeRoleWithSAML` de AWS con esa respuesta para obtener credenciales temporales de AWS para el rol elegido — que luego pueden usarse directamente en la AWS CLI. El README aclara que el soporte de AWS es una prueba de concepto y que otros service providers federados por SAML (más allá de AWS) quedan para que la comunidad los agregue.
CASOS DE USO
Casos de uso en un engagement
- 01
Demostrar el impacto de Golden SAML contra AWS una vez que un engagement de red team ha comprometido una clave/certificado de firma de ADFS.
- 02
Ilustrar por qué el material de clave de firma de un IdP SAML merece la misma protección que las credenciales de administrador de dominio.
- 03
Generar credenciales temporales de AWS para un rol/nombre de sesión elegido, demostrando acceso irrestricto a la cuenta.
- 04
Validar si CloudTrail y el SIEM marcan una llamada a `AssumeRoleWithSAML` respaldada por una aserción forjada.
PRIMEROS PASOS
En post-explotación, una vez comprometidos el certificado de firma y la clave privada de ADFS (u otro IdP SAML), para demostrar que ese compromiso otorga acceso irrestricto a las cuentas AWS federadas.
- Clona el repositorio e instala sus dependencias de Python.
- Confirma que el engagement ya ha recuperado la clave privada de firma SAML (PEM) y el certificado (PEM) del ADFS/IdP objetivo — shimit no los extrae por sí mismo.
- Identifica el ID de la cuenta AWS objetivo, la URL de trust/issuer del IdP y el nombre del rol federado a asumir.
- Ejecuta shimit con la clave, el certificado, el usuario objetivo, el rol y el ID de cuenta para firmar una SAMLResponse forjada y llamar a `AssumeRoleWithSAML`.
- Exporta la clave de acceso, la clave secreta y el token de sesión de AWS temporales devueltos a la AWS CLI para confirmar que la sesión funciona.
python shimit.py -idp http://adfs.lab.local/adfs/services/trust -pk key.pem -c cert.pem -u domain\admin -n admin@domain.com -r ADFS-admin -id 123456789012ANTES DE USARLA
Qué revisar antes de lanzarla
shimit asume que la parte más difícil — robar la clave privada de firma SAML del IdP — ya está hecha; es una herramienta de post-explotación/demostración de impacto, no una forma de obtener esa clave.
Una llamada forjada a `AssumeRoleWithSAML` de todos modos queda registrada en AWS CloudTrail bajo la sesión del rol asumido — coordina con el cliente la actividad esperada y ten un plan de rollback/rotación para el certificado de firma comprometido.
Rotar el certificado de firma SAML del IdP invalida de inmediato todas las sesiones que se puedan generar con esta técnica — recomienda la rotación del certificado como remediación, no solo restablecer contraseñas.