INTERNAL · SOURCE PORTFOLIO REVIEW
受控源码仓库
安全检查
先说结论:这次完成的是首轮源码筛查,尚不能回答“总共有多少个漏洞”。
31/31取得源码快照
2 类已核实的源码现象
9 项按现象 × 仓库合并的记录
未知实际可利用漏洞总数
这几个数字怎么来的
- 31 个仓库是本次拿到源码快照的范围,不代表审遍全部分支与历史。
- 333 条机器提醒只是规则在文件或代码行上匹配的次数,包含重复与误报。
- 回读 Git HEAD 后,确认两类源码现象:私钥文件被跟踪(2 个仓库);TLS 校验关闭(7 个仓库)。按“现象 × 仓库”记账为 2 + 7 = 9 项,并非 9 个已证实可利用的漏洞。
- 还有2 个仓库的环境文件含疑似凭据字段,真实有效性待核验。OCR 抽样建议与前述现象有重复,不再相加。
- 因此,实际可利用漏洞总数:尚未得出。
不要直接相加:333 是原始规则命中,2 是待核验的环境文件线索,OCR 的 6 条建议只来自 3 个抽样文件。Cloudflare 六阶段正式审计尚未运行。
已核实的源码现象
9 的计算方式是“私钥入库涉及 2 个仓库 + TLS 校验关闭涉及 7 个仓库”。同一仓库可出现两类现象,因此不是 9 个不同仓库,更不是 9 个已证实可利用的漏洞。
| 编号 | 仓库 | 事实 | 证据范围 | 建议 |
|---|---|---|---|---|
| K01 | store | Git 跟踪含私钥标记的 PEM | 11 个文件、2 个不同文件内容;支付目录 | 优先核验密钥是否在用,限制访问并安排轮换 |
| K02 | tnxl5.0_pc | Git 跟踪含私钥标记的 PEM | 1 个文件;application/base/private.pem | 核验用途和有效期,安排轮换与移出仓库 |
| T01 | store | 第一方源码关闭 TLS 校验 | 9 行设置;属于规则命中,不等于 9 个漏洞 | 核验实际调用与端点,再恢复证书和主机名校验 |
| T02 | ai_api | 第一方源码关闭 TLS 校验 | 15 行设置;属于规则命中,不等于 15 个漏洞 | 核验实际调用与端点,再恢复证书和主机名校验 |
| T03 | tnxl5.0_pc | 第一方源码关闭 TLS 校验 | 10 行设置;属于规则命中,不等于 10 个漏洞 | 核验实际调用与端点,再恢复证书和主机名校验 |
| T04 | sxtyj | 第一方源码关闭 TLS 校验 | 8 行设置;属于规则命中,不等于 8 个漏洞 | 核验实际调用与端点,再恢复证书和主机名校验 |
| T05 | datacenter | 第一方源码关闭 TLS 校验 | 6 行设置;属于规则命中,不等于 6 个漏洞 | 核验实际调用与端点,再恢复证书和主机名校验 |
| T06 | ydysskz | 第一方源码关闭 TLS 校验 | 5 行设置;属于规则命中,不等于 5 个漏洞 | 核验实际调用与端点,再恢复证书和主机名校验 |
| T07 | food_safety | 第一方源码关闭 TLS 校验 | 9 行设置;属于规则命中,不等于 9 个漏洞 | 核验实际调用与端点,再恢复证书和主机名校验 |
高优先级待核验
仅确认 Git 跟踪文件里存在非占位、凭据形态的字段赋值。没有读取或展示其值。
| 编号 | 仓库 | 线索 | 证据范围 | 下一步 |
|---|---|---|---|---|
| C01 | ai_api | 受跟踪环境文件存在疑似已填入的凭据字段 | 18 个 .env 文件;56 处字段赋值 | 负责人核验真实凭据及现用状态,必要时轮换 |
| C02 | food_safety | 受跟踪环境文件存在疑似已填入的凭据字段 | 2 个运行 .env 有 7 处;1 个 .env.example 有 1 处待判定 | 负责人核验真实凭据及现用状态,必要时轮换 |
规则命中不等于漏洞
| 规则 | 原始命中 | 解释 |
|---|---|---|
| 关闭 TLS 校验 | 66 | 62 行在第一方源码,涉及 7 仓库、36 文件 |
| shell 执行 API | 88 | 10 行在初筛第一方源码,需追踪输入 |
| 疑似硬编码敏感赋值 | 97 | 含字段映射、测试和示例 |
| 敏感文件名 | 70 | 只看文件名 |
| 私钥 PEM 标记 | 12 | 12 个文件、3 个不同内容 |
本地 OCR 定向复核
仅抽查 3 个文件,原始模型建议 6 条;其中两条 TLS 建议与静态证据相同,其余需要上下文复核或已排除泛化判断。
| 仓库 | 文件 | 原始建议 | 人工归类 |
|---|---|---|---|
| qc | src/utils/storage.ts | 2 条 | JSON 解析异常待复核;localStorage 加密建议缺少具体边界,未采纳为漏洞 |
| store | application/common/service/onecard/ApiClient.php | 2 条 | TLS 关闭与静态证据一致;HTTP 状态码处理待复核;OCR 的 critical 等级未采纳 |
| ai_api | app/common/service/onecard/PaymentClient.php | 2 条 | TLS 关闭与静态证据一致;md5(uniqid()) 回退 nonce 待复核 |
31 个仓库覆盖矩阵
分支和 HEAD 是本次检查时的快照。原始命中是规则计数,不能横向比较仓库安全程度。
| 仓库 | 快照状态 | 分支 | HEAD | 跟踪文件 | 筛查文本 | 原始命中 |
|---|---|---|---|---|---|---|
| store | 本地干净 | codex/chongqing-group-order-prototype-20260810 | 301815bd69 | 18476 | 13694 | 81 |
| ai_api | 本地干净 | codex/change-t50-one-card-integration-20260811-v2 | 9ff7ebedba | 6320 | 1197 | 34 |
| ai_store | 本地干净 | codex/change-t50-one-card-integration-20260811-v2 | d5c0911827 | 856 | 539 | 0 |
| ai_web | 本地干净 | master | ee9bb04096 | 195 | 79 | 2 |
| ai_app | 本地有改动 | master | 9acfd3762f | 5016 | 590 | 7 |
| tnxl5.0_pc | 本地干净 | master | 2898622f95 | 7465 | 1468 | 30 |
| qc | 本地干净 | master | 30caafae23 | 42 | 35 | 0 |
| sxtyj | 本地干净 | master | aaa251e211 | 3561 | 1165 | 58 |
| kxxl | 审计浅克隆 | master_jiangxitks | 5af7aedba1 | 6321 | 966 | 14 |
| datacenter | 审计浅克隆 | master | 8abbbe5370 | 4201 | 542 | 45 |
| ydysskz | 本地干净 | master | c0ff7aec2b | 3820 | 1556 | 25 |
| food_safety | 本地干净 | master | 2fc6091c23 | 989 | 668 | 20 |
| win_deploy_guoxin | 本地干净 | master | b08fcf5d6f | 32 | 16 | 0 |
| playwright-ui-tests | 本地有改动 | master | bf3668e5e7 | 89 | 36 | 1 |
| bewo_solution_configurator | 本地干净 | master | 10e7144d66 | 56 | 40 | 1 |
| aliyun_ops_agent | 本地干净 | master | 4a534f7e8e | 28 | 19 | 0 |
| android_ai_dish_recognition | 本地干净 | master | 02b6258745 | 644 | 495 | 2 |
| android_cusumption_machine | 本地干净 | master | e883e22d55 | 683 | 515 | 1 |
| android_dish_info_monitor | 本地干净 | master | 7a18b66f4d | 178 | 132 | 0 |
| android_manage_dish_teminal | 本地干净 | master | 8803c58ac2 | 110 | 86 | 0 |
| android_multipurpose_machine | 本地干净 | master | 58b6121702 | 715 | 551 | 0 |
| android_ordering_machine | 本地干净 | master | 342d60a614 | 317 | 259 | 1 |
| android_sell_weight | 本地干净 | master | fc4713c0f4 | 739 | 505 | 1 |
| android_weight_double_116 | 本地干净 | master | 990ba4ee44 | 356 | 268 | 1 |
| android_weight_single_116 | 本地干净 | master | ff90a1c5f1 | 631 | 467 | 3 |
| android_zhct_tray_and_weight | 本地干净 | master | 5179fd14a1 | 634 | 476 | 1 |
| android_zhct_tray_binding_machine | 本地干净 | master | be58c21595 | 688 | 543 | 0 |
| android_zhct_weighting_table | 本地干净 | master | b4d9d2a564 | 380 | 292 | 2 |
| android_zhct_weighting_table_double | 本地干净 | master | 6809b35b19 | 353 | 265 | 1 |
| android_zhct_weighting_table_orange | 本地干净 | master | 7723963df0 | 422 | 322 | 2 |
| android_zhct_weighting_table_youkate | 本地干净 | master | 2f759f9415 | 471 | 370 | 0 |
建议处理顺序
- 先核验并轮换仍有效的私钥,同时收紧仓库访问与历史保留策略。
- 由 ai_api 和 food_safety 负责人核验受跟踪环境文件,真实现用凭据迁移到受控密钥存储。
- 从支付、一卡通、数据库连接着手修复 TLS 校验,先做证书链和兼容回归。
- 具备完整 OS 强制沙箱后,分批运行 Cloudflare 六阶段审计,再复核 shell 执行与硬编码线索。
方法与边界
本次是跨仓库第一轮只读源码筛查。Cloudflare security-audit 六阶段正式审计未运行:当前未证明可对目标代码同时提供无外网、空环境、只读源码、独占 scratch 与完整 CPU/内存/进程/磁盘/时间限制;Docker daemon 也不可用。正式审计状态为 incomplete,不给出“全部漏洞数”。
OCR 仅扫描 3 个定向文件,使用本机 Ollama qwen3:14b、127.0.0.1:11434、关闭 telemetry、清空继承环境,并用 macOS sandbox-exec 限制非本机网络;OCR 的 6 条原始建议没有直接并入确认问题数。
31 个登记仓库均取得本地源码快照,其中 kxxl 和 datacenter 是审计缓存中的浅克隆;kxxl 取 master_jiangxitks,datacenter 取 master。其他分支、远端最新提交、Git 历史、运行配置、依赖漏洞和生产可达性未全面覆盖。ai_app 与 playwright-ui-tests 有未提交改动,按工作树读取。
333 条规则命中会重复、包含框架或示例代码,也包含仅需上下文核验的用法;它们不是 333 个漏洞。私钥和 TLS 结论已从对应 Git HEAD 再次回读。环境文件只记录字段数量,没有保存或展示任何字段值。