AWS - EC2 Privesc
EC2
Pour plus d'informations sur EC2, consultez :
pageAWS - EC2, EBS, ELB, SSM, VPC & VPN Enumiam:PassRole
, ec2:RunInstances
iam:PassRole
, ec2:RunInstances
Un attaquant pourrait créer une instance en attachant un rôle IAM, puis accéder à l'instance pour voler les informations d'identification du rôle IAM à partir de l'extrémité de métadonnées.
Accès via SSH
Exécutez une nouvelle instance en utilisant une clé ssh créée (--key-name
) puis connectez-vous en ssh (si vous souhaitez en créer une nouvelle, vous pourriez avoir besoin de l'autorisation ec2:CreateKeyPair
).
Accès via un shell inversé dans les données utilisateur
Vous pouvez exécuter une nouvelle instance en utilisant des données utilisateur (--user-data
) qui vous enverront un shell inversé. Vous n'avez pas besoin de spécifier un groupe de sécurité de cette manière.
Faites attention à GuradDuty si vous utilisez les informations d'identification du rôle IAM en dehors de l'instance:
pageAWS - GuardDuty EnumImpact potentiel: Élévation de privilèges directe vers n'importe quel rôle EC2 attaché aux profils d'instance existants.
Élévation de privilèges vers ECS
Avec cet ensemble d'autorisations, vous pourriez également créer une instance EC2 et l'enregistrer à l'intérieur d'un cluster ECS. De cette manière, les services ECS seront exécutés à l'intérieur de l'instance EC2 où vous avez accès, puis vous pourrez pénétrer ces services (conteneurs Docker) et voler les rôles ECS qui y sont attachés.
Pour apprendre comment forcer les services ECS à s'exécuter dans cette nouvelle instance EC2, consultez :
pageAWS - ECS PrivescSi vous ne pouvez pas créer une nouvelle instance mais avez l'autorisation ecs:RegisterContainerInstance
, vous pourriez être en mesure d'enregistrer l'instance à l'intérieur du cluster et effectuer l'attaque commentée.
Impact potentiel : Élévation de privilèges directe vers les rôles ECS attachés aux tâches.
iam:PassRole
, iam:AddRoleToInstanceProfile
iam:PassRole
, iam:AddRoleToInstanceProfile
Similaire au scénario précédent, un attaquant avec ces autorisations pourrait changer le rôle IAM d'une instance compromise pour pouvoir voler de nouvelles informations d'identification.
Comme un profil d'instance ne peut avoir qu'un seul rôle, si le profil d'instance a déjà un rôle (cas courant), vous aurez également besoin de iam:RemoveRoleFromInstanceProfile
.
Si le profil d'instance a un rôle et que l'attaquant ne peut pas le supprimer, il existe une autre solution. Il pourrait trouver un profil d'instance sans rôle ou en créer un nouveau (iam:CreateInstanceProfile
), ajouter le rôle à ce profil d'instance (comme discuté précédemment), et associer le profil d'instance compromis à une instance compromise :
Si l'instance n'a aucun profil d'instance (
ec2:AssociateIamInstanceProfile
) *
Impact potentiel : Élévation de privilèges directe vers un rôle EC2 différent (vous devez avoir compromis une instance AWS EC2 et avoir des autorisations supplémentaires ou un statut de profil d'instance spécifique).
iam:PassRole
(( ec2:AssociateIamInstanceProfile
& ec2:DisassociateIamInstanceProfile
) || ec2:ReplaceIamInstanceProfileAssociation
)
iam:PassRole
(( ec2:AssociateIamInstanceProfile
& ec2:DisassociateIamInstanceProfile
) || ec2:ReplaceIamInstanceProfileAssociation
)Avec ces autorisations, il est possible de changer le profil d'instance associé à une instance. Ainsi, si l'attaque avait déjà accès à une instance, elle pourra voler des informations d'identification pour davantage de rôles de profil d'instance en changeant celui qui lui est associé.
S'il possède un profil d'instance, vous pouvez le supprimer (
ec2:DisassociateIamInstanceProfile
) et l'associer *
ou remplacer le profil d'instance de l'instance compromis (
ec2:ReplaceIamInstanceProfileAssociation
). *
Impact potentiel : Élévation de privilèges directe vers un rôle EC2 différent (vous devez avoir compromis une instance AWS EC2 et avoir des autorisations supplémentaires ou un statut de profil d'instance spécifique).
ec2:RequestSpotInstances
,iam:PassRole
ec2:RequestSpotInstances
,iam:PassRole
Un attaquant avec les autorisations ec2:RequestSpotInstances
et iam:PassRole
peut demander une instance Spot avec un rôle EC2 attaché et un shell inversé dans les données utilisateur.
Une fois l'instance lancée, il peut voler le rôle IAM.
ec2:ModifyInstanceAttribute
ec2:ModifyInstanceAttribute
Un attaquant avec le ec2:ModifyInstanceAttribute
peut modifier les attributs des instances. Parmi eux, il peut changer les données utilisateur, ce qui implique qu'il peut faire fonctionner l'instance avec des données arbitraires. Ce qui peut être utilisé pour obtenir un shell inversé sur l'instance EC2.
Notez que les attributs ne peuvent être modifiés que lorsque l'instance est arrêtée, donc les autorisations ec2:StopInstances
et ec2:StartInstances
.
Impact potentiel : Élévation de privilèges directe vers n'importe quel rôle IAM EC2 attaché à une instance créée.
ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
,ec2:ModifyLaunchTemplate
ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
,ec2:ModifyLaunchTemplate
Un attaquant avec les autorisations ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
et ec2:ModifyLaunchTemplate
peut créer une nouvelle version de Launch Template avec un shell inversé dans les données utilisateur et n'importe quel rôle IAM EC2 dessus, changer la version par défaut, et n'importe quel groupe Autoscaler utilisant ce Launch Template qui est configuré pour utiliser la dernière ou la version par défaut relancera les instances en utilisant ce modèle et exécutera le shell inversé.
Impact potentiel : Élévation de privilèges directe vers un rôle EC2 différent.
autoscaling:CreateLaunchConfiguration
, autoscaling:CreateAutoScalingGroup
, iam:PassRole
autoscaling:CreateLaunchConfiguration
, autoscaling:CreateAutoScalingGroup
, iam:PassRole
Un attaquant avec les autorisations autoscaling:CreateLaunchConfiguration
, autoscaling:CreateAutoScalingGroup
, iam:PassRole
peut créer une configuration de lancement avec un rôle IAM et un shell inversé dans les données utilisateur, puis créer un groupe d'auto-scaling à partir de cette configuration et attendre que le shell inversé vole le rôle IAM.
Impact potentiel : Élévation de privilèges directe vers un rôle EC2 différent.
!autoscaling
!autoscaling
L'ensemble des autorisations ec2:CreateLaunchTemplate
et autoscaling:CreateAutoScalingGroup
ne sont pas suffisantes pour escalader les privilèges vers un rôle IAM car pour attacher le rôle spécifié dans la configuration de lancement ou dans le modèle de lancement vous avez besoin des autorisations iam:PassRole
et ec2:RunInstances
(ce qui est une élévation de privilèges connue).
ec2-instance-connect:SendSSHPublicKey
ec2-instance-connect:SendSSHPublicKey
Un attaquant avec l'autorisation ec2-instance-connect:SendSSHPublicKey
peut ajouter une clé ssh à un utilisateur et l'utiliser pour y accéder (s'il a un accès ssh à l'instance) ou pour escalader les privilèges.
Impact potentiel : Élévation de privilèges directe vers les rôles IAM EC2 attachés aux instances en cours d'exécution.
ec2-instance-connect:SendSerialConsoleSSHPublicKey
ec2-instance-connect:SendSerialConsoleSSHPublicKey
Un attaquant avec la permission ec2-instance-connect:SendSerialConsoleSSHPublicKey
peut ajouter une clé SSH à une connexion série. Si la connexion série n'est pas activée, l'attaquant a besoin de la permission ec2:EnableSerialConsoleAccess
pour l'activer.
Pour se connecter au port série, vous devez également connaître le nom d'utilisateur et le mot de passe d'un utilisateur à l'intérieur de la machine.
Cette méthode n'est pas très utile pour l'élévation de privilèges car vous devez connaître un nom d'utilisateur et un mot de passe pour l'exploiter.
Impact potentiel : (Très improbable) Élévation de privilèges directe vers les rôles IAM EC2 attachés aux instances en cours d'exécution.
Références
Dernière mise à jour