CVE-2026-47101:
NixOS 취약성 분석 및 완화
개요
CVE-2026-47101 is a privilege escalation vulnerability in LiteLLM (the open-source LLM proxy) that allows an authenticated internal_user to gain full proxy_admin privileges by exploiting unrestricted allowed_routes handling during API key generation. All versions of LiteLLM prior to 1.83.14 are affected. The vulnerability was published on May 21, 2026, with patches released in version 1.83.14-stable. It carries a CVSS v3.1 base score of 8.8 (High) and a CVSS v4.0 base score of 8.7 (High) (GitHub Advisory, VulnCheck Advisory).
기술적 세부 사항
The vulnerability is classified as CWE-863 (Incorrect Authorization) and stems from a two-flaw chain in LiteLLM's key management logic. First, the /key/generate endpoint's authorization function (_is_allowed_to_make_key_request) only validates that the user_id on the new key matches the caller's identity — it never validates that the allowed_routes field is a subset of the caller's role-permitted routes. The allowed_routes value is stored directly to the database without filtering. Second, when the generated key is subsequently used to authenticate, the route check in non_proxy_admin_allowed_routes_check() evaluates the key's allowed_routes as an independent grant rather than an intersection with role-based permissions — meaning a key with allowed_routes: ["/user/update"] bypasses the role check entirely and reaches that admin-only endpoint. Once /user/update is accessible, the /user/update endpoint itself lacks field-level authorization, allowing a non-admin to modify their own user_role to proxy_admin (PoC Write-up, Patch Commit).
영향
Successful exploitation grants an internal_user full proxy_admin privileges, enabling complete administrative takeover of the LiteLLM proxy. An attacker can manage all users, teams, API keys, and models; access all prompt history and spend logs; and modify or revoke any configuration. Because LiteLLM acts as a gateway to multiple LLM providers, a compromised proxy admin can also expose underlying API credentials and manipulate or intercept all LLM traffic routed through the proxy (GitHub Advisory, PoC Write-up).
착취 단계
- Obtain internal_user credentials: Authenticate to the LiteLLM proxy as an
internal_user(any standard authenticated account with key management permissions). - Generate a privileged API key: Send a POST request to
/key/generatewithallowed_routes: ["/user/update"]in the request body. Because the endpoint does not validate that the specified routes fall within the caller's role permissions, the key is created and stored with access to the admin-only/user/updateroute:
curl -X POST https://<litellm-host>/key/generate \
-H "Authorization: Bearer <internal_user_key>" \
-H "Content-Type: application/json" \
-d '{"allowed_routes": ["/user/update"]}'
# Save the returned key: sk-escalated-key- Escalate role via /user/update: Use the newly generated key to call
/user/updateand setuser_roletoproxy_adminfor the attacker's ownuser_id:
curl -X POST https://<litellm-host>/user/update \
-H "Authorization: Bearer sk-escalated-key" \
-H "Content-Type: application/json" \
-d '{"user_id": "<attacker_user_id>", "user_role": "proxy_admin"}'- Verify escalation: Confirm the role change by calling
/user/listor re-authenticating and checking the returned role:
curl -X GET https://<litellm-host>/user/list \
-H "Authorization: Bearer sk-escalated-key"- Exercise admin privileges: Use the original or new keys with full
proxy_adminaccess to manage users, teams, models, keys, and access all prompt history (PoC GitHub, PoC Write-up).
타협의 징후
- Network/API Logs: POST requests to
/key/generatefrominternal_useraccounts containingallowed_routesfields with admin-only routes (e.g.,/user/update,/user/list, management routes); POST requests to/user/updateauthenticated with a key that is not associated with aproxy_adminrole. - Database/Audit Logs:
LiteLLM_VerificationTokenrecords forinternal_useraccounts with non-emptyallowed_routescontaining management or admin-only route strings; unexpecteduser_rolechanges toproxy_adminin theLiteLLM_UserTablefor accounts that were previouslyinternal_user. - Behavioral: An
internal_useraccount successfully accessing admin-only endpoints such as/user/update,/user/list,/team/new, or/model/new; unexpected creation, modification, or deletion of users, teams, or API keys by non-admin accounts. - Application Logs: LiteLLM proxy access logs showing
200 OKresponses to management endpoints for tokens belonging tointernal_userrole accounts (PoC Write-up).
완화 및 해결 방법
Upgrade LiteLLM to version 1.83.14 or later, which introduces the _check_allowed_routes_caller_permission() function that restricts non-admin users from setting allowed_routes on API keys, and adds field-level authorization to prevent non-admins from modifying sensitive fields like user_role via /user/update (LiteLLM Release). The fix is delivered across three commits: d910a95, 2220f30, and 5190bd0. As an immediate remediation step, audit all existing API keys created by internal_user accounts and revoke any with non-empty allowed_routes containing admin-only routes. There is no known configuration-based workaround for unpatched versions — upgrading is the only reliable remediation (GitHub Advisory).
커뮤니티 반응
The vulnerability was covered by The Hacker Wire shortly after disclosure, highlighting the API key misconfiguration angle (The Hacker Wire). VulnCheck assigned and published the advisory, and the issue was also referenced in a CISA vulnerability bulletin. Community reaction on social media (Nitter/Twitter via @threatcluster) noted the availability of public PoC code. The researcher who published the detailed write-up (13ph03nix) provided a PoC video demonstrating the full escalation chain, which received attention in security circles.
추가 자료
근원: 이 보고서는 AI를 사용하여 생성되었습니다.
관련 NixOS 취약점:
무료 취약성 평가
클라우드 보안 태세를 벤치마킹합니다
9개의 보안 도메인에서 클라우드 보안 관행을 평가하여 위험 수준을 벤치마킹하고 방어의 허점을 식별합니다.
추가 Wiz 리소스
맞춤형 데모 받기
맞춤형 데모 신청하기
"내가 본 최고의 사용자 경험은 클라우드 워크로드에 대한 완전한 가시성을 제공합니다."
"Wiz는 클라우드 환경에서 무슨 일이 일어나고 있는지 볼 수 있는 단일 창을 제공합니다."
"우리는 Wiz가 무언가를 중요한 것으로 식별하면 실제로 중요하다는 것을 알고 있습니다."