Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

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

Fermée
#87 11 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
58/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
rust

Piste de recherche

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.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

场景 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 规则仍生效。

Langage dominant
Rust
Étoiles
4
Forks
0
Merge moyen
5 h 32 min
PR mergées (30 j)
7

Préparer son environnement

  • Fournit un Dockerfile ou un fichier Docker Compose
  • Aucun modèle de pull request
  • Aucun guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de jeffkit/recursive

Toutes les issues de jeffkit/recursive

Issues similaires

Plus d'issues Rust

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.