Security Audit Report

showcase

扫描模式 minimal · 2026-06-02 03:44

上线决策
不可上线
发现 1 个 P0 阻断问题,必须全部修复后才能上线。

风险摘要

P01阻断上线
P12强烈建议
P20建议修复
P31信息加固

上线前必做清单

扫描覆盖 22/100 · low

工具状态说明
semgrep降级fallback: llm-rule-match
gitleaks降级fallback: entropy-regex-scan
osv-scanner降级fallback: skipped-offline

建议安装扫描器:semgrep, gitleaks, osv-scanner。当前 fallback 召回率可能较低。

P0 · 阻断上线 必须修复

P0-1 Git 历史中存在可疑凭据赋值

文件src/server/services.ts
命中位置Git 历史(工作树可能已删除/重写)
定位命令git log -p -S 'secret' -- src/server/services.ts
提醒即使从工作树删除,凭据仍在历史里;必须轮换密钥而不只是 git rewrite
是什么.env 或代码中疑似密码/token 赋值,值看起来不像占位符
为什么有风险明文凭据进了仓库;如果值真是生产用的,已经构成密钥泄漏
怎么验真伪看值是否像真凭据(不是 'changeme'/'TODO');问 ops 是否真在用
常见误报示例 .env、文档里的演示值、CI 中已被环境变量覆盖
  • CWECWE-798
  • OWASPA07:2021
  • 来源git-history
  • PoC 等级命中已知漏洞模式
  • 证据状态confirmed
片段[REDACTED]

为什么是 P0:CWE-798 属于高影响 CWE,命中已知模式但外部可触达性未知;公网部署假设下发现高危硬编码凭证,按阻断上线处理

行动:🚫 阻断上线,必须修复

P1 · 强烈建议 建议 48 小时内修复

P1-1 外部输入可能进入命令执行

文件src/server/users.py
定位到8
6def ping():
7 host = request.args.get("host")
8 return subprocess.check_output(f"ping -c 1 {host}", shell=True)
9
10@app.route("/import", methods=["POST"])
是什么request.* / 用户输入 → subprocess.* shell=True / os.system
为什么有风险攻击者通过参数注入分号/$()/&& 直接在服务器执行任意命令;RCE 级
怎么验真伪看 sink 处的字符串是否经过 shlex.quote 或参数列表化;若直接 f-string 拼接 → 几乎确定可利用
常见误报input 已是固定枚举值、上游有 allowlist 校验、cmd 列表形式 (shell=False)
  • CWECWE-78
  • OWASPA03:2021
  • 来源language-adapter/python
  • PoC 等级仅靠语义推断
  • 证据状态needs-review
其他命中位置
  • src/server/users.py:7
证据链
  1. source src/server/users.py:7 外部输入
  2. sink src/server/users.py:8 命令执行

为什么是 P1:CWE-78 属于高影响 CWE,外部可触达,但 PoC 等级较低

行动:⚠️ 强烈建议 48h 内修复

P1-2 外部输入可能进入不安全反序列化

文件src/server/users.py
定位到12
10@app.route("/import", methods=["POST"])
11def import_data():
12 return pickle.loads(request.data)
13
是什么request.body 或外部数据 → pickle.loads / yaml.load (no Loader) / marshal.loads
为什么有风险pickle 反序列化可直接执行任意 Python 代码;RCE 级
怎么验真伪几乎不存在合法的 pickle.loads(user_input);除非来源是受信内部
常见误报来源已是受信内网服务、有强签名校验
  • CWECWE-502
  • OWASPA08:2021
  • 来源language-adapter/python
  • PoC 等级仅靠语义推断
  • 证据状态needs-review
其他命中位置
  • src/server/users.py:12
证据链
  1. source src/server/users.py:12 外部输入
  2. sink src/server/users.py:12 反序列化

为什么是 P1:CWE-502 属于高影响 CWE,外部可触达,但 PoC 等级较低

行动:⚠️ 强烈建议 48h 内修复

P3 · 信息加固 按需处理

P3-1 Git 历史中存在可疑凭据赋值 第三方/构建产物

文件public/luckysheet/luckysheet.min.js
命中位置Git 历史(工作树可能已删除/重写)
定位命令git log -p -S 'secret' -- public/luckysheet/luckysheet.min.js
提醒即使从工作树删除,凭据仍在历史里;必须轮换密钥而不只是 git rewrite
是什么.env 或代码中疑似密码/token 赋值,值看起来不像占位符
为什么有风险明文凭据进了仓库;如果值真是生产用的,已经构成密钥泄漏
怎么验真伪看值是否像真凭据(不是 'changeme'/'TODO');问 ops 是否真在用
常见误报示例 .env、文档里的演示值、CI 中已被环境变量覆盖
  • CWECWE-798
  • OWASPA07:2021
  • 来源git-history
  • PoC 等级命中已知漏洞模式
  • 证据状态needs-review
片段[REDACTED]

为什么是 P3:原始命中在 第三方库 / 构建产物 / minified 资源 路径上(匹配 `(^|/)(luckysheet|jquery|bootstrap|tinymce|ckeditor|monaco|codemirror)(/|\.)`)。这种位置上的密钥/漏洞通常是: (1) 演示数据 (2) sourcemap/构建产物中的高熵字符串 (3) 真依赖里别人犯的事,与本仓库无关。自动从 P0 降到 P3 待人工判断;如果确认是你写的代码请手动改回 P0/P1。

行动:💡 信息加固建议,可选

数据处理

代码内容:本地处理。

CVE 查询:离线或无网络,未访问 osv.dev。

LLM 调用:未执行