建议大家弃用 Gitalk 和 Gitment 等权限过高的 Github OAuth App

2019-02-16 14:38:30 +08:00
 bwangel

声明

我和 Gitalk,Gitment 等软件的作者并不认识,也不存在任何利益关系。我之前使用过 Gtiment,这些软件的作者想出的这种评论方式极具创造性,让我有了更好的博客评论方式,我非常感激这些开源软件的创造者。

原因

这些 OAuth App 申请的权限太多了

下面两张截图是我截取的 Gitment 和 Gitalk 的权限列表。它们能够 读写 授权者 所有的公共仓库 ,也就是说拿到你的授权 Token 的人,可以将你的 GitHub 公共仓库删空

利用 GitHub 授权作恶的例子

这是前两天隔壁楼发的帖子:

我也是看到这个,才忍不住出来发帖提醒大家,已经有人利用 GitHub 的授权做坏事了。这次可能是个自动 follow 并 star 的小事情,下次可能就是删库跑路了。

具体操作建议

9477 次点击
所在节点    程序员
17 条回复
huangdayu
2019-02-16 14:45:50 +08:00
开发者有保存 token 吗?
bwangel
2019-02-16 15:10:42 +08:00
@huangdayu

刚刚看了一下 Gitalk 的代码,开发者没有保存,它只是将 access_token 保存到了 localStorage 中。

https://github.com/gitalk/gitalk/blob/master/src/gitalk.jsx#L156

如果恶意攻击者想获取使用者的 AccessToken,只需要在上述代码中加上一个 ajax 请求即可。
respect11
2019-02-16 15:44:22 +08:00
OpenHub 呢?
imswing
2019-02-16 16:17:44 +08:00
同理第三方的 app 也不安全了
lrz0lrz
2019-02-16 16:21:30 +08:00
这个与黑客派那种恶意窃取不一样,好像是因为 github 的权限划分不够细,所以开发者不能只获取 issue 权限。

想要获取 issue 权限,只能获取 read and write all public repository data 权限。
lrz0lrz
2019-02-16 16:22:43 +08:00
查了一下文档,果然如此:

https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/#available-scopes

没有比 public_repo 粒度更细的权限了。
gclove
2019-02-16 23:14:57 +08:00
这也是没办法的事情,详见

https://github.com/gitalk/gitalk/issues/95
bwangel
2019-02-17 11:11:35 +08:00
@lrz0lrz @gclove

有的评论软件也是使用 GitHub 的 issue 作为评论,不过他们的是 GitHub App,所以他们的权限更细,只针对某个 GitHub 仓库拥有写权限。
bwangel
2019-02-17 11:13:49 +08:00
@respect11

openhub 我没用过,你可以在 https://github.com/settings/installations 中查看 openhub 的权限,想 Gitalk 这种 read and wirte all public repository data 是极度危险的。
1217950746
2019-02-17 15:08:42 +08:00
之前就发现了,会莫名其妙 Star 和 Fork 一些项目
abcbuzhiming
2019-02-17 18:58:42 +08:00
真奇怪,这算典型的设计漏洞啊,读权限还好说,为啥写权限会被拿到,github 自己设计这玩意的时候没考虑过吗
deltacat
2019-03-23 11:07:43 +08:00
比较慌的是,用在静态网站的话,clientID/clientSecret 都是所有人可以看到的,随便什么人都可以拿到吧。
bwangel
2019-03-24 11:05:58 +08:00
@deltacat https://github.com/utterance/utterances 是个 GitHub App,它的权限仅限于某个仓库。像 hugo hexo 这种静态页面类型的博客,clientID/clientSecret 泄露是不可避免的。我认为较好的解决方式是像 utteras 这种 GitHubApp,只有一个仓库的读写权限,将破坏降到最小。
deltacat
2019-03-25 11:01:26 +08:00
@bwangel 静态博客使用第三方服务泄露 secret 的确无法避免,这样 OAuthApp 的安全性就更成问题了。
bwangel
2019-03-25 11:18:23 +08:00
@deltacat 所以我发这个帖子啊?感觉这是一个很大的安全隐患,不过是目前没人利用这个做坏事罢了。
laev
2020-08-03 14:49:46 +08:00
https://github.com/gitalk/gitalk/issues/150
看完这个 issue 之后还是无法判断是否可以安全使用,如果攻击者想要得到 Authorization Code 容易吗?
yanshenxian
2020-08-19 22:09:10 +08:00
@laev 不需要获取 Authorization Code,只需要拿到授权后的 Token 就行了。如果网站自行修改了 gitalk.js 脚本 或者反代了 github api,就很容易拿到你的 Token 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/535608

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX