香港安全咨询 Turbo Codemod 缺陷(CVE202645772)

Npm @turbo/codemod 中的其他漏洞类型






NPM: Turbo (@turbo/codemod) — Unexpected local code execution during Yarn Berry detection (CVE-2026-45772) — What WordPress teams must know and how to protect sites


插件名称 @turbo/codemod
漏洞类型 关键漏洞
CVE 编号 CVE-2026-45772
紧急程度
CVE 发布日期 2026-05-20
来源网址 CVE-2026-45772

NPM: Turbo (@turbo/codemod) — 在 Yarn Berry 检测期间意外的本地代码执行 (CVE-2026-45772) — WordPress 团队必须知道的内容以及如何保护网站

日期: 2026-05-XX   |   作者: 香港安全专家

标签: WordPress, 供应链, NPM, 漏洞, WAF, DevOps, 安全

摘要:针对 NPM 包的高严重性供应链漏洞 (CVE-2026-45772 / GHSA-3qcw-2rhx-2726) 被披露 @turbo/codemod (>= 2.3.4, < 2.9.14). It can lead to unexpected local code execution during Yarn Berry (Yarn v2+) detection. This advisory matters for WordPress teams because modern build pipelines, development workflows, and some plugin/theme distributions include Node tooling. In this article I explain the risk, who is impacted, practical detection and mitigation steps for WordPress sites, developer and CI hardening recommendations, and incident response guidance.

发生了什么?简短的技术摘要

在 2026 年 5 月 19 日,发布了一份公告和 CVE (GHSA-3qcw-2rhx-2726, CVE-2026-45772) were published describing an “unexpected local code execution” vulnerability in the NPM package @turbo/codemod for versions >= 2.3.4 and < 2.9.14. The maintainers released version 2.9.14 to address the issue.

In plain terms: under certain conditions the package’s detection logic for Yarn Berry (the Yarn v2+ architecture) can result in local code being executed unexpectedly. That execution could occur during development installs, CI builds, or other automated environments that run Node package installs or scripts. The vulnerability is classified as high severity (CVSS 9.8) and scored as network-exploitable with low complexity and no special privileges required.

规范来源:

为什么 WordPress 网站所有者和开发者应该关注

这是一个 Node/npm 漏洞,但对 WordPress 的下游影响是显著的。主要原因:

  • 许多 WordPress 插件和主题开发工作流程包括 Node 工具(构建脚本、打包工具、代码检查工具)。CI 管道通常运行 npm/yarn 来构建资产,然后部署到生产环境。.
  • 一些插件或主题随附 node_modules 打包。如果包含易受攻击的 Node 模块并随后被托管构建脚本或本地开发机器处理,攻击者可能会导致在执行安装的机器上执行代码。.
  • 构建/CI 环境或开发者工作站的妥协可能导致恶意部署(后门、修改的构建、凭证盗窃),直接影响 WordPress 网站。.
  • 在部署期间运行 npm install 的共享主机或自动资产管道是特别的风险向量。.

严肃对待供应链漏洞:它们攻击创建、测试和部署您网站的工具,而不仅仅是运行在网站上的代码。.

漏洞的行为(攻击面和影响)

与 WordPress 团队相关的防御性属性总结:

  • 攻击向量: 由检测逻辑触发的本地(构建/安装)执行。.
  • 触发条件: 运行 npm/yarn install 或加载工具 @turbo/codemod 同时执行 Yarn Berry 检测逻辑。.
  • 复杂性: 低 — 典型的构建流程可能会调用检测逻辑。.
  • 所需权限: 没有特别的 — CI 运行器和标准开发者账户就足够了。.
  • 影响: 在执行安装/构建的主机上任意代码执行。如果该主机持有部署凭证或仓库访问权限,攻击者可以转向生产网站。.

典型的利用场景:

  • CI 运行器安装依赖并运行构建脚本。被妥协或篡改的包会在运行器中触发代码执行。.
  • 开发者克隆一个具有被妥协依赖的仓库并运行 npm 安装 本地;该工作站上的秘密和部署密钥处于风险之中。.
  • 插件/主题发布者包括 node_modules 在一个包中;处理上传并运行安装的托管自动化可以执行恶意模块。.

