Im vergangenen Jahr ist @pewdiepie zu einem der sichtbarsten Verfechter privater, selbst gehosteter Computer geworden, und es war eine echte Freude, dies zu beobachten.
Was Ende 2025 als unterhaltsames Experiment begann – eine Heimmaschine mit modifizierten GPUs, die Open-Source-Modelle ausführen, Chatbots, die in einem „Rat“ abstimmen, und überschüssige Rechenleistung, die der Proteinfaltungsforschung gespendet wurde – reifte über etwa zwölf Monate zu etwas mit einer klaren Mission heran.
Am 31. Mai 2026 erschien es als Odysseus, ein kostenloser, quelloffener, selbst gehosteter KI-Arbeitsbereich, den er unverblümt als Schlag gegen das Abonnementmodell bezeichnete: lokal zuerst, Datenschutz zuerst, keine Telemetrie, Ihre Daten bleiben auf Ihrer eigenen Hardware, anstatt zu einer Handvoll großer Unternehmen zu fließen.
Dass jemand mit seiner Reichweite lokale Inferenz einem breiten, nicht-technischen Publikum präsentiert, ist genau das, was die Datenschutz-Welt seit Jahren will, und ich drücke die Daumen.
Ich bin auch die Person, die beim Testen einer eigenen autorisierten Installation einen Weg gefunden hat, einen dieser Server mit einem einzigen Klick zu übernehmen. Beides steht nicht im Widerspruch. Software, die so ambitioniert ist, so schnell ausgeliefert wird und in einer so neuen Kategorie, ist genau der Ort, an dem interessante Sicherheitsfehler lauern, und sie früh zu finden ist der Weg, wie das Projekt später vertrauenswürdig wird.
Also, im Geiste der Hilfe, hier die vollständige Kette, von Grund auf erklärt, zusammen mit dem, was sie über den Moment aussagt, in dem wir bauen.
Eine Tür ohne Schloss und ein Port, der nur harmlos aussah
Odysseus kann schwere Aufgaben an entfernte GPU-Maschinen delegieren, die es per SSH erreicht, der Standardmethode, mit der ein Computer Befehle auf einem anderen ausführt.
Daher dürfen einige seiner internen Endpunkte auf eine Befehlsshell zugreifen – die rohe Befehlszeile, mit der Sie die Maschine fast alles tun lassen können, wenn Sie sie erreichen.
Vernünftigerweise beginnt fast jeder dieser Endpunkte damit, zu überprüfen, ob der Aufrufer ein Administrator ist.
Die Ausnahme ist ein kleiner, unscheinbarer Endpunkt, dessen Aufgabe es ist, aufzulisten, welche Python-Pakete auf einem entfernten Server installiert sind, und diese Ausnahme ist der Punkt, an dem alles auseinanderfällt.
Das erste Problem ist, dass dieser Endpunkt nie die Informationen erhält, die er zur Identifizierung des Aufrufers benötigt, daher führt er überhaupt keine Admin-Prüfung durch und kann es im Prinzip auch nicht.
Das Einzige, was davor steht, ist die pauschale Regel der App, dass man eingeloggt sein muss, was bedeutet, dass jedes Konto – einschließlich eines, das ein Fremder vor einer Minute registriert hat – eine Shell-berührende Tür erreichen kann, die jeder andere Endpunkt sorgfältig bewacht.

Die strukturelle Ursache: Ein Handler, der nicht sehen kann, wer anruft, kann nicht erzwingen, wer zugelassen ist, wie unten zu sehen.

Für sich allein genommen wäre das vielleicht überlebbar, aber es gibt ein zweites Problem in der Art und Weise, wie dieser Endpunkt seine eigentliche Aufgabe erfüllt, und das ist das Herzstück des gesamten Angriffs.
Um herauszufinden, welche Pakete auf einer entfernten Maschine installiert sind, schreibt das Programm eine Anweisung als einzelne Zeile Klartext und übergibt diese Zeile an einen Teil des Systems namens die Shell, deren Aufgabe es ist, die Zeile zu lesen und auszuführen.
Die einfachste Vorstellung der Shell ist die eines Assistenten, der schriftliche Anweisungen buchstäblich befolgt, wobei einige Satzzeichen eine besondere Bedeutung haben.
Das wichtige hier ist das Semikolon, das die Shell als „diese Anweisung ist beendet, jetzt mach das Nächste“ liest, sodass eine einzelne Zeile mit Semikolons als mehrere Befehle hintereinander ausgeführt wird.


