一拖再拖忍无可忍,谷歌披露影响开发人员的 GitHub 高危0day漏洞
聚焦源代码安全,网罗国内外最新资讯!
编译:奇安信代码卫士团队
谷歌 Project Zero 团队 (GPZ) 披露了 GitHub 的一个高危漏洞。90天期限过后,GitHub 曾要求延期但被拒。
该漏洞是罕见的未能在GPZ规定的90天期限内修复的漏洞。按照谷歌的统计,超过95.8%的漏洞均能在期限内修复。
GPZ素以严格遵守其90天期限而出名,不过这次似乎是因为GitHub 修复速度缓慢而造成的。如下是 GPZ 和 GitHub 沟通的时间线:
7月21日,GPZ 团队研究员 Felix Wihelm将漏洞告知 GitHub 且披露日期定为10月18日。
10月1日,GitHub 发布安全公告宣布弃用易受攻击的命令,但辩称 Wihelm 所发现的漏洞实际上是一个“中危漏洞“。GitHub 为该漏洞分配的编号是 CVE-2020-15228。
10月12日,GPZ 联系 GitHub 并主动提出如果 GitHub 需要更多的修复时间,则可宽限14天。
10月16日,GitHub 要求宽限14天,最后披露期限更改为11月2日。
10月28日,GPZ 警告 GitHub 称最后期限在下周但未收到任何回应。
10月30日,由于未从 GitHub 收到官方回应,GPZ 联系到的相关人员表示,“该问题已修复,GPZ 可按计划在2020年11月2日披露。“
11月1日,GitHub 给出官方回应并要求再宽限2天,以便通知客户在后续日期修复。
11月2日,GPZ 按照谷歌漏洞披露策略,拒绝 GitHub 在获得104天的期限后仍然要求宽限的请求,最终决定公开该漏洞详情。
漏洞详情
该 bug (CVE-2020-15228) 存在于 GitHub 的 Actions 功能(开发者工作流自动化工具)中。
GitHub Actions 支持“工作流命令”作为 Action runner 和已执行操作之间的通信信道。工作流命令在 runner/src/Runner.Worker/ActionCommandManager.cs中实现,并通过解析查找两个命令标记之一的所有已执行操作的 STDOUT 工作。
V2 命令必须在一行代码的开头开始,如 “::workflow-command
parameter1={data},parameter2={data}::{command value}”。V1 命令也可在一行代码的中间开始,语法如下:“##[command parameter1=data;]command-value”。当前的 GitHub Action runner 版本支持少量不同的命令,但从安全角度来看其中最有意思的一个命令是 “set-env”。如该命令的名称所示,”set-env”可用于将任意环境变量定义为工作流步骤的一部分。按照V1的语法写出将是 ##[set-env name=VERSION;]alpha,将 VERSION=alpha 放入工作流中所有后续步骤的环境中。
该功能存在的一个大问题是,它极易遭注入攻击。当 runner 进程解析打印到 STDOUT (查找工作流命令)的每行代码时,每个打印不受信任内容作为其执行部分的操作均易受攻击。在多数情况下,在另外一个工作流执行时,设置任意环境变量的能力都将导致远程代码执行后果。
Wihelm 指出,查看流行的 GitHub 仓库后发现,几乎任何稍微复杂的 GitHub 操作均易受该漏洞影响。
如下以 VSCode 和 CopyCat 和GitHub 为例进行说明:
(1) VSCode 和 CopyCat:
VSCode 为每个新开设的问题建立了工作流,运行 https://github.com/microsoft/vscode-github-triage-actions/blob/master/copycat/CopyCat.ts将新的 issue复制到其它仓库中。由于 CopyCat 将不受信任的 issue.title 打印到 stdout,因此易受工作流命令注入攻击。
利用该实例非常容易,只要通过如下 title 打开新的 issue 即可:
##[set-envname=NODE_OPTIONS;]--experimental-modules--experimental-loader=data:text/javascript,console.log(Buffer.from(JSON.stringify(process.env)).toString('hex'));//
这样做将把环境变量 NODE_OPTIONS 设置到字符串
“--experimental-modules--experimental-loader=data:text/javascript,console.log(Buffer.from(JSON.stringify(process.env)).toString('hex'));//”
中,而 Node 解释器将在后续的执行步骤中解析该字符串。Wihelm 指出,自己的payload 只是转储以十六进制编码形式编码的进程环境,绕过机密的编辑 (redaction),但更复杂的 payload 也是有可能实现的。
(2) actions/stale:
即使 GitHub 自身的操作也易受该漏洞影响。actions/stale 使用 core.info 将不受信任的issue title 转储到 STDOUT。https://github.com/actions/stale/blob/ade4f65ff5df7d690fad2b171eeb852f4809dc0b/src/IssueProcessor.ts#L116 将归结为直接写入 process.stdout (https://github.com/actions/toolkit/blob/1cc56db0ff126f4d65aeb83798852e02a2c180c3/packages/core/src/core.ts#L153)。
幸运的是,stale 通常用作单一步骤的工作流,因此 Wihelm 无法在工作流命令注入之后执行一个步骤的情况下利用该 bug。然而,可按照上述 CopyCat issue 的方式利用 actions/stale 并具有多个步骤的工作流(例如:https://github.com/RocketChat/Rocket.Chat/blob/develop/.github/workflows/stale.yml)。
PoC
Wilhelm 已在私有库 (github.com/felixwilhelm/actions) 中发布了易受攻击的操作和触发器。
修复方案
Wilhelm 指出,自己也并不确定解决该漏洞的最佳方式,他认为工作流命令的实现方式本身就是不安全的。摒弃使用 V1 命令语法并通过允许清单(allowlist) 的方式加固 set-env 的安全很可能防御直接的 RCE 向量问题。然而,即使时覆写后续步骤使用的“正常”环境变量很可能足以利用多数复杂的操作。他还指出,自己并未查看其它工作空间命令的安全影响。长久的修复方案是把工作流命令迁移到某种带外渠道(如新的文件描述符)中,以避免解析 STDOUT,但这样做会使很多已有操作崩溃。他指出,仅修复易受攻击的操作应该无法修复这个问题。从所使用的编程语言来看,几乎无法确保STDOUT 上不会出现恶意代码。
目前,GitHub 发布安全公告宣布弃用易受攻击的命令,但辩称 Wihelm 所发现的漏洞实际上是一个“中危漏洞“。GitHub 为该漏洞分配的编号是 CVE-2020-15228。
推荐阅读
谷歌再次修复已遭利用的两枚高危0day (CVE-2020-16009/16010)
7天期限已过,谷歌披露已遭利用的 Windows 内核 0day 详情
朝鲜黑客被指从黑市购买Oracle Solaris 0day,入侵企业网络
原文链接
https://www.zdnet.com/article/google-to-github-times-up-this-unfixed-high-severity-security-bug-affects-developers/
https://bugs.chromium.org/p/project-zero/issues/detail?id=2070&can=2&q=&colspec=ID%20Type%20Status%20Priority%20Milestone%20Owner%20Summary&cells=ids
题图:Pixabay License
本文由奇安信代码卫士编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。
奇安信代码卫士 (codesafe)
国内首个专注于软件开发安全的
产品线。
觉得不错,就点个 “在看” 吧~
一拖再拖忍无可忍,谷歌披露影响开发人员的 GitHub 高危0day漏洞相关推荐
- 谷歌披露影响多个苹果操作系统的零点击Image I/O 漏洞和开源库 OpenEXR漏洞
聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 多媒体处理组件是当前任何操作系统中最危险的攻击面之一. 当提到管理多媒体文件时,所有操作系统的运作原理都一致.设备上的任何新型多媒体文 ...
- 谷歌不修用户泪流:已遭利用且影响所有安卓版本的严重 0day 漏洞 StrandHogg 详情遭曝光...
聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 Promon 公司的安全研究员最近发现了一个影响所有安卓版本(包括最新的 Android 10)的危险 0day,并将其命名为&quo ...
- 7天期限已过,谷歌披露已遭利用的 Windows 内核 0day 详情
聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 上周五,谷歌安全研究员发现了已遭在野利用的一个 Windows 0day.谷歌 Project Zero 团队主管 Ben Hawke ...
- 谷歌披露利用 Windows 和安卓双平台的高阶攻击活动
聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 2020年初,谷歌 Project Zero 团队检测到专门针对安卓和 Windows 设备的高阶攻击活动,并在今天通过博客披露. 谷 ...
- 为什么 Web 开发人员需要学习一个 JavaScript 框架?
原文链接 可能当我们结束本文时,一个新的 Javascript 框架已经在某处启动了.但这确实不在我们的控制范围内.因此,我们应该简单地继续我们所拥有的.至少,由于免责声明,我们可以确定我们不是在发明 ...
- 全球100位最佳工程师,开发人员,编码人员和企业家,可以在线关注他们的github,推特,网站等
想象一下,你可以与比尔·盖茨,詹姆斯·高斯林,鲍勃叔叔,埃隆·马斯克,昆西·拉尔森以及其他杰出的工程师,开发商和企业家等人在一起.想象一下,您可以自由地交流想法并与所有人共享知识. 这些聪明才智中的大 ...
- 中国 Azure 应用程序的开发人员注意事项
关于本文档 为开发人员提供指南 当前中国服务提供的功能 当前中国服务不提供的功能 在中国服务中创建应用程序时的差异概述 中国数据中心 设置开发计算机 修改中国服务的配置和服务定义文件 使用服务管理 A ...
- 技术封锁来了!GitHub 封杀「美国贸易制裁国家」的开发人员
如果你在面临美国制裁的国家/地区使用GitHub的在线服务,可能将被封杀,只能享用最基本的服务. 在微软旗下的GitHub"限制"住在乌克兰克里米亚地区的一名开发人员的帐户后,人们 ...
- 谷歌再次修复已遭利用的两枚高危0day (CVE-2020-16009/16010)
聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 今天,谷歌为 Chrome Web 浏览器发布安全更新,修复了10个安全漏洞,其中包括两个目前已遭利用的高危0day:CVE-2020 ...
最新文章
- 澎思科技获IDG资本数千万元Pre-A轮融资 推出AI安防全场景软硬件解决方案
- 给Java程序员的Golang教程
- linux查看网卡物理编号_关于如何查看多网卡物理机中网卡序号与物理网卡的对应该关系...
- MybatisPlus 通用枚举无法正确取值
- 通用智能传感集线器(Sensorhub)介绍
- 服务器ip算是虚拟资产吗,云服务器算资产吗
- as常用固定搭配_人民日报整理:英语常用介词固定搭配,太实用了!
- NumPy库---一元函数
- torch.erf()/gelu()/误差函数科普
- TUIO - Radar - Unity
- 音频信号输入itc服务器,音频信号的两种传输方式,你知多少?
- 一杯苦咖啡 公司来了个漂亮女实习程序员
- 计算机内部的物理运行机制,许多人具有应用物理、计算机、经济、心理学以及运筹学的背景,因...
- Windows如何连接远程桌面?远程桌面控制软件推荐
- 如何把excel中的一行复制成多行
- Ac质量问题相关答疑
- 关于matlab的相关性函数
- Django1.11.4 在前端显示图片
- 一部一台阶,直达LTE之巅——《学好LTE》丛书简介
- 微信小程序开发之快递服务专栏(快递运力查询、寄快递、取消订单)
热门文章
- PostFix邮件网关无法向公网投递邮件问题分析
- Linux/Unix操作系统目录结构的来历
- zend studio和dreamweaver使用小笔记
- linux搜索一天内更新的所有文件,linux下怎样更新文件夹下所有文件的时间戳
- java jetty的classpath_java代码启动jetty
- 函数用法r语言_R语言中的apply函数族
- 图片异步加载框架 Android-Universal-Image-Loader
- Android中的观察者DataSetObservable和DataSetObserver
- 一个iOS开发者的Flutter“历险记”
- [Python]输入与输出