建议大家弃用 Gitalk 和 Gitment 等权限过高的 Github OAuth App - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
bwangel
V2EX    程序员

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

  •  
  •   bwangel
    bwangelme 2019-02-16 14:38:30 +08:00 10223 次点击
    这是一个创建于 2440 天前的主题,其中的信息可能已经有所发展或是发生改变。

    声明

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

    原因

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

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

    利用 GitHub 授权作恶的例子

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

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

    具体操作建议

    • 建议弃用 Gitalk 或 Gitment 等 OAuth App,并在 [ GitHub -> 右上角头像 -> Settings -> Applications -> Authorized OAuth Apps ] 中取消授权。
    17 条回复    2020-08-19 22:09:10 +08:00
    huangdayu
        1
    huangdayu  
       2019-02-16 14:45:50 +08:00
    开发者有保存 token 吗?
    bwangel
        2
    bwangel  
    OP
       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
        3
    respect11  
       2019-02-16 15:44:22 +08:00
    OpenHub 呢?
    imswing
        4
    imswing  
       2019-02-16 16:17:44 +08:00 via iPhone
    同理第三方的 app 也不安全了
    lrz0lrz
        5
    lrz0lrz  
       2019-02-16 16:21:30 +08:00   2
    这个与黑客派那种恶意窃取不一样,好像是因为 github 的权限划分不够细,所以开发者不能只获取 issue 权限。

    想要获取 issue 权限,只能获取 read and write all public repository data 权限。
    lrz0lrz
        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 粒度更细的权限了。
    gclove
        7
    gclove  
       2019-02-16 23:14:57 +08:00
    这也是没办法的事情,详见

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

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

    openhub 我没用过,你可以在 https://github.com/settings/installations 中查看 openhub 的权限,想 Gitalk 这种 read and wirte all public repository data 是极度危险的。
    ONEO666
        10
    ONEO666  
       2019-02-17 15:08:42 +08:00
    之前就发现了,会莫名其妙 Star 和 Fork 一些项目
    abcbuzhiming
        11
    abcbuzhiming  
       2019-02-17 18:58:42 +08:00
    真奇怪,这算典型的设计漏洞啊,读权限还好说,为啥写权限会被拿到,github 自己设计这玩意的时候没考虑过吗
    deltacat
        12
    deltacat  
       2019-03-23 11:07:43 +08:00
    比较慌的是,用在静态网站的话,clientID/clientSecret 都是所有人可以看到的,随便什么人都可以拿到吧。
    bwangel
        13
    bwangel  
    OP
       2019-03-24 11:05:58 +08:00   1
    @deltacat https://github.com/utterance/utterances 是个 GitHub App,它的权限仅限于某个仓库。像 hugo hexo 这种静态页面类型的博客,clientID/clientSecret 泄露是不可避免的。我认为较好的解决方式是像 utteras 这种 GitHubApp,只有一个仓库的读写权限,将破坏降到最小。
    deltacat
        14
    deltacat  
       2019-03-25 11:01:26 +08:00
    @bwangel 静态博客使用第三方服务泄露 secret 的确无法避免,这样 OAuthApp 的安全性就更成问题了。
    bwangel
        15
    bwangel  
    OP
       2019-03-25 11:18:23 +08:00
    @deltacat 所以我发这个帖子啊?感觉这是一个很大的安全隐患,不过是目前没人利用这个做坏事罢了。
    laev
        16
    laev  
       2020-08-03 14:49:46 +08:00
    https://github.com/gitalk/gitalk/issues/150
    看完这个 issue 之后还是无法判断是否可以安全使用,如果攻击者想要得到 Authorization Code 容易吗?
    yanshenxian
        17
    yanshenxian  
       2020-08-19 22:09:10 +08:00   1
    @laev 不需要获取 Authorization Code,只需要拿到授权后的 Token 就行了。如果网站自行修改了 gitalk.js 脚本 或者反代了 github api,就很容易拿到你的 Token 。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5299 人在线   最高记录 679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 08:37 PVG 16:37 LAX 01:37 JFK 04:37
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86