← retour aux outils back to tools

# s3scanner

Scanner rapide de buckets S3 et vérificateur de permissions. Teste les buckets pour un accès public en lecture/écriture, liste leur contenu et dumpe les fichiers de buckets AWS S3 mal configurés. Fast S3 bucket scanner and permission checker. Tests buckets for public read/write access, lists contents, and dumps files from misconfigured AWS S3 buckets.

↗ https://github.com/sa7mon/S3Scanner

## Overview

S3Scanner probes AWS S3 buckets for misconfigured access controls. It checks if buckets exist, whether they allow anonymous read/write, and optionally dumps their contents. Useful for bug bounty, red team assessments, and validating S3 security posture.

## Basic Usage

Scan a single bucket

    s3scanner scan --bucket company-backup

Scan list of buckets from file

    s3scanner scan --bucket-file buckets.txt

Also dump accessible files

    s3scanner scan --bucket company-backup --dump

Specify output directory for dumps

    s3scanner scan --bucket company-backup --dump --dump-dir ./downloads

## Generating Bucket Names

    # Generate permutations
    company="targetcorp"
    for suffix in "" "-dev" "-prod" "-staging" "-backup" "-data" "-logs" "-assets" "-static" "-uploads"; do
        echo "${company}${suffix}"
        echo "${suffix:1}-${company}" 2>/dev/null || true
    done > buckets.txt

Scan the generated list

    s3scanner scan --bucket-file buckets.txt

## Checking Permissions

    # S3Scanner checks these permissions:
    # - READ         (list bucket contents)
    # - WRITE        (upload files)
    # - READ_ACP     (read ACL)
    # - WRITE_ACP    (modify ACL)
    # - FULL_CONTROL (all of the above)

    # Results categories:
    # [exists] [AuthUsers:READ] → readable by any authenticated AWS user
    # [exists] [AllUsers:READ]  → publicly readable (anonymous)
    # [exists] [AllUsers:WRITE] → publicly writable (very dangerous!)
    # [exists] [private]        → no public access (correctly configured)

## Manual Verification

Check if bucket exists and list contents

    aws s3 ls s3://company-backup --no-sign-request

Download all files from public bucket

    aws s3 sync s3://company-backup . --no-sign-request

Check bucket ACL (requires credentials)

    aws s3api get-bucket-acl --bucket company-backup

Check bucket policy

    aws s3api get-bucket-policy --bucket company-backup

Test anonymous write

    aws s3 cp test.txt s3://company-backup/ --no-sign-request

## Region Handling

Scan with specific AWS region

    s3scanner scan --bucket company-backup --endpoint-url https://s3.us-west-2.amazonaws.com

For non-AWS S3-compatible services

    s3scanner scan --bucket mybucket --endpoint-url https://minio.internal:9000

## Output

JSON output

    s3scanner scan --bucket-file buckets.txt --json

Save to file

    s3scanner scan --bucket-file buckets.txt 2>&1 | tee results.txt

    # Typical output:
    # [found] company-backup | AuthUsers:READ AllUsers:READ
    # [not_found] company-prod
    # [found] company-assets | AllUsers:READ AllUsers:WRITE <-- very bad

## Tips

- Public WRITE access is the most critical finding — attackers can plant malware or phishing content
- Check `.git` directories, database dumps, and config files first after gaining read access
- `--dump` can pull a lot of data — be careful about storage space and bandwidth
- Combine with `trufflehog` or `gitleaks` to scan dumped files for secrets

Help / Man page

    s3scanner scan [options]

    --bucket BUCKET        Single bucket name to scan
    --bucket-file FILE     File with list of bucket names
    --dump                 Dump files from accessible buckets
    --dump-dir DIR         Directory for dumped files (default: ./buckets)
    --endpoint-url URL     Custom S3 endpoint (for non-AWS)
    --json                 JSON output
    -t THREADS             Threads (default: 4)

## Vue d’ensemble

