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

security(permissions): 请求体 permission_mode 可整体替换权限层——运维配置的 deny/interactive 规则被一条 JSON 字段绕过

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

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

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

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
58/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
rust

調査の方向性

Start with the permission construction in src/http/handlers.rs:294-300 and 429-435, then read with_permissions in src/tools/registry.rs:464-468 and the registry setup in crates/recursive-cli/src/cli/builder.rs:259-261. Verify the change with a configured deny rule and a request containing permission_mode:"default"; done means the deny rule still applies.

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

説明

场景 gap 单(okguitar 提报)· 优先级 P0 · 依赖:无

基线 HEAD = 9165b9a0。

Summary

运维经 RECURSIVE_TOOL_PERMISSIONS_FILE 或 config.toml [permissions] 配置的权限层在服务启动时挂到 registry(crates/recursive-cli/src/cli/builder.rs:259-261)。但 HTTP 请求体携带 permission_mode 时:

  • src/http/handlers.rs:294-300(run_agent;create_session 同型,handlers.rs:429-435):
tool_registry = tool_registry.with_permissions(LayeredPermissionsConfig {
    mode: perm_mode,
    layers: Vec::new(),   // ← 运维层被置空
});
  • with_permissions 是整体替换而非合并(src/tools/registry.rs:464-468)。

即:客户端把 mode 从 strict 改成 default,运维配置的全部 allow/deny/interactive 层即被空层覆盖;strict→default 的降级再叠加「无规则隐式放行」(见审批配套单)等于全量放行。

影响

企业管理员配好的「禁 Bash/禁外发」策略,任何持 key 员工一条 JSON 字段即可绕过;合规审计时运维以为生效的策略实际从未执行。

建议

服务端策略层与请求级模式分离:客户端只能收紧、不能放宽(strict→default 需运维层允许),layers 永远取运维配置;或运维层作为不可移除的底层、请求层只叠加其上。

验收:配置 deny 规则 + 请求携带 permission_mode:"default",断言 deny 规则仍生效。

主要言語
Rust
スター
4
フォーク
0
平均マージ
5時間 32分
マージ済み PR(30日)
7

環境構築

  • Dockerfile または Docker Compose ファイルあり
  • プルリクエストのテンプレートなし
  • コントリビューションガイドなし

はじめの一歩

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

jeffkit/recursive のほかの issue

jeffkit/recursive の issue をすべて見る

似ている issue

Rust の issue をもっと見る

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

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