AWS - EC2 Privesc
EC2
Para más información sobre EC2 consulta:
pageAWS - EC2, EBS, ELB, SSM, VPC & VPN Enumiam:PassRole
, ec2:RunInstances
iam:PassRole
, ec2:RunInstances
Un atacante podría crear una instancia adjuntando un rol IAM y luego acceder a la instancia para robar las credenciales del rol IAM desde el punto de conexión de metadatos.
Acceso vía SSH
Ejecuta una nueva instancia usando una clave ssh creada (--key-name
) y luego accede por ssh (si deseas crear una nueva, es posible que necesites tener el permiso ec2:CreateKeyPair
).
Acceso a través de una shell inversa en datos de usuario
Puedes ejecutar una nueva instancia utilizando un dato de usuario (--user-data
) que te enviará una shell inversa. No es necesario especificar un grupo de seguridad de esta manera.
Ten cuidado con GuardDuty si utilizas las credenciales del rol IAM fuera de la instancia:
pageAWS - GuardDuty EnumImpacto potencial: Escalada directa a cualquier rol de EC2 adjunto a perfiles de instancia existentes.
Escalada de privilegios a ECS
Con este conjunto de permisos también podrías crear una instancia de EC2 y registrarla dentro de un clúster de ECS. De esta manera, los servicios de ECS se ejecutarán dentro de la instancia de EC2 a la que tienes acceso y luego podrás penetrar en esos servicios (contenedores de Docker) y robar los roles de ECS adjuntos.
Para aprender cómo forzar a los servicios de ECS a ejecutarse en esta nueva instancia de EC2, verifica:
pageAWS - ECS PrivescSi no puedes crear una nueva instancia pero tienes el permiso ecs:RegisterContainerInstance
, es posible que puedas registrar la instancia dentro del clúster y llevar a cabo el ataque comentado.
Impacto potencial: Escalada de privilegios directa a roles de ECS adjuntos a tareas.
iam:PassRole
, iam:AddRoleToInstanceProfile
iam:PassRole
, iam:AddRoleToInstanceProfile
Similar al escenario anterior, un atacante con estos permisos podría cambiar el rol de IAM de una instancia comprometida para robar nuevas credenciales.
Dado que un perfil de instancia solo puede tener 1 rol, si el perfil de instancia ya tiene un rol (caso común), también necesitarás iam:RemoveRoleFromInstanceProfile
.
Impacto potencial: Escalada de privilegios directa a un rol EC2 diferente (necesitas haber comprometido una instancia AWS EC2 y tener algunos permisos adicionales o un estado de perfil de instancia específico).
iam:PassRole
(( ec2:AssociateIamInstanceProfile
& ec2:DisassociateIamInstanceProfile
) || ec2:ReplaceIamInstanceProfileAssociation
)
iam:PassRole
(( ec2:AssociateIamInstanceProfile
& ec2:DisassociateIamInstanceProfile
) || ec2:ReplaceIamInstanceProfileAssociation
)Con estos permisos es posible cambiar el perfil de instancia asociado a una instancia, por lo que si el ataque ya tenía acceso a una instancia, podrá robar credenciales para más roles de perfil de instancia cambiando el asociado a ella.
Si tiene un perfil de instancia, puedes eliminar el perfil de instancia (
ec2:DisassociateIamInstanceProfile
) y asociarlo *
o reemplazar el perfil de instancia de la instancia comprometida (
ec2:ReplaceIamInstanceProfileAssociation
). *
Impacto potencial: Escalada de privilegios directa a un rol EC2 diferente (necesitas haber comprometido una instancia AWS EC2 y algunos permisos adicionales o un estado de perfil de instancia específico).
ec2:RequestSpotInstances
,iam:PassRole
ec2:RequestSpotInstances
,iam:PassRole
Un atacante con los permisos ec2:RequestSpotInstances
y iam:PassRole
puede solicitar una Instancia Spot con un Rol EC2 adjunto y un rev shell en los datos de usuario.
Una vez que se ejecute la instancia, puede robar el rol IAM.
ec2:ModifyInstanceAttribute
ec2:ModifyInstanceAttribute
Un atacante con el permiso ec2:ModifyInstanceAttribute
puede modificar los atributos de las instancias. Entre ellos, puede cambiar los datos de usuario, lo que implica que puede hacer que la instancia ejecute datos arbitrarios. Lo cual puede ser utilizado para obtener una shell reversa en la instancia EC2.
Ten en cuenta que los atributos solo se pueden modificar cuando la instancia está detenida, por lo que se necesitan los permisos ec2:StopInstances
y ec2:StartInstances
.
Impacto potencial: Escalada de privilegios directa a cualquier Rol IAM de EC2 adjunto a una instancia creada.
ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
,ec2:ModifyLaunchTemplate
ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
,ec2:ModifyLaunchTemplate
Un atacante con los permisos ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
y ec2:ModifyLaunchTemplate
puede crear una nueva versión de Plantilla de Lanzamiento con un rev shell en los datos de usuario y cualquier Rol IAM de EC2 en él, cambiar la versión predeterminada y cualquier grupo de escalado automático que utilice esa Plantilla de Lanzamiento configurada para usar la última o la versión predeterminada volverá a ejecutar las instancias utilizando esa plantilla y ejecutará el rev shell.
Impacto potencial: Escalada de privilegios directa a un rol EC2 diferente.
autoscaling:CreateLaunchConfiguration
, autoscaling:CreateAutoScalingGroup
, iam:PassRole
autoscaling:CreateLaunchConfiguration
, autoscaling:CreateAutoScalingGroup
, iam:PassRole
Un atacante con los permisos autoscaling:CreateLaunchConfiguration
,autoscaling:CreateAutoScalingGroup
,iam:PassRole
puede crear una Configuración de inicio con un Rol IAM y un rev shell dentro de los datos de usuario, luego crear un grupo de escalado automático a partir de esa configuración y esperar a que el rev shell robe el Rol IAM.
Impacto Potencial: Escalada de privilegios directos a un rol EC2 diferente.
!autoscaling
!autoscaling
El conjunto de permisos ec2:CreateLaunchTemplate
y autoscaling:CreateAutoScalingGroup
no son suficientes para escalar privilegios a un rol IAM porque para adjuntar el rol especificado en la Configuración de inicio o en la Plantilla de inicio necesitas los permisos iam:PassRole
y ec2:RunInstances
(que es una escalada de privilegios conocida).
ec2-instance-connect:SendSSHPublicKey
ec2-instance-connect:SendSSHPublicKey
Un atacante con el permiso ec2-instance-connect:SendSSHPublicKey
puede agregar una clave ssh a un usuario y usarla para acceder (si tiene acceso ssh a la instancia) o para escalar privilegios.
Impacto Potencial: Escalada de privilegios directos a los roles IAM de EC2 adjuntos a las instancias en ejecución.
ec2-instance-connect:SendSerialConsoleSSHPublicKey
ec2-instance-connect:SendSerialConsoleSSHPublicKey
Un atacante con el permiso ec2-instance-connect:SendSerialConsoleSSHPublicKey
puede agregar una clave ssh a una conexión serial. Si la conexión serial no está habilitada, el atacante necesita el permiso ec2:EnableSerialConsoleAccess
para habilitarla.
Para conectarse al puerto serial también se necesita conocer el nombre de usuario y la contraseña de un usuario dentro de la máquina.
Este método no es tan útil para la escalada de privilegios ya que se necesita conocer un nombre de usuario y una contraseña para explotarlo.
Impacto potencial: (Altamente improbable) Escalada de privilegios directa a los roles IAM de EC2 adjuntos a las instancias en ejecución.
Referencias
Última actualización