본 포스팅은 학습 목적으로 작성되었으며, hackerone report를 기반으로 작성되었습니다.
분석 레포트
https://hackerone.com/reports/325336
스타벅스의 하위 도메인(subdomain) 중 하나에서 Subdomain Takeover 취약점이 발생할 수 있다. starbucks.com 하위 도메인 중 하나가 청구되지 않은 CNAME 레코드가 있는 Azure를 가리키고 있으며, 현재 누구나 starbucks.com 하위 도메인을 소유할 수 있다.
svcgatewayus.starbucks.com의 CNAME은 1fd05821-7501-40de-9e44-17235e7ab48b.cloudapp.net의 CNAME을 가진 s00197tmp0crdfulprod0.trafficmanager.net 에 있다. 그러나 1fd05821-7501-40de-9e44-17235e7ab48b.cloudapp.net은 더 이상 Azure 클라우드에 등록되어 있지 않으므로 누구나 등록할 수 있다. Azure 포털에 클라우드 앱을 등록한 후에는 등록한 사람이 svcgatewayus.starbucks.com의 콘텐츠를 완전히 제어할 수 있다.
PoC
http://svcgatewayus.starbucks.com
완화
starbucks.com DNS 영역에서 CNAME 레코드를 완전히 제거한다.
릴리스한 후 Azure Portal에서 다시 청구한다.
영향
Subdomain Takeover 취약점은 악성코드 유포, 피싱/스피어 피싱, XSS, 인증 우회에 악용될 수 있다.
위 보고서를 작성한 제보자의 블로그에 추가적인 글이 올라와 있어 해당 내용을 추가 작성하였습니다.
출처
https://0xpatrik.com/subdomain-takeover-starbucks/
( 위 1-day 보고서와 일치하는 부분은 생략하였습니다 )
Azure는 다양한 서비스를 제공한다. 그 중 2가지 서비스는 아래와 같다.
Azure Websites — .azurewebsites.net
Cloud Apps — .cloudapp.net
CloudFront 및 기타 유사한 서비스와 비교할 때, 가장 중요한 차이점은 Azure가 이러한 두 서비스 모두에 전용 IP 주소를 제공한다는 것이다. A 레코드를 사용하여 이를 가리키는 하위 도메인을 제공한다. 즉, Azure는 가상 호스트 설정을 활용하지 않는다. 그렇기 때문에 잠재적인 Subdomain Takeover취약점을 위해서는 DNS 상태가 NXDOMAIN인지 확인하기만 하면 된다.
Azure의 Subdomain이 언제 가능한지에 대해 많은 오해가 있다. 간단한 dig 명령을 아래와 같이 실행해본다.
( dig 명령어는 Domain Information Groper의 약자로, DNS 정보를 조회하고 진단하기 위한 커맨드라인 도구이다. )
dig -t A DOMAIN_TO_CHECK
응답 상태가 NXDOMAIN 이라면, takeover(인수) 할 수 있다. 404 Not Found 에러가 발생한다고 해서, Subdomain Takeover 취약점을 무조건 일으킬 수 있다는 것은 아니다. 앞서 말했듯이 이 서비스는 전용 VPS가 있다. 성공적인 Subdomain Takeover를 위해 DNS 요청은 항상 NXDOMAIN을 반환해야 한다.
해당 보고서의 subdomain은 1fd05821-7501-40de-9e44-17235e7ab48b.cloudapp.net 를 가리켰다. poc를 만드는 과정은 아래와 같았다.
1. 포털에서 새 클라우드 서비스를 만들고, 사용자 지정 도메인 이름을 요청한다. ( 해당 도메인 이름은 더 이상 가상 호스트를 사용하지 않으므로 일치해야 한다. 클라우드 서비스에서 CNAME에 사용할 도메인 이름을 요청하지 않는 것을 확인하면 이 이론을 확인할 수 있다. )
2. Azure 포털에서 클라우드 서비스에 대한 스토리지 계정을 생성한다.
3. Azure에서는 클라우드 서비스 배포를 위해 Visual Studio에서 생성된 특정 형식이 필요하다. ( 간단한 ASP.NET 웹 애플리케이션을 만들고 이 클라우드 서비스에 업로드했다. )
4. DNS 로 인해, svcgatewayus.starbucks.com의 A 레코드가 Azure를 가리키고 있으므로, HTTP 요청은 방금 배포한 ASP.NET 애플리케이션의 컨텐츠를 반환한다.
Azure Websites의 경우 프로세스가 훨씬 더 간단하며, 기존 PaaS에 더 가깝다. Azure 웹 사이트용 PoC를 만들려면
해당 튜토리얼을 참조한다. ( https://learn.microsoft.com/en-us/azure/app-service/quickstart-python?tabs=flask%2Cwindows%2Cazure-cli%2Cazure-cli-deploy%2Cdeploy-instructions-azportal%2Cterminal-bash%2Cdeploy-instructions-zip-azcli )
참고
https://www.sweepatic.com/subdomain-takeover-principles/
vps 란 무엇인가?
https://cloud.google.com/learn/what-is-a-virtual-private-server?hl=ko
vpc 는 무엇일까?
https://blog.naver.com/n_cloudplatform/222292617371