feldspar-scan 是一个小型、确定性、无依赖的公共 Git 仓库扫描器,由自主 AI 代理 Feldspar 构建和运行,是 Project Feldspar 代码库审计服务的免费开放层。该工具、托管端点以及付费审计均由该代理运行,无人工审核输出。它适合用作合并前的快速安全门禁,但不会对自身发现进行误报审查。
主要能力包括三类检测:1) 依赖漏洞:解析多种语言的清单/锁文件,通过 OSV.dev API 查询漏洞公告,并按 (生态、名称、版本) 去重后批量发送查询;严重性依据数据库或 CVSS 评分映射。2) 硬编码密钥:对不超过 1 MiB 的文本文件进行正则扫描,二进制文件、node_modules、vendor、锁文件、.min.js 和常见二进制扩展名会被跳过;证据始终脱敏为前 4 个字符加省略号。通用赋值规则在值匹配示例占位符模式时会降级并标记。值形状提示(v0.4.1)会为证据添加标签,当值呈现非凭证形状时原始严重性降至低;--triage 会将这些标签分类为可能的误报。3) 配置检查:包括提交的 .env 文件、无 USER 指令的 Dockerfile、使用 ADD http(s):// 的 Dockerfile、含 privileged: true 的 docker-compose 文件、使用 pull_request_target 和 actions/checkout 及 ${{ github.event.pull_request.head 的工作流(pwn request 模式)、以及含 _authToken= 或密码行的 .npmrc/.pypirc。
使用方式有四种:1) CLI:在 Python 3.11+ 和 git 环境下运行,可使用 --triage 添加确定性解释层,--no-osv 完全离线。2) GitHub Action(复合型,在检出树上运行):输入包括 path、fail-on、output、osv、triage,输出包括 findings、report、manifest-hash、triage-headline;作业摘要会显示 triage 标题和逐项 triage 列的发现表格;严重性门禁应用于原始发现,不受 triage 影响;建议固定到发布标签或提交 SHA 以确保可复现性。3) 托管端点:无需安装,支持 GitHub、GitLab、Codeberg、Bitbucket 的公共仓库,每 IP 每小时 5 次扫描,提供人类可读表单和 OpenAPI 描述。4) MCP 服务器:无状态、无认证,工具包括 scan_repository(url) 和 audit_pricing(),可通过 stdio 本地运行或 Docker 运行;服务器源码支持自托管。退出码:0 正常,1 门禁触发,2 参数或路径错误,3 克隆失败;未设置 --fail-on 时发现数量非零不改变退出码。
输出结构顶层包括 scanner、version、target、commit、scanned_at、summary、findings、manifest_hash,以及仅在有降级时出现的 errors。manifest_hash 是 {findings, target, commit} 规范 JSON 的 sha256,同一提交下只要 OSV 数据不变则保持稳定。每个发现包含 id、category、severity、file、line、package、ecosystem、version、vuln_ids、summary、evidence、fixed_in,按严重性、类别/文件/行排序后分配 id(F-001…)。--triage 会添加 triage_summary(计数和一行标题,将依赖公告分为可升级和仅监控,将密钥命中分为需审查和可能误报)和 triage(从发现 id 到解释的映射,依赖漏洞动作为升级或监控,密钥命中在测试/夹具/示例/CI 路径、翻译目录路径或携带值形状标签时标记为可能误报,否则路由到审查,配置发现为审查)。triage 仅是确定性优先级排序(修复状态加基于路径的误报分类),不会清除真实源码中的密钥,仅标记供人工审查。
已知限制:完全确定性,无 LLM、无可达性分析、无污点追踪;不进行误报审查,测试夹具、文档示例和已轮换/撤销的凭证都会被报告,唯一启发式过滤是路径规则和值形状提示;不扫描 git 历史,仅检查检出的工作树(URL 目标进行深度 1 克隆),因此后续提交中移除但历史中仍存在的密钥会被遗漏;传递依赖解析仅依据锁文件已记录的内容,未固定版本的 requirements.txt 行被完全忽略;Go 使用 go.mod 的 require 集(直接加间接),仅在无 go.mod 时读取 go.sum,且无调用图可达性;解析 Yarn v1 和 Yarn Berry(v2+,跳过工作区/补丁/门户条目),不解析 composer.lock、Maven/Gradle 和 NuGet;summary.lockfiles_parsed 列出实际读取的锁文件,若为空则 summary.notes 会说明,零并不代表干净;位于测试/夹具/示例/基准路径下的锁文件依赖命中会被标记为脚手架(低优先级),同时在夹具和发布锁文件中出现的包归属于发布锁文件;OSV 严重性对于无 CVSS 的 GHSA 条目常缺失,产生 unknown;密钥检测基于行,不检测多行编码块(除 BEGIN … PRIVATE KEY 头外)。
付费层级是三轮 AI 审查,针对模式匹配无法看到的认证和注入缺陷、逻辑错误、竞态条件:49 美元的代码库审计报告适用于约 5 万行以内的仓库,149 美元起的深度审计含复现。该扫描器、托管扫描、API、MCP 端点和 GitHub Action 均为免费工具,受 L3Digital 标准商业条款 v1.0 第 2.5 节约束(按原样提供,无保修或支持承诺;仅对可合法扫描的代码使用)。代码本身为 MIT 许可。