Saltar al contenido
OPS // KITitspentest.sh

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.

  1. Clona el repositorio e instala sus dependencias de Python.
  2. 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.
  3. Identifica el ID de la cuenta AWS objetivo, la URL de trust/issuer del IdP y el nombre del rol federado a asumir.
  4. 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`.
  5. 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 — bash
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 123456789012

ANTES 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.

SIGUE EXPLORANDO

Ver toda la fase →