Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

[mimosa 1.0.4] 硬编码凭据规则三例误报:合成测试夹具被判高危并阻塞 Git 门禁(附最小复现)

オープン
#105 コメント 0 件 リアクション 1 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
18/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
活発
技術スタック
postgresql, python

調査の方向性

Start with the hardcoded-credentials rule (CWE-798) in the mimosa 1.0.4 scanner; the payload does not include its source, so locate it from the scan entry point at payload/dist/cli.js. Reproduce with the three fixture shapes: tests/case.py with a password literal, a userinfo DSN on 127.0.0.1:65534, and an os.environ write in a serve_isolated_workspace.py script. Done means these shapes stop producing high-severity findings without weakening real credential detection. The issue also asks for changes to the git gate's scope, which is a design question.

索引モデルが issue の本文から書いたものです。

説明

环境

  • ZCode Desktop 3.15.3.8237(Windows 10 19045 x64)
  • mimosa 1.0.4:https://cdn-zcode.z.ai/zcode/official-plugin/plugins/mimosa/1.0.4/plugin.zip,sha256 50d4da2cc1a24c63db06b51758699d5ffbf22aa4c79ae001a823e8177f0a1fe7;本机缓存安装为 1.0.3,两版都复现
  • 命中位置:私有业务仓的合成测试/验收夹具(无真实凭据、无生产密钥)

现象

项目级扫描对合成夹具报「高危 · 硬编码凭据 / CWE-798」,随后 Git L3 门禁在 git commit 前整仓扫描并强制拦截(口径不是本次 staged/diff 的范围)。结果是:

  1. 存量误报直接卡住提交:任何与安全无关的改动都提交不了,除非先把测试写法改成扫描器不认识的形态;
  2. 与 #43(存量 finding 阻塞提交、exclusions 不生效)、#17(全工作区扫描误拦存量)、#59(该类 finding 无法铸 exclusion 锚)、#58(模式黑盒误标把工程实践推向更危险写法)同类,但在 1.0.4 仍复现。

三种误报形态(可最小复现)

# 形态 为什么是误报
A 单测里把样本口令作为被测输入:password = <字符串字面量>,随后断言"哈希不等于原文、加盐后两次不同、明文不回显" 该字面量是被测样本而不是任何环境凭据;文件位于 tests/ 单测
B 测试用隔离 DSN:postgresql://<user>:<placeholder>@127.0.0.1:65534/<db>(65534 无服务,用例只验"预置隔离 DSN 时验收入口能跑完隔离自检") userinfo 里的占位口令不连接任何库;隔离自检只比较 host/port/schema
C 隔离验收脚本把内存夹具的合成口令写进 os.environ(脚本头部声明 "Only synthetic in-memory data; no business DB") 目标是一次性内存夹具主机;口令仅用于本地夹具登录,脚本随仓库公开也无泄露面

本机命中示例(行号为当时值):tests/test_principal_credentials.py:11、tests/test_verification_entry.py:31、docs/acceptance/evidence/**/serve_isolated_workspace.py:17。

最小复现命令

# 1) 单文件:造一个同形态的 tests 用例(password = <字符串字面量>,不再使用)
node "<mimosa>/payload/dist/cli.js" scan /tmp/mimosa-fp/tests/case.py --min high --json
# → count=1、severity=high、rule=硬编码凭据

# 2) 门禁实际口径:项目级
node "<mimosa>/payload/dist/cli.js" scan . --min high

对照:把这三处夹具改成"运行时派生、源码无字面量"后,同一命令对 213 个文件报 0 高危,说明这是规则校准(语境判定)问题,不是解析失败或漏检。

与既有 issue 的关系(非重复)

  • #43 / #17:门禁"整仓扫描 + 存量 finding 阻塞"的范围问题——本 issue 补充 1.0.4 仍复现的三种具体夹具形态与规则校准建议;
  • #59:该类 finding 无法铸 exclusion 锚——本 issue 是同一诉求的另一组实例;
  • #58:模式误标会把工程实践推向更危险的写法——本 issue 附上了"为通过门禁而把夹具改成运行时派生"的实际规避证据;
  • #84:1.0.4 git-gate maxBuffer 问题,与本 issue 无关。

建议

  1. 门禁按 staged/diff + 不可变基线判定(#43/#17 已提),不要把整仓存量都算作本次阻塞项;
  2. 提供 finding 级 exclusion/豁免锚,并让项目 security-policy.json 的 threatModel.exclusions 真正生效(#59 已指出无法铸锚);
  3. 该规则的测试语境校准:识别单测路径(pytest/unittest fixture)、非连接型端口(如 65534)、声明为内存夹具的脚本等;门禁侧的规则集/阈值(--fail-on)可配置;
  4. 误报 remediation 文案建议区分语境:对合成夹具正确做法是"不要出现字面量(运行时生成/派生)",而不是"改为环境变量或密钥管理服务",否则会把测试代码改得更难读。

附:本机已套用的规避(仅为能提交,未削弱断言)

  • 单测样本口令改为运行时随机生成(保留中文成分);
  • 测试 DSN 去掉 userinfo;
  • 隔离脚本的夹具值改为 sha256(label) 确定性派生,并在启动时打印登录用值。

以上都不改变被验证行为,仅用于绕开门禁。

主要言語
Python
スター
103
フォーク
78
PR マージ指標
30日以内にマージされた PR はありません

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

zai-org/zcode-plugins のほかの issue

zai-org/zcode-plugins の issue をすべて見る

似ている issue

Python の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。