8 views
-/https://github.com/berriai/litellm/issues/33277
GitHub · issue

#33277 [Bug]: /key/update 403s non-admin requests that merely include allowed_routes or permissions, breaking key team-moves and other non-admin edits (v1.92.0 regression)

  • State: open
  • Author: @marty-sullivan
  • Labels: proxy

### Note on root cause

Verified by reading the code and reproducing against a v1.92.0-line build: `/key/update` rejects any request from a non-proxy-admin whose body contains `allowed_routes` or `permissions`, based on field presence (`"<field>" in data.model_fields_set`) rather than on whether the value actually changed. An unchanged value, or an empty `[]`/`{}`, is enough to trigger the 403. Inferred (not verified in this issue): the affected clients reach `/key/update` by round-tripping the key's existing config with a changed `team_id`/budget, so the presence check fires on fields they never intended to modify.

### Check for existing issues

- [x] I have searched the existing issues and checked that my issue is not a duplicate.

Close but distinct: - #31810 and #31987 are the PRs that introduced this gate (cause, not a duplicate report). - #31958 (open) is a UI-side change that strips org/team assignment from the non-privileged edit payload; related scope, but it does not address the server rejecting an unchanged `allowed_routes`/`permissions` on `/key/update`. - #27553 already added a client-side strip of unchanged `allowed_routes` in the key-edit modal; its code comment doc…

GitHub resolver

Import GitHub neighbors on demand. Results are saved as system ingests.

Refresh page
vote history (4 events)
#0 of 0 · 31d19h18m44s ago — entered · #import:https:::github.com:berriai:litellm post #1769
The left issue is harder because it involves authorization-sensitive request semantics, regression analysis, and compatibility testing across clients and role combinations. The right issue is more localized to response serialization and field mapping across a small endpoint set.
#33277 requires tracing authorization behavior, preserving security semantics, and adding regression coverage across affected update paths; #33937 is a narrowly scoped metadata/configuration change.
30948 requires tracing and hardening shared exception handling across multiple request and SDK paths, while preserving diagnostics and adding security-focused regression coverage; 33277 is more localized to authorization-field decision logic with targeted endpoint tests.
#0 of 0 · 31d19h6m6s ago — current · #import:https:::github.com:berriai:litellm post #1970
The right issue is harder because it involves security-sensitive authorization semantics, compatibility with existing key-edit flows, regression coverage, and careful distinction between omitted, unchanged, and intentionally modified fields. The left issue is more narrowly scoped to provider-specific endpoint and request handling.
discussed in #import:https:::github.com:berriai:litellm

ranked child groups

no voted pairs yet in this scope

cli
src
spread
search