본문 바로가기
CSP (Cloud Service Provider)/AWS

S3 취약점 - 허용되지 않은 요청에 S3 요금 부과되는 현상

by HemMu 2024. 5. 21.

어느 사용자가 AWS S3 테스트 버킷을 eu-west-1 지역에 만들고 일부 파일을 업로드했는데, 며칠 후 AWS 청구 페이지에서 예상치 못한 비용을 발견하였는데, 하루 동안 약 1억 건의 S3 PUT 요청이 발생하는 것을 확인하였다.


엥 이게 뭐지? 싶었겠지

 

그래서 확인해보니 AWS 기본 설정으로는 S3 버킷에 대한 요청이 기록되지 않지만, CloudTrail 로그를 통해 외부 계정에서 대량의 쓰기 요청이 들어오고 있음을 발견하였음.

S3 Requests

그런데 왜?

유명한 오픈소스 라이브러리 중 하나가 기본 설정으로 S3에 백업을 저장하는 기능이 있는데, 

하필 오픈 소스 샘플 코드에 하필 해당 사용자와 같은 버킷 이름을 사용하고 있었음. 아무도 안쓰는 줄 알았겠지.

S3 bucket name은 global unique

 

bucket_name = 'hamster-is-cute'

 

s3 bucket name: hamster-is-cute
그러니까 해당 라이브러리로 테스트를 할 시 테스트랍시고 만든 해당 S3 쪽으로 request가 가는 현상이 나타난 것.


무엇이 문제냐

해당 테스트로 만든 S3는 deny로 정책을 해놓았기에 당연히 허용되지 않은 사용자는 사용할 수 없고,
S3 요청 시 4xx error를 반환하는데도 불구하고, 요금을 부과해버리는 현상이 나타난 것.

 

사용도 못 했는데 돈을 내야한다??

 

추가로 위 S3 Requests 사진을 보면 S3 Bucket이 EU 리전에 있음에도 불구하고 US 요청에 대한 비용이 나온다.

 

어찌된 일인가 하니, S3 요청 시 region 을 명시할 수도 하지 않을 수도 있는데, region을 명시하지 않을 시 us-east-1으로 먼저 request를 하고 그 다음 S3가 있는 다른 리전으로 request를 한다.

 

만약 S3 Bucket이 ap-northeast-2에 있는 경우

 

Specify AWS region -> 1. ap-northeast-2

Not specifying -> 1. us-east-1 -> ap-northeast-2

 

그렇기 때문에 region을 명시하지 않으면, request 비용이 2배가 되는 이벤트를 즐길 수 있다.

 

당연히 해당 사례는 aws에 support case를 열어 비용을 면제 받았지만, s3 이름을 알고 있으면 ddos 마냥 행운의 요금 고지서를 날려줄 수 있겠다.

 

24/05/01

AWS의 부사장인 jeff가 해당 문제 고치겠다고 함. DM 그만 좀 날려달라..

https://twitter.com/jeffbarr/status/1785386554372042890

 

X의 Jeff Barr ☁️님(@jeffbarr)

Thank you to everyone who brought this article to our attention. We agree that customers should not have to pay for unauthorized requests that they did not initiate. We’ll have more to share on exactly how we’ll help prevent these charges shortly. #AWS

twitter.com

 

24/05/13

AWS가 공식적으로 S3 error request에 대해 비용을 부과하지 않게 업데이트 완료

행운의 고지서를 날릴 수 없게되었다.

https://aws.amazon.com/ko/about-aws/whats-new/2024/05/amazon-s3-no-charge-http-error-codes/

 

Amazon S3 will no longer charge for several HTTP error codes

Amazon S3 will make a change so unauthorized requests that customers did not initiate are free of charge. With this change, bucket owners will never incur request or bandwidth charges for requests that return an HTTP 403 (Access Denied) error response if i

aws.amazon.com

 

해당 사례 원본

https://medium.com/@maciej.pocwierz/how-an-empty-s3-bucket-can-make-your-aws-bill-explode-934a383cb8b1

댓글