Прежде чем сообщать о потенциальном мисконфиге в настройках безопасности, всегда проверяй импакт. Некоторые бакеты AWS S3 предназначены для публичного доступа.
Для тестирования S3-бакетов тебе потребуется активная учетка AWS и установленный клиент AWS CLI.
Чек-лист по мотивам гайда от Intigriti:
1️⃣ List permissions
aws s3 ls s3://{BUCKET_NAME} --no-sign-requestЕсли получил листинг без авторизации — это уже повод проверить содержимое и реальный импакт.
2️⃣ Read permissions
aws s3api get-object --bucket {BUCKET_NAME} --key filename ./OUTPUT --no-sign-request3️⃣ Download permissions
aws s3 cp s3://{BUCKET_NAME}/filename ./ --no-sign-request4️⃣ Write permissions
aws s3 cp filename s3://{BUCKET_NAME}/filename-{RANDOM} --no-sign-request5️⃣ Чтение ACL
Для бакета:
aws s3api get-bucket-acl --bucket {BUCKET_NAME} --no-sign-requestДля конкретного объекта:
aws s3api get-object-acl --bucket {BUCKET_NAME} --key index.html --no-sign-requestИногда сам бакет закрыт, но отдельные объекты доступны публично через ACL.
6️⃣ Ограничения на типы файлов
Если приложение позволяет загружать файлы напрямую в S3, проверь, можно ли загрузить «опасный» тип файла. Классический импакт: stored XSS через загруженный SVG/HTML.
7️⃣ Версионирование S3
Если включена запись и выключен versioning, перезапись или удаление объекта может стать необратимой проблемой:
aws s3api get-bucket-versioning --bucket {BUCKET_NAME} --no-sign-request🔗 Пример ошибки, допущенной при интеграции AWS S3, за которую багхантер получил $20,000
