From 28ddef18eea5a135552138b362633dd785db470a Mon Sep 17 00:00:00 2001 From: Praveen Ghuge Date: Tue, 12 May 2026 11:29:26 +0530 Subject: [PATCH] fix(mavvrik): guard startup against decryption failure + sanitize 500 error responses - proxy_server.py: wrap is_mavvrik_setup() in try/except so a ValueError from AES decryption failure (e.g. master-key rotation) logs a warning and skips the background job instead of crashing startup - mavvrik_endpoints.py: catch-all 500 handler now returns type(exc).__name__ instead of str(exc) to prevent Postgres DSNs leaking into API responses Co-Authored-By: Claude Sonnet 4.6 (1M context) --- litellm/proxy/proxy_server.py | 10 +++++++++- litellm/proxy/spend_tracking/mavvrik_endpoints.py | 6 +++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 28eccdf85e7..baa6d18fdfa 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -7747,7 +7747,15 @@ class ProxyStartupEvent: is_mavvrik_setup, ) - if await is_mavvrik_setup(): + try: + _mavvrik_ready = await is_mavvrik_setup() + except Exception as _e: + verbose_proxy_logger.warning( + "mavvrik: skipping startup — is_mavvrik_setup() failed: %s", _e + ) + _mavvrik_ready = False + + if _mavvrik_ready: from litellm.constants import ( # noqa: PLC0415 MAVVRIK_EXPORT_INTERVAL_MINUTES, MAVVRIK_EXPORT_USAGE_DATA_JOB_NAME, diff --git a/litellm/proxy/spend_tracking/mavvrik_endpoints.py b/litellm/proxy/spend_tracking/mavvrik_endpoints.py index 71d1b643a8c..47e63e4551d 100644 --- a/litellm/proxy/spend_tracking/mavvrik_endpoints.py +++ b/litellm/proxy/spend_tracking/mavvrik_endpoints.py @@ -85,7 +85,11 @@ async def _mavvrik_errors() -> AsyncIterator[None]: except ValueError as exc: raise HTTPException(status_code=400, detail={"error": str(exc)}) from exc except Exception as exc: - raise HTTPException(status_code=500, detail={"error": str(exc)}) from exc + # Use only the exception type name to avoid leaking internal details + # (e.g. Postgres DSNs, hostnames) into API responses. + raise HTTPException( + status_code=500, detail={"error": type(exc).__name__} + ) from exc # ---------------------------------------------------------------------------