S3Scanner: encontrando buckets de almacenamiento en la nube expuestos
S3Scanner · MIT
S3Scanner comprueba si existen buckets de almacenamiento en la nube y qué permisos exponen. Cubre S3 y proveedores compatibles con S3, y lee permisos sin necesitar credenciales de la cuenta objetivo.
Instalación
pipx install s3scanner
# o
docker run --rm ghcr.io/sa7mon/s3scanner scan --bucket example-assets Comandos principales
# un bucket
s3scanner scan --bucket example-assets
# una lista de candidatos
s3scanner scan --buckets-file candidates.txt
# genera candidatos a partir de un nombre de empresa
s3scanner scan --bucket-name-file names.txt --enumerate
# salida JSON
s3scanner --json scan --buckets-file candidates.txt > buckets.json
# proveedores no-AWS
s3scanner --endpoint-url https://storage.googleapis.com scan --bucket example-assets Salida
{"bucket":"example-assets","exists":true,"region":"us-east-1",
"permissions":{"AuthUsers":{"read":true,"write":false},"AllUsers":{"read":true,"write":false}}} AllUsers.read: true significa lectura anónima. Ese es el finding.
Dónde encaja en Tandera
S3Scanner es el núcleo de recon_cloud_enum — el flujo de footprint en la nube no autenticado que se ejecuta desde una seed de dominio y no necesita acceso a la cuenta de nube del cliente. Eso lo distingue de recon_cloud, que ejecuta prowler y scoutsuite contra una cuenta autenticada y ya conectada.
Se ejecuta en discovery, junto a cdncheck.
Uso en un pentest
Lee el permiso, no lo ejerzas. Confirmar AllUsers.read es el finding. Descargar el contenido es un manejo de datos que probablemente no estabas autorizado a hacer, y cambia la postura legal del engagement. Captura el estado del permiso como evidencia y detente.
El permiso de escritura es un crítico, siempre. AllUsers.write en un bucket que sirve un sitio web es defacement del sitio o compromiso de supply chain. Supera casi cualquier otra cosa que encuentres ese día.
Adivina nombres a partir de lo que ya tienes. Los nombres de bucket reflejan la organización: example-assets, example-backups, example-prod-logs. Construye la lista de candidatos a partir de los hostnames que tu recon ya produjo en lugar de una lista genérica.
Los buckets pertenecen a cuentas, no a dominios. Verifica que un bucket sea realmente del cliente antes de reportarlo. La similitud de nombre no es propiedad.