AWS - EC2 Privesc
EC2
Para mais informações sobre o EC2 verifique:
pageAWS - EC2, EBS, ELB, SSM, VPC & VPN Enumiam:PassRole
, ec2:RunInstances
iam:PassRole
, ec2:RunInstances
Um atacante poderia criar uma instância anexando uma função IAM e então acessar a instância para roubar as credenciais da função IAM do endpoint de metadados.
Acesso via SSH
Execute uma nova instância usando uma chave ssh criada (--key-name
) e então acesse-a via ssh (se você deseja criar uma nova, talvez precise da permissão ec2:CreateKeyPair
).
Acesso via shell reverso em dados do usuário
Você pode executar uma nova instância usando um dados do usuário (--user-data
) que enviará um shell reverso. Você não precisa especificar um grupo de segurança dessa maneira.
Tenha cuidado com o GuardDuty se você usar as credenciais da função IAM fora da instância:
pageAWS - GuardDuty EnumImpacto Potencial: Privesc direto para qualquer função EC2 anexada aos perfis de instância existentes.
Privesc para ECS
Com esse conjunto de permissões, você também poderia criar uma instância EC2 e registrá-la dentro de um cluster ECS. Dessa forma, os serviços ECS serão executados dentro da instância EC2 onde você tem acesso e então pode penetrar nesses serviços (contêineres docker) e roubar as funções ECS anexadas.
Para aprender como forçar os serviços ECS a serem executados nesta nova instância EC2, verifique:
pageAWS - ECS PrivescSe você não puder criar uma nova instância mas tiver permissão ecs:RegisterContainerInstance
, talvez consiga registrar a instância dentro do cluster e realizar o ataque comentado.
Impacto Potencial: Privilégio direto para funções ECS anexadas a tarefas.
iam:PassRole
, iam:AddRoleToInstanceProfile
iam:PassRole
, iam:AddRoleToInstanceProfile
Semelhante ao cenário anterior, um invasor com essas permissões poderia alterar a função IAM de uma instância comprometida para roubar novas credenciais.
Como um perfil de instância só pode ter 1 função, se o perfil de instância já tiver uma função (caso comum), você também precisará de iam:RemoveRoleFromInstanceProfile
.
Impacto Potencial: Privesc direto para um papel EC2 diferente (você precisa ter comprometido uma instância AWS EC2 e alguma permissão extra ou status de perfil de instância específico).
iam:PassRole
(( ec2:AssociateIamInstanceProfile
& ec2:DisassociateIamInstanceProfile
) || ec2:ReplaceIamInstanceProfileAssociation
)
iam:PassRole
(( ec2:AssociateIamInstanceProfile
& ec2:DisassociateIamInstanceProfile
) || ec2:ReplaceIamInstanceProfileAssociation
)Com essas permissões, é possível alterar o perfil da instância associado a uma instância, então se o ataque já teve acesso a uma instância, ele será capaz de roubar credenciais para mais funções de perfil de instância alterando a associada a ela.
Se tiver um perfil de instância, você pode remover o perfil da instância (
ec2:DisassociateIamInstanceProfile
) e associá-lo *
ou substituir o perfil da instância do instance profile comprometido (
ec2:ReplaceIamInstanceProfileAssociation
). *
Impacto Potencial: Escalação de privilégios diretos para um papel EC2 diferente (você precisa ter comprometido uma instância AWS EC2 e alguma permissão extra ou status de perfil de instância específico).
ec2:RequestSpotInstances
,iam:PassRole
ec2:RequestSpotInstances
,iam:PassRole
Um atacante com as permissões ec2:RequestSpotInstances
e iam:PassRole
pode solicitar uma Instância Spot com um Papel EC2 anexado e um shell reverso nos dados do usuário.
Uma vez que a instância é executada, ele pode roubar o papel IAM.
ec2:ModifyInstanceAttribute
ec2:ModifyInstanceAttribute
Um atacante com a permissão ec2:ModifyInstanceAttribute
pode modificar os atributos das instâncias. Entre eles, ele pode alterar os dados do usuário, o que implica que ele pode fazer a instância executar dados arbitrários. Isso pode ser usado para obter um shell reverso na instância EC2.
Observe que os atributos só podem ser modificados quando a instância está parada, então as permissões ec2:StopInstances
e ec2:StartInstances
são necessárias.
Impacto Potencial: Privesc direto para qualquer Função IAM do EC2 anexada a uma instância criada.
ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
,ec2:ModifyLaunchTemplate
ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
,ec2:ModifyLaunchTemplate
Um atacante com as permissões ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
e ec2:ModifyLaunchTemplate
pode criar uma nova versão do Launch Template com um rev shell no user data e qualquer Função IAM do EC2 nele, alterar a versão padrão e qualquer grupo de Autoscaler usando esse Launch Template que está configurado para usar a última ou a versão padrão irá reexecutar as instâncias usando esse modelo e executará o rev shell.
Impacto Potencial: Privesc direto para uma função EC2 diferente.
autoscaling:CreateLaunchConfiguration
, autoscaling:CreateAutoScalingGroup
, iam:PassRole
autoscaling:CreateLaunchConfiguration
, autoscaling:CreateAutoScalingGroup
, iam:PassRole
Um atacante com as permissões autoscaling:CreateLaunchConfiguration
,autoscaling:CreateAutoScalingGroup
,iam:PassRole
pode criar uma Configuração de Lançamento com uma Função IAM e um shell reverso dentro dos dados do usuário, em seguida, criar um grupo de dimensionamento automático a partir dessa configuração e aguardar o shell reverso para roubar a Função IAM.
Impacto Potencial: Privesc direto para uma função EC2 diferente.
!autoscaling
!autoscaling
O conjunto de permissões ec2:CreateLaunchTemplate
e autoscaling:CreateAutoScalingGroup
não são suficientes para escalar privilégios para uma função IAM porque para anexar a função especificada na Configuração de Lançamento ou no Modelo de Lançamento você precisa das permissões iam:PassRole
e ec2:RunInstances
(que é um privesc conhecido).
ec2-instance-connect:SendSSHPublicKey
ec2-instance-connect:SendSSHPublicKey
Um atacante com a permissão ec2-instance-connect:SendSSHPublicKey
pode adicionar uma chave ssh a um usuário e usá-la para acessá-la (se ele tiver acesso ssh à instância) ou para escalar privilégios.
Impacto Potencial: Privesc direto para os papéis IAM do EC2 anexados às instâncias em execução.
ec2-instance-connect:SendSerialConsoleSSHPublicKey
ec2-instance-connect:SendSerialConsoleSSHPublicKey
Um atacante com a permissão ec2-instance-connect:SendSerialConsoleSSHPublicKey
pode adicionar uma chave ssh a uma conexão serial. Se a serial não estiver habilitada, o atacante precisa da permissão ec2:EnableSerialConsoleAccess
para habilitá-la.
Para se conectar à porta serial, você também precisa saber o nome de usuário e a senha de um usuário dentro da máquina.
Dessa forma não é tão útil para escalonamento de privilégios, pois é necessário saber um nome de usuário e senha para explorá-lo.
Impacto Potencial: (Altamente improvável) Escalonamento direto para os papéis IAM do EC2 anexados às instâncias em execução.
Referências
Última actualización