Back to skill

Security audit

Iterate

Security checks for vulnerabilities and agentic risk

Overview

This code-review skill needs review because conflicting instructions can publish code without approval, and installation controls do not consistently match their promises.

Use an isolated repository copy without permission to push until the publishing instructions are corrected. Review every configured command, explicitly select the installation destination, keep signature checks enabled, and avoid the optional pipe-to-bash installer. Do not assume disabling automatic pushes prevents publication in this version.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (285)

Known Vulnerable Dependency: setuptools==68.0.0 — 6 advisory(ies): CVE-2025-47273 (setuptools has a path traversal vulnerability in PackageIndex.download that lead); CVE-2024-6345 (setuptools vulnerable to Command Injection via package URL); CVE-2026-59890 (setuptools: MANIFEST.in exclusion bypass in sdist via Unicode normalization coll) +3 more

Critical
Category
Supply Chain
Confidence
98% confidence
Finding

The build configuration explicitly pins setuptools to a version affected by known command-injection and path-traversal vulnerabilities. If attacker-controlled package URLs or downloads reach the affected setuptools functionality during a build, exploitation could execute commands or write files outside the intended directory, potentially compromising developer or CI credentials. This is a build-time exposure rather than proof of an exploitable runtime path; the supplied file does not establish that the vulnerable functionality is invoked.

Content

No source excerpt is available for this finding.

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

Scanner excerpt · CHANGELOG.md (reported line 759)May include surrounding context.

md
`TypeError: unhashable type`;检查路径与 `doctor --fix` 路径都补 `isinstance`
  前置守卫(前者报错/告警,后者修复)。
- **doctor 的 known-safe 门禁逐条校验**:此前只检查每个模块的 `cmds[0]`,
  于是 `[pytest, "curl x | sh"]` 被报为 healthy,而 `guard` 必然拒绝。
- **`validate.py` 白名单与维度一致性**:白名单条目先 `strip()` 再做语法校验与
  前缀匹配(与 doctor 一致," pytest " 不再一边通过一边拒绝);纯空白条目拒绝
  (空前缀会让一切命令"被白名单");`dimension_sets`/`personalization` 一致性

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · CHANGELOG.md (reported line 1365)May include surrounding context.

md
### 修复 / Fixes

- **doctor 白名单合规检查 fail-open**:`_check_whitelist_compliance` 此前遇到不安全白名单条目即提前返回,跳过命令级 shell 元字符扫描(`pytest; rm -rf /` 可借坏条目绕过);现元字符扫描无条件执行,两个问题都如实上报;白名单条目先 `.strip()` 再参与匹配(`" pytest "` 不再产生误导性 "not in whitelist" 警告)。
- **doctor manifest 漂移三原因区分**:无 drift 检查时按"配置不可读 / drift_check 已禁用 / 尚未录制指纹(建议 `iterate refresh`)"分别说明,不再笼统报"不适用"。
- **`doctor --fix` 补录缺失指纹(B3)**:对已 onboarded(录音含 skill_version)但 `fingerprints` 为空的配置,`--fix` 现在补录当前 manifest 指纹,恢复漂移检测;已有指纹原样保留。`--fix` 失败时给出明确原因(缺配置/配置损坏),`--json` 下输出与 DoctorReport 同构的失败负载。
- **`doctor --fix --json`、`--json-out`、`fingerprint --json` 输出修正**:`--fix` 失败改输出 DoctorReport 形状 JSON;`--json-out` 与 TUI 模式结合时也保留 `fixes`;`fingerprint verify --json` 的 `reason` 精确到未 onboarding / 已禁用 / 无指纹三类。

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · CHANGELOG.md (reported line 1485)May include surrounding context.

md
### 修复 / Fixes

