정문에는 지키는 사람이 있는데 뒷문은 비어 있었다 — GitLab OAuth ROPC 우회

정문에는 지키는 사람이 있는데 뒷문은 비어 있었다 — GitLab OAuth ROPC 우회

분류: Bugbounty · 웹·서버 · 인증우회 [정보성]

덱. 보안 연구자 cybxis는 GitLab의 로그인 이메일 인증(Login Email Verification) 기능이 웹 로그인 경로에서는 정상 작동하지만, OAuth의 ROPC(Resource Owner Password Credentials) 흐름으로 우회하면 완전히 빠진다는 것을 HackerOne 제보로 확인했습니다. 결과적으로 GitLab은 이를 버그로는 인정하되 정식 취약점으로는 인정하지 않았습니다 — 판단이 갈린 지점 자체가 흥미로운 사례입니다.

리드

같은 로그인이라도 “웹 브라우저로 들어오는 길”과 “API로 들어오는 길”은 서로 다른 코드 경로를 탈 때가 많습니다. 보안 기능을 한쪽 경로에만 붙이고 다른 경로에는 빠뜨리는 실수는 버그바운티에서 반복적으로 나오는 클래스입니다. 이번 사례는 그 클래스를 잘 보여줍니다.

핵심 사실 요약

  • OAuth의 ROPC(Resource Owner Password Credentials) 방식은 클라이언트가 사용자의 아이디·비밀번호를 직접 받아 인증 서버에 넘기고 액세스 토큰을 받는 인증 흐름입니다. 많은 서비스가 이 방식을 아예 지원하지 않지만, GitLab은 OAuth 문서에서 이 흐름을 공식 지원한다고 밝히고 있었습니다.
  • GitLab.com은 2단계 인증(2FA)이 꺼져 있어도, 로그인 이메일 인증(Login Email Verification) 이라는 별도 보안 기능을 운영합니다. 이 기능은 24시간 내 로그인 3회 이상 실패, 또는 새로운 IP에서의 로그인 시도가 감지되면 계정을 즉시 잠그고, 등록된 이메일로 보낸 6자리 코드를 입력해야만 잠금이 풀리는 구조입니다.
  • 연구자는 일반 웹 로그인 경로에서 새 IP로 로그인하면 이 이메일 인증이 정상적으로 트리거되는 것을 확인했습니다. 그런데 ROPC 흐름으로 같은 계정에 로그인하면, 이 이메일 인증 절차가 아예 발생하지 않는다는 것을 발견했습니다. 즉 grant_type=password로 아이디·비밀번호만 보내면 API 전체 접근 권한을 가진 액세스 토큰이 그대로 발급됐습니다.
  • 이는 곧, 어떤 경로로든 계정의 아이디·비밀번호를 이미 알고 있는(예: 유출된 자격증명을 확보한) 공격자 입장에서, 웹 로그인으로는 이메일 인증이라는 문지기에 막히지만, ROPC 흐름으로는 그 문지기를 우회해 곧바로 계정에 접근할 수 있다는 뜻입니다.
  • 연구자는 이를 HackerOne에 리포트로 제출했습니다(#2676025로 알려짐). GitLab은 일주일 뒤, 이를 “정보성(Informative)“으로 분류해 종료했습니다. 연구자의 설명에 따르면 GitLab 측은 이 동작을 버그로는 인정했지만 별도 수정은 하지 않기로 했습니다.

짧은 논평

이 사례가 흥미로운 이유는 취약점 자체보다 판정의 기준에 있습니다. “이메일 인증이 뚫렸다”는 사실은 분명하지만, 이걸 뚫으려면 이미 유효한 아이디·비밀번호를 알고 있어야 한다는 전제가 깔립니다. 그래서 벤더 입장에서는 “이미 자격증명이 노출된 상황에서의 추가 방어선 실패”로 보고 심각도를 낮게 매긴 것으로 추정됩니다. 반면 연구자 입장에서는 “추가 보안 계층”이라고 광고한 기능이 특정 경로에서는 전혀 작동하지 않는다는 점 자체가 설계 결함이라고 본 것입니다. 이 둘의 시각 차이는 버그바운티 트리아지에서 흔히 나오는 논쟁 지점이고, “보안 기능은 모든 진입 경로에서 동일하게 강제돼야 한다”는 원칙이 왜 중요한지를 잘 보여줍니다. 같은 계정 보안 기능이 경로별로 다르게 적용되는 패턴은 소셜 로그인·SSO 우회 사례에서도 반복해서 나타나는 근본 형태와 같은 뿌리입니다.

References / 참고자료

  1. cybxis, “A bypass on GitLab’s Login Email Verification via OAuth ROPC flow” — 이 글이 재구성한 원 분석. 발견 과정·HackerOne 제출·벤더 대응 전체를 다룸. https://cybxis.medium.com/a-bypass-on-gitlabs-login-email-verification-via-oauth-ropc-flow-e194242cad96

이 글은 위 원 분석을 우리 관점에서 다시 쓰고 짧은 논평을 더한 정보성 초안입니다. 특정 문장·리포트 스크린샷을 그대로 옮기지 않았으며, 작동하는 요청 예시는 개념 설명 이상으로 재현하지 않았습니다. ⚠️미확인 표시 항목은 발행 전 독립 팩트체크에서 확증·정정되어야 합니다.