我和 Gitalk,Gitment 等软件的作者并不认识,也不存在任何利益关系。我之前使用过 Gtiment,这些软件的作者想出的这种评论方式极具创造性,让我有了更好的博客评论方式,我非常感激这些开源软件的创造者。
下面两张截图是我截取的 Gitment 和 Gitalk 的权限列表。它们能够 读写 授权者 所有的公共仓库 ,也就是说拿到你的授权 Token 的人,可以将你的 GitHub 公共仓库删空
这是前两天隔壁楼发的帖子:
我也是看到这个,才忍不住出来发帖提醒大家,已经有人利用 GitHub 的授权做坏事了。这次可能是个自动 follow 并 star 的小事情,下次可能就是删库跑路了。
1
huangdayu 2019-02-16 14:45:50 +08:00
开发者有保存 token 吗?
|
2
bwangel OP @huangdayu
刚刚看了一下 Gitalk 的代码,开发者没有保存,它只是将 access_token 保存到了 localStorage 中。 https://github.com/gitalk/gitalk/blob/master/src/gitalk.jsx#L156 如果恶意攻击者想获取使用者的 AccessToken,只需要在上述代码中加上一个 ajax 请求即可。 |
3
respect11 2019-02-16 15:44:22 +08:00
OpenHub 呢?
|
4
imswing 2019-02-16 16:17:44 +08:00 via iPhone
同理第三方的 app 也不安全了
|
5
lrz0lrz 2019-02-16 16:21:30 +08:00 1
这个与黑客派那种恶意窃取不一样,好像是因为 github 的权限划分不够细,所以开发者不能只获取 issue 权限。
想要获取 issue 权限,只能获取 read and write all public repository data 权限。 |
6
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 粒度更细的权限了。 |
7
gclove 2019-02-16 23:14:57 +08:00
|
8
bwangel OP |
9
bwangel OP @respect11
openhub 我没用过,你可以在 https://github.com/settings/installations 中查看 openhub 的权限,想 Gitalk 这种 read and wirte all public repository data 是极度危险的。 |
10
1217950746 2019-02-17 15:08:42 +08:00
之前就发现了,会莫名其妙 Star 和 Fork 一些项目
|
11
abcbuzhiming 2019-02-17 18:58:42 +08:00
真奇怪,这算典型的设计漏洞啊,读权限还好说,为啥写权限会被拿到,github 自己设计这玩意的时候没考虑过吗
|
12
deltacat 2019-03-23 11:07:43 +08:00
比较慌的是,用在静态网站的话,clientID/clientSecret 都是所有人可以看到的,随便什么人都可以拿到吧。
|
13
bwangel OP @deltacat https://github.com/utterance/utterances 是个 GitHub App,它的权限仅限于某个仓库。像 hugo hexo 这种静态页面类型的博客,clientID/clientSecret 泄露是不可避免的。我认为较好的解决方式是像 utteras 这种 GitHubApp,只有一个仓库的读写权限,将破坏降到最小。
|
16
laev 2020-08-03 14:49:46 +08:00
https://github.com/gitalk/gitalk/issues/150
看完这个 issue 之后还是无法判断是否可以安全使用,如果攻击者想要得到 Authorization Code 容易吗? |
17
yanshenxian 2020-08-19 22:09:10 +08:00 1
@laev 不需要获取 Authorization Code,只需要拿到授权后的 Token 就行了。如果网站自行修改了 gitalk.js 脚本 或者反代了 github api,就很容易拿到你的 Token 。
|