GitHub 源代码被泄露了...

2023-10-30

“ 阅读本文大概需要 4 分钟。 ”

来自量子位

GitHub 忽然 “开源” 了自己代码的一部分,还将它放在了 GitHub 上。

事件起因是这样的:

TypeScript 的开发者 Resynth 忽然 Po 了篇文章,表示代码托管服务 GitHub 的全部源代码被泄露。

他表示,在向官方 GitHub DMCA 提交的可疑文件中,一个身份不明的人利用 GitHub 应用程序中的一个漏洞,冒充 GitHub 的 CEO 纳特・弗里德曼(Nat Friedman)上传了机密源代码。

事情一出,在 HN 上激起了网友的热烈讨论,也再次引发了关于 GitHub 安全问题的思考。

网友 lrvick 表示,包括他在内的许多安全人员,早就对 GitHub 上很多相关漏洞进行了公开演示。但除非 “搞出个病毒”,微软根本就不承认这些漏洞的存在。

而且,他早就说过,GitHub 提交签名的部分存在严重的设计缺陷,然而如今这件事发生,他们才引起重视。

所以,这位陌生用户是怎么做到的?

如何伪造成 CEO 本人泄露代码?

GitHub 的源代码管理器 Git,并不能有效地防止用户假冒。

Git 的提交方式更接近于电子邮件,这也就意味着,用户可以随意起用户名和填写邮箱,所以做点小手脚也没关系。

—— 除非提交的信息上有 GitHub CEO 弗里德曼的 GPG 签名,否则 Git 在提交信息时,根本不会确认这是不是 CEO 本人的提交。(这次有问题的代码提交,就没有 CEO 本人的签名信息)

GPG(GNU Privacy Guard)是一个密钥软件,用于加密、签名通信的内容,也可作为管理非对称密码学的密钥。

除非 GPG 签名与邮箱地址相关联,它并不会对提交对象的真伪进行确认。

也就是说,当你提出一个提交请求到 Git 本地仓库时,你就会得到一个代表提交请求的哈希值,可以通过它直接跳转到你的分支。

GitHub 类似于一个 Web 应用程序,负责提供浏览器到 Git 底层架构的请求交互,它会将所有的分支保存到一个底层仓库里,哪怕它不以通常的形式出现在在 URL 架构中。

于是,一位陌生的用户提交的文件 “光明正大地” 进入了 GitHub 的 DCMA 存储库,还伪造成了 CEO 弗里德曼的样子。

为了做到这一点,这位陌生用户先是复制了一份 DCMA 存储库、搞个分支出来,便于提交要泄露的 GitHub 源代码

然后,陌生用户伪造了弗里德曼的用户名和邮箱,将它提交了。于是,在 DCMA 存储库里,名为弗里德曼的用户,自己提交了一份 GitHub 源代码。

CEO 回应后,网友却炸了

对此,GitHub CEO 弗里德曼做出了回应,表示 GitHub 前段时间不小心混淆了一部分源代码给客户,但这不会影响 GitHub 的安全。

他甚至还吟了首勃朗宁的诗:一切都很好,情况也很正常,云雀展翅飞翔,蜗牛在荆棘上爬动,世上一切顺当!

但显然,网友们并不在意这段源码是不是 CEO 本人泄露的,相反,这件事情再一次激起了他们针对 “GitHub 开源” 这件事本身的怒火。

网友 exabrial:您(指 CEO)认为这是正常情况?你们是不是想通过伪造 / 无效的 DCMA,删掉其他的什么项目?

CEO 弗里德曼:这边建议您阅读 DCMA 工作原理呢。

网友 dannyw:如果 GitHub 真的提倡开源,它就不会是现在这样。据我所知,微软是 RIAA 的成员哦。

网友 dannyw 之所以提到 RIAA(美国唱片业协会),是因为 GitHub 前段时间应 RIAA 的要求,直接删除了 GitHub 上开源的油管视频下载器 Youtube-dl

一石激起千层浪,原本 GitHub 最初删掉的相关项目就 18 个,现在一搜,竟然冒出了 4000 多个。

