安全厂商Radware披露,研究人员发现至少83次针对61个公开GitHub仓库的恶意攻击,受影响项目包括谷歌LangExtract、Trivy、Brave浏览器和MLflow等知名开源项目。研究团队怀疑这是一场协同行动,目的是在CI/CD环境中执行命令并窃取凭证与访问令牌。
Radware威胁研究员Gabi Nakibly与Zvika Babo称,多数恶意内容集中在9月1日43分钟内发布,其余6条在此后两分钟内出现,攻击者疑似为同一人,使用了74个GitHub账号,其中不少账号有正常开发历史,可能已被攻陷。
攻击如何被发现
Radware的威胁研究员是在调查GitHub平台上的提示注入问题时发现这轮活动的。研究人员随后对相关日志进行了核查,并统计出带有可验证载荷的GitHub条目共83条,分布在61个不同的仓库中,这一数字截至10月13日仍然成立。
Radware副总裁兼研究员Gabi Nakibly与研究员Zvika Babo在接受采访时表示,多数恶意条目集中在9月1日发布,77条落在43分钟的时间窗口内,其余6条在此后两分钟内出现。研究人员认为,数十个账号在同一天、极短时间、针对同一批基础设施发布同一类型的载荷,可以合理判断这是一次协同行动。
研究团队怀疑背后只有一名攻击者,其动用了74个不同的GitHub账号。这些账号中不少拥有正常的开发历史,研究人员据此判断它们很可能已被攻陷,而非专门注册的一次性账号。

隐蔽的攻击链条
研究人员称,这条攻击链的新颖之处在于其隐蔽性。攻击者首先在issue、pull request或评论中发布内容,把恶意命令藏在HTML注释里,这样在页面渲染后用户看不到这些指令。
如果仓库配置为对某类事件自动响应,那么一个pull request或issue就能触发工作流,攻击者在此阶段几乎不需要再做操作。Nakibly说,工作流会在一秒内自动触发,如果该工作流本身存在漏洞,攻击就会成功执行。
具体执行方式是:工作流把攻击者可控的内容直接拼进shell源码,shell随即执行隐藏的恶意命令,收集环境变量并尝试将其外传到攻击者控制的服务器。Babo补充说,攻击者并不需要攻陷仓库或获得代码库访问权限,任何拥有GitHub账号的用户都可以尝试这种攻击,发起门槛很低。

受影响的仓库
报告列出的目标覆盖AI框架、安全工具、开发基础设施、数据库等多个类别。按星标数看,较受关注的项目包括agno-agi/agno(4.27万)、ToolJet/ToolJet(4.11万)、google/langextract(3.89万)、aquasecurity/trivy(3.84万)、CopilotKit/CopilotKit(3.8万)和podman-container-tools/podman(3.3万)。
其他被点名的仓库还有QwenLM/qwen-code(2.85万)、mlflow/mlflow(2.84万)、discordjs/discord.js(2.68万)、cilium/cilium(2.56万)、brave/brave-browser(2.39万)、dotnet/maui(2.33万)、Homebrew/homebrew-cask(2.22万)、github/docs(2.1万)、apache/doris(1.6万)以及PX4/PX4-Autopilot(1.28万)。
Babo表示,这些项目被数千家组织使用。研究人员已将发现通报给全部项目维护者,多数仓库的相关内容已被关闭或修复,但他们无法确认所有仓库都已完成处理。
是否已得手
研究人员检查了实际运行产生的日志,在其中两例中发现恶意命令确实在自动化环境中执行过的证据。不过他们表示,目前无法确定攻击者是否成功取得仓库写权限、修改了源代码或影响到下游软件。
Nakibly说,攻击者的最终目标很可能是供应链攻击:先拿到仓库的凭证,随后便能按自己的意愿改动代码内容,并把恶意改动推送给其他人。他同时强调,攻击者整体上是在寻找一切可能进入仓库获取凭证的途径。
这轮活动并非孤立事件。报道提到,此前已发生多起针对开源安全和开发工具的供应链攻击,攻击者正不断寻找窃取凭证和其他机密信息的新方法。
防护建议
Nakibly表示,没有办法阻止攻击者尝试,唯一可行的做法是确保工作流代码具备韧性,不对此类攻击存在漏洞。
研究人员建议对CI/CD工作流实施最小权限,并尽可能把由外部事件触发的工作流与拥有高权限的任务隔离开来。Babo还建议开发者把外部内容一律视为不可信,同时限制工作流可访问的机密信息与环境变量范围。
要点
- 83次恶意攻击指向61个公开GitHub仓库
- 77条恶意内容在43分钟内集中发布
- 攻击者使用74个GitHub账号
- 恶意命令藏在HTML注释中,页面不可见
- 研究人员建议对CI/CD工作流实行最小权限

正在读取登录状态…
暂无讨论,说说你的看法吧