「攻击者只是发了一条评论,就拿到了能发布新版本的权限。」

这句话来自安全团队对elementary-data供应链攻击的复盘。一个被数据工程师广泛使用的数据可观测性工具,月下载量超过110万次,却在4月24日因一条GitHub PR评论沦陷。攻击者没有直接访问仓库的权限,却成功推送了携带后门的恶意版本。

打开网易新闻 查看精彩图片

这不是传统的账号被盗或密码泄露。整个入侵链条的起点,是GitHub Actions一个看似无害的配置缺陷。

被盯上的目标:数据管道的"守门人"

elementary-data是一个dbt原生的数据可观测性命令行工具。数据工程师用它监控数据管道健康状态、检测异常、追踪测试失败。它深度集成Snowflake、BigQuery、Redshift、Databricks等主流云数据平台——正是这些连接让它成为高价值目标。

工具在持续集成/持续部署(CI/CD)运行时频繁处理云凭据,天然坐在敏感信息的旁边。每周约28万次下载、每月超110万次的体量,意味着一旦失守,影响半径极广。

安全团队指出,这类攻击向量近期被TeamPCP等威胁行为者频繁利用。数据基础设施工具因其特权位置,正成为供应链攻击的新靶心。

第一阶段:一条评论如何变成代码执行

2026年4月24日22:10 UTC,攻击者出手了。

账号名为realtungtungtungsahur的GitHub用户,注册仅两天,在elementary-data仓库的PR #2147下发布了一条精心构造的评论。目标直指.github/workflows/update_pylon_issue.yml——一个处理Issue和PR评论事件的工作流。

漏洞藏在run代码块里。工作流直接将${{ github.event.comment.body }}插入了shell脚本,且在bash解析之前就完成了模板展开。这意味着攻击者可以通过评论内容注入shell元字符或子命令,在runner上执行任意代码。

关键细节:表达式是在工作流模板层面展开,而非作为字符串参数被转义处理。攻击者利用这一时机差,让恶意载荷在GITHUB_TOKEN生效的环境中运行。

攻击者从未获得仓库的直接写入权限。但runner可用的GITHUB_TOKEN权限足够创建提交、推送标签、触发其他工作流。注入的handle_comment任务持续运行了2小时46分钟,为后续操作争取了充足窗口。

伪造的"官方"发布

利用窃取的token,攻击者伪造了一个发布提交,哈希值为b1e4b1f3aad0d489ab0e9208031c67402bbb8480。

打开网易新闻 查看精彩图片

这个提交被设计得极具欺骗性:它是孤儿提交(orphan commit),不与任何分支关联;作者署名为github-actions[bot];携带伪造的"Verified" PGP签名;提交信息release/v0.23.2 (#2188)直接复制自9天前已合并的合法PR。

攻击者给这个孤儿提交打上v0.23.3标签,随后触发仓库自带的Release package工作流,输入参数为tag=v0.23.3。

工作流的检出步骤使用了ref: ${{ ... }}(原文此处截断,但逻辑链条清晰:攻击者成功劫持了官方发布管道)。

为什么这种攻击难以防范

整个入侵链条的诡异之处在于:攻击者留下的痕迹几乎与正常自动化流程无异。

孤儿提交不显示在任何分支历史中,常规的代码审查不会触及。伪造的bot署名和PGP签名让提交看起来经过官方验证。复制的提交信息进一步降低了警觉性——它确实来自一个真实的、已合并的PR。

GitHub Actions的权限模型在此暴露盲区。GITHUB_TOKEN的默认权限往往超出实际需求,而工作流中的表达式注入漏洞又难以被静态扫描发现。攻击者只需要在公开PR下发表评论,无需任何仓库访问权限,就能撬动整个发布管道。

数据工程师群体面临特殊困境。elementary-data这类工具需要在CI/CD环境中连接云数据平台,天然需要高权限凭据。工具本身的设计目标就是"坐在敏感信息旁边",这让它既是生产必需品,也是攻击者的理想跳板。

安全团队的复盘强调,这是TeamPCP等威胁行为者近期频繁利用的向量。数据基础设施的供应链安全,正在成为攻防战的新前线。

事件的双重启示

对工具维护者而言,GitHub Actions的安全配置需要重新审视。表达式注入漏洞的修复并不复杂——将用户输入作为字符串参数传递,而非直接嵌入shell脚本——但这类问题在大量开源仓库中普遍存在。

对使用者而言,依赖高权限工具的代价是信任链条的极度延长。你信任的不仅是工具本身的代码,还包括它的CI/CD配置、第三方Action、以及所有能触发工作流的交互入口。

elementary-data的月下载量超过110万次,这意味着潜在影响范围极广。攻击者精准选择了数据管道的关键节点,利用的是现代软件开发中无处不在的自动化便利。

当一条GitHub评论就能撬动百万级下载量的软件发布,我们或许需要重新评估"便利"与"安全"的交换比例。