有开发者称,这次的 “伪造事件” 估计与 Youtube-dl 项目被删有关,也可能是伪造者对微软并不开放 GitHub 源代码的控诉。

关于 GitHub 开源,还得从微软收购 GitHub 后的一系列举动说起。

微软和它的 “开源”

自 2018 年微软收购 GitHub 后,一直声称自己 “致力于开源”。

Resynth 表示:“我们已经从大量商业广告里看到了(微软对开源的热爱),微软打的这些广告,的确让它处在开源开发的最前沿。”

但与微软提倡的 “开源” 理念相对,它直接封禁了好几次社区开源的代码。

闹到最近,就是这次伪造事件导火索的 “Youtube-dl 被封禁事件”。

有开发者表示,想要让 GitHub 开放自己的源码,如今在微软这看来,是绝对不可能的。

Resynth 也表示,由于有闭源软件的存在、以及 Git 的扩张,让 GitHub 看起来更像是一个试图 “包含开源项目” 的平台,而非开源本身

例如,今年 6 月,GitHub 曾经出现过宕机两小时的情况,这期间,成千上万个开源项目无法被访问和使用。

对于这次 GitHub 泄露源码的事件,你怎么看?

已经走丢的 GitHub 源码网址:
https://web.archive.org/web/2/https://github.com/github/dmca/tree/565ece486c7c1652754d7b6d2b5ed9cb4097f9d5

参考链接:
https://arstechnica.com/information-technology/2020/11/githubs-source-code-was-leaked-on-github-last-night-sort-of/
https://www.zdnet.com/article/github-denies-getting-hacked/
https://resynth1943.net/articles/github-source-code-leak/
https://news.ycombinator.com/item?id=24994746
https://www.theverge.com/2020/6/29/21306674/github-down-errors-outage-june-2020

好文和朋友一起看~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GitHub 源代码被泄露了... 的相关文章

  • 将“复制到剪贴板”添加到 GitHub markdown 的简单方法?

    具体来说 我有一些用于安装的代码块 我希望用户能够快速将其复制并粘贴到终端中 我想要一个用于代码块 复制到剪贴板 的按钮 由于 git 克隆 URL 有一个 复制到剪贴板 按钮 我想知道我是否可以利用该按钮 或者如果不能 是否可以将一些相对
  • 如何默认将 Maven 插件附加到阶段?

    我有一个 Maven 插件应该在编译阶段运行 所以在项目中consumes我的插件 我必须做这样的事情
  • 为什么 i++ 不是原子的?

    Why is i Java 中不是原子的 为了更深入地了解 Java 我尝试计算线程中循环的执行频率 所以我用了一个 private static int total 0 在主课中 我有两个线程 主题 1 打印System out prin
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • 给定两个 SSH2 密钥,我如何检查它们是否属于 Java 中的同一密钥对?

    我正在尝试找到一种方法来验证两个 SSH2 密钥 一个私有密钥和一个公共密钥 是否属于同一密钥对 我用过JSch http www jcraft com jsch 用于加载和解析私钥 更新 可以显示如何从私钥 SSH2 RSA 重新生成公钥
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • 如何撤消删除 github wiki 页面的操作?

    我删除了 github 存储库 wiki 上的一个页面 单击该文件的链接现在会将我带到一个新的编辑屏幕 我认为这可能是在我的存储库分支中 但是在 chrome 上以隐身模式点击链接会出现错误 表明我无权编辑此文件 大概是因为我正在尝试创建它
  • 列出jshell中所有活动的方法

    是否有任何命令可以打印当前 jshell 会话中所有新创建的方法 类似的东西 list但仅适用于方法 您正在寻找命令 methods all 它会打印所有方法 包括启动 JShell 时添加的方法 以及失败 被覆盖或删除的方法 对于您声明的
  • Github:我的仓库登陆页面上缺少“设置”菜单

    设置 菜单应该是最后一个菜单 位于 图形 菜单之后 没有 设置 菜单会影响我设置 Webhook 的能力 是的 这是我的仓库 我拥有它 landing page of my test repo travis repo 我今天也遇到了同样的问
  • 十进制到八进制的转换[重复]

    这个问题在这里已经有答案了 可能的重复 十进制转换错误 https stackoverflow com questions 13142977 decimal conversion error 我正在为一个类编写一个程序 并且在计算如何将八进
  • 禁止的软件包名称:java

    我尝试从数据库名称为 jaane 用户名 Hello 和密码 hello 获取数据 错误 java lang SecurityException Prohibited package name java at java lang Class
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • JRE 系统库 [WebSphere v6.1 JRE](未绑定)

    将项目导入 Eclipse 后 我的构建路径中出现以下错误 JRE System Library WebSphere v6 1 JRE unbound 谁知道怎么修它 右键单击项目 特性 gt Java 构建路径 gt 图书馆 gt JRE
  • Eclipse Java 远程调试器通过 VPN 速度极慢

    我有时被迫离开办公室工作 这意味着我需要通过 VPN 进入我的实验室 我注意到在这种情况下使用 Eclipse 进行远程调试速度非常慢 速度慢到调试器需要 5 7 分钟才能连接到远程 jvm 连接后 每次单步执行断点 行可能需要 20 30
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • Java列表的线程安全

    我有一个列表 它将在线程安全上下文或非线程安全上下文中使用 究竟会是哪一个 无法提前确定 在这种特殊情况下 每当列表进入非线程安全上下文时 我都会使用它来包装它 Collections synchronizedList 但如果不进入非线程安
  • 在 Windows 上使用 Git - 意外丢失了大量工作。我可以拿回来吗?

    我很困惑 我想我已经失去了几个小时的工作时间 我之前在 Git 中编辑了一个文件 我保存了它 但没有提交 我确实做了一些其他文件更改 并提交并推送了它们 然而 有一个文件被搞乱了 所以我单击了最后一次成功的提交 然后按了 回滚到此提交 令我
  • 将 List 转换为 JSON

    Hi guys 有人可以帮助我 如何将我的 HQL 查询结果转换为带有对象列表的 JSON 并通过休息服务获取它 这是我的服务方法 它返回查询结果列表 Override public List
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview

随机推荐

  • Dev C++使用简明教程

    Dev C 使用简明教程 使用高级语言编程时 我们通常使用一个集成开发环境IDE Integrated Developing Enviroment 简称IDE 来进行编辑 编译 运行和调试工作 Dev C 是一个Windows环境下C C
  • fitcknn - Matlab的kNN分类器

    Matlab的kNN分类器 fitcknn 1 构造kNN分类器 1 1 fitcknn函数 1 2 运行实例 1 构造kNN分类器 1 1 fitcknn函数 使用fitcknn函数即可构造 construct kNN分类器 输入 分类集
  • 用MindSpore复现VAN(Visual Attention Network)

    用MindSpore复现VAN Visual Attention Network 1 VAN 简述 2 如何复现 模型的修改 参数初始化 数据预处理 优化器 学习策略 多卡训练设置 混合精度对齐 O0 O2 O3 以及自己设置黑白名单 O1
  • vue.js:基于nodejs使用log4js输出日志文件

    一 问题 开发web项目过程中 常规的console log 只是将信息反映在了浏览器的控制台 我们经常需要输出到文本日志文件 以便开发调试和维护排查 下面介绍log4js在vue项目中的部署与使用 二 解决方案 1 安装log4j 注意
  • IntelliJ IDEA2022(破译版)安装教程

    首先先下载一个压缩包 里面安装包破译插件都有 通过百度网盘分享的文件 JetBrain zip 链接 https pan baidu com s 1mBQUacDIf39AJtR wGZ bw 提取码 P95C 复制这段内容打开 百度网盘A
  • 全局负载均衡(GSLB)的实现方案

    What is GSLB Global Server Load Balancing 中文 全局负载均衡 SLB Server load balancing 是对集群内物理主机的负载均衡 而GSLB是对物理集群的负载均衡 这里的负载均衡可能不
  • python驱动DDT框架应用--实战举例

    步骤 创建一个python file ddttest 引入ddt 更新ddt File Settings 双击pip 搜索框输入 ddt 实例讲解 传入一个参数 import unittest from ddt import ddt dat
  • 2022全国职业技能大赛-网络安全赛题解析总结⑨(超详细)

    2022全国职业技能大赛 网络安全赛题解析总结 自己得思路 模块A 基础设施设置与安全加固 20分 模块B 网络安全事件响应 数字取证调查和应用安全 40分 模块C CTF夺旗 攻击 20分 模块D CTF夺旗 防御 20分 有什么不懂得可
  • openstack调优

    cinder限速 为了减缓来自实例的数据访问速度的减慢 openstack block storage支持对卷数据复制带宽的速率限制 请修改cinder后端配置文件将文件卷复制带宽限制为最高100MB s The upper limit o
  • arm 关于m a r系列区别

    arm系列contex的a r m的区别 从cortex开始 分为三个系列 a系列 r系列 m系列 m系列与arm7相似 不能跑操作系统 只能跑ucos2 偏向于控制方面 说白了就是一个高级的单片机 a系列主要应用在人机互动要求较高的场合
  • Github Copilot连接不上服务器

    现象 报错 ERROR default 2023 09 08T15 47 01 542Z GitHub Copilot could not connect to server Extension activation failed conn
  • Python 2.7下下载并安装nltk (自然语言处理工具包)

    1 在cmd窗口中 进入到python的文件夹内的 Scripts内 我的目录地址是 D using Python Scripts 命令行输入 easy install pip 运行结束后 安装PyYAML and NLTK 命令行输入 p
  • c++ 中bool 的默认值

    比如在Test h中定义变量 isFirst Test h头文件 ifndef TEST H define TEST H class Test private bool isFirst endif 然后访问它 include Test h
  • Java面试题整理——网络

    Java面试题整理 网络 网络 1 常用的 http 响应码及含义 200 OK 请求成功 这是对HTTP请求成功的标准应答 201 Created 请求创建被完成 同时新的资源被创建 202 Acceptd 供处理的请求已被接受 但是处理
  • 【VxWorks】Vxworks、QNX、Xenomai、Intime、Sylixos、Ucos等实时操作系统的性能特点

    目录 1 VxWorks操作系统 2 QNX操作系统 3 Xenomai操作系统 4 INtime操作系统 5 SylixOS操作系统 5 1 SylixOS官网
  • uniapp 跳转传参 [‘object‘] 问题解决, 遇坑解决

    普通 号拼接传参不知道什么原因 接收参数时转换数据失败 换成模板传参试试 解决 传 ckgd productList 传参时先转为json 一定要用模板字符串传参 如下 uni navigateTo url pagesA service d
  • MySQL执行器与存储引擎是怎么交互的

    体系结构 1 连接器 2 查询缓存 3 分析器 4 优化器 多个索引 选择哪个索引 join的顺序 5 执行器 调用存储引擎接口获取满足条件的第一行记录 调用存储引擎接口获取满足条件的下一行记录 6 存储引擎 索引下推 假设现子表T有字段
  • c++泛型算法扩展和迭代器、反向迭代器

    cout lt lt 插入迭代器 lt lt endl back inserter 创建一个使用push back的迭代器 front inserter 创建一个使用push front的迭代器 inserter 创建一个使用insert的
  • bee-box

    这篇博客就是为了记下bee box做题过程 随便记记 免得忘了 安装 先去官网下载了 然后分个新的盘单独放进去 打开虚拟机 双击bee box vmx就能安装了 打开里面的火狐会自动跳去一个登录界面 默认账号和密码是bee bug 登录然后
  • GitHub 源代码被泄露了...

    阅读本文大概需要 4 分钟 来自量子位 GitHub 忽然 开源 了自己代码的一部分 还将它放在了 GitHub 上 事件起因是这样的 TypeScript 的开发者 Resynth 忽然 Po 了篇文章 表示代码托管服务 GitHub 的