
L’Infrastructure as Code et l’adoption massive du cloud public ont transformé la manière dont les accès et les permissions sont gérés. Sur AWS, une mauvaise configuration IAM peut permettre une escalade de privilèges jusqu'à des permissions critiques, voire l'accès root. Cet article présente un scénario réaliste de privilege escalation en exploitant des faiblesses courantes.
Scénario d’attaque
Nous partons du principe que l’attaquant dispose de credentials valides (access key & secret) pour un utilisateur IAM à privilèges limités (Exploitation d'une SSRF sur une application web par exemple) mais avec des droits mal gerés comme :
iam:PassRole
lambda:CreateFunction
iam:ListRoles
sts:AssumeRole
logs:CreateLogGroup
logs:CreateLogStream
logs:PutLogEvents
L’objectif est de passer de cet utilisateur limité à un accès admin total.
Phase 1 : Enumération des permissions IAM
Pour commencer, il est crucial de cartographier les droits actuels.
Liste des policies attachées
Simuler les permissions d'un utilisateur
Phase 2 : Recherche d’un rôle cible avec privilèges élevés
Les erreurs classiques sont des rôles avec AdministratorAccess
ou une custom policy trop permissive, accessibles via iam:PassRole
.
Tester un rôle cible :
Phase 3 : Créer une Lambda malveillante
Le code de la Lambda assume le rôle cible et imprime les credentials STS dans les logs CloudWatch.
Code : lambda_function.py
Créer un zip exécutable
Créer la Lambda avec le rôle visé
Appeler la Lambda
Ou lire les credentials via CloudWatch Logs
Phase 4 : Utiliser les credentials temporaires pour escalader
Avec ces variables en place, vous pouvez exécuter n’importe quelle action :
Mitigations & bonnes pratiques
1. Limiter iam:PassRole
2. Auditer les permissions effectives
Utiliser Access Analyzer et IAM Access Advisor pour voir les droits effectivement utilisés.
3. Les logs et les alertes
Activez CloudTrail, reliez-le à une règle EventBridge ou GuardDuty pour détecter :
La création de Lambda non prévue
Les appels
sts:AssumeRole
Les usages de PassRole inhabituels
Bonus : Variante sans Lambda (via EC2 ou Glue)
Si lambda:CreateFunction
est restreint mais que l'utilisateur a ec2:RunInstances
, on peut utiliser userdata pour injecter du code et récupérer les mêmes credentials STS via instance profile.
Ce type d'attaque démontre la puissance destructrice de mauvaises configurations IAM. Il ne s'agit pas simplement de droits explicites mais d'interactions implicites entre les services. Une posture Zero Trust et une détection active sont cruciales.
Financial blog tips and tricks