| 项 | 值 |
|---|---|
| 项目 | codescan/code-scan |
| 分支/版本 | v1.0.45 |
| 对比区间 | ff14857147e6c2e9d398c210a485fa70029ca9ee → 13a5e8ab4d90477d92624cdd80169541a69d01b3 |
| 任务 | 4707 |
本版相对上一版本,主仓(codescan-cli / codescan-engine / codescan-service / scripts)源码零改动——git diff 仅有一处变更:hub 子模块指针前移(ee36b5f → 3d6d46e)。因此增量质检对比结果为 修复 0 条 / 新增 0 条,无新增安全风险。当前版本全量质量问题 4973 条(Critical 2 / High 19 / Medium 4229 / Low 723),其中 2 条 Critical 均为 sql_injection 规则命中,经逐条代码核对为不可利用的误报形态,且其中 1 条已进入误报反馈库。
diff --git a/hub b/hub
index ee36b5f..3d6d46e 160000
--- a/hub
+++ b/hub
@@ -1 +1 @@
-Subproject commit ee36b5ff9548e103266519a0e6918c656043a74a
+Subproject commit 3d6d46e245826da0dcc465b539c3c83477b2d62b
| 变更文件 | 类型 | 说明 |
|---|---|---|
hub | 子模块指针(gitlink) | ee36b5f… → 3d6d46e…,仅提交指针变化,无文件级 diff |
变更面结论:本仓可静态分析的源码、脚本、测试、配置文件在两版本间逐字节一致。hub 为独立子仓(code-scan-hub),未在本仓展开,故其内部代码不在本次静态质检的统计范围内。
背景参考(非静态分析证据):本仓
CHANGELOG.md最新条目(2026-10-15)记录的是 hub 侧「commit 级归属修复 + 时间口径统一」,与本次hub子模块指针前进的时间/方向一致;该改动的内容需在 hub 子仓内单独质检。
对比 base → head:修复 0 条。
依据:codescan_issues_diff(base, head) = 「修复 0 条 / 新增 0 条(两版本质量无差异)」。这与「本仓源码未变」的 diff 事实完全一致——没有代码改动,就不存在被修复或被引入的问题。
(口径说明:子模块 hub 内部的问题不在本仓质检数据源内,若需评估 hub 侧的修复/新增,应以其子仓的版本对比为准。)
对比 base → head:新增 0 条。
同上依据。本版无新增质量问题,无回归。
| 严重度 | 数量 | 占比 |
|---|---|---|
| Critical | 2 | 0.04% |
| High | 19 | 0.38% |
| Medium | 4229 | 85.0% |
| Low | 723 | 14.5% |
| 合计 | 4973 | 100% |
问题主题分布(Top)
热点文件(示例)
codescan-cli/cmd/codescan/main.go(newQueryCmd:复杂度 24、219 行、耦合 27)codescan-cli/internal/scan/scan.go(updateState:复杂度 21、97 行、耦合 14)codescan-cli/internal/watch/watcher.go(Start:复杂度 34、146 行、耦合 21)codescan-engine/src/cli/mod.rs、codescan-engine/src/cli/attribution_backfill.rs(大量 .unwrap() 无 SAFETY 注释)codescan-cli/internal/persistence/sqlite/query.go(重复代码 + 未使用参数 + 注释代码,见 Critical 审查)| # | 位置 | 规则 | 核对结论 |
|---|---|---|---|
| 1 | codescan-cli/internal/persistence/sqlite/query.go:133 | sql_injection | 误报。该行为 q := "SELECT " + nodeColumns + " FROM nodes n"——拼接的是编译期常量列清单(nodeColumns),并非外部输入;动态入参 nodeType 走参数占位符 ?(q+" WHERE n.component_type = ?")。无可注入面。 |
| 2 | scripts/system-test/50-verify.py:571 | sql_injection | 误报。本机测试脚本内的 f"SELECT count(*) FROM scan_versions WHERE project='{name}'…",name 来自本地仓库矩阵(scripts/system-test/repos.csv)这一可信输入,且仅对本地只读 sqlite 库执行计数。属典型「测试/脚本 SQL 拼接」误报形态。 |
已知误报对照:本次质检输入携带已知误报记录 rule_id=sql_injection, false_positive_count=1;本版两条命中经代码核对均不构成可利用的注入风险,与误报反馈方向一致。结论:本版无真实可利用的注入漏洞。
| 类别 | 数量 | 位置 | 研判 |
|---|---|---|---|
| 不可达代码(return 之后) | 11 | codescan-engine/src/engine/parser/python.rs(866/917/965/974)、codescan-engine/src/engine/rules/frameworks/python.rs(435/439/463/478/482/486/607) | 多为规则/解析器自带的 Python 测试夹具字符串触发;建议核对是否应纳入测试代码豁免范围。 |
| 空 catch 块 | 6 | codescan-engine/src/engine/quality/checks/deadcode.rs(14/33/2465/2474/2503)、codescan-service/internal/codescan/quality/checks_test.go:744 | 集中在检查规则的测试数据中;checks_test.go 为 Go 测试文件。 |
| 硬编码 Token | 1 | codescan-service/internal/codescan/quality/checks_test.go:789 | 测试文件内的 fixture 字符串,非生产凭据(引擎侧已有测试块豁免规则,Go 测试文件未完全覆盖,建议纳入)。 |
| 弱加密算法(md5) | 1 | scripts/backfill-usage-from-traces.py:127 | 一次性数据回填脚本使用 md5;需确认用途是否为非安全场景(如标识/去重),属非阻塞项。 |
说明:以上 High 项在两版本间完全一致(base 与 head 均为这 19 条),均为存量问题,非本版引入。
hub 子模块指针前移;增量质检 修复 0 / 新增 0,不存在回归。sql_injection)经核对为不可利用的误报,其中 1 条已登记误报反馈。main.go#newQueryCmd、scan.go#updateState、watcher.go#Start)。code-scan-hub),其静态质检结果不包含在本报告数据源内,建议对 hub@3d6d46e 独立发起扫描与报告。codescan_issues_diff(base_sha, head_sha),为本次唯一的真实对比数据源,未做任何推断性补充。hub / agent / insight 为独立子仓,本仓静态分析不展开子模块内容;其问题需在各自仓库维度统计。