S3Scanner sonde les buckets AWS S3 à la recherche de contrôles d’accès mal configurés. Il vérifie si les buckets existent, s’ils autorisent la lecture/écriture anonyme, et peut optionnellement dumper leur contenu. Utile pour le bug bounty, les évaluations red team, et la validation de la posture de sécurité S3.

## Utilisation basique

    # Scanner un seul bucket
    s3scanner scan --bucket company-backup

    # Scanner une liste de buckets depuis un fichier
    s3scanner scan --bucket-file buckets.txt

    # Dumper aussi les fichiers accessibles
    s3scanner scan --bucket company-backup --dump

    # Spécifier un répertoire de sortie pour les dumps
    s3scanner scan --bucket company-backup --dump --dump-dir ./downloads

## Génération de noms de buckets

    # Générer des permutations
    company="targetcorp"
    for suffix in "" "-dev" "-prod" "-staging" "-backup" "-data" "-logs" "-assets" "-static" "-uploads"; do
        echo "${company}${suffix}"
        echo "${suffix:1}-${company}" 2>/dev/null || true
    done > buckets.txt

Scanner la liste générée

    s3scanner scan --bucket-file buckets.txt

## Vérification des permissions

    # S3Scanner vérifie ces permissions :
    # - READ         (lister le contenu du bucket)
    # - WRITE        (téléverser des fichiers)
    # - READ_ACP     (lire l'ACL)
    # - WRITE_ACP    (modifier l'ACL)
    # - FULL_CONTROL (tout ce qui précède)

    # Catégories de résultats :
    # [exists] [AuthUsers:READ] → lisible par n'importe quel utilisateur AWS authentifié
    # [exists] [AllUsers:READ]  → lisible publiquement (anonyme)
    # [exists] [AllUsers:WRITE] → inscriptible publiquement (très dangereux !)
    # [exists] [private]        → aucun accès public (correctement configuré)

## Vérification manuelle

    # Vérifier si le bucket existe et lister son contenu
    aws s3 ls s3://company-backup --no-sign-request

    # Télécharger tous les fichiers d'un bucket public
    aws s3 sync s3://company-backup . --no-sign-request

    # Vérifier l'ACL du bucket (nécessite des identifiants)
    aws s3api get-bucket-acl --bucket company-backup

    # Vérifier la policy du bucket
    aws s3api get-bucket-policy --bucket company-backup

    # Tester l'écriture anonyme
    aws s3 cp test.txt s3://company-backup/ --no-sign-request

## Gestion des régions

    # Scanner avec une région AWS spécifique
    s3scanner scan --bucket company-backup --endpoint-url https://s3.us-west-2.amazonaws.com

    # Pour les services compatibles S3 non-AWS
    s3scanner scan --bucket mybucket --endpoint-url https://minio.internal:9000

## Sortie

    # Sortie JSON
    s3scanner scan --bucket-file buckets.txt --json

    # Sauvegarder dans un fichier
    s3scanner scan --bucket-file buckets.txt 2>&1 | tee results.txt

    # Sortie typique :
    # [found] company-backup | AuthUsers:READ AllUsers:READ
    # [not_found] company-prod
    # [found] company-assets | AllUsers:READ AllUsers:WRITE <-- très mauvais

## Conseils

- L’accès WRITE public est le constat le plus critique : les attaquants peuvent déposer des malwares ou du contenu de phishing
- Vérifier d’abord les répertoires `.git`, les dumps de bases de données et les fichiers de config après avoir obtenu un accès en lecture
- `--dump` peut télécharger beaucoup de données : attention à l’espace de stockage et à la bande passante
- Combiner avec `trufflehog` ou `gitleaks` pour scanner les fichiers dumpés à la recherche de secrets

Aide / Page de manuel

    s3scanner scan [options]

    --bucket BUCKET        Single bucket name to scan
    --bucket-file FILE     File with list of bucket names
    --dump                 Dump files from accessible buckets
    --dump-dir DIR         Directory for dumped files (default: ./buckets)
    --endpoint-url URL     Custom S3 endpoint (for non-AWS)
    --json                 JSON output
    -t THREADS             Threads (default: 4)