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

2019 年 2 月 16 日
 bwangel

声明

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

原因

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

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

利用 GitHub 授权作恶的例子

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

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

具体操作建议

10847 次点击
所在节点    程序员
17 条回复
huangdayu
2019 年 2 月 16 日
开发者有保存 token 吗?
bwangel
2019 年 2 月 16 日
@huangdayu

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

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

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

想要获取 issue 权限,只能获取 read and write all public repository data 权限。
lrz0lrz
2019 年 2 月 16 日
查了一下文档,果然如此:

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

没有比 public_repo 粒度更细的权限了。
gclove
2019 年 2 月 16 日
这也是没办法的事情,详见

https://github.com/gitalk/gitalk/issues/95
bwangel
2019 年 2 月 17 日
@lrz0lrz @gclove

有的评论软件也是使用 GitHub 的 issue 作为评论,不过他们的是 GitHub App,所以他们的权限更细,只针对某个 GitHub 仓库拥有写权限。
bwangel
2019 年 2 月 17 日
@respect11

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

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

https://v2ex.xtra.eu.org/t/535608

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

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

© 2021 V2EX