YouTube-dl 事件刚过去,GitHub 又登上 Hacker News 榜首。原因是程式码全遭外流!
从开发者 Resynth 的部落格文了解,一个向 GitHub 官方 DMCA 资料库提交的可疑 Commit,不明身分人员利用 GitHub 应用程式的 bug 假冒 GitHub CEO Nat Friedman 上传机密程式码。
▲ 洩露档案已全部移除。
GitHub 想必大家都非常熟悉,是大型程式码储存库,主要为企业和开发人员提供托管专案和服务程式码。苹果、亚马逊、Google、Facebook 及其他许多大型科技公司都是主要用户。同时 GitHub 被托管超过 1 亿个程式库,为 4 千万开发人员提供资源支援。
因此洩露事件一出便迅速冲上 Hacker News 热搜,不少开发者表示为 GitHub 平台的安全性担忧。
Friedman 第一时间解释,表示 GitHub 没有被骇客入侵,洩露的是部分 GitHub Enterprise Server 程式码。两者虽然共用大量程式码,但 GitHub 主要是由 Ruby 编写,还是有很大差别。
事件起因是几个月前,开发人员无意间将企业伺服器程式码的未脱敏/混淆的 tarball 交给一些用户。他们正全力修复 Bug,防止未经授权的不明人士透过虚拟身分随意盗用、修改他人专案。
Friedman 为了安抚用户,甚至还引用勃朗宁的诗:一切都很好,情况也很正常,云雀展翅飞翔,蜗牛在荆棘上爬动,世上一切顺常!
不过开发者并不买帐。从吐槽来看,Github 程式码管理系统早有多只 Bug,如提交程式码时,Git 不会验证用户身分,造成极大安全风险,但 GitHub 从未重视。
另外有人表示正是利用这点,不明人士才顺利冒充 Friedman 发出机密程式码。
程式码管理者 Git 有 Bug
Git 是 Github 托管程式码的分散式版本管理系统,简单来说,就是程式码管理者。但设计有明显的缺陷,即没有为防止其他用户盗用提供太多保护。举例说,Git 上传程式码的过程,类似传送电子邮件,用户可在 user.name 和 user.email 栏位输入任何资讯,如果两栏位不採用 GPG 加密键连结,系统就不会验证它的指定来源,造假非常容易。
不明人士顺利提交成功,显然是 Friedman 没为相关栏位建立 GPG(General Planning Group)加密键。
那绕过这层限制后,不明人士又如何提交至程式库,同时又不损害其他帐号?据了解,提交内容上传到 Git 程式库会得到杂凑值,可用于寻找树。GitHub 是 Web 应用程式的一部分,提供浏览器底层 Git 架构的存取权,因此可将 Git 程式库所有分支存到一个单独底层程式库,儘管通常不会在 URL 架构显示。
为了假冒别人,不明人士首先需要複製一个 DMCA 程式库。延伸到程式库后,再提交洩漏程式码,并伪造 Friedman 姓名和信箱。过程 Fork 程式库可能会出现错误,换句话说,URL 可能依然指向假冒者真正的用户名和帐号。
但在底层 Git,父级和 Fork 都是同个程式库的一部分,允许假冒者建立一个 URL,可在记忆体程式库提交,而不是在 Fork。
因此,假冒者从 https://github.com/github/dmca 开始,将 tree/$hash 加到尾端,其中 $hash 是攻击者自己的 fork 提交杂凑值,故假冒者得以假冒 Friedman 使用一个 URL 在 GitHub 提交自己的机密程式码。
除了程式码安全性担忧,也再度引起开发者对 GitHub 开源态度的关注。长久以来,GitHub 一直因未公开程式码饱受批评,恰好前几日,GitHub 再因封杀下载影片神器 YouTube-dl 陷入舆论风波。
此次洩露事件很可能是不知名开发者对封杀 YouTube-dl 的报复。
或许与下架 YouTube-dl 有关
10 月美国唱片业协会(RIAA)提出要求,故 GitHub 禁止 7.5 万颗星的热门开源项目 YouTube-dl。
当时 RIAA 的理由是,YouTube-dl 违反 DMCA 反规避条款:
此程式码的明确目的是:1. 规避 YouTube 等授权串流媒体服务使用的技术保护措施;2. 未经授权複製和传播会员公司拥有的音乐影片和音讯。3. 除 YouTube 外,支援更多影音网站下载影片。
但 GitHub 下架 YouTube-dl 激怒了开发者,複製并上传大量程式码副本到 GitHub,对下架行为表示抗议。目前去 GitHub 搜寻 YouTube-dl,相关结果高达 4,108 项。
后来 GitHub 法律团队不得不警告,如果继续发表程式码副本,可能会封号处理。
请注意,未遵循流程的情况下发表 YouTube-dl 程式码副本违反 GitHub 平台 DMCA 政策和服务条款。如果您在明知违反服务条款的情况下,继续向程式库提交或发表相关内容,我们会移除,并可能中止帐号的存取权。
虽然造成洩露事件的不知名人士并未表态,但有人猜测称可能是对 GitHub下架 YouTube-dl 的报复。
Friedman 回应洩露事件的帖子下也可看到,不少网友对 GitHub 因 DMCA 协定下架 YouTube-dl 表示不满。
有位用户表示,GitHub 之所以这幺做,很可能因微软是 RIAA 成员。他说,DMCA 要求下架不是让程式码版权所有者本身下架,GitHub 身为倡导开源的独立公司,不需遵守 RIAA 的非法要求。
可看出网友不满正是因下架与 GitHub 最初开源里念背道而驰。
GitHub 开源精神惹争议
2018 年,微软以 75 亿美元收购 GitHub。新 CEO Nat Friedman 曾表示:GitHub 将始终坚持开发者优先并独立营运。
Resynth 部落格文章也表示:微软一再强调致力开源,这点我们从很多商业广告经常看到,目的是让微软处于开源发展的最前线。
但现在来看,微软似乎没有做到承诺。且 YouTube-dl 只是最近发生的事,GitHub 已因保密程式码的问题饱受批评。
Resynth 也提醒,这次事件不得不让人担心 GitHub 程式码的安全性。因封闭应用程式执行的是「隐蔽式安全」(Security By Obscurity),即程式码隐藏,目的是降低安全风险。如果 GitHub 真的公开程式码,很可能会损害整体安全性。
- GitHub’s source code leaked on GitHub last night … kind of
- Microsoft completes GitHub acquisition