Jinja2-Template-Injection

Jinja2-Template-Injection

Bei einer Jinja2-Template-Injection schmuggelt ein Angreifer eigene Rechenanweisungen in eine Textvorlage, die ein Webserver ausfüllt. Im schlimmsten Fall führt der Server dadurch fremden Programmcode aus und gibt Passwörter oder ganze Systeme preis.

Viele Webseiten werden nicht Buchstabe für Buchstabe von Hand geschrieben. Stattdessen benutzen Entwickler Vorlagen: fertige Textgerüste mit Lücken, in die der Server aktuelle Daten einsetzt. In der Vorlage steht zum Beispiel « Hallo {} », und der Server ersetzt die markierte Lücke durch den echten Namen des Nutzers. Jinja2 ist eines der bekanntesten Programme für diese Aufgabe und wird in der Programmiersprache Python eingesetzt. Eine Jinja2-Template-Injection liegt vor, wenn ein Angreifer selbst solche Lücken-Markierungen in die Vorlage bekommt. Der Server hält sie für eigene Anweisungen und rechnet sie brav aus.

Vom Gästebuch-Eintrag zur Kontrolle über den Server

Der Kern des Problems ist eine Verwechslung. Der Server soll Nutzereingaben nur anzeigen. Wenn diese Eingaben aber in die Vorlage selbst geraten, behandelt er sie als Bauanleitung. Damit entscheidet plötzlich der Besucher mit, was das Programm tut.

Ein einfacher Test zeigt, wie ernst das ist. Gibt man als Namen den Text « {} » ein und die Seite antwortet mit « 49 », dann hat der Server gerechnet. Er hat also fremde Anweisungen ausgeführt. Von dieser harmlosen Multiplikation bis zum Auslesen von Dateien ist es oft nur ein kleiner Schritt.

Sicherheitsforscher zählen solche Lücken zu den schwerwiegendsten überhaupt. Sie führen häufig zu Remote Code Execution, also zur Ausführung beliebiger Befehle auf dem fremden Rechner. Ein Angreifer kann dann Datenbanken kopieren, Zugangsdaten stehlen oder den Server als Sprungbrett ins interne Netz nutzen. Anders als beim bekannteren Cross-Site-Scripting trifft es nicht nur den Browser einzelner Besucher, sondern die zentrale Maschine hinter der Website.

Warum die doppelten Klammern so gefährlich sind

Jinja2 kennt zwei Welten. Der normale Text wird einfach durchgereicht. Alles zwischen doppelten geschweiften Klammern wird dagegen als Ausdruck ausgewertet. Diese Trennung funktioniert nur, solange der Nutzer ausschließlich in der Text-Welt landet.

Der Fehler passiert typischerweise, wenn ein Entwickler die Vorlage zur Laufzeit aus Bruchstücken zusammenklebt. Er baut die Nutzereingabe direkt in den Vorlagentext ein, statt sie nur als Wert zu übergeben. Damit wandert die Eingabe von der Text-Welt in die Anweisungs-Welt. Für den Server sieht sie danach genauso aus wie der Code, den der Entwickler selbst geschrieben hat.

Ein häufiger Irrtum ist, dass Escaping hier schützt. Escaping macht gefährliche Zeichen bei der Anzeige unschädlich und verhindert Angriffe auf den Browser. Gegen Template-Injection hilft es nicht, weil die Auswertung schon vorher passiert. Der richtige Weg ist, Vorlagen als feste Dateien zu speichern und Nutzerdaten nur als Variablen einzusetzen. Wo wirklich Nutzer Vorlagen bearbeiten dürfen, nimmt man eine bewusst abgespeckte Umgebung, die kaum Funktionen zulässt.

Python-Webseiten, Bug-Bounty-Meldungen und KI-Werkzeuge

Betroffen sind vor allem Webanwendungen, die mit Python-Werkzeugen wie Flask oder Django-Erweiterungen gebaut sind. Solche Seiten reichen von kleinen Firmenportalen bis zu großen Cloud-Diensten. In Sicherheitsmeldungen und Bug-Bounty-Berichten, also bezahlten Fehlermeldungen von externen Hackern, tauchen Template-Injections regelmäßig auf. Sie werden oft mit hohen Schweregraden bewertet.

Neu an Bedeutung gewinnt das Thema durch KI-Anwendungen. Viele Chatbot-Systeme bauen ihre Anweisungstexte für Sprachmodelle mit genau solchen Vorlagen zusammen. Auch Werkzeuge, die Modelle mit Datenbanken verbinden, nutzen Jinja2 sehr häufig. Wenn dort Nutzerfragen oder Modellantworten unkontrolliert in die Vorlage rutschen, entsteht dieselbe Lücke.

Für Anleger und Beobachter der Tech-Branche ist die Lücke ein Beispiel für ein wiederkehrendes Muster. Bekannte Fehlerklassen wandern in neue Softwaregenerationen mit, weil dort dieselben Bausteine verwendet werden. Wer Meldungen über Sicherheitsvorfälle liest, findet den Begriff daher inzwischen sowohl bei klassischen Webshops als auch bei KI-Plattformen.

Subscribe free. Unsubscribe the second it sucks.

High-signal news across AI, business, UX, and tech. Every morning.