开发者生态
morning
Keyv 和朋友在活跃的 Shai-Hulud 供应链攻击中受到损害
摘要
On August 4, 2026, attackers compromised the GitHub account of the maintainer behind keyv , a key-value storage library with roughly 127 million weekly npm downloads, and used that access to inject a ...
month
the
cacheable
cache
and
with
downloads
setup
mjs
compromised
2026-08-05
1 阅读
约9分钟阅读
cimi_
字号:
2026 年 8 月 4 日,攻击者入侵了 keyv 背后的维护者的 GitHub 帐户,keyv 是一个键值存储库,每周 npm 下载量约为 1.27 亿次,并利用该访问权限在整个软件包系列中注入了窃取凭据的蠕虫病毒。同一维护者拥有可缓存(29M 下载/月)、平面缓存(5.65 亿下载/月)、文件条目缓存(5.57 亿下载/月)以及其他几个广泛使用的缓存实用程序,所有这些都在同一次攻击中被席卷。这种妥协是通过将恶意文件直接推送到主分支,然后立即删除新版本来实现的,这意味着中毒版本被发布到 npm,并具有由 GitHub Actions 签名的有效来源。受影响的软件包包括:keyv 6.0.0(604M/月)flat-cache 6.1.24(580M/月)file-entry-cache 11.1.6(571M/月)cacheable-request 13.0.20(137M/月)cacheable 2.5.1(30M/月)@cacheable/memory 2.2.1(28M/月) cache-manager 7.2.10 (16M/月) @cacheable/node-cache 3.1.2 (6M/月) @cacheable/utils 2.5.1 (34M/月) @cacheable/net 2.1.1 (3.7K/月) ecto 5.0.1 (4.5K/月) 我们还看到该供应链蠕虫在社区中非常活跃地传播到其他维护者和软件包,包括主要组织: @deliveroo/reevent 1.0.1 @or-sdk/invitations 1.4.9 @picsart/ai-sdk 3.32.2 @qlik/embed-runtime 1.6.4 picasso.js 2.11.6 更新 — 2026 年 8 月 4 日 13:37 CEST:至少 868 个软件包(跨 1381 个版本)已被截至撰写本文时,每月安装总数超过 20 亿次。发生了什么 该系列中的每个包都收到了两个新文件 setup.mjs 和 Math_Symbol.js ,以及添加到每个 package.json 中的 "preinstall": "node setup.mjs" 条目。任何针对受影响版本运行 npm install 的人都会在安装完成之前自动执行 setup.mjs。 setup.mjs 是一个严重混淆的 dropper。它唯一的工作是从 github[.]com/oven-sh/bun/releases/download/bun-v1.3.13/ 静默下载 Bun JavaScript 运行时,并使用它来执行真正的有效负载 Math_Symbol.js : execFileSync (, ['/ Math_Symbol .js'], { stdio: 'inherit', cwd: }) Math_Symbol.js 是一个经过严重混淆的 728 KB JavaScript 文件,其中包含凭据窃取程序,这些程序从受害者的环境中获取秘密,对结果进行加密,并将其泄露到一个公共 GitHub 存储库,其描述为“Shai-Hulud:Here We Go Again”。该有效负载还包含类似蠕虫的传播功能,可以感染安装了受感染软件包之一的其他维护者的软件包。它窃取了什么 Math_Symbol.js 文件实现了一组凭据提取器,每个凭据提取器都针对受害计算机上的不同秘密存储。 npm 令牌 读取 ~/.npmrc 并扫描文件系统中的任何其他 .npmrc 文件。提取 authToken 值和任何 //registry.*:_authToken=... 条目。在渗漏之前根据registry.npmjs[.]org/-/whoami 实时验证每个令牌。 GitHub 令牌 针对三种令牌格式:经典 PAT ( ghp_... ) 和 OAuth 令牌 ( gho_... )、GitHub 应用程序服务器到服务器令牌 ( ghs_... ) 和 JWT OIDC 令牌。来源包括 ~/.config/gh/hosts.yml 、环境变量和文件系统扫描。在 GitHub Actions 运行器上,有效负载还执行 shell 命令,直接读取运行器进程内存以转储整个秘密存储。它读取 ACTIONS_ID_TOKEN_REQUEST_TOKEN 和 ACTIONS_ID_TOKEN_REQUEST_URL 来窃取用于 npm 发布的 OIDC 令牌。 AWS 凭证 ~/.aws/credentials 和 ~/.aws/config ,解析所有命名配置文件 AWS_ACCESS_KEY_ID 、 AWS_SECRET_ACCESS_KEY 和 AWS_SESSION_TOKEN 环境变量 EC2 实例元数据服务 169.254.169.254 ,首先尝试 IMDSv2,然后回退到 IMDSv1 ECS 容器元数据端点169.254.170.2 AWS Secrets Manager,跨多个区域调用 Secretsmanager:ListSecrets 以枚举和泄露存储在其中的所有密钥 Kubernetes 密钥 从 /var/run/secrets/kubernetes.io/serviceaccount/ 读取服务账户令牌、CA 证书和命名空间。使用服务帐户令牌直接查询 Kubernetes API 并检索命名空间中的所有机密。还针对 KUBECONFIG 和 ~/.kube/config 。 HashiCorp Vault 令牌 按优先级顺序检查六个源: VAULT_TOKEN 环境变量 ~/.vault-token 、GitHub Actions 运行程序路径 /home/runner/.vault-token 、几个众所周知的容器路径、使用被盗服务帐户 JWT 的 Kubernetes 身份验证登录以及使用任何被盗 AWS 凭证的 Vault 的 AWS IAM 身份验证端点。获得令牌后,它通过 /v1/sys/mounts 枚举所有 KV 存储,并从 KV v1 和 v2 路径读取每个秘密。 Stripe 和 Slack 令牌 在文件系统扫描器触及的所有文件中扫描 Stripe API 密钥(测试和实时、sk_ 和 pk_ 前缀)和 Slack 令牌 ( xox[baprs]-... )。通用文件系统扫描平台感知扫描仪(macOS vs Linux
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