AWS - S3 Post Exploitation

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks

S3

For more information check:

AWS - S3, Athena & Glacier Enum

Sensitive Information

Parfois, vous pourrez trouver des informations sensibles lisibles dans les buckets. Par exemple, des secrets d’état terraform.

Pivoting

Different platforms could be using S3 to store sensitive assets.
For example, airflow could be storing DAGs code in there, or web pages could be directly served from S3. Un attaquant disposant de permissions d’écriture pourrait modifier le code depuis le bucket pour pivot vers d’autres plateformes, ou takeover accounts en modifiant des fichiers JS.

S3 Ransomware

Dans ce scĂ©nario, l’attaquant crĂ©e une clĂ© KMS (Key Management Service) dans son propre compte AWS ou dans un autre compte compromis. Il rend ensuite cette clĂ© accessible Ă  n’importe qui dans le monde, permettant Ă  tout utilisateur, rĂŽle ou compte AWS de chiffrer des objets avec cette clĂ©. Cependant, les objets ne peuvent pas ĂȘtre dĂ©chiffrĂ©s.

L’attaquant identifie un S3 bucket cible et obtient un accĂšs en Ă©criture dessus en utilisant diverses mĂ©thodes. Cela peut ĂȘtre dĂ» Ă  une mauvaise configuration du bucket l’exposant publiquement ou Ă  l’accĂšs de l’attaquant Ă  l’environnement AWS lui-mĂȘme. L’attaquant cible gĂ©nĂ©ralement les buckets contenant des informations sensibles telles que PII, PHI, les logs, les backups, et plus encore.

Pour dĂ©terminer si le bucket peut ĂȘtre ciblĂ© pour du ransomware, l’attaquant vĂ©rifie sa configuration. Cela inclut la vĂ©rification si S3 Object Versioning est activĂ© et si la multi-factor authentication delete (MFA delete) est activĂ©e. Si Object Versioning n’est pas activĂ©, l’attaquant peut procĂ©der. Si Object Versioning est activĂ© mais que MFA delete est dĂ©sactivĂ©, l’attaquant peut dĂ©sactiver Object Versioning. Si Ă  la fois Object Versioning et MFA delete sont activĂ©s, il devient plus difficile pour l’attaquant d’exĂ©cuter un ransomware sur ce bucket spĂ©cifique.

En utilisant l’API AWS, l’attaquant remplace chaque objet du bucket par une copie chiffrĂ©e utilisant sa clĂ© KMS. Cela chiffre effectivement les donnĂ©es du bucket, les rendant inaccessibles sans la clĂ©.

Pour exercer une pression supplĂ©mentaire, l’attaquant planifie la suppression de la clĂ© KMS utilisĂ©e dans l’attaque. Cela donne Ă  la cible une fenĂȘtre de 7 jours pour rĂ©cupĂ©rer ses donnĂ©es avant que la clĂ© soit supprimĂ©e et que les donnĂ©es deviennent irrĂ©mĂ©diablement perdues.

Enfin, l’attaquant peut uploader un fichier final, gĂ©nĂ©ralement nommĂ© “ransom-note.txt”, qui contient des instructions pour la cible sur la maniĂšre de rĂ©cupĂ©rer ses fichiers. Ce fichier est uploadĂ© sans chiffrement, probablement pour attirer l’attention de la cible et l’informer de l’attaque de ransomware.

SSE-C (Customer-Provided Key) Ransomware (Codefinger-like)

Une autre variante abuse de SSE-C (S3 server-side encryption with customer-provided keys). Avec SSE-C, le client fournit la clĂ© de chiffrement Ă  chaque requĂȘte et AWS ne stocke pas la clĂ©. Cela signifie que si un attaquant réécrit des objets en utilisant sa propre clĂ© SSE-C, les donnĂ©es de la victime deviennent illisibles Ă  moins que la victime puisse fournir cette clĂ© contrĂŽlĂ©e par l’attaquant.

  • Preconditions: Compromised AWS credentials (or any principal with the right permissions) and the ability to rewrite objects (e.g., s3:PutObject on the target keys/prefixes). This is often paired with the ability to set destructive lifecycle policies (see below), e.g. s3:PutLifecycleConfiguration.
  • Attack chain:
  1. Attacker generates a random 256-bit key (AES-256) and keeps it.
  2. Attacker rewrites existing objects (same object keys) using SSE-C headers so the stored object is now encrypted with the attacker key.
  3. Victim cannot download/decrypt without providing the SSE-C key (even if IAM permissions are fine).
  4. Attacker can delete the key (or simply never provide it) to make data unrecoverable.

Example (conceptual) CLI usage:

# Upload/overwrite an object encrypted with attacker-provided SSE-C key
aws s3 cp ./file s3://<BUCKET>/<KEY> \
--sse-c AES256 \
--sse-c-key <BASE64_32_BYTES>

# Download requires providing the same key again
aws s3 cp s3://<BUCKET>/<KEY> ./file \
--sse-c AES256 \
--sse-c-key <BASE64_32_BYTES>
Ajouter de la pression : abus du “timer” de cycle de vie

Pour supprimer les options de récupération (comme les anciennes versions), un attaquant peut associer des réécritures SSE-C à des rÚgles de cycle de vie qui expirent les objets et/ou suppriment les versions non actuelles aprÚs une courte période :

  • s3:PutLifecycleConfiguration sur le bucket permet Ă  un attaquant de programmer des suppressions sans Ă©mettre d’opĂ©rations delete explicites pour chaque objet/version.
  • Ceci est particuliĂšrement impactant lorsque la gestion des versions est activĂ©e, car cela peut supprimer l’ancienne version valide qui permettrait autrement la rĂ©cupĂ©ration.
Détection & atténuations
  • PrĂ©fĂ©rez SSE-KMS (ou SSE-S3) Ă  SSE-C sauf si vous avez une raison opĂ©rationnelle solide d’autoriser SSE-C.
  • Surveillez/alertez les requĂȘtes PutObject utilisant des en-tĂȘtes SSE-C (CloudTrail data events pour S3).
  • Surveillez/alertez les PutBucketLifecycleConfiguration inattendus (changements de lifecycle).
  • Surveillez/alertez les pics soudains d’activitĂ© d’écrasement (mĂȘmes clĂ©s mises Ă  jour rapidement) et les suppressions de delete-marker/version.
  • Restreindre les permissions Ă  haut risque : limitez s3:PutObject aux prĂ©fixes nĂ©cessaires ; restreignez fortement s3:PutLifecycleConfiguration et s3:PutBucketVersioning ; envisagez d’exiger MFA pour les actions d’administration sensibles (lorsque applicable) et utilisez des rĂŽles admin sĂ©parĂ©s avec approbations.
  • Posture de rĂ©cupĂ©ration : utilisez versioning, backups, et des copies immuables/hors ligne (S3 replication vers un compte protĂ©gĂ©, backup vaults, etc.) ; protĂ©gez les versions non actuelles contre les suppressions agressives et protĂ©gez les changements de lifecycle avec des SCPs / guardrails.

s3:RestoreObject

Un attaquant disposant de la permission s3:RestoreObject peut rĂ©activer des objets archivĂ©s dans Glacier ou Deep Archive, les rendant temporairement accessibles. Cela permet la rĂ©cupĂ©ration et l’exfiltration de donnĂ©es archivĂ©es historiquement (sauvegardes, snapshots, logs, certifications, anciens secrets) qui seraient normalement hors de portĂ©e. Si l’attaquant combine cette permission avec des permissions de lecture (par ex., s3:GetObject), il peut obtenir des copies complĂštes de donnĂ©es sensibles.

aws s3api restore-object \
--bucket <BUCKET_NAME> \
--key <OBJECT_KEY> \
--restore-request '{
"Days": <NUMBER_OF_DAYS>,
"GlacierJobParameters": { "Tier": "Standard" }
}'

s3:Delete*

Un attaquant disposant de la permission s3:Delete* peut supprimer des objets, des versions et des buckets entiers, perturber les sauvegardes et provoquer une perte de donnĂ©es immĂ©diate et irrĂ©versible, la destruction de preuves et la compromission d’artefacts de sauvegarde ou de rĂ©cupĂ©ration.

# Delete an object from a bucket
aws s3api delete-object \
--bucket <BUCKET_NAME> \
--key <OBJECT_KEY>

# Delete a specific version
aws s3api delete-object \
--bucket <BUCKET_NAME> \
--key <OBJECT_KEY> \
--version-id <VERSION_ID>

# Delete a bucket
aws s3api delete-bucket \
--bucket <BUCKET_NAME>

Pour plus d’informations check the original research.

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks