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.

AWS CLI write permission test - S3 bucket misconfiguration

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.com trong 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.

  1. List permissions
    aws s3 ls s3://{BUCKET_NAME} --no-sign-request
  2. Read permissions - kiểm tra từng file cụ thể
    aws s3 cp s3://{BUCKET_NAME}/{FILENAME} /tmp/test --no-sign-request
  3. Download permissions - test cp/sync toàn bộ bucket
  4. 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
  5. ACL read - đọc Access Control List để map misconfigured policies
    aws s3api get-bucket-acl --bucket {BUCKET_NAME} --no-sign-request
  6. 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
  7. File type restriction bypass - upload SVG test stored XSS. Nhiều developer quên khai báo điều kiện cho s3:PutObject policy khi cho phép client upload trực tiếp lên S3.
  8. 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.