Deshalb nehmen vorsichtige Programme alles, was eine Person eingegeben hat, und setzen es in Anführungszeichen, bevor sie es an die Shell übergeben – die Art der Shell, angewiesen zu werden, diese Zeichen als gewöhnlichen Text zu behandeln, ohne die Fähigkeit, als Befehle ausgeführt zu werden.
Der Entwickler hat dies für den Servernamen und den gesendeten Befehl korrekt gemacht, sodass diese Eingaben sicher waren.
Die Portnummer jedoch wurde ohne Anführungszeichen direkt in die Zeile eingefügt, basierend auf der vernünftig klingenden Annahme, dass ein Port immer nur eine Zahl ist und eine Zahl keinen Schaden anrichten kann. (Der Pfad zur virtuellen Umgebung wurde aus demselben Grund auf die gleiche Weise ohne Anführungszeichen angehängt.)
Das Loch in der Annahme ist, dass der Port keine Zahl sein muss. Er kommt als Klartext, direkt aus der Webadresse gezogen, und derjenige, der die Anfrage stellt, entscheidet, was darin steht.
Also schreibt ein Angreifer statt 22: 22; id; hostname #.
Die Shell liest das erste Stück, versucht zu verbinden und scheitert harmlos, erreicht dann das erste Semikolon und führt gehorsam die beiden eigenen Befehle des Angreifers aus, während das # am Ende ihr sagt, den restlichen Text, der folgen sollte, zu ignorieren.

Ein Semikolon verwandelt „Pakete auf einer entfernten Kiste auflisten“ in „meine Befehle auf dieser Kiste ausführen“.
Es zu erreichen erfordert nichts Exotischeres als eine eingeloggte Sitzung und eine präparierte Webadresse:

Die Anfrage gibt HTTP 200 mit dem normalen Paket-JSON zurück – während die injizierten Befehle serverseitig ausgeführt werden.
Die Befehle, die ich eingeschleust habe, waren harmlose Sonden, und als ihre Ausgabe zurückkam und das eigene Dienstkonto des Servers nannte, bestätigte das, dass meine Anweisungen auf der Maschine selbst ausgeführt wurden.

Setzt man die beiden Fehler zusammen, ergibt sich das lokale Bild in einem Satz: Jeder eingeloggte Benutzer kann beliebige Befehle auf dem Server ausführen.
Das Skalenrisiko wird durch genau das verschärft, was Odysseus spannend macht.
Wenn ein Schöpfer mit hundert Millionen Abonnenten erfolgreich ein großes, nicht-technisches Publikum in das Self-Hosting einführt, sind das Ergebnis Tausende ähnlicher Instanzen, ähnlich konfiguriert, ähnlich exponiert, was eine Monokultur ist, und Monokulturen lieben Würmer.
@ashnichrist hat es gut formuliert.
Wie man daraus einen einzigen Klick macht
Ein Fehler, den „jeder eingeloggte Benutzer“ auslösen kann, klingt immer noch nach einem böswilligen Insider, und der nächste Schritt beseitigt sogar diese Voraussetzung, indem er den Browser des Opfers selbst den Angriff ausführen lässt.
Die Technik ist Cross-Site Request Forgery und nutzt eine stille Browser-Gewohnheit aus.
Sobald Sie sich auf einer Website anmelden, speichert Ihr Browser ein kleines Token und hängt es automatisch an Anfragen an, die für diese Website bestimmt sind, basierend ausschließlich auf dem Ziel der Anfrage, ohne Rücksicht darauf, welche Seite sie in Gang gesetzt hat.

