依波波 07b597a8 预置判据 · 小齐 2026-09-16 12:5x
判定式(同族)⟺ (体内出现 resolve_destination) AND (requested ∈ {None, 未传})
⚠️ 「不传参」≡ 硬编码 None,不是豁免理由
| # | 端点 | 缺陷 | 修法 | 实测 |
|---|---|---|---|---|
| 1 | admin_ops.admin_create_merchant | requested 硬编码 None ⇒ 静默落默认租户 | 加参,requested 接上 | dest=1→200 落 1;dest=999→404 |
| 2 | admin_ops.admin_create_temple | 同源 | 同上 | 已修(同函数族) |
| 3 | admin_ops.admin_delete_temple | 同源 | 同上 | 已修(同函数族) |
| 4 | miniapp_workbench_redeem.redeem_arrival | 伪接线:取了 _ctx_dest 却零消费 ⇒ 跨目的地核销码照样锁得到、可核销 | 查询加 (destination_id=$2 OR IS NULL) FOR UPDATE,传 _ctx_dest.destination_id | 语法+AST 通过,待复跑 |
共同特征:不收请求侧 destination_id,但用 ctx.destination_id 做归属校验或写入落列 ⇒ 按凭证锚定,非漏接
| # | 端点 | 语义说明(为什么安全) |
|---|---|---|
| 5 | admin_distribution.risk_ruling | JOIN merchants m ON ... AND m.destination_id = $1 + ctx ⇒ 跨目的地的绑定裁决不到 |
| 6 | admin_distribution.admin_generate_bills | SELECT 1 FROM merchants WHERE id=$1 AND destination_id=$2 + ctx ⇒ 非本目的地商户不能出账 |
| 7 | miniapp_pay.prepay(高敏) | 先查订单 destination_id,与 ctx 交叉比对,不符即拒 ⇒ 支付按订单归属锚定;不收请求侧参数反而防伪造(显式裁定) |
| 8 | safety.trigger_sos(高敏 SOS) | 写入 sos_alerts.destination_id 落列 ⇒ 新告警有主 |
| 9 | safety.cancel_sos(高敏) | 撤销加 (destination_id=$3 OR IS NULL) ⇒ 跨目的地 SOS 撤不掉 |
| 10 | safety.submit_assessment(高敏) | 写入落 destination_id |
| 11 | safety.submit_health_check(高敏) | 写入落 destination_id |
🔴 高敏显式裁定(依判据"高敏不享默认豁免"):prepay 与 safety×4 均已接线(落列或交叉校验),
属语义安全而非豁免;理由如上。若日后发现其上下文锚定不可靠(如 admin 主 token 多 active 场景),须重新定性为真缺口。
| # | 端点 | 情况 | 为何本轮未改 |
|---|---|---|---|
| 12 | miniapp_workbench_redeem.redeem_scan | 与 redeem_arrival 同形:查询 redemption_codes WHERE code_no=$1 无目的地过滤,且函数内无 _ctx_dest 定义 | 本轮误改过一次(传未定义变量会 NameError)⇒ 已回滚。需先补 resolve_destination 再改,避免误伤 ⇒ 入下轮 |