立即采取行动(现在该做什么)

  1. 更新
    • 如果您的项目使用 @turbo/codemod 直接或间接,立即更新到版本 2.9.14 或更高版本。.
    • 命令:
      • npm: npm install @turbo/codemod@^2.9.14 --save-dev
      • yarn: yarn add @turbo/codemod@^2.9.14 --dev
  2. 检查插件/主题分发

    检查插件和主题库以及打包的 zip 文件以查找捆绑的 node_modules. 避免发布未经审查的 node_modules; 更倾向于发布在安全环境中生成的构建工件。.

  3. 审计构建管道和 CI 运行器

    确保 CI 运行器(GitHub Actions、GitLab CI、自托管运行器)使用更新的依赖项,不运行不受信任的安装脚本,并且不暴露长期凭据。.

  4. 如果怀疑泄露,请重新生成秘密

    如果您怀疑 CI 运行器或工作站被攻破,请轮换部署令牌和凭据。.

  5. 扫描站点文件以查找可疑更改

    使用文件完整性检查和恶意软件扫描来检测在 wp-content, wp-config.php, 、和其他关键位置下的未经授权的修改。.

  6. 如果您无法立即更新 — 应用短期缓解措施(见下一节)。.

技术检测步骤(命令和指标)

在代码库、CI镜像或服务器文件系统中运行这些检查以检测存在和版本 @turbo/codemod.

检查代码库中的顶级依赖:

# 在 package.json 中查找直接依赖

查找嵌套/传递安装 node_modules:

# 检查 node_modules 中安装的版本

使用 Yarn:

# 使用 Yarn classic

在 WordPress 服务器和打包插件上:

# 在插件/主题中查找任何捆绑的 node_modules

检查 CI 日志中提到的安装 @turbo/codemod or Yarn Berry detection messages. If you find versions in the vulnerable range (>= 2.3.4, < 2.9.14), treat that environment as potentially compromised until remediated.

Short-term mitigations when updating isn’t possible

更新到 2.9.14+ 是正确的修复。如果无法立即完成,请应用这些风险降低措施:

  1. 在安装期间禁用生命周期脚本(在可行的情况下)

    生命周期脚本在安装期间通常会执行任意代码。在安全时防止它们:

    • npm: npm ci --ignore-scripts
    • yarn(经典): yarn install --ignore-scripts

    注意:忽略脚本可能会破坏依赖于它们的构建。在广泛应用之前进行测试。.

  2. 1. 使用严格的锁定文件和安全的注册表

    2. 提交锁定文件并使用确定性安装(例如,, npm ci3. )。配置 CI 使用验证完整性的私有注册表镜像或代理。.

  3. 4. 在隔离的、短暂的环境中运行安装

    5. 使用容器化构建或没有访问长期秘密的短暂运行器。不要在构建主机上存储 SSH 密钥或高权限令牌。.

  4. 6. 防止在发布中捆绑未经审查的 node_modules 7. 在打包或在受控环境中重建工件之前。

    去除 node_modules 8. 扫描可疑的更改和秘密.

  5. 9. 部署后对新的 .php 文件、二进制文件或出站连接进行自动检查可以警告潜在的安全漏洞。

    10. 加固 CI 凭据.

  6. 11. 将令牌范围限制为最低权限。如果怀疑被泄露,请轮换凭据。

    12. 阻止构建主机的非必要网络活动.

  7. 13. 在可能的情况下,仅限制出站访问到受信任的注册表和端点。

    14. 这些步骤减少了暴露,但不能替代应用上游修复。.

15. 供应链安全需要持续的努力。推荐的做法:.

WordPress 项目的长期 DevOps 和供应链加固