Odysseus setzte dieses Token mit der SameSite=Lax-Richtlinie, was der vernünftige Standard ist und verhindert, dass das Token bei heimlichen Hintergrundanfragen mitgesendet wird – sendet es aber dennoch bewusst bei einer Navigation auf oberster Ebene, also einem gewöhnlichen Klick, der Ihren gesamten Tab woanders hin bewegt.
Da der anfällige Endpunkt auf einen einfachen Link antwortet, nicht überprüft, woher eine Anfrage stammt, und kein Anti-Forgery-Token verwendet, muss ein Angreifer nur eine Seite mit einem einladenden Button hosten.
Für die Demonstration habe ich genau das gebaut – eine fröhliche, kinderfreundliche und vor allem lore-genaue CoComelon-Tribute-Seite – Kinderreimfarben, Comic Sans, ein großer „Play“-Button.

Der Button ist kein Link zu einem Lied. Sein Click-Handler öffnet das eigentliche Ziel in einem winzigen Wegwerf-Popup-Fenster, sodass die bösartige Anfrage als Navigation auf oberster Ebene stattfindet – mit dem SameSite=Lax-Sitzungscookie – ohne den Fokus zu stehlen, und schließt sich einen Moment später automatisch. Die geöffnete Adresse ist nur der Paket-Endpunkt mit dem in den „Port“ geschmuggelten Befehl:

Während dieser eine Klick landet, veranstaltet die Köderseite eine Show für die Kamera: Das CoComelon-Kunstwerk blinkt über den Bildschirm wie ein Mündungsfeuer, und ein Terminal tippt sich selbst und erzählt jeden Schritt der Übernahme. (Der Terminaltext ist inszenierte Erzählung für die Demo; die eigentliche Ausführung ist die stille Anfrage, die das Popup gerade gemacht hat.)

Um die Auswirkung konkret zu machen, hat dieser eine Klick drei Dinge bewirkt: Er hat die bereitgestellte Oberfläche für eine offensichtliche visuelle Verunstaltung umgeschrieben (ein Vollbild-Overlay „🍉 dein Odysseus wurde gecoComelont 🍉“, Wassermelonensymbole, eine umbenannte App), er hat gelesen, was der Dienstbenutzer lesen konnte, und – am nachhaltigsten – er hat ein verstecktes Administratorkonto direkt in die auth.json der App geschrieben.

Der Haken: Ein Neustart beseitigt das offensichtliche Chaos und behält das Konto des Angreifers.
Hier ist eine Live-Demo.
Warum dies die schlimmste Art von Fehler ist, die man in einem agentischen Tool haben kann
Der Grund, warum Sie eine Kompromittierung einer einzelnen Instanz im Jahr 2026 beunruhigen sollte, ist, dass diese Dinge selten bei einer Instanz aufhören, und der Wurm, der das Jahr definierte, zeigt, warum.
Shai-Hulud, der selbstverbreitende npm-Wurm, der erstmals im September 2025 auftauchte und seitdem in größeren Wellen zurückkehrt, durchläuft eine brutal einfache Schleife – ein bösartiges Skript zur Installationszeit wird ausgeführt, sobald ein Paket installiert ist, scannt die Maschine nach Geheimnissen wie npm- und GitHub-Tokens, SSH-Schlüsseln und Cloud-Anmeldedaten und verwendet diese gestohlenen Anmeldedaten dann, um hintertürte Versionen der anderen Pakete des Opfers zu veröffentlichen, sodass jede neue Installation zum nächsten Startpunkt wird, ohne dass der Angreifer weitere Anstrengungen unternehmen muss.
Die Lektion, die man mitnehmen sollte, ist, dass die schwierigste Aufgabe eines Wurms darin besteht, Anmeldedaten zu sammeln und einen Weg zur nächsten Maschine zu finden.
Ein agentischer KI-Assistent gibt einem Wurm
beide
umsonst, denn das Halten mächtiger Geheimnisse und das Erreichen anderer Maschinen ist sein ganzer Zweck.
Der einzelne Klick gegen Odysseus brachte weit mehr als Codeausführung. Er übergab einen vorgesammelten Tresor mit gespeicherten API-Schlüsseln, der Datenbank, der Konfiguration und dem SSH-Zugriff, den das Tool verwendet, um sich bei den von ihm verwalteten entfernten GPU-Servern anzumelden. Das ist genau der Treibstoff, mit dem ein sich selbst verbreitender Angriff läuft, an einem Ort mit dem Etikett nach außen, und das Drehbuch für seine Verwendung existiert bereits in freier Wildbahn.

