Die Jinja2-XSS-Sicherheitslücke verstehen und beheben (CVE-2024-22195)
18. Januar 2024
0 Min. LesezeitAm 11. Januar 2024 wurde eine schwerwiegende Sicherheitslücke in Jinja2, einer weitverbreiteten Python-Template-Bibliothek, bekannt. Die als CVE-2024-22195 identifizierte Cross-Site-Scripting-Sicherheitslücke (XSS) gibt Anlass zur Sorge, da zahlreiche Projekte betroffen sind. Jinja2 verzeichnet über 33 Millionen Downloads pro Woche, fast 10.000 GitHub-Sterne und mehr als 90.000 abhängige Projekte.
Die Sicherheitslücke betrifft alle Versionen vor 3.1.3. Die gepatchte Version 3.1.3 ist die einzige sichere Option. Besonders wichtig: Die am häufigsten heruntergeladene Version 3.1.2 ist weiterhin anfällig und weitverbreitet.

Wie kann ich prüfen, ob mein Projekt eine anfällige Version von Jinja2 verwendet?
Sie können die Jinja2-Version in Ihrem Projekt in der Datei requirements.txt nachsehen oder in der virtuellen Umgebung Ihres Projekts pip list | grep Jinja2 ausführen.
Die Verwendung von Jinja2 in der Python-Entwicklung verstehen
Die Beliebtheit von Jinja2 beruht auf der Möglichkeit, dynamische HTML-Templates mit einer Python-ähnlichen Syntax zu erstellen. Die Bibliothek bietet Funktionen wie Template-Vererbung, automatisches HTML-Escaping, um XSS durch nicht vertrauenswürdige Eingaben zu verhindern, sowie Unterstützung für Internationalisierung.
Entwickler installieren die Bibliothek in der Regel über PyPI mit dem Befehl pip install Jinja2. Ein Beispiel für die Verwendung in einem Projekt könnte so aussehen:
Details zur XSS-Sicherheitslücke
CVE-2024-22195 entsteht durch den xmlattr-Filter in Jinja2, wenn auf Basis von Benutzereingaben Schlüssel mit Leerzeichen verwendet werden. Dieser Fehler ermöglicht es Angreifern, beliebige HTML-Attribute in Templates einzuschleusen, den Auto-Escaping-Mechanismus zu umgehen und möglicherweise nicht vertrauenswürdige Skripte im Browser eines Nutzers auszuführen.
Im Folgenden finden Sie eine vollständige Proof-of-Concept-Reproduktion der Cross-Site-Scripting-Sicherheitslücke in Jinja2. Sie stammt von Calum Hutton aus dem Snyk-Sicherheitsforschungsteam, der die Sicherheitslücke offengelegt hat:
Reproduktion der Jinja2-XSS-Sicherheitslücke CVE-2024-22195
Richten Sie eine neue virtuelle Python-3-Umgebung ein:
python3 -m venv myenvsource myenv/bin/activate
Hinweis: Wenn Sie noch nicht mit der Verwaltung verschiedener Python-Entwicklungsumgebungen vertraut sind, empfehle ich Ihnen, sich ein paar Minuten Zeit zu nehmen und Python-Umgebungen mit venv und Docker optimal zu nutzen und Ihren Code zu schützen: ein umfassender Leitfaden zu lesen.
Erstellen Sie anschließend die Python-Abhängigkeitsdatei requirements.txt, die der Paketmanager pip verwendet, und fügen Sie gängige Bibliotheken aus der PyPI-Registry hinzu:
Jetzt können wir Snyk verwenden, um das Projekt zu scannen und zu prüfen, ob eine unserer Python-Abhängigkeiten anfällig ist. Wenn Sie macOS verwenden, installieren Sie Snyk zunächst über brew, denn so können Sie am schnellsten loslegen:
Hinweis: Anleitungen zur Installation unter anderen Betriebssystemen wie Windows oder Linux finden Sie in den Installationsanweisungen in Snyk User Docs.
Sie müssen sich bei Snyk authentifizieren. Führen Sie dazu snyk auth aus und folgen Sie den Anweisungen, um sich im Browser anzumelden. Die Snyk CLI ruft dann automatisch Ihre API-Anmeldedaten ab.
Jetzt können wir unser Python-Projekt scannen. Führen Sie dazu Folgendes aus:
Anschließend werden Ihnen die Snyk-Ergebnisse angezeigt:
Snyk hat die anfällige Jinja2-Version in unserem Projekt (Version 3.1.2) erfolgreich erkannt und über die CLI eine Fehlerbehebung empfohlen.
Nutzen Sie auch die Möglichkeit, eine Snyk-Erweiterung in Ihrer IDE einzusetzen und Ihren eigenen Python-Code sowie containerisierte Python-Anwendungen zu scannen. Zusätzlich können Sie damit auch Abhängigkeiten von Drittanbietern aus PyPI überprüfen.
Lässt sich die Jinja2-XSS-Schwachstelle leicht ausnutzen?
Wie komplex die Ausnutzung dieser Schwachstelle ist, hängt von der jeweiligen Anwendung und ihrer Implementierung von Jinja2 ab. Aufgrund der Natur von XSS-Schwachstellen sollten Sie sie jedoch mit hoher Priorität behandeln.
Jinja2-Sicherheitslücke beheben und Sicherheit kontinuierlich überwachen
Entwicklern wird dringend empfohlen, umgehend auf Jinja2 Version 3.1.3 zu aktualisieren, um diese Sicherheitslücke zu beheben.
Darüber hinaus können Tools wie Snyk entscheidend dazu beitragen, Sicherheitslücken kontinuierlich zu überwachen. Snyk erkennt anfälligen Code und anfällige Bibliotheken nicht nur über seine IDE-Erweiterung, sondern ist auch unverzichtbar, um containerisierte Anwendungen mit Docker zu scannen, die diese anfällige Abhängigkeit enthalten.
Wie kann ich mein Projekt vor der Jinja2-XSS-Schwachstelle schützen?
Aktualisieren Sie Jinja2 auf Version 3.1.3 oder höher. Ändern Sie dazu Ihre requirements.txt-Datei in Jinja2>=3.1.3 und führen Sie pip install -U -r requirements.txt aus.
Ressourcen zur Entwicklersicherheit – und was kommt als Nächstes?
Die Entdeckung von CVE-2024-22195 in Jinja2 erinnert daran, wie wichtig es ist, Abhängigkeiten aktuell zu halten und Tools wie Snyk zur kontinuierlichen Sicherheitsüberwachung einzusetzen. Wenn Entwickler informiert und proaktiv bleiben, können sie ihre Projekte vor solchen Sicherheitslücken schützen.
Erfahren Sie mit Snyk Learn mehr über XSS in Python: XSS in Python
Cheat Sheet zu Best Practices für Python-Sicherheit: Python Security Best Practices
Python-Virtual-Environments optimal nutzen: Python Virtual Environments
Best Practices für die Containerisierung von Python-Anwendungen mit Docker: Containerizing Python with Docker
Gibt es weitere empfohlene Sicherheitsmaßnahmen für Jinja2-Nutzer?
Neben der Aktualisierung von Jinja2 sollten Nutzer allgemeine Best Practices für Sicherheit befolgen, etwa alle Benutzereingaben zu validieren und zu bereinigen, Content-Security-Policies einzusetzen und regelmäßige Sicherheitsaudits durchzuführen.



