Skip to content

fix(data): 修正 n8n 原型污染样本的漏洞快照与真实写入点#51

Open
Qiyuanqiii wants to merge 1 commit into
Tencent:mainfrom
Qiyuanqiii:codex/fix-issue-6-n8n-vulnerable-snapshot
Open

fix(data): 修正 n8n 原型污染样本的漏洞快照与真实写入点#51
Qiyuanqiii wants to merge 1 commit into
Tencent:mainfrom
Qiyuanqiii:codex/fix-issue-6-n8n-vulnerable-snapshot

Conversation

@Qiyuanqiii

Copy link
Copy Markdown

背景与去重

复核 #6 及现有 PR 后发现,目前提交主要覆盖题目列出的 6 条优先样本。本 PR 选择尚未被触及的 GHSA-MXRG-77HM-89HV,修正其中:

  • entry-00359
  • entry-00360
  • entry-00361

发现的问题

三条记录原本统一绑定到 732f2a3,但该提交虽然仍在 GSuiteAdmin 修复之前,却已经包含更早合入的 XML dangerous-key 防护,因此只能复现部分漏洞路径,不能作为三条记录共同的漏洞快照。

此外:

  • entry-00359/00360 的 critical operation 只覆盖了 customSchemas[schemaName] ??= {}
  • schemaName === "__proto__" 时,该表达式会取得继承的 Object.prototype,由于结果非 nullish,??= 本身不会执行初始化。
  • 真正造成污染的是下一行 [fieldName] = value,原记录没有覆盖这个实际写入点。
  • entry-00361dataPropertyName 选作入口,但攻击者控制的危险键来自 XML parser 的 attrkey/charkey options。
  • 原 XML critical operation 是普通的 let item 声明,未消费恶意输入,也不是安全影响发生点。

修复方案

  • 将 report 和三条 entry 统一调整到 f7c3684
  • 该提交是 XML 修复 ba687da 的直接父提交,同时位于 GSuiteAdmin 修复 2d9a2ec 之前。
  • 重建 GSuiteAdmin 路径的入口、实际动态属性写入点和数据流。
  • 重建 XML 的 options -> parserOptions -> Parser -> parseStringPromise 数据流。
  • 三条记录均保守降为 verify=0,等待维护者重新审核。
  • 新增上游源码逐字验证器、调查报告和 6 项回归测试。
  • 更新当前审计统计,保留历史版本统计不变。

验证结果

  • 上游源码节点逐字匹配:16/16
  • 修复父提交关系验证通过
  • f7c3684 比原快照早 446 commits
  • canonical 修改仅涉及三条目标 entry 及对应 report
  • 回归测试:6 tests passed
  • 全量加载:184 reports / 408 entries
  • 当前人工验证统计:390 entries / 177 advisories
  • Python 语法检查及 git diff --check 通过

复现命令

export GITHUB_TOKEN="$(gh auth token)"
python scripts/verify_n8n_prototype_pollution_snapshot.py --check-upstream
python -m unittest discover -s tests -p "test_n8n_prototype_pollution_snapshot.py" -v
python examples/load_dataset.py
python -m py_compile scripts/verify_n8n_prototype_pollution_snapshot.py tests/test_n8n_prototype_pollution_snapshot.py
git diff --check

验证截图

image

Related to #6

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant