Azure API 연결의 교차 테넌트 침투 취약점 5개 발견
원제 Azure's Weakest Link – Five Full Cross-Tenant Compromises
136 포인트댓글 11
Key Point
Azure Logic Apps 사용자가 자신의 API Connections이 다른 테넌트의 민감한 데이터(Key Vault 비밀, SQL 데이터)에 노출될 수 있는 다층 보안 우회 방식을 알아야 한다.
핵심 요약
- Azure Logic Apps의 API Connections 아키텍처에서 다섯 개의 중대한 교차 테넌트 침투 취약점을 발견해 $200,000을 수익으로 획득했다.
- API Connections는 Logic App이 API Management 인스턴스를 거쳐 백엔드 서비스(Key Vault, SQL Database, Jira, Salesforce 등)에 접근하며, 토큰 교환을 통해 구성된 자격증명으로 요청을 처리한다.
- ARM REST API의 DynamicInvoke 또는 /extensions/proxy/ 엔드포인트를 통해 API Management 서비스를 직접 호출할 수 있으며, ARM은 모든 리소스에 대한 접근 권한을 가지고 있다.
- 첫 번째 취약점은 DynamicInvoke 엔드포인트에서 경로 순회(path traversal) 공격으로 피해자의 Key Vault 비밀을 읽을 수 있었다.
- Microsoft가 DynamicInvoke의 경로를 제한하자, 문서화되지 않은 네 개의 추가 엔드포인트(DynamicList, DynamicValue, DynamicSchema, DynamicValues)를 발견했고, DynamicList를 이용해 피해자의 SQL Server에 임의 쿼리를 실행할 수 있었다.
- Consumption Logic Apps와 Standard Logic Apps의 연결 흐름 차이를 발견했다: Consumption은 Version 1 연결을 생성하며 관리 ID 인증 없이 모든 Version 1 API 연결에 암묵적 접근 권한이 있다.
- Logic App 워크플로우의 host.api.RuntimeUrl 매개변수를 조작하면 입력 검증을 우회하여 임의의 피해자 연결에 접근할 수 있었다.
- Microsoft가 RuntimeUrl 검증을 추가했으나, 경로 정규화 전에 검증이 발생하는 Race Condition으로 인해 경로 순회 공격이 여전히 가능했다.
- 최종 수정에서 RuntimeUrl 검증이 제거되자, 원래 공격 방식이 다시 작동하는 상황이 발생했다.
- 모든 취약점은 보고 후 합리적인 기간 내에 Microsoft에 의해 수정되었다.