AWS - EC2 Privesc
EC2
Per ulteriori informazioni su EC2 controlla:
pageAWS - EC2, EBS, ELB, SSM, VPC & VPN Enumiam:PassRole
, ec2:RunInstances
iam:PassRole
, ec2:RunInstances
Un attaccante potrebbe creare un'istanza collegando un ruolo IAM e quindi accedere all'istanza per rubare le credenziali del ruolo IAM dall'endpoint dei metadati.
Accesso tramite SSH
Esegui una nuova istanza utilizzando una chiave ssh creata (--key-name
) e quindi accedi tramite ssh (se vuoi crearne una nuova potresti avere bisogno dell'autorizzazione ec2:CreateKeyPair
).
Accesso tramite shell inversa nei dati dell'utente
È possibile eseguire una nuova istanza utilizzando i dati dell'utente (--user-data
) che invieranno una shell inversa. In questo modo non è necessario specificare il gruppo di sicurezza.
Fai attenzione a GuradDuty se utilizzi le credenziali del ruolo IAM al di fuori dell'istanza:
pageAWS - GuardDuty EnumPotenziale Impatto: Privesc diretto a qualsiasi ruolo EC2 collegato ai profili di istanza esistenti.
Privesc a ECS
Con questo insieme di autorizzazioni potresti anche creare un'istanza EC2 e registrarla all'interno di un cluster ECS. In questo modo, i servizi ECS verranno eseguiti all'interno dell'istanza EC2 a cui hai accesso e quindi puoi penetrare quei servizi (contenitori docker) e rubare i loro ruoli ECS collegati.
Per imparare come forzare i servizi ECS ad essere eseguiti in questa nuova istanza EC2, controlla:
pageAWS - ECS PrivescSe non puoi creare una nuova istanza ma hai il permesso ecs:RegisterContainerInstance
, potresti essere in grado di registrare l'istanza all'interno del cluster e eseguire l'attacco commentato.
Impatto potenziale: Privesc diretto ai ruoli ECS collegati ai task.
iam:PassRole
, iam:AddRoleToInstanceProfile
iam:PassRole
, iam:AddRoleToInstanceProfile
Similmente allo scenario precedente, un attaccante con questi permessi potrebbe cambiare il ruolo IAM di un'istanza compromessa in modo da poter rubare nuove credenziali.
Poiché un profilo di istanza può avere solo un ruolo, se il profilo di istanza ha già un ruolo (caso comune), avrai anche bisogno di iam:RemoveRoleFromInstanceProfile
.
Se il profilo dell'istanza ha un ruolo e l'attaccante non può rimuoverlo, c'è un altro modo. Potrebbe trovare un profilo dell'istanza senza un ruolo o crearne uno nuovo (iam:CreateInstanceProfile
), aggiungere il ruolo a quel profilo dell'istanza (come discusso in precedenza) e associare il profilo dell'istanza compromesso a un'istanza compromessa:
Se l'istanza non ha alcun profilo dell'istanza (
ec2:AssociateIamInstanceProfile
) *
Impatto potenziale: Privesc diretto a un ruolo EC2 diverso (è necessario aver compromesso un'istanza AWS EC2 e avere alcune autorizzazioni extra o uno stato di profilo di istanza specifico).
iam:PassRole
(( ec2:AssociateIamInstanceProfile
& ec2:DisassociateIamInstanceProfile
) || ec2:ReplaceIamInstanceProfileAssociation
)
iam:PassRole
(( ec2:AssociateIamInstanceProfile
& ec2:DisassociateIamInstanceProfile
) || ec2:ReplaceIamInstanceProfileAssociation
)Con queste autorizzazioni è possibile cambiare il profilo di istanza associato a un'istanza, quindi se l'attacco ha già accesso a un'istanza, sarà in grado di rubare le credenziali per più ruoli di profilo di istanza cambiando quello associato ad essa.
Se ha un profilo di istanza, è possibile rimuovere il profilo di istanza (
ec2:DisassociateIamInstanceProfile
) e associarlo *
o sostituisci il profilo dell'istanza dell'istanza compromessa (
ec2:ReplaceIamInstanceProfileAssociation
). *
Impatto potenziale: Escalation dei privilegi diretta a un diverso ruolo EC2 (è necessario aver compromesso un'istanza AWS EC2 e avere alcune autorizzazioni extra o uno stato di profilo di istanza specifico).
ec2:RequestSpotInstances
,iam:PassRole
ec2:RequestSpotInstances
,iam:PassRole
Un attaccante con le autorizzazioni ec2:RequestSpotInstances
e iam:PassRole
può richiedere un'istanza Spot con un ruolo EC2 allegato e un rev shell nei dati utente.
Una volta che l'istanza viene eseguita, può rubare il ruolo IAM.
ec2:ModifyInstanceAttribute
ec2:ModifyInstanceAttribute
Un attaccante con il permesso ec2:ModifyInstanceAttribute
può modificare gli attributi delle istanze. Tra questi, può cambiare i dati dell'utente, il che implica che può far eseguire all'istanza dati arbitrari. Ciò può essere utilizzato per ottenere una shell inversa sull'istanza EC2.
Si noti che gli attributi possono essere modificati solo quando l'istanza è ferma, quindi sono necessari i permessi ec2:StopInstances
e ec2:StartInstances
.
Impatto potenziale: Privesc diretta a qualsiasi ruolo IAM EC2 collegato a un'istanza creata.
ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
,ec2:ModifyLaunchTemplate
ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
,ec2:ModifyLaunchTemplate
Un attaccante con i permessi ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
e ec2:ModifyLaunchTemplate
può creare una nuova versione del Launch Template con un rev shell nei dati utente e qualsiasi ruolo IAM EC2 su di esso, cambiare la versione predefinita e qualsiasi gruppo di autoscaling che utilizza quel Launch Template configurato per utilizzare la versione più recente o quella predefinita eseguirà nuovamente le istanze utilizzando quel template ed eseguirà il rev shell.
Potenziale Impatto: Privesc diretta a un ruolo EC2 diverso.
autoscaling:CreateLaunchConfiguration
, autoscaling:CreateAutoScalingGroup
, iam:PassRole
autoscaling:CreateLaunchConfiguration
, autoscaling:CreateAutoScalingGroup
, iam:PassRole
Un attaccante con i permessi autoscaling:CreateLaunchConfiguration
,autoscaling:CreateAutoScalingGroup
,iam:PassRole
può creare una configurazione di lancio con un ruolo IAM e un rev shell all'interno dei dati utente, quindi creare un gruppo di autoscaling da quella configurazione e attendere che il rev shell rubare il ruolo IAM.
Potenziale impatto: Privesc diretta a un ruolo EC2 diverso.
!autoscaling
!autoscaling
Il set di permessi ec2:CreateLaunchTemplate
e autoscaling:CreateAutoScalingGroup
non è sufficiente per elevare i privilegi a un ruolo IAM perché per allegare il ruolo specificato nella configurazione di avvio o nel modello di avvio è necessario avere i permessi iam:PassRole
e ec2:RunInstances
(che è una privesc nota).
ec2-instance-connect:SendSSHPublicKey
ec2-instance-connect:SendSSHPublicKey
Un attaccante con il permesso ec2-instance-connect:SendSSHPublicKey
può aggiungere una chiave ssh a un utente e usarla per accedervi (se ha accesso ssh all'istanza) o per elevare i privilegi.
Impatto potenziale: Privesc diretto ai ruoli IAM EC2 collegati alle istanze in esecuzione.
ec2-instance-connect:SendSerialConsoleSSHPublicKey
ec2-instance-connect:SendSerialConsoleSSHPublicKey
Un attaccante con il permesso ec2-instance-connect:SendSerialConsoleSSHPublicKey
può aggiungere una chiave ssh a una connessione seriale. Se la connessione seriale non è abilitata, l'attaccante ha bisogno del permesso ec2:EnableSerialConsoleAccess
per abilitarla.
Per connettersi alla porta seriale è anche necessario conoscere il nome utente e la password di un utente all'interno della macchina.
Questa modalità non è molto utile per l'escalation dei privilegi in quanto è necessario conoscere un nome utente e una password per sfruttarla.
Impatto potenziale: (Altamente improbabile) Escalation diretta dei privilegi verso i ruoli IAM EC2 collegati alle istanze in esecuzione.
Riferimenti
Last updated