SuperAPI AI 工具集

package-security-check

安全与审计

查看项目

更新于 10-16 09:02

技能介绍

Package Security Check 是一个针对 JavaScript 供应链安全的可复用基线检查技能,面向仓库或工作区提供确定性的本地检查,并强调以 pnpm 优先的加固策略。

用途 该技能把结果定位为通用的 JS 供应链检查基线,而不是围绕某一个 CVE、厂商、包家族或事件展开。在运行安装、触发包管理器变更命令或进行文件编辑之前,只做只读检查,并给出交通灯式的问题分析:红色代表阻塞项,包括入侵信号、不安全安装路径、密钥泄露,或允许未审查代码执行的政策;黄色代表风险,包括加固缺口、包管理器主版本过旧、宽泛版本声明、需要审查的生命周期脚本或 CI 薄弱环节;绿色代表已验证的控制或未发现问题。在交通灯分析之后,需要先获得批准,才能更改文件或执行可能安装、更新、发布或重写锁文件的包管理器操作。

主要能力 配套脚本 scripts/check_js_supply_chain.py 执行确定性的本地检查,可检测包管理器与锁文件策略、检查仓库本地及实际生效的 pnpm 加固设置、报告 npm 回退与 Bun 回退的加固缺口、报告存在风险的直接依赖声明、报告工作区清单中的生命周期脚本(可选检查已安装包)、报告存在风险的 GitHub Actions 安装、发布与密钥模式,并对 pull_request_target 以及可能演变为供应链升级路径的共享缓存模式发出警告,还可按 --since 报告包管理器文件的修改时间,并应用可选的 IOC JSON 配置文件来匹配事件特定的指纹、载荷文件、持久化路径、工作流标记和已知恶意包版本。

使用方式 从该技能目录对仓库或工作区根目录运行基线扫描:python3 scripts/check_js_supply_chain.py --root <repo-or-workspace-root>。当需要在加固缺口上使检查失败时使用 --strict;当其他工具需要机器可读输出时使用 --json;仅当 node_modules 存在且已安装包的生命周期元数据重要时使用 --include-installed。针对特定活跃事件,可添加一个或多个 IOC 配置文件,例如 python3 scripts/check_js_supply_chain.py --root <repo-or-workspace-root> --ioc data/iocs/npm-supply-chain-2026-05.json --since 2026-05-11T19:20:00Z。依赖该配置文件之前应先从当前咨询来源刷新事件事实。IOC 配置文件是检测数据,不是基础政策。报告检查顺序为:package_manager_policy、repo_config_findings 与 effective_config_findings、risky_direct_specs、package_lifecycle_scripts(请求时再看 installed_lifecycle_scripts)、ci_install_findings(包括 GitHub Actions 权限与缓存警告)、ioc_hits、recent_package_manager_files。若出现任何 IOC 命中,应停止常规包操作,不要运行安装或生命周期脚本,报告确切的文件与包,并建议隔离、凭据轮换以及从已知良好锁文件重装。

加固策略要点 该技能推荐以 pnpm 11 或更新版本作为单一包管理器,因为其具备发布时限管控、生命周期脚本审批、异常子依赖阻断与信任策略控制。编写 packageManager 前应核实当前 pnpm 版本:npm view pnpm dist-tags --json。要求 pnpm 11 或更新。资料提到,截至 2026-05-12,npm 报告 latest 为 pnpm 11.1.1,但不应在未重新核实的情况下硬编码该值。若仓库的 Node 运行时无法运行 pnpm 11,应报告为兼容性阻塞项,而不是静默回退到 pnpm 10。使用 devEngines.packageManager 声明所需主版本,并用 packageManager 固定已验证的当前稳定版本以保证可复现性。除用户明确批准临时例外外,pnpm 10 及更旧版本视为 legacy-pnpm-major。包管理器姿态方面:pnpm >=11 为规范基线;bun 仅在仓库有意使用 Bun 且具备等效本地加固时接受;npm 仅为回退,除非仓库有明确书面理由,否则建议迁移到 pnpm 11;yarn 不被该技能接受为基线。不得将 npm 表述为与 pnpm 11 等价。对 npm 回退仓库,要求精确保存与可复现 CI,同时建议迁移 pnpm;除非在当前 npm 文档与本地 npm config ls -l 中验证,不得声称 npm 支持发布时限管控。对 Bun 回退仓库,要求仓库本地 bunfig.toml,包含 minimumReleaseAge、exact、frozenLockfile、saveTextLockfile 等设置;没有经过审查的包级理由,不要设置 minimumReleaseAgeExcludes。应添加或更新根目录 pnpm-workspace.yaml 中的相关字段,如 minimumReleaseAge、minimumReleaseAgeStrict、minimumReleaseAgeIgnoreMissingTime、blockExoticSubdeps、trustPolicy、trustPolicyIgnoreAfter、dangerouslyAllowAllBuilds、savePrefix、allowBuilds。普通仓库使用 7 天(10080),仅当仓库有真实的依赖新鲜度需求时才使用 3 天。依赖构建脚本只有在审查后才允许。

CI 规则 要求冻结的 pnpm 安装:pnpm install --frozen-lockfile。除非仓库有书面理由,否则将以下情况视为发现问题:pnpm 仓库中出现非 pnpm 锁文件;CI 使用 npm install、yarn install、未冻结的 bun install 或未冻结的 pnpm install;迁移待处理期间 npm 仓库未使用 npm ci 与已提交锁文件;Bun 仓库缺少 bunfig.toml 的发布时限、精确、冻结锁文件或文本锁文件策略;pull_request_target 工作流(仅在有审查理由时允许,且不得检出或运行不受信任 PR 代码);发布/发布管道中的共享缓存,包括 GitHub Actions cache、Turborepo 与 Nx cache;任何 PR 可控缓存内容可进入特权发布/发布工作流的路径;CI/部署期间重写锁文件;latest、*、宽泛范围、Git/GitHub 简写、HTTP tarball 或外部 file: 声明;未被明确批准的依赖生命周期脚本;dangerouslyAllowAllBuilds: true;工作流在广构建任务中使用 toJSON(secrets) 或发布凭据。

适用场景与限制 该技能适用于需要在本地仓库与 CI 中建立 JavaScript 供应链安全基线的团队,尤其是使用 pnpm 的仓库,也覆盖 npm 与 Bun 回退场景。事件相关的 IOC 配置文件应放在 data/iocs/ 下;除非这些常量在 npm 供应链攻击中具有通用性,否则不要将事件特定常量加入扫描器。