由于Github组织账号的邀请消息无需任何确认机制,在接收邀请消息前无需任何关于身份的邮件确认,因此,攻击者在一定条件下,可以利用该身份绕过问题,劫持Github组织账号(Github Organization)。
用户可以通过github.com网站,用个人认证信息创建一个Github组织账号(Github Organization),并通过邀请他人加入形成团队。在此处,我花了很长时间进行一些权限方面的安全测试。
因此当时,我通过github.com创建了一个Github组织账号(Github Organization)进行了测试,我注意到,只有Github组织账号的管理员(Owner )才有权限对他人发出加入邀请,被邀请人可以是github用户或非github用户。
如果被邀请人是非github用户,则必须向被邀请人邮箱发送邀请;若被邀请人是github用户,则我们可以选择向github用户的用户名直接发出邀请。如下我用自己邮箱b4936004lz@safemail.icu接收邀请:
在发出邀请的同时,作为Github组织账号的管理员,可直接向被邀请人赋予一定权限,有“Member”(普通成员)和“Owner”(管理员)两种用户权限选择,这里,我向被邀请人赋予“Owner”(管理员)权限,如下所示:
在向上述非github用户的邮箱b4936004lz@safemail.icu发出具备“Owner”(管理员)权限的邀请消息后,常规做法是,被邀请人应该通过邮件确认->github账户创建->接收邀请来实现邀请接受(basic email invitation > account creation + accepting invitation),但我没有这样,我直接用该邮箱在github.com上注册了一个github用户。进入该github用户中,我打开了之前向我发送邀请的Github组织页面github.com/org_name,此时,我的邀请信息直接显示在了其主页上,如下:
乍一看,这好像没有什么,因为github的消息显示就是如此的。但是,这里我奇怪的是,在创建github账户的时候我根本没有进行过邮件确认,要是我是假冒用户就糟糕了,也即该邀请消息并不应该直接就显示在这里的客户端页面上,至少怎么也得加上个token方式的身份认证机制吧。通过这里的邀请信息,我直接就绕过了邮件确认等身份认证机制,成为了Github组织账号的管理员。
该漏洞更多要阐述的是漏洞利用场景。
1、假设一个Github组织账号管理员通过邮件方式向某被邀请人发出邀请信息,并向其赋予“Owner”(管理员)权限,也就说明该被邀请人是非github用户,他在接收到邀请的同时应该会创建一个github账户;
2、基于Github账号的注册机制,可把邮箱当用户名进行注册,因此攻击者可以用被邀请人的邮箱进行假冒github账户注册;
3、由于上述邀请机制缺乏邮件确认步骤,并且直接显示在了Github组织账号主页,因此攻击者可以用其假冒github账户登录查看;
4、攻击者利用上述步骤,假冒被邀请人实现邀请接收并管理Github组织账号。
2017.11.8 ? ?漏洞上报
2017.11.16 ?Github奖励了$5000
参考来源:abss?