SGLang, eines der am weitesten verbreiteten Open-Source-Frameworks zum Betrieb großer Sprachmodelle, enthält eine kritische Lücke, die einem nicht authentifizierten Angreifer das Ausführen beliebigen Codes auf dem Inferenzserver erlaubt. Die als CVE-2026-86793 geführte Schwachstelle betrifft Versionen bis einschließlich 0.5.14 und hatte zum Zeitpunkt der Veröffentlichung am 11. September keinen Patch des Herstellers.

Der Fehler zeigt, wie eine zu enge Allowlist scheitern kann und trotzdem wie beabsichtigt aussieht. SGLang führte nach einer früheren Deserialisierungslücke (CVE-2025-10164) einen eigenen Unpickler namens SafeUnpickler ein. Die Klasse beschränkt, welche Module, Klassen und Funktionen bei der Deserialisierung aufgelöst werden dürfen, und zwar über zwei Listen: erlaubte Modulpräfixe wie „torch.“ und „numpy.“ sowie eine Denylist bestimmter gefährlicher Paare wie („builtins“, „eval“).

Das Präfix „builtins.“ ist zu breit. Es erlaubt jeden Namen aus dem builtins-Modul, der nicht ausdrücklich verboten ist. Die Denylist blockiert eval, exec, compile und open – aber nicht __import__ oder getattr. Über zwei Pickle-Opcodes verkettet, erreichen diese beiden erlaubten Funktionen alles Importierbare. Der Proof of Concept des VicOne-Forschers Reuel Magistrado löst builtins.__import__ auf, importiert os, ruft builtins.getattr auf, um os.system zu holen, ohne dass der Unpickler jemals („os“, „system“) direkt auflösen muss, und ruft die Funktion dann auf. Die Beschränkungen werden nicht durch Regelbruch umgangen, sondern durch Regelkonformität.

Erreichbar ist der Codepfad über einen POST an den Endpunkt /update_weights_from_tensor, der als ADMIN_OPTIONAL deklariert ist: Sind weder API-Key noch Admin-Key konfiguriert, akzeptiert er Anfragen ganz ohne Authentifizierung. Die Nutzlast reist als base64-kodiertes Pickle im Array serialized_named_tensors. Die Lücke ist also nur auf Servern ausnutzbar, die sowohl erreichbar als auch unauthentifiziert sind – eine Konfiguration, die in internen Deployments und Laborclustern verbreitet und im offenen Internet nicht selten ist.

Die Offenlegungschronologie ist eine eigene Geschichte. Magistrado reichte am 29. Juni eine private Meldung ein, hakte per E-Mail nach und erhielt am 2. Juli per Slack eine Bestätigung – ohne Patch und ohne Zeitplan. Am 16. Juli eskalierte er an CERT/CC. CERT/CC validierte die Lücke am 30. Juli, vergab die CVE am 8. September; VicOne veröffentlichte seine Analyse am 11. September. Die Maintainer hatten zu diesem Zeitpunkt noch keinen Fix ausgeliefert. Die CERT/CC-Warnung VU#281278 umfasst sechs Schwachstellen in SGLang, darunter Remote Code Execution und Server-Side Request Forgery.

Die Empfehlung bis zum Patch ist unspektakulär: Authentifizierung konfigurieren, SGLang hinter einem vertrauenswürdigen Netz binden und den Zugriff auf den Endpunkt zum Aktualisieren der Gewichte beschränken. Der vorgeschlagene Code-Fix ist ähnlich klein – __import__, getattr, setattr und delattr in die Denylist aufnehmen oder besser: das breite Präfix „builtins.“ ganz streichen und nur die exakten Klassen erlauben, die die Tensor-Serialisierung braucht.

Der Kontext macht die Sache nicht besser: CVE-2026-86793 reiht sich in eine Serie ernster Lücken in KI-Inferenzinfrastruktur der vergangenen Wochen ein, von Ollama bis Langflow – ein Hinweis darauf, dass Server mit Modellgewichten und Rechenleistung heute an derselben Vertrauensgrenze stehen wie die Anwendungen, die sie bedienen.