litellm/tests/test_litellm/proxy/common_utils
user b4e98d190a
fix(proxy): close 6 more metadata/tag variant bypasses
Post-merge audit found 6 adjacent variants of the VERIA-28 class. All
fixed here with regression tests:

1. Strip widened from 3 named keys to the full user_api_key_* prefix.
   The proxy writes a dozen user_api_key_* fields (user_id, alias,
   spend, team_id, request_route, end_user_id, …) into
   data[_metadata_variable_name]; the 3-key strip left the rest
   exploitable for identity/spend forgery in audit logs and guardrails.

2. proxy_server_request['body'] snapshot moved to AFTER the strip.
   Was captured at line ~990 before the strip ran, so
   standard_logging_object, lago, and spend_tracking readers saw the
   attacker-forged payload even though the live data dict was clean.

3. get_tags_from_request_body (auth-time) now coerces JSON-string
   metadata via safe_json_loads. Previously crashed with
   AttributeError on string metadata (DoS; potential RBAC bypass if
   a caller swallowed the exception).

4. get_end_user_id_from_request_body coerces JSON-string
   metadata/litellm_metadata. Previously isinstance(dict) guard
   caused end-user budget attribution to be silently skipped when
   the caller sent metadata as a JSON string.

5. Four hand-rolled 'if data.get("metadata") is None: data["metadata"] = {}'
   blocks in proxy_server.py (7160, 7341, 7590, 11375) now guard on
   isinstance(dict). They crashed with TypeError when metadata was a
   JSON string (DoS).

6. _get_admin_metadata defensively guards with isinstance(dict);
   previously AttributeError'd on any leaked string metadata.

Also hoists the inline safe_json_loads import in _guardrail_modification_check
to module level per CLAUDE.md style.
2026-04-17 00:08:40 +00:00
..
test_callback_utils.py Working setting generic callbacks on UI 2025-12-05 14:37:48 -08:00
test_custom_openapi_spec.py Refactor add_schema_to_components to move definitions to components/schemas and add corresponding unit test (#17389) 2025-12-02 21:57:07 -08:00
test_get_routes.py
test_http_parsing_utils.py fix(proxy): close 6 more metadata/tag variant bypasses 2026-04-17 00:08:40 +00:00
test_key_rotation_e2e.py Litellm ishaan april4 2 (#25150) 2026-04-04 23:09:42 +00:00
test_key_rotation_integration.py fix req change 2026-02-28 16:34:23 +05:30
test_key_rotation_lock.py Litellm ishaan april4 2 (#25150) 2026-04-04 23:09:42 +00:00
test_key_rotation_manager.py fix: as per request changes 2026-02-14 04:34:58 +05:30
test_load_config_utils.py
test_openai_endpoint_utils.py [Fix] Exclude litellm_credential_name from Sensitive Data Masker (Updated) (#16958) 2025-11-21 19:09:48 -08:00
test_path_utils.py test: add unit tests for path_utils safe_join and safe_filename 2026-04-16 03:25:42 +00:00
test_reset_budget_job.py fix(budget): align budget table reset times with standardized calendar schedule (#25440) 2026-04-11 19:45:23 -07:00
test_timezone_utils.py fix(budget): fix timezone config lookup and replace hardcoded timezone map with ZoneInfo (#21754) 2026-02-21 19:35:06 -08:00
test_upsert_budget_membership.py