16. 将构建环境视为关键基础设施

  1. 17. 将构建与凭据隔离,并使用短暂的运行器、短期凭据和严格的网络控制。

    18. 强制执行依赖管理纪律.

  2. 19. 提交锁定文件,使用确定性安装(

    提交锁定文件,使用确定性安装(npm ci, yarn install --frozen-lockfile), 并优先选择固定版本而非浮动范围。.

  3. 持续依赖扫描

    将SCA工具集成到CI中,以检测易受攻击的包并在可能的情况下自动安全更新。.

  4. 分发版的静态和运行时扫描

    在发布前扫描包以检测包含的 node_modules, 、意外的二进制文件或混淆代码。.

  5. 部署令牌的最小权限

    为发布、部署和注册访问分开令牌,每个令牌的作用域都很窄。.

  6. 保护开发者工作站

    提供安全包管理的指导和工具,避免在 npm/yarn 生产系统上进行安装。.

  7. 可重现的构建

    无论构建在哪里运行,目标是生成相同的工件;这简化了篡改检测。.

  8. 维护受信任的构建镜像

    使用经过审查、加固的构建镜像,并定期扫描漏洞。.

事件响应检查清单(如果您怀疑被攻击)

如果您怀疑由于此漏洞或其他供应链问题而受到损害,请迅速采取行动:

  1. 隔离受影响的系统

    将构建代理、开发者工作站或运行器从网络和CI池中下线。.

  2. 保留证据

    收集 CI 日志、系统日志和 npm/yarn 安装日志以进行取证分析;安全存储它们。.

  3. 更换凭据

    撤销并重新生成在被攻陷主机上存在的任何密钥、部署密钥、令牌或 SSH 密钥。假设所有本地密钥可能已被攻陷。.

  4. 扫描webshell和后门

    检查修改过的 PHP 文件、未知的管理员用户、可疑的 cron 作业,以及具有意外时间戳的文件。 wp-content.

  5. 从已知良好的备份中恢复

    如果站点文件被攻陷,请从可疑活动之前的干净备份中恢复。在恢复之前验证备份。.

  6. 在安全环境中重建工件

    在具有更新依赖项的强化运行器中重建插件/主题(包括 @turbo/codemod 2.9.14+).

  7. 进行全面的安全审查

    审计日志、变更历史、数据库条目和用户帐户,以查找未经授权访问或数据外泄的迹象。.

  8. 沟通和记录。

    通知利益相关者并记录取证时间线和修复步骤。.

  9. 如有必要,通知受影响的用户

    如果客户数据被暴露,请遵循适用的法律和监管义务进行泄露通知。.

WordPress 定向 WAF 和虚拟补丁的帮助

WAF 和虚拟补丁是互补控制;它们并不能替代修复基础供应链问题。实际好处包括:

  • 快速减轻网络层面的后果: 如果恶意软件包导致了 web shell 或修改过的 PHP 文件,WAF 可以阻止常见的 web-shell 模式和已知的恶意 URI。.
  • 速率限制和阻止: WAF 规则减缓自动扫描器并阻止用于利用后门的可疑请求模式。.
  • 监控和警报: WAF 提供实时流量可见性,帮助检测异常有效负载或外泄尝试。.
  • 对未修补的 Windows 的保护: 虚拟补丁减少了暴露,同时协调第三方供应商和多个插件的修复。.

将 WAF 保护与文件完整性监控和 CI 加固结合,以覆盖管道和运行时攻击面。.

1. 实用示例:您现在可以应用的命令、CI 代码片段和检查

2. 1) CI 作业代码片段(GitHub Actions)— 如果存在则构建失败 @turbo/codemod 3. 在锁定文件中

4. - name: 检查锁定文件中的 @turbo/codemod

run: |

if grep -R "@turbo/codemod" package-lock.json yarn.lock > /dev/null 2>&1; then

echo "在锁定文件中找到 @turbo/codemod。构建失败以要求手动审核。" node_modules exit 1

else

echo "在锁定文件中未找到对 @turbo/codemod 的直接引用。"

fi

5. 2) 在安装期间防止生命周期脚本(如果安全).

最后的想法——安全是分层的

6. - name: 在没有生命周期脚本的情况下安装依赖项

  • run: npm ci --ignore-scripts.
  • 7. 3) 检查打包中的.
  • 8. # 在插件/主题仓库根目录 node_modules, if [ -d "node_modules" ]; then.
  • echo "node_modules 存在 — 考虑在打包或在 CI 中重建之前删除".
  • fi.

# 查找任何包含 node_modules 的已归档插件 zip.

参考资料和进一步阅读

作者

香港安全专家 — 专注于供应链韧性、构建管道加固和针对亚太地区机构及网站所有者的事件响应的实战 WordPress 安全从业者。.


0 分享:
你可能也喜欢