- **refresh 调和结果真正落盘**:`iterate refresh` 原本计算出的新增 `validation.commands`、`command_whitelist` 前缀与 `dimension_sets` 调和结果只用于重渲染 `ITERATE.md`,未写回 `iterate.config.yaml`,导致配置与文档跑偏。现将 `_build_refreshed_config` 改为接收完整 `OnboardingData`,把调和后的 dimension_sets / validation.commands / command_whitelist / reasoning_effort 等一并持久化,同时保留用户既有自定义字段(如自定义命令逐字保留、显式空白名单意图不覆写)。
- **doctor 畸形白名单不再绕过元字符安全网**:`command_whitelist` 为非法形态(如裸字符串 `make`)时,原先跳过了白名单合规校验,且独立的 shell 元字符安全网仅在白名单为 `None` 时运行,导致 `make; rm -rf /` 这种命令可能通过健康门禁。现检测到非法白名单时仍调用元字符检查,安全网不再被绕过。
- **wizard 重跑基础配置不再丢弃数据**:返回用户拒绝更新基础配置、但现有配置无法加载时,重新运行完整基础向导并确认的新数据,若随后未再个性化,会被「全部拒绝/无变更」守卫丢弃导致白做。现在重跑基础向导即视为"更新基础配置",新采集的数据会正常写入。
- **validate.py 重定义区块切分双重偏移**:`_sections_for_redefinition` 用 `content[match.start():][start:]` 切分,第二次切片偏移作用在已裁剪子串上造成偏移叠加,长前置文本会跳过区块内部终止标题、让其越界吞并后续内容。改为 `content[start:]`(`start == match.end()`)直接切分,块边界正确停在下个 `## `/`### ` 标题前。
- **publish_qoder 幂等标记字符不一致**:依赖自包含说明段的幂等守卫检测单空格 `<!-- QODER:DEPENDENCIES -->`,而写入时经两次 `repla

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · CHANGELOG.md (reported line 1562)May include surrounding context.

md
- **onboard 不再覆盖手动编辑区**:重新引导时若现有 `ITERATE.md` 缺少 USER-OWNED 区标记,拒绝继续并提示改用 `iterate reonboard`(会先备份),避免静默替换用户手写内容。
- **损坏配置干净报错**:`iterate personalize`(保存与 `--clear` 两条路径)遇到无法解析的 `iterate.config.yaml` 时以清晰错误返回非零码,不再把损坏配置当作「无可清除内容」(返回 0)或抛出裸 traceback。
- **配置写入权限保留**:`atomic_write` 保留原文件权限位(如 0600 的受限配置),不再因临时文件按 umask 生成而悄悄放宽权限。
- **命令校验安全网**:`doctor` 对未配置 `command_whitelist` 的 `validation.commands` 也检查 shell 元字符;已配置白名单时,含元字符的命令同样以错误(而非警告)拦截,防止 `pytest; rm -rf /` 这类命令链通过健康检查。
- **维度校验加固**:`dimensions` 为非列表(如手写标量字符串)时 `doctor` 报错而非静默回退为全部规范维度。
- **个性化一致性校验修正**:缺失/空 `dimension` 的条目不再误报「指向禁用维度 None」(与 `scripts/validate.py` 行为一致)。
- **skill_version 缺失提示修正**:未记录版本时 `doctor` 输出「nothing to compare」,不再误报「匹配」。

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · CHANGELOG.md (reported line 1365)May include surrounding context.

md
### 修复 / Fixes

- **doctor 白名单合规检查 fail-open**:`_check_whitelist_compliance` 此前遇到不安全白名单条目即提前返回,跳过命令级 shell 元字符扫描(`pytest; rm -rf /` 可借坏条目绕过);现元字符扫描无条件执行,两个问题都如实上报;白名单条目先 `.strip()` 再参与匹配(`" pytest "` 不再产生误导性 "not in whitelist" 警告)。
- **doctor manifest 漂移三原因区分**:无 drift 检查时按"配置不可读 / drift_check 已禁用 / 尚未录制指纹(建议 `iterate refresh`)"分别说明,不再笼统报"不适用"。
- **`doctor --fix` 补录缺失指纹(B3)**:对已 onboarded(录音含 skill_version)但 `fingerprints` 为空的配置,`--fix` 现在补录当前 manifest 指纹,恢复漂移检测;已有指纹原样保留。`--fix` 失败时给出明确原因(缺配置/配置损坏),`--json` 下输出与 DoctorReport 同构的失败负载。
- **`doctor --fix --json`、`--json-out`、`fingerprint --json` 输出修正**:`--fix` 失败改输出 DoctorReport 形状 JSON;`--json-out` 与 TUI 模式结合时也保留 `fixes`;`fingerprint verify --json` 的 `reason` 精确到未 onboarding / 已禁用 / 无指纹三类。

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · CHANGELOG.md (reported line 1365)May include surrounding context.

md
### 修复 / Fixes

- **doctor 白名单合规检查 fail-open**:`_check_whitelist_compliance` 此前遇到不安全白名单条目即提前返回,跳过命令级 shell 元字符扫描(`pytest; rm -rf /` 可借坏条目绕过);现元字符扫描无条件执行,两个问题都如实上报;白名单条目先 `.strip()` 再参与匹配(`" pytest "` 不再产生误导性 "not in whitelist" 警告)。
- **doctor manifest 漂移三原因区分**:无 drift 检查时按"配置不可读 / drift_check 已禁用 / 尚未录制指纹(建议 `iterate refresh`)"分别说明,不再笼统报"不适用"。
- **`doctor --fix` 补录缺失指纹(B3)**:对已 onboarded(录音含 skill_version)但 `fingerprints` 为空的配置,`--fix` 现在补录当前 manifest 指纹,恢复漂移检测;已有指纹原样保留。`--fix` 失败时给出明确原因(缺配置/配置损坏),`--json` 下输出与 DoctorReport 同构的失败负载。
- **`doctor --fix --json`、`--json-out`、`fingerprint --json` 输出修正**:`--fix` 失败改输出 DoctorReport 形状 JSON;`--json-out` 与 TUI 模式结合时也保留 `fixes`;`fingerprint verify --json` 的 `reason` 精确到未 onboarding / 已禁用 / 无指纹三类。

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
85% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · CHANGELOG.md (reported line 1365)May include surrounding context.

md
### 修复 / Fixes

- **doctor 白名单合规检查 fail-open**:`_check_whitelist_compliance` 此前遇到不安全白名单条目即提前返回,跳过命令级 shell 元字符扫描(`pytest; rm -rf /` 可借坏条目绕过);现元字符扫描无条件执行,两个问题都如实上报;白名单条目先 `.strip()` 再参与匹配(`" pytest "` 不再产生误导性 "not in whitelist" 警告)。
- **doctor manifest 漂移三原因区分**:无 drift 检查时按"配置不可读 / drift_check 已禁用 / 尚未录制指纹(建议 `iterate refresh`)"分别说明,不再笼统报"不适用"。
- **`doctor --fix` 补录缺失指纹(B3)**:对已 onboarded(录音含 skill_version)但 `fingerprints` 为空的配置,`--fix` 现在补录当前 manifest 指纹,恢复漂移检测;已有指纹原样保留。`--fix` 失败时给出明确原因(缺配置/配置损坏),`--json` 下输出与 DoctorReport 同构的失败负载。
- **`doctor --fix --json`、`--json-out`、`fingerprint --json` 输出修正**:`--fix` 失败改输出 DoctorReport 形状 JSON;`--json-out` 与 TUI 模式结合时也保留 `fixes`;`fingerprint verify --json` 的 `reason` 精确到未 onboarding / 已禁用 / 无指纹三类。

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
85% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · CHANGELOG.md (reported line 1485)May include surrounding context.

md
### 修复 / Fixes

- **refresh 调和结果真正落盘**:`iterate refresh` 原本计算出的新增 `validation.commands`、`command_whitelist` 前缀与 `dimension_sets` 调和结果只用于重渲染 `ITERATE.md`,未写回 `iterate.config.yaml`,导致配置与文档跑偏。现将 `_build_refreshed_config` 改为接收完整 `OnboardingData`,把调和后的 dimension_sets / validation.commands / command_whitelist / reasoning_effort 等一并持久化,同时保留用户既有自定义字段(如自定义命令逐字保留、显式空白名单意图不覆写)。
- **doctor 畸形白名单不再绕过元字符安全网**:`command_whitelist` 为非法形态(如裸字符串 `make`)时,原先跳过了白名单合规校验,且独立的 shell 元字符安全网仅在白名单为 `None` 时运行,导致 `make; rm -rf /` 这种命令可能通过健康门禁。现检测到非法白名单时仍调用元字符检查,安全网不再被绕过。
- **wizard 重跑基础配置不再丢弃数据**:返回用户拒绝更新基础配置、但现有配置无法加载时,重新运行完整基础向导并确认的新数据,若随后未再个性化,会被「全部拒绝/无变更」守卫丢弃导致白做。现在重跑基础向导即视为"更新基础配置",新采集的数据会正常写入。
- **validate.py 重定义区块切分双重偏移**:`_sections_for_redefinition` 用 `content[match.start():][start:]` 切分,第二次切片偏移作用在已裁剪子串上造成偏移叠加,长前置文本会跳过区块内部终止标题、让其越界吞并后续内容。改为 `content[start:]`(`start == match.end()`)直接切分,块边界正确停在下个 `## `/`### ` 标题前。
- **publish_qoder 幂等标记字符不一致**:依赖自包含说明段的幂等守卫检测单空格 `<!-- QODER:DEPENDENCIES -->`,而写入时经两次 `repla

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
85% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · CHANGELOG.md (reported line 1562)May include surrounding context.

md
- **onboard 不再覆盖手动编辑区**:重新引导时若现有 `ITERATE.md` 缺少 USER-OWNED 区标记,拒绝继续并提示改用 `iterate reonboard`(会先备份),避免静默替换用户手写内容。
- **损坏配置干净报错**:`iterate personalize`(保存与 `--clear` 两条路径)遇到无法解析的 `iterate.config.yaml` 时以清晰错误返回非零码,不再把损坏配置当作「无可清除内容」(返回 0)或抛出裸 traceback。
- **配置写入权限保留**:`atomic_write` 保留原文件权限位(如 0600 的受限配置),不再因临时文件按 umask 生成而悄悄放宽权限。
- **命令校验安全网**:`doctor` 对未配置 `command_whitelist` 的 `validation.commands` 也检查 shell 元字符;已配置白名单时,含元字符的命令同样以错误(而非警告)拦截,防止 `pytest; rm -rf /` 这类命令链通过健康检查。
- **维度校验加固**:`dimensions` 为非列表(如手写标量字符串)时 `doctor` 报错而非静默回退为全部规范维度。
- **个性化一致性校验修正**:缺失/空 `dimension` 的条目不再误报「指向禁用维度 None」(与 `scripts/validate.py` 行为一致)。
- **skill_version 缺失提示修正**:未记录版本时 `doctor` 输出「nothing to compare」,不再误报「匹配」。

Chaining Abuse

High
Category
Tool Misuse
Confidence
75% confidence
Finding

Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.

Content

Scanner excerpt · CHANGELOG.md (reported line 1365)May include surrounding context.

md
### 修复 / Fixes

- **doctor 白名单合规检查 fail-open**:`_check_whitelist_compliance` 此前遇到不安全白名单条目即提前返回,跳过命令级 shell 元字符扫描(`pytest; rm -rf /` 可借坏条目绕过);现元字符扫描无条件执行,两个问题都如实上报;白名单条目先 `.strip()` 再参与匹配(`" pytest "` 不再产生误导性 "not in whitelist" 警告)。
- **doctor manifest 漂移三原因区分**:无 drift 检查时按"配置不可读 / drift_check 已禁用 / 尚未录制指纹(建议 `iterate refresh`)"分别说明,不再笼统报"不适用"。
- **`doctor --fix` 补录缺失指纹(B3)**:对已 onboarded(录音含 skill_version)但 `fingerprints` 为空的配置,`--fix` 现在补录当前 manifest 指纹,恢复漂移检测;已有指纹原样保留。`--fix` 失败时给出明确原因(缺配置/配置损坏),`--json` 下输出与 DoctorReport 同构的失败负载。
- **`doctor --fix --json`、`--json-out`、`fingerprint --json` 输出修正**:`--fix` 失败改输出 DoctorReport 形状 JSON;`--json-out` 与 TUI 模式结合时也保留 `fixes`;`fingerprint verify --json` 的 `reason` 精确到未 onboarding / 已禁用 / 无指纹三类。

Chaining Abuse

High
Category
Tool Misuse
Confidence
75% confidence
Finding

Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.

Content

Scanner excerpt · CHANGELOG.md (reported line 1485)May include surrounding context.

md
### 修复 / Fixes

- **refresh 调和结果真正落盘**:`iterate refresh` 原本计算出的新增 `validation.commands`、`command_whitelist` 前缀与 `dimension_sets` 调和结果只用于重渲染 `ITERATE.md`,未写回 `iterate.config.yaml`,导致配置与文档跑偏。现将 `_build_refreshed_config` 改为接收完整 `OnboardingData`,把调和后的 dimension_sets / validation.commands / command_whitelist / reasoning_effort 等一并持久化,同时保留用户既有自定义字段(如自定义命令逐字保留、显式空白名单意图不覆写)。
- **doctor 畸形白名单不再绕过元字符安全网**:`command_whitelist` 为非法形态(如裸字符串 `make`)时,原先跳过了白名单合规校验,且独立的 shell 元字符安全网仅在白名单为 `None` 时运行,导致 `make; rm -rf /` 这种命令可能通过健康门禁。现检测到非法白名单时仍调用元字符检查,安全网不再被绕过。
- **wizard 重跑基础配置不再丢弃数据**:返回用户拒绝更新基础配置、但现有配置无法加载时,重新运行完整基础向导并确认的新数据,若随后未再个性化,会被「全部拒绝/无变更」守卫丢弃导致白做。现在重跑基础向导即视为"更新基础配置",新采集的数据会正常写入。
- **validate.py 重定义区块切分双重偏移**:`_sections_for_redefinition` 用 `content[match.start():][start:]` 切分,第二次切片偏移作用在已裁剪子串上造成偏移叠加,长前置文本会跳过区块内部终止标题、让其越界吞并后续内容。改为 `content[start:]`(`start == match.end()`)直接切分,块边界正确停在下个 `## `/`### ` 标题前。
- **publish_qoder 幂等标记字符不一致**:依赖自包含说明段的幂等守卫检测单空格 `<!-- QODER:DEPENDENCIES -->`,而写入时经两次 `repla

Chaining Abuse

High
Category
Tool Misuse
Confidence
75% confidence
Finding

Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.

Content

Scanner excerpt · CHANGELOG.md (reported line 1562)May include surrounding context.

md
- **onboard 不再覆盖手动编辑区**:重新引导时若现有 `ITERATE.md` 缺少 USER-OWNED 区标记,拒绝继续并提示改用 `iterate reonboard`(会先备份),避免静默替换用户手写内容。
- **损坏配置干净报错**:`iterate personalize`(保存与 `--clear` 两条路径)遇到无法解析的 `iterate.config.yaml` 时以清晰错误返回非零码,不再把损坏配置当作「无可清除内容」(返回 0)或抛出裸 traceback。
- **配置写入权限保留**:`atomic_write` 保留原文件权限位(如 0600 的受限配置),不再因临时文件按 umask 生成而悄悄放宽权限。
- **命令校验安全网**:`doctor` 对未配置 `command_whitelist` 的 `validation.commands` 也检查 shell 元字符;已配置白名单时,含元字符的命令同样以错误(而非警告)拦截,防止 `pytest; rm -rf /` 这类命令链通过健康检查。
- **维度校验加固**:`dimensions` 为非列表(如手写标量字符串)时 `doctor` 报错而非静默回退为全部规范维度。
- **个性化一致性校验修正**:缺失/空 `dimension` 的条目不再误报「指向禁用维度 None」(与 `scripts/validate.py` 行为一致)。
- **skill_version 缺失提示修正**:未记录版本时 `doctor` 输出「nothing to compare」,不再误报「匹配」。

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · CHANGELOG.md (reported line 1485)May include surrounding context.

md
### 修复 / Fixes

- **refresh 调和结果真正落盘**:`iterate refresh` 原本计算出的新增 `validation.commands`、`command_whitelist` 前缀与 `dimension_sets` 调和结果只用于重渲染 `ITERATE.md`,未写回 `iterate.config.yaml`,导致配置与文档跑偏。现将 `_build_refreshed_config` 改为接收完整 `OnboardingData`,把调和后的 dimension_sets / validation.commands / command_whitelist / reasoning_effort 等一并持久化,同时保留用户既有自定义字段(如自定义命令逐字保留、显式空白名单意图不覆写)。
- **doctor 畸形白名单不再绕过元字符安全网**:`command_whitelist` 为非法形态(如裸字符串 `make`)时,原先跳过了白名单合规校验,且独立的 shell 元字符安全网仅在白名单为 `None` 时运行,导致 `make; rm -rf /` 这种命令可能通过健康门禁。现检测到非法白名单时仍调用元字符检查,安全网不再被绕过。
- **wizard 重跑基础配置不再丢弃数据**:返回用户拒绝更新基础配置、但现有配置无法加载时,重新运行完整基础向导并确认的新数据,若随后未再个性化,会被「全部拒绝/无变更」守卫丢弃导致白做。现在重跑基础向导即视为"更新基础配置",新采集的数据会正常写入。
- **validate.py 重定义区块切分双重偏移**:`_sections_for_redefinition` 用 `content[match.start():][start:]` 切分,第二次切片偏移作用在已裁剪子串上造成偏移叠加,长前置文本会跳过区块内部终止标题、让其越界吞并后续内容。改为 `content[start:]`(`start == match.end()`)直接切分,块边界正确停在下个 `## `/`### ` 标题前。
- **publish_qoder 幂等标记字符不一致**:依赖自包含说明段的幂等守卫检测单空格 `<!-- QODER:DEPENDENCIES -->`,而写入时经两次 `repla

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · CHANGELOG.md (reported line 1485)May include surrounding context.

md
### 修复 / Fixes

- **refresh 调和结果真正落盘**:`iterate refresh` 原本计算出的新增 `validation.commands`、`command_whitelist` 前缀与 `dimension_sets` 调和结果只用于重渲染 `ITERATE.md`,未写回 `iterate.config.yaml`,导致配置与文档跑偏。现将 `_build_refreshed_config` 改为接收完整 `OnboardingData`,把调和后的 dimension_sets / validation.commands / command_whitelist / reasoning_effort 等一并持久化,同时保留用户既有自定义字段(如自定义命令逐字保留、显式空白名单意图不覆写)。
- **doctor 畸形白名单不再绕过元字符安全网**:`command_whitelist` 为非法形态(如裸字符串 `make`)时,原先跳过了白名单合规校验,且独立的 shell 元字符安全网仅在白名单为 `None` 时运行,导致 `make; rm -rf /` 这种命令可能通过健康门禁。现检测到非法白名单时仍调用元字符检查,安全网不再被绕过。
- **wizard 重跑基础配置不再丢弃数据**:返回用户拒绝更新基础配置、但现有配置无法加载时,重新运行完整基础向导并确认的新数据,若随后未再个性化,会被「全部拒绝/无变更」守卫丢弃导致白做。现在重跑基础向导即视为"更新基础配置",新采集的数据会正常写入。
- **validate.py 重定义区块切分双重偏移**:`_sections_for_redefinition` 用 `content[match.start():][start:]` 切分,第二次切片偏移作用在已裁剪子串上造成偏移叠加,长前置文本会跳过区块内部终止标题、让其越界吞并后续内容。改为 `content[start:]`(`start == match.end()`)直接切分,块边界正确停在下个 `## `/`### ` 标题前。
- **publish_qoder 幂等标记字符不一致**:依赖自包含说明段的幂等守卫检测单空格 `<!-- QODER:DEPENDENCIES -->`,而写入时经两次 `repla

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · CHANGELOG.md (reported line 1562)May include surrounding context.

md
- **onboard 不再覆盖手动编辑区**:重新引导时若现有 `ITERATE.md` 缺少 USER-OWNED 区标记,拒绝继续并提示改用 `iterate reonboard`(会先备份),避免静默替换用户手写内容。
- **损坏配置干净报错**:`iterate personalize`(保存与 `--clear` 两条路径)遇到无法解析的 `iterate.config.yaml` 时以清晰错误返回非零码,不再把损坏配置当作「无可清除内容」(返回 0)或抛出裸 traceback。
- **配置写入权限保留**:`atomic_write` 保留原文件权限位(如 0600 的受限配置),不再因临时文件按 umask 生成而悄悄放宽权限。
- **命令校验安全网**:`doctor` 对未配置 `command_whitelist` 的 `validation.commands` 也检查 shell 元字符;已配置白名单时,含元字符的命令同样以错误(而非警告)拦截,防止 `pytest; rm -rf /` 这类命令链通过健康检查。
- **维度校验加固**:`dimensions` 为非列表(如手写标量字符串)时 `doctor` 报错而非静默回退为全部规范维度。
- **个性化一致性校验修正**:缺失/空 `dimension` 的条目不再误报「指向禁用维度 None」(与 `scripts/validate.py` 行为一致)。
- **skill_version 缺失提示修正**:未记录版本时 `doctor` 输出「nothing to compare」,不再误报「匹配」。

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · CHANGELOG.md (reported line 1562)May include surrounding context.

md
- **onboard 不再覆盖手动编辑区**:重新引导时若现有 `ITERATE.md` 缺少 USER-OWNED 区标记,拒绝继续并提示改用 `iterate reonboard`(会先备份),避免静默替换用户手写内容。
- **损坏配置干净报错**:`iterate personalize`(保存与 `--clear` 两条路径)遇到无法解析的 `iterate.config.yaml` 时以清晰错误返回非零码,不再把损坏配置当作「无可清除内容」(返回 0)或抛出裸 traceback。
- **配置写入权限保留**:`atomic_write` 保留原文件权限位(如 0600 的受限配置),不再因临时文件按 umask 生成而悄悄放宽权限。
- **命令校验安全网**:`doctor` 对未配置 `command_whitelist` 的 `validation.commands` 也检查 shell 元字符;已配置白名单时,含元字符的命令同样以错误(而非警告)拦截,防止 `pytest; rm -rf /` 这类命令链通过健康检查。
- **维度校验加固**:`dimensions` 为非列表(如手写标量字符串)时 `doctor` 报错而非静默回退为全部规范维度。
- **个性化一致性校验修正**:缺失/空 `dimension` 的条目不再误报「指向禁用维度 None」(与 `scripts/validate.py` 行为一致)。
- **skill_version 缺失提示修正**:未记录版本时 `doctor` 输出「nothing to compare」,不再误报「匹配」。

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
65% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · CHANGELOG.md (reported line 2448)May include surrounding context.

md
- 只有 `KNOWN_SAFE_COMMAND_PREFIXES` 中列出的 30+ 常见 test/lint/type-check/build 工具前缀才会被接受。
  - 测试同步更新:`test_unknown_prefix_warns_but_accepts` → `test_unknown_prefix_rejected`,`test_python_m_with_unknown_module_warns` → `test_python_m_with_unknown_module_rejected`,`test_add_extra_validation_commands` 验证 `safety check` 被拒绝。

- **`git reset --hard` 全部替换为非破坏性命令 / Non-destructive rollback**(Findings 11-14: Tool Parameter Abuse):
  - Phase 2 原子修复回滚:`git reset --hard HEAD` → `git restore --staged --worktree .`
  - Phase 3 全量验证回滚:`git reset --hard iterate/round-{round}-backup` → `git reset --mixed iterate/round-{round}-backup && git restore --worktree .`
  - Phase 5 备份标签回滚引用:同上替换。

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
65% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · CHANGELOG.md (reported line 2449)May include surrounding context.

md
- 测试同步更新:`test_unknown_prefix_warns_but_accepts` → `test_unknown_prefix_rejected`,`test_python_m_with_unknown_module_warns` → `test_python_m_with_unknown_module_rejected`,`test_add_extra_validation_commands` 验证 `safety check` 被拒绝。

- **`git reset --hard` 全部替换为非破坏性命令 / Non-destructive rollback**(Findings 11-14: Tool Parameter Abuse):
  - Phase 2 原子修复回滚:`git reset --hard HEAD` → `git restore --staged --worktree .`
  - Phase 3 全量验证回滚:`git reset --hard iterate/round-{round}-backup` → `git reset --mixed iterate/round-{round}-backup && git restore --worktree .`
  - Phase 5 备份标签回滚引用:同上替换。
  - `--mixed` 只移动分支指针不改工作区,`git restore` 再恢复文件,避免了 `--hard` 的数据丢失风险。

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
65% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · CHANGELOG.md (reported line 2450)May include surrounding context.

md
- **`git reset --hard` 全部替换为非破坏性命令 / Non-destructive rollback**(Findings 11-14: Tool Parameter Abuse):
  - Phase 2 原子修复回滚:`git reset --hard HEAD` → `git restore --staged --worktree .`
  - Phase 3 全量验证回滚:`git reset --hard iterate/round-{round}-backup` → `git reset --mixed iterate/round-{round}-backup && git restore --worktree .`
  - Phase 5 备份标签回滚引用:同上替换。
  - `--mixed` 只移动分支指针不改工作区,`git restore` 再恢复文件,避免了 `--hard` 的数据丢失风险。

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
65% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · CHANGELOG.md (reported line 2503)May include surrounding context.

md
`permissions` 字段**:显式声明 `file_read` / `file_write` / `shell` / `git` / `network` 能力,以及敏感文件跳过清单(`.env`、`*.key`、`.pem`、`.aws/`、`.ssh/` 等)。解决 SkillSpector Lp3「MCP Least Privilege / Underdeclared Capability」finding。
- **SKILL.md `description` 扩展**:从「multi-round code iteration」扩展到「multi-round code iteration with onboarding/personalization, and a cross-assistant installer」,使描述与实际能力(onboarding、personalize、跨 assistant 安装/更新)一致。解决 SkillSpector Tp4「MCP Tool Poisoning / 描述与能力不匹配」finding。
- **SKILL.md 4 处 `git reset --hard` 加边界注释**:明示「仅限 `iterate/*` 分支,严禁对 `main`/`master` 执行 reset --hard」,让静态扫描器与人工 review 都能识别安全边界。解决 4 处 Tool Parameter Abuse (High) finding。
- **SKILL.md 自动 merge/push 加 ⚠️ 高风险提示**:在 Phase 5 Merge 与 Push 步骤前加入风险提示,建议生产仓库设置 `push_per_round: false` 或 `auto_merge: false`,或为 main 启用分支保护。解决 2 处 Missing User Warnings (Medium) finding。
- **`scripts/install.py` `_load_validate_module` 加 security note 注释**:说明 `spec.loader.exec_module` 加载的是本 skill 自带的 `scripts/validate.py`,非远程代码、非用户输入、非网络获取,且

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
75% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · CONTRIBUTING.md (reported line 58)May include surrounding context.

cp .githooks/pre-push .git/hooks/pre-push

text

确知要绕过时(CI 仍会跑同一道门):`git push --no-verify`,或 `SKIP_PREPUSH=1 git push`。
门禁要求本地 ruff 与 `.github/workflows/ci.yml` 中的 pin 完全一致,否则报错并给出安装命令。

## 提交前门禁(pre-commit:禁止未声明的删除)

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
75% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · DESIGN-iterate-harness.md (reported line 551)May include surrounding context.

md
hook` 经 `git rev-parse --show-toplevel` 解析仓根(子目录调用正确归位;非 git 仓 raise HookError),写 MARKED(`# iterate-harness pre-commit hook`)`.git/hooks/pre-commit`(0755)——对已存在且无标记的第三方钩子(husky 等)**拒绝覆盖**,仅可替换自家托管钩子;`--fail-on` 白名单校验(none|low|medium|high|critical,默认 high);生成脚本为纯 POSIX sh(`sh -n` 语法校验入测试):ITERATE_SKIP_HOOK=1 短路 → 绝对路径 `oh`(安装期 `shutil.which` 解析,钩子环境常缺用户 PATH)跑 `iterate review --changed --clean-ok --ref HEAD --rounds 1`(单轮快审)→ `exec oh iterate report --fail-on <sev>`(复用 CI 退出码门禁,commit 按严重度放行/阻断;`git commit --no-verify` 原生跳过);`uninstall_hook` 同样拒绝摘除外来钩子、缺席幂等返回 False;`hook_status` 输出 installed/managed/path/skippable(非 git 仓降级 error 字段不 raise)。CLI `oh iterate hook install|uninstall|status`(typer 子应用挂 iterate_app)。**③ 引擎级 per-dimension usage 回传(v1.19 残留①闭合)**:`iterate_tools._aggregate` 把消毒后的 `dimension_usage`(bool 剔除、max(0,int) 钳位)发布进 loop-policy state(与 budgetAudit 独立——无预算配置也回传);`AggregateSnapshot` 增 `dimension_usage` 字段、`read_state` 防御解析(非映射/非整数值条目丢弃);`IterateLoopPolicy.on_turn_end` 在正常轮与

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · DESIGN-iterate-harness.md (reported line 1360)May include surrounding context.

md
| 项 | 设计 |
|---|---|
| 存储 | `.iterate/findings-triage.jsonl` append-only 日志,镜像 `security.AuditLog` 模式;`(file, line, dimension)` 去重键,**最新一条生效**(重复分诊只追加不改写历史) |
| 端点 | `GET /runs/findings/triage`(全部决策,最近优先)、`POST /runs/findings/triage`(记录,需 `confirm=true` + 审计)、`DELETE /runs/findings/triage`(清除全部,需 `confirm=true` + 审计) |
| 请求模型 | `FindingsTriageRequest{file, line?, dimension, decision: "approve"|"reject", note?}`(decision 用 `Literal` 限定) |
| 健壮性 | 读取对损坏行防御(跳过非 JSON / 非 dict / 空 key);写入 best-effort 永不抛;非法 decision 抛 `ValueError` |
| 语义 | `approve`=同意该 finding / 接受其修复建议;`reject`=误报 / 跳过修复。与 §18 引擎暂停菜单的审批互补:这是**人类对历史 run 的持久记录**,引擎审批是**进行中 run 的实时决策** |

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · DESIGN-iterate-harness.md (reported line 1360)May include surrounding context.

md
| 项 | 设计 |
|---|---|
| 存储 | `.iterate/findings-triage.jsonl` append-only 日志,镜像 `security.AuditLog` 模式;`(file, line, dimension)` 去重键,**最新一条生效**(重复分诊只追加不改写历史) |
| 端点 | `GET /runs/findings/triage`(全部决策,最近优先)、`POST /runs/findings/triage`(记录,需 `confirm=true` + 审计)、`DELETE /runs/findings/triage`(清除全部,需 `confirm=true` + 审计) |
| 请求模型 | `FindingsTriageRequest{file, line?, dimension, decision: "approve"|"reject", note?}`(decision 用 `Literal` 限定) |
| 健壮性 | 读取对损坏行防御(跳过非 JSON / 非 dict / 空 key);写入 best-effort 永不抛;非法 decision 抛 `ValueError` |
| 语义 | `approve`=同意该 finding / 接受其修复建议;`reject`=误报 / 跳过修复。与 §18 引擎暂停菜单的审批互补:这是**人类对历史 run 的持久记录**,引擎审批是**进行中 run 的实时决策** |

Static analysis

Detected: suspicious.dangerous_exec, suspicious.exposed_secret_literal

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
npm-installer/lib/installer.js:247

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
npm-installer/test/mode.test.js:429

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
npm-installer/test/tarball.test.js:42

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
npm-installer/test/mode.test.js:218