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 源代码被泄露了... 的相关文章

  • 春天。使用java配置解决循环依赖而不使用@Autowired

    我有循环依赖和java配置 虽然使用 xml 配置解决它非常简单 但如果没有 Autowired 我无法使用 java 配置解决它 豆子 public class A private B b public B getB return b p
  • 在 Java 中将系统属性设置为 Null

    在我的单元测试中 我需要将 workingDir 系统属性设置为 Null 但我不能这样做 因为它给了我 NullPointerException System setProperty workingDir null 我该怎么做 您不能将属
  • 哪个 new 首先执行——在构造函数中还是在构造函数外?

    如果我定义一个类如下 public class myClass private x new anotherClass private y public myClass y new anotherClass 哪个变量会更早获得实例 x 或 y
  • Java:BufferedReader readLine() 中的 IOEXception 有何用途?

    我可以使用 try catch 循环 修复 以下异常 但我无法理解原因 为什么 in readLine 部分会不断引发IOExceptions 抛出此类异常的真正目的是什么 目标可能不仅仅是更多副作用 代码和 IOException jav
  • 如何解析比 Java 中 NumberFormat 更严格的数字?

    我正在验证表单中的用户输入 我解析输入NumberFormat http docs oracle com javase 7 docs api java text NumberFormat html 但它是邪恶的 几乎允许任何事情 有没有办法
  • 使用 Java NIO 直接访问 Windows 磁盘

    我正在使用一个使用 Java NIO 的库来直接将文件映射到内存 但我在直接读取磁盘时遇到问题 I can直接使用读取磁盘FileInputStream与 UNC 合作 例如 File disk new File PhysicalDrive
  • 在 Java 和 C 中在运行时调用名为“string”的方法

    我们如何调用名称为的方法string在运行时 谁能告诉我如何在 Java 和 C 中做到这一点 在java中可以通过反射api来完成 看一下Class getMethod String methodName Class parameterT
  • 将图像缩略图上传到服务器,而不上传整个图像

    据我所知 我在这里问的是不可能的 但我想无论如何我都会问 以防我遗漏了什么 假设您想让用户上传 JPG 图像 并且这些图像被缩放为较小的图标 并且原始图像始终被丢弃并且不再需要 有没有什么方法可以在大多数现代浏览器中普遍使用 让用户选择硬盘
  • Spring @Transactional 并发

    class MyService 公共无效a 同步 某个键 b Transactional 传播 传播 REQUIRES NEW 公共无效b 数据库工作吗 除非您使用代码编织 否则这是行不通的 Spring处理事务的默认方式是通过AOP代理
  • 使用 viewModel 从 ChildFragment 访问 ParentFragment 中的 ViewModel

    我正在尝试访问ParentViewModel for ParentFragment from ChildFragment using viewModels 这是我的代码 In ParentFragment class ParentFragm
  • 在java中将jpeg/png转换为像素数组

    如何将包含 jpeg 或 png 的字符串转换为像素数组 最好是一维 理想情况下使用java内置的类 原来你需要公共文件上传 http commons apache org fileupload 看着那 这用户指南 http commons
  • Git在Windows中的克隆比在Linux中慢得多

    我一直在追寻 Windows 上 github 克隆速度极慢的问题 Linux kali 没有这个问题 我的下行连接速度为 100 40 megabit s 我可以获得接近 8mb s 的下载速度 没有问题 我已将电脑直接插入互联网插座 无
  • 为什么 Libgdx 的 Table 不接受缩放操作?

    我在 libgdx 库中使用 scene2d 在游戏中创建一些 UI 我使用了一个表格 我想在用户触摸时采取一些缩放操作以使按钮触摸有意义 当我使用任何其他 Actor 类型 例如 Group 并为其提供缩放操作时 它可以工作 但不能工作表
  • 是否可以在 GitHub diff 查看器中换行长行?

    是否可以在 GitHub diff 查看器中换行长行 也许是查询字符串参数 请注意 从 2013 年 12 月 3 日起 GitHub 现在提出 散文差异的软包装 https github com blog 1707 soft wrappi
  • Java字符串中的字符数[重复]

    这个问题在这里已经有答案了 可能的重复 Java 使用unicode上划线显示平方根时字符串的长度 https stackoverflow com questions 7704426 java length of string when u
  • Spring @Configuration如何缓存对bean的引用

    使用基于 Java 的配置时 Spring 如何防止再次调用 bar 我想知道编译时注释处理或通过代理方法 Configuration public class AppConfig Bean public Foo foo return ne
  • Jersey bean 验证 ParameterNameProvider

    我正在阅读关于泽西岛的文档Bean验证 https jersey java net documentation latest bean validation html The ParameterNameProvider示例显示如何定义方法的
  • 从视图模型调用方法的命令

    好吧 我倾向于避免使用命令 因为它们总是让我感到困惑 但我正在进行一个新项目 并且正在尝试正确构建它 并且在我看来没有任何代码隐藏 基本上我现在想做的就是连接一个按钮来触发一个命令 在我的视图模型上执行一些操作 但不知何故 如此简单的事情仍
  • 我可以从同一个 jar 文件执行两个不同的类吗?

    我有一个项目 在一个包中我制作了服务器 在第二个包中我制作了客户端 它运行良好 我想创建一个 Jar 文件 是否可以使用同一个 jar 文件分别运行客户端和服务器 我使用了只有一个 main 的 jar 文件 当我运行 jar 文件时 它会
  • 如何使用 JRE 部署 JavaFX 11 桌面应用程序

    我有一个 JavaFX JDK 8 桌面业务应用程序 它使用 Java Web Start 进行部署 用户安装了 Java 8 只需访问 URL 我的 AWS Linux 服务器上的公共 URL 即可下载 启动应用程序 使用 Web Sta

随机推荐

  • 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 的