
보안 연구자 weirdmachine64가 7월 15일 공개한 분석에 따르면 Google OAuth의 기기 인증 흐름에 있던 결함 두 건을 연계하면 사용자가 링크를 한 번 여는 것만으로 계정 접근 토큰을 빼낼 수 있었다. 연구자는 Google이 지난 3월 취약점을 수정했다고 밝혔다.
기기 인증은 스마트TV나 게임 콘솔처럼 브라우저 또는 입력 장치가 제한된 기기에서 쓰이는 OAuth 절차다. Google 공식 문서에 따르면 기기가 기기 코드와 사용자 코드를 요청하면, 사용자는 스마트폰이나 PC에서 인증을 승인하고 원래 기기는 토큰 발급 여부를 반복 확인한다. 비밀번호를 기기에 직접 입력하지 않아도 되는 구조다.
연구자가 확인한 첫 번째 문제는 인증 세션이 담긴 URL을 다른 브라우저로 옮길 수 있었다는 점이다. 공격자가 자신의 기기에서 인증 절차를 시작한 뒤 세션 URL을 피해자에게 전달하면, 피해자가 완료한 로그인이 공격자의 기기 코드와 연결되는 방식이다.
두 번째 문제는 인증 서버가 기기 코드를 발급할 때의 클라이언트 식별자와 권한 범위를 이후 인증 URL의 값에 서버 측에서 묶어 검증하지 않았다는 주장이다. 연구자는 URL의 `client_id`와 `scope`를 바꿔 원래 요청과 다른 애플리케이션·권한으로 토큰을 받을 수 있었다고 설명했다.
두 결함에 OAuth의 `prompt=none` 옵션을 결합하면 공격 범위가 넓어졌다. 피해자가 과거 ‘Google로 로그인’을 이용해 해당 애플리케이션에 동의한 적이 있는 경우 별도의 동의 화면이나 2단계 인증 요청 없이 링크 접속만으로 ID 토큰이 공격자 쪽에 전달됐다는 것이 연구자의 설명이다. 이 토큰은 Google 로그인을 사용하는 제3자 서비스의 로그인 절차에 재사용할 수 있었다.
연구자는 권한 범위를 바꾸는 방식으로 Google Cloud 관련 권한을 요청하거나 Gmail의 IMAP 인터페이스에 접근하는 실험도 성공했다고 밝혔다. 다만 이 내용은 연구자가 공개한 재현 결과에 근거하며, Google은 이번 건에 대한 별도의 공개 보안 권고나 사고 보고서를 내놓지 않았다. 실제 악용 사례도 공개 자료에서는 확인되지 않았다.
공개된 처리 일정에 따르면 연구자는 2월 25일 Google 취약점 보상 프로그램에 문제를 신고했다. 초기에는 두 차례 수정 대상이 아니라는 답을 받았지만, 원클릭 재현 사례를 제시한 뒤 3월 4일 접수됐고 3월 28일 수정 완료 처리됐다. 버그바운티 1만3,337달러는 4월 2일 지급됐다고 연구자는 밝혔다.
OAuth 2.0 기기 인증 표준인 RFC 8628은 원격 피싱 가능성을 별도 보안 항목으로 다룬다. 사용자가 현재 가진 기기를 승인하는지 확인하고, 인증 화면에 기기 정보를 표시하며, 사용자 코드가 실제 기기에 표시된 값과 일치하는지 검증하도록 권고한다. 이번 사례는 여기에 더해 기기 코드와 클라이언트 식별자·권한 범위를 서버에서 끝까지 결속해 검증하는 것이 중요하다는 점을 보여준다.
이번 취약점은 수정된 상태로 공개됐다. 이용자가 과거 연결 앱을 즉시 삭제해야 한다는 별도 지침은 제시되지 않았지만, Google 계정의 연결된 앱과 권한을 주기적으로 점검하고 출처가 불분명한 인증 링크를 열지 않는 기본 원칙은 여전히 유효하다.
출처: weirdmachine64 https://weirdmachine64.github.io/research/google-oauth-device-code-hijacking.html
출처: Google for Developers https://developers.google.com/identity/protocols/oauth2/limited-input-device
출처: IETF RFC 8628 https://datatracker.ietf.org/doc/html/rfc8628#section-5.4