ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Bugbounty Study] #GitHub _ Account Takeover
    Study/Bugbounty Study 2021. 1. 20. 04:50

    # GitHub Account Takeover _ \$5,000

    abss.me/posts/github-org-takeover/

     

    Github Organization Takeover By Claiming Owner Invitation

    TL;DR courtesy - https://bounty.github.com/researchers/Abss0x7tbh.html A malicious user could leverage 3 things to takeover a Github Organization : An invitation to owner from the organization.

    abss.me

    해당 취약점은 2017. 11. 17에 제보한 것이다.

     

    [TL;DR]

    요약하자면,

    GitHub에서 그룹의 팀원을 이메일로 초대하는 경우, 초대받지 않은 유저초대받은 유저보다 먼저 계정에 해당 이메일을 추가하면 배너에 표시돼 있는 대기 중인 초대 요청을 수락할 수 있다는 것을 발견하였다. 대기 중인 이메일로의 초대 요청을 계정에서 조회하는 것을 제한하여 해당 취약점을 보완하였다는 내용이다.

     


    그룹의 권한을 탈취하기 위해 다음의 특징을 활용하였다.

     

    [그룹 권한 탈취 조건]
    - 권한이 Owner로 설정된 팀원 초대
    - 이메일 미 검증
    - 초대 수락 전 이메일 검증 유무 미 확인 

     

     

    해당 취약점에서 이용된 팀원 초대에 대한 특징은 다음과 같다.

    github.com에서 개인 계정으로 그룹을 생성하고 팀원을 초대할 수 있는데, 그룹의 관리자나 Owner만이 팀원을 초대할 수 있는 권한이 있다.

     

    GitHub의 기존 유저 또는 새로운 유저를 초대할 수 있는데, 초대장을 전송할 때 새로운 유저인 경우에 이메일로만 가능하고, 기존 유저인 경우에는 아래와 같이 username과 이메일을 선택할 수 있다.

     

    또한, 초대받는 이의 권한을 설정하여 초대할 수 있는데 아래 선택된 Owner 권한은 그룹의 모든 것을 제어할 수 있는 권한이다.

     

    원작자는 위와 같이 초대장을 보내면서, 초대장을 받은 이메일로 새로운 GitHub 계정을 생성하였다.

    그리고 github.com/org_name 페이지에 대기 중인 초대 요청에 대한 알림(상단 노란색 바)이 떠있는 것을 주목하였다.

     

    대기 중인 초대 요청에 대한 알림은 일반적인 것이지만, 해당 계정을 생성하는 동안 이메일 검증을 하지 않았다는 것을 깨달았다. 즉, 초대받은 사람을 사칭할 수 있다는 뜻이다.

     

    아직 이메일 검증을 하지 않았기 때문에, 단순한 클라이언트 측의 알림일 뿐 올바른 초대 토큰이 아닐 수 있다고 생각하였지만, 해당 알림을 통해 초대 요청을 수락하고, 새로운 Owner로 그룹에 합류할 수 있었다.

     

    아래에서 Owner로서 새로운 Repository를 생성하는 등 그룹에 대한 제어 권한이 있는 것을 확인할 수 있다.

     

     

    [시나리오]

    원작자가 제보할 때 처음 생각한 시나리오이다.

     

    어떤 그룹이 이메일로 새로운 Owner를 초대하는 상황에 초대받는 이가 GitHub의 기존 유저가 아닌, 새로운 계정을 만들어야 하는 상황이라고 가정한다.

    즉, 악의적인 사용자가 초대된 사람의 이메일을 이용하여 GitHub의 새로운 계정을 만들 수 있는 상황이다.

     

    이때, 초대받은 이의 이메일이 검증되었는지 확인하지 않아 아무나 초대받은 이를 사칭할 수 있다. 새로 만든 계정으로 그룹 페이지(i.e github.com/org_name)에 접근하면 invitation_token이 드러나있는지 어떠한 확인도 없이 초대 알림을 확인할 수 있다.

     

    이를 통해 악의적인 사용자가 초대받은 진짜 Owner보다 먼저 초대에 수락하면 claiming the invitation, 초대받은 Owner 사칭, 조직의 제어권을 얻을 수 있다.

    댓글

@Jo Grini's Blog