6 views
-/https://github.com/berriai/litellm/issues/26231
GitHub · issue

#26231 [Bug]: Airgapped license verification fails when the license payload contains "." (e.g. a domain-like user_id)

  • State: open
  • Author: @int-tt
  • Labels: bug, proxy, llm translation

### Check for existing issues

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

### What happened?

### Summary

`LicenseCheck._verify_license_str` splits the base64-decoded license on the **first** `.` byte:

https://github.com/BerriAI/litellm/blob/main/litellm/proxy/auth/litellm_license.py#L177-L178

```python decoded = base64.b64decode(license_key) message, signature = decoded.split(b".", 1) # <-- bug ```

The format is `<JSON payload>.<RSA signature>`, but the JSON payload itself can contain `.` bytes (0x2E) — most commonly inside `user_id` (domain-like IDs, e.g. `"example.co.jp-license-litellm"`). When it does, `split(b".", 1)` cuts the payload in the middle, so `message` is truncated JSON and `signature` contains the rest of the payload plus the real signature. Both JSON parsing and RSA verification then fail, and `is_premium()` returns `False` for what is a perfectly valid license.

### Scope of impact

- All airgapped/offline licenses whose JSON payload contains `.` (dot) bytes. - This is not rare: any `user_id` that looks like a domain (`company.com-…`, `*.co.jp-…`) or contains a version/decimal will hi…

GitHub resolver

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

Refresh page
vote history (2 events)
#0 of 0 · 31d18h34m38s ago — entered · #import:https:::github.com:berriai:litellm post #2297
30778 is harder because it spans multiple HTTP transport construction and retry paths, requires consistent option propagation, and carries broader regression and TLS-behavior testing risk; 26231 is comparatively localized to license parsing and validation.
#0 of 0 · 31d18h27m35s ago — current · #import:https:::github.com:berriai:litellm post #2418
The license-verification fix is harder because it involves parsing and compatibility of a signed wire format, with broader security-sensitive testing and migration risk. The rate-limiter issue appears comparatively localized to descriptor construction and regression coverage.
discussed in #import:https:::github.com:berriai:litellm

ranked child groups

no voted pairs yet in this scope

cli
src
spread
search