- 2023년 이후 Azure Entra ID 로그인 로그 우회 취약점이 총 4건 발견되었으며, 최근 두 건은 정상 토큰 발급이 가능한 심각한 문제로 확인됨
-
GraphGoblin은 OAuth2 ROPC 흐름에서 scope 파라미터를 반복 입력해 로그 생성을 우회하며, Graph****는 5만 자 이상의 User-Agent 문자열로 로그를 완전히 누락시킴
- 두 취약점 모두 SQL 컬럼 길이 초과로 인한 로깅 실패가 원인으로 지목되었고, Microsoft는 보고 후 수정 완료
- Microsoft는 이번 문제를 ‘중간(Medium)’ 수준으로 분류해 보상이나 공식 인정 없이 조용히 수정, CVSS 기준으로는 High(7.5~8.7점) 수준으로 평가됨
- 반복된 입력값 검증 실패로 인한 결함이 지속되고 있어, 로그 교차 검증 및 KQL 기반 탐지 규칙 강화가 보안 담당자에게 필수 과제로 지적됨
Azure Entra ID 로그인 로그 우회 취약점 공개
- 2023년 이후 Azure Entra ID 로그인 로그 우회 취약점이 총 4건 발견됨
- 초기 두 건은 비밀번호 유효성만 확인 가능했으나, 최근 두 건은 정상 토큰 발급까지 가능한 심각한 수준의 문제
- 모든 취약점은 현재 Microsoft에 의해 수정 완료
-
GraphNinja 및 GraphGhost 요약
-
GraphNinja: 다른 테넌트의 엔드포인트를 지정해 로그인 시도 시, 비밀번호 유효 여부를 알 수 있으나 로그가 생성되지 않음
- 공격자는 외부 테넌트로 인증 요청을 보내고 응답을 통해 비밀번호가 맞는지 확인 가능
- Microsoft는 이후 이 문제를 해결하기 위해 추가 로깅을 도입
-
GraphGhost: 잘못된 Client ID를 사용하면 인증 흐름이 비밀번호 검증 이후 실패하며, 로그에는 실패로만 표시됨
- 비밀번호가 맞았다는 정보는 관리자 로그에 남지 않음
- Microsoft는 로그인 로그에 비밀번호 검증 여부를 추가하여 수정
-
GraphGoblin 취약점
-
GraphGoblin은 OAuth2 ROPC 흐름에서 scope 파라미터를 반복 입력해 로그 생성을 우회함
-
"openid openid openid ..." 형태로 수천 번 반복 입력 시 정상 토큰이 발급되지만 Entra ID 로그인 로그에는 아무 기록도 남지 않음
- 원인은 SQL 컬럼 길이 초과로 인한 INSERT 실패로 지목됨
- 반복된 스코프 문자열이 데이터베이스 필드 길이를 초과해 로그 저장이 실패한 것으로 추정
- Microsoft는 문제 재현에 어려움을 겪었으나, 영상 증거 제공 후 수정 완료
-
Graph****** (User-Agent 기반 우회)
-
User-Agent 필드에 50,000자 이상의 긴 문자열을 입력하면 로그가 생성되지 않음
- 인증 요청은 정상 처리되어 토큰이 발급되지만 로그는 완전히 누락
- SQL 컬럼 길이 초과로 인한 로깅 실패로 추정
- 2025년 9월 28일 발견되어 10월 8일 Microsoft가 보고 전 이미 수정 완료
-
타임라인 요약
- 2025-09-20: GraphGoblin 최초 발견
- 2025-09-26: Microsoft에 GraphGoblin 보고
- 2025-09-28: Graph****** 발견
- 2025-10-08: Graph****** 수정 완료
- 2025-11-21: Microsoft가 GraphGoblin 재현 성공 및 수정 시작
Microsoft의 대응 및 평가
- Microsoft는 이번 취약점을 ‘중간(Medium)’ 수준으로 분류하고 보상이나 공개 인정을 하지 않음
- 이전 두 건(2023~2024년)에는 보상 지급 및 인정이 있었음
- 이번에는 정상 토큰이 발급되는 심각한 문제임에도 불구하고 중요하지 않다고 평가
- CVSS v3.1 기준 7.5점(High), v4.0 기준 8.7점(High) 으로 평가됨
-
Integrity(무결성) 손상으로 인해 높은 점수 산출
- 로그 누락은 보안 컴포넌트의 직접적 손상으로 간주됨
- Microsoft는 문제 재현 후 2주 만에 수정 완료
- 과거 GraphNinja 수정에는 7개월, GraphGhost는 5개월 소요
로그 우회 탐지 방법
-
KQL 쿼리를 통해 Graph Activity 로그와 Sign-In 로그의 Session ID 또는 UniqueTokenIdentifier를 비교
- Graph Activity에는 존재하지만 Sign-In 로그에는 없는 세션은 우회된 로그인으로 판단 가능
- 단, E5 라이선스가 있어야 Graph Activity 로그 수집 가능
- 예시 KQL 쿼리:
MicrosoftGraphActivityLogs
| where TimeGenerated > ago(8d)
| join kind=leftanti (union isfuzzy=true
SigninLogs,
AADNonInteractiveUserSignInLogs,
AADServicePrincipalSignInLogs,
AADManagedIdentitySignInLogs,
MicrosoftServicePrincipalSignInLogs
| where TimeGenerated > ago(90d)
| summarize arg_max(TimeGenerated, *) by UniqueTokenIdentifier
)
on $left.SignInActivityId == $right.UniqueTokenIdentifier
- 필요 시 SessionId 기준으로 비교 가능
- 탐지 결과를 기반으로 Azure Log Search Alert Rule 설정 가능
네 가지 로그인 로그 우회 요약
발견 시점
방식
토큰 발급 여부
Microsoft 인정 여부
| 2023-08 / 2024-05 |
외부 테넌트 ID 지정으로 비밀번호 검증 로그 미생성 |
X |
X |
| 2024-12 / 2025-04 |
잘못된 Client ID로 인증 실패 유도 |
X |
X |
| 2025-09-20 |
스코프 반복 입력으로 SQL 컬럼 오버플로 |
O |
X |
| 2025-09-28 |
긴 User-Agent 문자열로 SQL 컬럼 오버플로 |
O |
N/A |
Microsoft 보안 프로세스에 대한 비판
-
Entra ID 로그인 로깅 기능의 다수 파라미터에서 결함 발견
-
tenant ID, client ID, scope, user-agent 등 핵심 필드에서 반복적 취약점 발생
- 단순한 입력값 검증 실패로 인한 문제로, 복잡한 공격이 아님
- Microsoft의 보안 검토 및 품질 관리 부재 지적
- 수년간 동일 영역에서 유사한 결함이 반복
- AI 코드 생성 도입 여부나 코드 관리 과정에서의 누락 가능성 제기
-
공개 투명성 부족
- 네 건 모두 CVE 미발급, 공식 공지 없음
- Microsoft가 CNA로서 자사 취약점 공개 여부를 독점적으로 결정
결론
- Azure Entra ID의 로그인 로그는 전 세계 조직의 침입 탐지 핵심 데이터
- 로그 누락 시 공격 탐지 체계 전체가 무력화될 수 있음
- 발견된 네 가지 취약점은 모두 간단한 입력값 퍼징(fuzzing) 으로 탐지 가능했던 수준
- Microsoft는 이러한 반복적 결함에 대해 공개적 설명과 투명한 보안 검토 절차 강화가 필요함
- 관리자와 보안 담당자는 로그 교차 검증 및 KQL 기반 탐지 규칙을 통해 방어 체계를 보완해야 함