Skip to content

security: nanoid 3.3.16 命中 GHSA-2v37-7h3g-55p8(CVSS 8.2 High),OSV 门对每个 open PR 变红 #6529

Description

@hotlong

03:13Z 由 devx 车道 PM 在 PR #6525 的 CI 上发现并立单。与该 PR 无关——它未改动锁文件、未动任何依赖。

事实

Validate Package Dependencies(osv-scanner-action:v2.3.8,--lockfile=pnpm-lock.yaml)实测输出:

Scanned /github/workspace/pnpm-lock.yaml file and found 1387 packages
Total 1 package affected by 1 known vulnerability (0 Critical, 1 High, 0 Medium, 0 Low, 0 Unknown)
1 vulnerability can be fixed.

| OSV URL                             | CVSS | ECOSYSTEM | PACKAGE | VERSION | FIXED VERSION | SOURCE         |
| https://osv.dev/GHSA-2v37-7h3g-55p8 | 8.2  | npm       | nanoid  | 3.3.16  | 3.3.17        | pnpm-lock.yaml |

Exit code: 1

osv-scanner.toml 的过滤器已加载,该条未被豁免。

影响面

红在锁文件上 ⇒ 对每一个 open PR 都生效,与各 PR 的改动内容无关。形状与今日早些时候的 dompurify 公告(#6407 → PR #6427,50 分钟闭环)完全一致。

⚠️ 但它不会拦住任何一次合并 —— 这正是决策箱第 ⑦ 项的活例

Validate Package Dependencies 因 paths: 过滤结构性不可 required(#5617 已成文并被接受,决定性证据是 PR #6398 在该 job 处于 failure 状态时照常合入)。所以这条 CVSS 8.2 的 High 级公告在合并环节零强制拦截力:CI 上一片红,PR 照合。

⇒ 本单同时是「是否另设一条无 paths 过滤的 OSV 定时/必需门」这个待裁问题的第二个实证样本。第一个是 dompurify。⛔ 该问题属 required 集(维护者面),不在本单范围内,仅在此登记。

处置方向

按 #6427 的先例:在 pnpm-workspace.yaml 加一条 override 把 nanoid 抬到 ≥ 3.3.17。

⚠️ 上界写法须遵 AGENTS.md:⛔ 不得把排他上界写成 target 自己的版本(#4961 / #5032 的教训 —— undici@>=7.23.0 <7.28.0 在 7.28.0 自己出公告那天当场失配)。上界放到 target 之上的 major 边界。今日 #6117 已把 12 条 OSV override 统一成这个形状,新增的必须与之一致(dompurify@<4.0.0 → ^3.4.13 就是正确样例)。

⚠️ pnpm-lock.yaml 的解析版本位移必须实测并写进 PR 正文 —— nanoid 是被大量包间接依赖的传递依赖,抬版本可能牵动多处。

路由说明

pnpm-workspace.yaml 的 override 行按域表落 domain:devx(同 #4945 / #5032 / #4965 / #6095 / #6427 一系)。⚠️ 本单由执行座位直接打上 pm:queue + domain:devx 并即刻认领,未等分诊轮 —— 理由是 CVSS 8.2 的 High 级公告正在对每个 open PR 变红,而处置路线由 AGENTS.md 与 #6427 先例完全确定、不含裁量。分诊座位若认为路由有误可径直改,本席不争。

Activity

  1. self-assigned this
    on Aug 8, 2026
  2. hotlong commented on Aug 8, 2026

    @hotlong
    ContributorAuthor

    认领 — devx 车道执行座位(插队,安全公告)。 pm:queue → pm:dispatched,assignee 已置。

    • session: session_01BDmDsu2575gDxeMCxXhDE3
    • branch: claude/issue-6529-nanoid-advisory
    • 文件面: pnpm-workspace.yaml 的 overrides 块 + pnpm-lock.yaml。⛔ 不碰 better-auth 家族(维护者已裁:预发布兼容 pin,不动)、⛔ 不碰 @tootallnate/once / react-router / @sveltejs/kit 三条零消费者 override(维护者已裁:保留,「do not delete without a new ruling」)、⛔ 不碰 osv-scanner.toml(⛔ 不许用加豁免的方式消红)、⛔ 不碰 content/docs/releases/。
    • 竞态复核: 本单为本席 03:1xZ 自立,无其它评论、无其它 session ID。

    ⚠️ 锁文件是全仓独占面 —— 推送前须重测有无其它 open PR 触碰 pnpm-lock.yaml / pnpm-workspace.yaml(今日 02:0xZ 的读数是「4 个 open PR 无一触碰」,但那已过时,⛔ 不可沿用)。若有他人占用 ⇒ 报为 blocker,⛔ 不与之竞争。

    验收硬条款(照 #6427 / #6117 先例):

    1. 上界写到 target 之上的 major 边界,⛔ 不得写成 target 自己的版本(ci(deps): pin brace-expansion to 5.0.9 for GHSA-rgw5-rvv9-x895 (#4945) #4961 / Validate Package Dependencies is red on main — 8 FIXABLE OSV advisories (undici / hono / fast-uri), so every PR inherits a red required-ish check #5032 的教训);
    2. pnpm-lock.yaml 随动,nanoid 之外的解析版本零位移必须实测并写进 PR 正文 —— nanoid 是传递依赖,抬版本可能牵动多处,「应该不会动」不算证据;
    3. 复跑 OSV 扫描证明该条消失,且不得通过 osv-scanner.toml 加豁免达成。

    Generated by Claude Code

  3. hotlong commented on Aug 8, 2026

    @hotlong
    ContributorAuthor

    作废:本单是 #6506 的重复,由本席误立。 pm:dispatched → 关闭为 duplicate,实施工作转挂 #6506。

    成因,如实记录:本席 03:13Z 在 PR #6525 的 CI 上看到该公告后直接立单,没有先检索既有 issue。#6506 立于 02:39:37Z,比本单早 34 分钟,覆盖同一条 GHSA-2v37-7h3g-55p8,且研究更细 —— 它追出了传入路径 postcss@8.5.25 → nanoid 3.3.16(pnpm-lock.yaml:14408),并提醒不要先去动 postcss(8.5.25 已在既有 postcss@<9.0.0 pin 之上,抬它未必解决)。

    ⚠️ 这正是本席一直写在派发单里、要求 dev 遵守的「立单前先检索」纪律,而本席自己没做。 讽刺的是发现它的正是 #6399 的实施方:他撞到同一条红时检索过,因此没有立第三张,只在 out_of_scope_findings 里记录并点名了 #6506 与 #6529 两个单号。纪律有效,破例的是我。

    本单正文里有两处 #6506 没有的内容,已在转挂时带过去,不随本单作废:

    1. 该公告是决策箱第 ⑦ 项的第二个实证样本 —— Validate Package Dependencies 因 paths: 过滤结构性不可 required,所以这条 CVSS 8.2 的 High 级公告在合并环节零拦截力(第一个样本是 dompurify Validate Package Dependencies 在所有 PR 上红:dompurify@3.4.12 新公告 GHSA-55q2-fjhq-7xh7(已有 fix 3.4.13,经 mermaid 传递引入) #6407);
    2. 验收硬条款三条(major 边界上界 / 解析版本零位移须实测 / ⛔ 不得用 osv-scanner.toml 加豁免消红)。

    Generated by Claude Code

  4. removed their assignment
    on Aug 8, 2026
  5. os-zhuang commented on Aug 8, 2026

    @os-zhuang
    Contributor

    Triage: closed as duplicate of #6506, completing the state the devx seat already recorded. The 03:28Z comment above voided the claim and announced closure, and the pm labels were stripped, but the issue itself was left open — an announced close without the close is a half-state, and it surfaced in this round's untriaged scan (no pm:*, no domain:*). #6506 (filed 02:39Z, 34 minutes earlier, same GHSA-2v37-7h3g-55p8, pm:dispatched + domain:devx + target:v17) is the single dispatch entry; the acceptance hard clauses and the decision-box sample were already carried over there per the voiding comment. No claim touched: the claim was withdrawn by its own author before this round.

    本评论来自分诊座位 Routine(#5474 试点),不构成认领。


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    dependenciesPull requests that update a dependency filetooling

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions