피드로 돌아가기
Dev.toSecurity
원문 읽기
클라이언트 제어 Tenant ID 제거를 통한 Multi-tenant 보안 취약점 해결
Resolve the tenant from the user, not the request
AI 요약
Context
Subdomain이나 Header 등 Request 기반으로 Tenant를 결정하는 구조에서 클라이언트가 Source of Truth가 되는 설계 결함 발견. 인증된 사용자의 권한과 무관하게 요청 값에 따라 타 테넌트 데이터에 접근 가능한 Security Leak 위험 존재.
Technical Solution
- Source of Truth를 Request에서 Authenticated User의 Organization Membership으로 이전
- Middleware 단계에서 User 객체를 통해 Tenant Context를 결정하는 Fail-closed 메커니즘 도입
- Request-derived 방식에서 Server-derived 방식으로 Tenant Resolution 로직 전환
- 인증되지 않았거나 조직 정보가 없는 경우 403 Forbidden을 반환하는 엄격한 접근 제어 적용
- X-Tenant 헤더 조작 시에도 User의 실제 소속 조직으로 Tenant가 고정되는 회귀 테스트 구현
실천 포인트
- 데이터 스코핑에 영향을 주는 값은 클라이언트가 위조 불가능한 서버 사이드 데이터 기반으로 결정하는지 검토 - Multi-tenant 시스템에서 Tenant ID를 URL 파라미터나 헤더로 전달받는 로직의 제거 - 권한 확인 실패 시 기본적으로 접근을 차단하는 Fail-closed 원칙 적용 여부 확인 - 보안 핵심 로직에 대해 의도적인 잘못된 요청을 통한 Negative Test Case 작성