Was das alles bedeutet
Was mich am meisten frappiert, ist, dass der Fehler, der den Server tatsächlich übernommen hat, uralt ist. Command Injection und Request Forgery haben Lehrbuch-Fixes, die ein Entwickler im Jahr 2005 erkennen würde, und sie lebten in einer der zukunftsweisendsten KI-Software für Verbraucher – was das Muster in der gesamten Branche in diesem Jahr ist, wo die Schlagzeilen über KI-Sicherheitslücken sich als klassische Fehler in glänzenden neuen Tools entpuppen.
Die Grenze ließ diese Grundlagen vollständig in Kraft, stapelte dann eine leistungsstarke, sich schnell bewegende, oft übermäßig vertraute Schicht darauf und verband diese Schicht mit allem, was Ihnen gehört.

Die Türklingel, die noch nicht angeschlossen war
Es gibt noch ein Detail, aus dem man lernen sollte, denn es ist der Teil, der am wenigsten mit Code zu tun hat.
Als ich dies zum ersten Mal melden wollte, gab es eine Sicherheitsrichtlinie im Repository – eine durchdachte mit vernünftigen Bereitstellungshinweisen.
Aber der Meldeabschnitt verwies potenzielle Melder auf „GitHub Security Advisories, falls verfügbar“, und zuerst war dieser private Kanal einfach nicht geöffnet.
Das Sensibelste, das ein Fremder über das Projekt finden konnte, hatte keinen privaten Ort zum Landen. Diese Lücke wurde inzwischen geschlossen – die Command-Injection-Kette wird nun von einer kritischen Advisory verfolgt, und die Fixes sind integriert – aber das anfängliche Fehlen ist der verräterische Hinweis.
Glücklicherweise gelang es mir, mit einem der Maintainer zu chatten, der die Advisories-Funktion geöffnet hat – und seitdem habe ich eine Reihe weiterer Fixes eingereicht.

Das alles beiseite... es ist ein Zeichen der Zeit.
Projekte gehen jetzt von einem Hobby auf einer Heim-GPU-Maschine zu einem Publikum von hundert Millionen Menschen im Rahmen einer einzigen Ankündigung, und das Sicherheitsgerüst – ein privater Posteingang für schlechte Nachrichten, ein Advisory-Workflow, die Gewohnheit, Modellausgaben als feindselig zu betrachten – hinkt dem Code hinterher, der wiederum dem Publikum hinterherhinkt.
Diese Reihenfolge ist genau das Gegenteil von dem, was ein Gegner braucht.
Eine große, vertrauensvolle, weitgehend nicht-technische Fangemeinde, die in derselben Woche dieselbe Software installiert, von jemandem darauf hingewiesen, dem sie bereits vertrauen, ist das attraktivste Ziel, das es gibt – riesig, einheitlich und bereits überzeugt.
Es ist genau die Monokultur, die ein Wurm will, mit der bereits ausgerollten Fußmatte.
Der ermutigende Teil dieser Geschichte ist also nicht, dass der Code perfekt war – das war er nicht –, sondern dass das Projekt die Türklingel angeschlossen und die Fixes innerhalb von etwa einem Tag nach dem Klopfen ausgeliefert hat.
Für Software, die sich so schnell bewegt, vor einem so großen Publikum, ist dieser Reflex – einen privaten Kanal öffnen, schnell antworten, offen korrigieren – mehr wert, als von Anfang an eine makellose Bilanz gehabt zu haben. Letztendlich wird so Vertrauen in Self-Hosting wirklich verdient.
Für den Moment... das war's, Leute!

https://x.com/Grummz/status/2061300454907371953
https://x.com/ashnichrist/status/2061481763516399737





