- Intigriti công bố hướng dẫn 8 test case khai thác AWS S3 bucket bị cấu hình sai bằng AWS CLI, CVSS range 4.4-9.0.
- Đa số hunter chỉ check public listing và bỏ qua write permissions, ACL write cho full control bucket, và file type bypass cho stored XSS.
- Instagram từng mất toàn bộ secret key từ một S3 bucket hở; HackerOne bị blind write dù read bị chặn.
TL;DR
S3 bucket bị cấu hình sai vẫn là một trong những lỗ hổng phổ biến và được trả thưởng cao nhất trong bug bounty - nhưng đa số hunter chỉ dừng lại ở public listing và bỏ qua những vector nguy hiểm hơn. Intigriti vừa công bố hướng dẫn đầy đủ gồm 8 test case cụ thể bằng AWS CLI, từ list/read/write permission đến ACL misconfiguration và file type bypass cho stored XSS. CVSS range: 4.4 - 9.0.

S3 vẫn là mồ vàng sau 20 năm
AWS S3 ra mắt năm 2006 và từ đó đến nay misconfiguration vẫn là nguyên nhân của vô số vụ rò rỉ dữ liệu nghiêm trọng. Vấn đề không phải AWS không cố gắng - họ đã chuyển sang chế độ default deny từ nhiều năm trước - mà là vì S3 có tới 70 tùy chọn cấu hình khác nhau. Một developer junior được giao nhiệm vụ tạo S3 bucket mà không hiểu đủ về bucket policies, ACLs, IAM roles, và Terraform module thiếu secure defaults là công thức hoàn hảo cho lỗ hổng.
Thực tế không thiếu case study. Researcher Wes Wineberg từng truy cập toàn bộ S3 bucket của Instagram chứa source code, ảnh người dùng, và secret key material - gọi là Million Dollar Bug. Tôi có thể dễ dàng mạo danh Instagram hoặc bất kỳ nhân viên nào, Wineberg viết. HackerOne cũng từng bị blind write vào S3 bucket dù read bị chặn hoàn toàn (report #128088). Nếu bucket chứa EC2 snapshots, attacker còn có thể extract security key và leo thang lên toàn bộ compute environment.
Tìm bucket mục tiêu
Có 3 cách chính để phát hiện S3 bucket của target:
- HTTP response inspection: Tìm trong proxy tool các tham chiếu đến
s3.amazonaws.comtrong header và response body - Search engine dorking: Dùng Google/Bing tìm
site:s3.amazonaws.com [company-name] - Bruteforce: Tool như S3enum hoặc cloud_enum đoán tên bucket theo keyword của target
Điều kiện cần: AWS account đang hoạt động và AWS CLI đã cài đặt, cấu hình.
8 kiểm tra bắt buộc
Intigriti chi tiết hóa từng test case bằng AWS CLI commands cụ thể. Điều quan trọng: mỗi test case tương ứng với một severity level khác nhau - list permission là starting point, write và ACL write là impact cao nhất. Toàn bộ dùng flag --no-sign-request để test unauthenticated; thay bằng --profile [profile] để test với bất kỳ AWS account nào.
- List permissions
aws s3 ls s3://{BUCKET_NAME} --no-sign-request - Read permissions - kiểm tra từng file cụ thể
aws s3 cp s3://{BUCKET_NAME}/{FILENAME} /tmp/test --no-sign-request - Download permissions - test cp/sync toàn bộ bucket
- Write permissions - ghi đè file có thể gây mất dữ liệu vĩnh viễn nếu versioning tắt
aws s3 cp test.txt s3://{BUCKET_NAME}/test-unique.txt --no-sign-request - ACL read - đọc Access Control List để map misconfigured policies
aws s3api get-bucket-acl --bucket {BUCKET_NAME} --no-sign-request - ACL write - ghi đè ACL = grant full control bucket ngay lập tức
aws s3api put-bucket-acl --bucket {BUCKET_NAME} --grant-full-control emailaddress={EMAIL} --no-sign-request - File type restriction bypass - upload SVG test stored XSS. Nhiều developer quên khai báo điều kiện cho
s3:PutObjectpolicy khi cho phép client upload trực tiếp lên S3. - Versioning check - versioning tắt + write được = report permanent data loss ngay
aws s3api get-bucket-versioning --bucket {BUCKET_NAME} --no-sign-request
Lưu ý: Trước khi report, luôn verify bucket không có chủ đích là public. Detectify phân loại 6 dạng lỗi S3 với CVSS 4.4 - 9.0.
Những gì hầu hết hunter bỏ qua
Phần lớn hunter dừng lại ở list permission và bỏ sót những vector impact cao hơn nhiều:
- Write permissions - ghi đè file hoặc upload malicious payload
- ACL write - một command là full control bucket, không cần thêm bước nào
- File type bypass - SVG upload thường bị bỏ qua nhưng dẫn thẳng đến stored XSS trên domain target
- Versioning disabled + write = permanent data loss, impact category cao hơn hẳn
- Bucket chứa EC2 snapshots - escalation path lên toàn bộ compute environment
- Egress cost: $0.09/GB + tax - nếu bots crawl bucket công khai, victim trả tiền bandwidth
Công cụ tự động hóa
Kiểm tra thủ công từng bucket rất tốn thời gian. 5 tool được Intigriti khuyến nghị:
- S3enum - Golang, fast & stealthy, enumerate bucket names
- cloud_enum - OSINT đa cloud (S3, GCP, Azure)
- LazyS3 - Ruby, enumerate theo keyword target
- AWS Extender - Burpsuite plugin (Pro only), test permissions trong proxy
- Nuclei - Template-based scanner, có sẵn S3 templates cho ACL & permissions
Nguồn & đọc thêm
Hướng dẫn đầy đủ: Intigriti - Hacking misconfigured AWS S3 buckets (blackbird-eu, Sep 2024, updated Mar 2025). Tài liệu kỹ thuật bổ sung: YesWeHack - S3 Bucket Permissions, Detectify - S3 misconfiguration explained.
