
Einzeiler-Skripte zur Überprüfung von Servern und Docker-Images auf CVE-2024-3094 (xz Hintertür). Beinhaltet Trivy-basiertes Scannen für containerisierte Umgebungen und grep-basierte Code-Repository-Prüfungen auf verwundbare Bibliotheksreferenzen.
Dieses Repository bietet einfache, aber leistungsstarke Einzeiler-Skripte, die Ihnen helfen sollen, schnell festzustellen, ob Ihr Server anfällig für CVE-2024-3094 ist, eine kritische Sicherheitslücke in bestimmten Versionen des Dienstprogramms xz. Darüber hinaus bieten wir eine bequeme Möglichkeit, Ihre Code-Repositories auf Verweise auf die Bibliothek xz zu durchsuchen, was auf potenzielle indirekte Schwachstellen hindeuten könnte.
Um festzustellen, ob Ihr Server anfällig für CVE-2024-3094 ist, führen Sie den folgenden Befehl in Ihrem Terminal aus:
(type dpkg &>/dev/null && dpkg -l xz 2>/dev/null | awk '/^ii/{print $3}' | grep -qE '^(5.6.0|5.6.1)$' && echo "Vulnerable: CVE-2024-3094" || echo "Not vulnerable or xz not installed") || (type rpm &>/dev/null && rpm -q --qf "%{VERSION}\n" xz 2>/dev/null | grep -qE '^(5.6.0|5.6.1)$' && echo "Vulnerable: CVE-2024-3094" || echo "Not vulnerable or xz not installed")
Der obige Befehl prüft die Pakete in der Linux-Distribution.
Oder versuchen Sie diese andere Option, bei der der Befehl xz ausgeführt wird – dies wird normalerweise nicht empfohlen:
command -v xz &>/dev/null && { xz_version=$(xz --version | head -n 1 | awk '{print $4}'); [[ $xz_version == "5.6.0" || $xz_version == "5.6.1" ]] && echo "Vulnerable: CVE-2024-3094" || echo "Not vulnerable: CVE-2024-3094"; } || echo "xz not installed"
Dieses Skript führt folgende Aktionen aus:
xz installiert ist.xz.Für Teams, die Docker verwenden und sich um Schwachstellen in ihren Container-Images sorgen, bieten wir ein anspruchsvolles Beispiel unter Verwendung von Trivy, einem Open-Source-Schwachstellenscanner von Aqua Security. Diese Methode scannt Docker-Images auf Schwachstellen, einschließlich CVE-2024-3094, und liefert eine klare Ausgabe zum Sicherheitsstatus des Images.
Der folgende Befehl verwendet Trivy, um ein Docker-Image (debian:experimental-20240311) auf Schwachstellen zu scannen und die Ergebnisse nach CVE-2024-3094 im Zusammenhang mit liblzma5 zu filtern:
docker run --rm -v $('pwd'):/project -w /project aquasec/trivy:latest image --format cyclonedx --scanners vuln --output /project/result.json debian:experimental-20240311@sha256:16cc2b09c44d991d36f63153f13a7c98fb7da6bd2ba9d7cc0f48baacb7484970 && jq -r '.components[] | .properties[] | select(.name == "aquasecurity:trivy:PkgID" and (.value | tostring | test("liblzma5@(5\\.6\\.0|5\\.6\\.1)"))) | .value' result.json | grep -qE '5\.6\.0|5\.6\.1' && echo "Vulnerable: CVE-2024-3094" || echo "Not vulnerable or liblzma5 not found"
So funktioniert es:
Docker-Run-Befehl: Startet einen Trivy-Container und bindet das aktuelle Verzeichnis als Volume in den Container ein. Diese Einrichtung ermöglicht es Trivy, die Scanergebnisse direkt in eine Datei (result.json) im aktuellen Verzeichnis des Hosts auszugeben.
Trivy-Scan: Scannt das angegebene Docker-Image auf Schwachstellen und gibt die Ergebnisse im CycloneDX-Format aus (ein standardisiertes Format für Software-Stücklisten).
Verarbeitung mit jq: Filtert die Scanergebnisse, um das Paket liblzma5 zu identifizieren, und prüft auf die Versionen „5.6.0“ oder „5.6.1“.
Schwachstellenprüfung: Verwendet grep, um nach anfälligen Versionen von liblzma5 zu suchen. Es gibt „Vulnerable: CVE-2024-3094“ aus, wenn gefunden; andernfalls wird „Not vulnerable or liblzma5 not found“ ausgegeben.
Diese Methode ist für automatisierte Pipelines sehr effektiv und kann angepasst werden, um verschiedene Schwachstellen in verschiedenen Docker-Images zu prüfen, um sicherzustellen, dass Ihre Bereitstellungen sicher sind.
Um den bereitgestellten Befehl zum Scannen Ihrer eigenen Docker-Images zu verwenden, befolgen Sie diese Schritte, um den Befehl an Ihre Bedürfnisse anzupassen:
Ersetzen des Docker-Images: Ändern Sie debian:experimental-20240311@sha256:16cc2b09c44d991d36f63153f13a7c98fb7da6bd2ba9d7cc0f48baacb7484970 in das Image, das Sie scannen möchten. Sie können Ihr Image nach Namen und Tag (z. B. yourimage:yourtag) oder nach seinem Digest angeben.
Anpassen der Schwachstellenprüfung: Wenn Sie nach anderen Schwachstellen als CVE-2024-3094 suchen, ändern Sie die jq- und grep-Ausdrücke, um die entsprechenden Pakete und Versionen zu identifizieren, die für die betreffenden Schwachstellen relevant sind.
Zum Beispiel, um Ihr Image namens yourimage:yourtag zu scannen:
docker run --rm -v $('pwd'):/project -w /project aquasec/trivy:latest image --format cyclonedx --scanners vuln --output /project/result.json yourimage:yourtag && jq -r '.components[] | .properties[] | select(.name == "aquasecurity:trivy:PkgID" and (.value | tostring | test("liblzma5@(5\\.6\\.0|5\\.6\\.1)"))) | .value' result.json | grep -qE '5\.6\.0|5\.6\.1' && echo "Vulnerable: CVE-2024-3094" || echo "Not vulnerable or liblzma5 not found"
Tipps zur Anpassung:
Für andere Schwachstellen: Ersetzen Sie "liblzma5@(5\\.6\\.0|5\\.6\\.1)" im jq-Befehl durch das Paket und die Versionen, die Sie interessieren. Um beispielsweise nach openssl Version „1.1.1“ zu suchen, könnten Sie openssl@(1\\.1\\.1) verwenden.
Für andere Eigenschaften: Je nach Schwachstelle oder Paket müssen Sie möglicherweise .name == "aquasecurity:trivy:PkgID" anpassen, um andere Eigenschaften in der CycloneDX-Ausgabe zu identifizieren.
Regelmäßige Updates: Stellen Sie sicher, dass Ihre Instanz von Trivy regelmäßig aktualisiert wird, um die neuesten Schwachstellendefinitionen zu erhalten. Dies kann in der Regel erreicht werden, indem Sie vor dem Ausführen von Scans das neueste aquasec/trivy-Image pullen.
Ausgabe verstehen: Machen Sie sich mit dem Ausgabeformat von Trivy und der jq-Verarbeitung vertraut, um die Ergebnisse genau zu interpretieren und die Auswirkungen auf Ihre Docker-Images zu verstehen.
xz-Referenzen durchsuchenWenn Sie Code pflegen, der potenziell mit der xz-Bibliothek interagiert oder von ihr abhängt, ist es entscheidend, alle expliziten Verweise auf anfällige Bibliotheksversionen zu identifizieren. Verwenden Sie die folgenden Befehle, um Ihre Repositories zu durchsuchen:
Das tukaani-Projekt ist die Heimat des Dienstprogramms xz. So finden Sie Erwähnungen in Ihrem Code:
grep -rnH "tukaani" .
Für Java-Projekte, die Maven verwenden, können Sie xz als Abhängigkeit in Ihrer pom.xml angeben. So finden Sie diese Referenzen:
grep -rnH "org.tukaani:xz:" .
Diese Befehle durchsuchen rekursiv das aktuelle Verzeichnis (und Unterverzeichnisse) nach den angegebenen Mustern und geben den Dateinamen, die Zeilennummer und die Zeile mit dem Treffer aus.
Hinweis: Stellen Sie sicher, dass Sie die erforderlichen Berechtigungen haben, um diese Skripte auf Ihrem Server auszuführen oder Repositories zu durchsuchen. Überprüfen und testen Sie Skripte immer in einer sicheren Umgebung, bevor Sie sie in Produktionssystemen einsetzen.
Sie können gerne zu diesem Repository beitragen oder Verbesserungen vorschlagen, indem Sie einen Pull-Request einreichen oder ein Issue öffnen. Ihr Feedback und Ihre Beiträge werden sehr geschätzt!