litellm/tests/litellm_utils_tests
yucheng-berriai 7d9ac8d043 fix(security): reject path traversal and control chars in key_alias-derived secret names (LIT-4201)
key_alias becomes the secret name written to HashiCorp Vault and CyberArk
Conjur when store_virtual_keys is enabled. Vault's get_url concatenated
secret_name directly into the request URL and Conjur's
_ensure_variable_exists interpolated it unescaped into a YAML policy body,
so a malicious key_alias could path-traverse the Vault write or inject
extra Conjur policy statements. The only existing guard was opt-in
(enable_key_alias_format_validation, default off) and its charset still
permitted ".." even when enabled.

Add raise_if_unsafe_secret_name, an unconditional check rejecting ".."
sequences and control characters (including the Unicode line breaks YAML
treats the same as "\n": NEL, LINE SEPARATOR, PARAGRAPH SEPARATOR), applied
at both vulnerable sinks and at the API boundary in
_validate_key_alias_format, independent of the opt-in flag.

Also close two adjacent gaps found in internal review: Vault's get_url now
percent-encodes secret_name (preserving "/" and "@") so "#"/"?" can't turn
into a URL fragment/query string instead of a literal path segment, and
Conjur's policy YAML is now built with a real YAML serializer
(yaml.safe_dump forced to double-quoted style) instead of raw string
interpolation, so metacharacters that aren't on the traversal/control-char
denylist (a bare ":" or "#") can no longer change the parsed policy
structure.
2026-07-03 18:19:44 -07:00
..
base_token_counter_test.py style: run black formatter on files from main merge 2026-04-17 13:02:59 -07:00
conftest.py test(vcr): close out the remaining VCR live-call leaks (#29603) 2026-06-03 13:46:43 -07:00
log.txt Allow passing thinking param to litellm proxy via client sdk + Code QA Refactor on get_optional_params (get correct values) (#9386) 2025-04-07 21:04:11 -07:00
test_aiohttp_handler.py style: run black formatter on files from main merge 2026-04-17 13:02:59 -07:00
test_anthropic_token_counter.py [Test] Anthropic: Replace Legacy Claude-4-Sonnet Alias With Haiku 4.5 2026-05-01 19:10:27 -07:00
test_aws_secret_manager.py test(vcr): close out the remaining VCR live-call leaks (#29603) 2026-06-03 13:46:43 -07:00
test_azure_ai_anthropic_token_counter.py fix: fix ci/cd + handle oidc jwt tokens 2026-03-30 16:12:58 -07:00
test_bedrock_token_counter.py [Fix] Tests: Align Bedrock count-tokens endpoint assertions with URL-encoded model id 2026-05-01 15:22:40 -07:00
test_cyberark.py fix(security): reject path traversal and control chars in key_alias-derived secret names (LIT-4201) 2026-07-03 18:19:44 -07:00
test_get_secret.py (Feat) Add x-litellm-overhead-duration-ms and "x-litellm-response-duration-ms" in response from LiteLLM (#7899) 2025-01-21 20:27:55 -08:00
test_hashicorp.py fix(security): reject path traversal and control chars in key_alias-derived secret names (LIT-4201) 2026-07-03 18:19:44 -07:00
test_health_check.py chore(ci): modernize model references in tests and configs (#27856) 2026-05-15 15:44:28 -07:00
test_litellm_overhead.py test(vcr): close out the remaining VCR live-call leaks (#29603) 2026-06-03 13:46:43 -07:00
test_logging_callback_manager.py fix(guardrails): stop re-initializing DB guardrails on every poll (#30542) 2026-06-16 11:17:49 -07:00
test_proxy_budget_reset.py fix(reset_budget): write only {spend, budget_reset_at} and stop pre-zeroing counter (#29358) 2026-05-30 17:48:16 -07:00
test_secret_manager.py style: run black formatter on files from main merge 2026-04-17 13:02:59 -07:00
test_utils.py feat(fireworks_ai): sync chat completions endpoint with full API surface (#30885) 2026-06-20 19:49:07 -07:00
test_validate_tool_choice.py style: run black formatter on files from main merge 2026-04-17 13:02:59 -07:00
vertex_key.json test: update to new vertex ai keys 2026-03-28 20:19:05 -07:00