
Gixy-Next v0.7.1
Gixy-Next: NGINX-Konfigurations-Sicherheitsscanner & Leistungsprüfer
Gixy-Next: NGINX-Konfigurations-Sicherheitsscanner für Sicherheitsaudits
Überblick
Gixy-Next (Gixy) ist ein Open-Source-Sicherheitsscanner und Härtungswerkzeug für NGINX-Konfigurationen, das Ihre nginx.conf statisch analysiert, um Sicherheitsfehlkonfigurationen, Härtungslücken und gängige Performance-Fallstricke zu erkennen, bevor sie in die Produktion gelangen. Es ist ein aktiv gepflegter Fork von Yandex' Gixy. Der Quellcode von Gixy-Next ist auf GitHub verfügbar.
Gixy-Next kann auch im Browser auf dieser Seite ausgeführt werden. Kein Download erforderlich; Sie können Ihre Konfigurationen auf der Website scannen (lokal, mittels WebAssembly).
Schnellstart
Gixy-Next (das CLI gixy oder gixy-next) wird auf PyPI verteilt. Sie können es mit pip oder uv installieren:
# pip
pip3 install gixy-next
# uv
uv pip install gixy-next
Anschließend können Sie es ausführen:
# gixy liest standardmäßig /etc/nginx/nginx.conf
gixy
# Sie können aber auch einen Pfad zur Konfiguration angeben
gixy /opt/nginx.conf
Sie können Ihre NGINX-Konfiguration auch in eine einzelne Dump-Datei exportieren (siehe nginx -T Live-Konfigurations-Dump):
# Schreibt die vollständige NGINX-Konfiguration in eine einzelne Datei (inklusive aller Includes)
nginx -T > ./nginx-dump.conf
# Den Dump andernorts scannen (oder über stdin):
gixy ./nginx-dump.conf
# oder
cat ./nginx-dump.conf | gixy -
Webbasierter Scanner
Anstatt Gixy-Next lokal herunterzuladen und auszuführen, können Sie diese Webseite verwenden und eine Konfiguration direkt aus Ihrem Webbrowser scannen (lokal, mittels WebAssembly).
Scan mit Docker
Gixy-Next ist als Docker-Image von Docker Hub oder der GitHub Registry verfügbar.
Scannen Sie eine lokale Konfigurationsdatei, indem Sie sie in den Container einbinden:
# GitHub Registry verwenden
docker run --pull=always --rm -v "$PWD/nginx.conf:/nginx.conf:ro" ghcr.io/megamansec/gixy-next /nginx.conf
# Oder Docker Hub
docker run --pull=always --rm -v "$PWD/nginx.conf:/nginx.conf:ro" megamansec/gixy-next /nginx.conf
Scannen Sie einen NGINX-Live-Konfigurations-Dump:
# Schreibt die vollständige NGINX-Konfiguration in eine einzelne Datei (inklusive aller Includes)
nginx -T > ./nginx-dump.conf
# GitHub Registry verwenden
docker run --pull=always --rm -v "$PWD/nginx-dump.conf:/nginx-dump.conf:ro" ghcr.io/megamansec/gixy-next /nginx-dump.conf
# Oder Docker Hub
docker run --pull=always --rm -v "$PWD/nginx-dump.conf:/nginx-dump.conf:ro" megamansec/gixy-next /nginx-dump.conf
Scannen Sie von stdin:
# GitHub Registry verwenden
nginx -T | docker run --pull=always --rm -i ghcr.io/megamansec/gixy-next gixy-next -
# Oder Docker Hub
nginx -T | docker run --pull=always --rm -i megamansec/gixy-next gixy-next -
Was es leisten kann
Gixy-Next kann eine breite Palette von NGINX-Sicherheits- und Performance-Fehlkonfigurationen in nginx.conf und eingebundenen Konfigurationsdateien erkennen. Die folgenden Plugins werden unterstützt:
- [add_header_content_type] Content-Type über add_header setzen
- [add_header_multiline] Mehrzeilige Antwort-Header
- [add_header_redefinition] Neudefinition von Antwort-Headern durch die "add_header"-Direktive
- [alias_traversal] Path Traversal über fehlkonfigurierten alias
- [allow_without_deny] Allow ohne deny angegeben
- [default_server_flag] Fehlendes default_server-Flag
- [error_log_off]
error_logaufoffgesetzt - [hash_without_default] Fehlender Standardwert in Hash-Blöcken
- [host_spoofing] Fälschung des Host-Headers einer Anfrage
- [http2_misdirected_request] Fehlende HTTP/2-Absicherung gegen fehlgeleitete Anfragen
- [http_splitting] HTTP Response Splitting
- [if_is_evil] If ist böse, wenn es im location-Kontext verwendet wird
- [invalid_regex] Ungültige Regex-Capture-Gruppen
- [low_keepalive_requests] Niedrige
keepalive_requests - [missing_worker_processes] Fehlende
worker_processes - [mixed_case_variable] Variablenreferenzen mit gemischter Groß-/Kleinschreibung
- [origins] Probleme bei der Validierung von referer/origin-Headern
- [overlapping_captures] Überlappende Captures im rewrite-Redirect/Args-Kontext
- [proxy_buffering_off] Deaktivierung von
proxy_buffering - [proxy_pass_normalized] Probleme bei der Pfadnormalisierung von
proxy_pass - [proxy_set_header_redefinition] Neudefinition von weitergeleiteten Anfrage-Headern durch die "proxy_set_header"-Direktive
- [quic_bpf_reuseport] QUIC-Verbindungen werden nach Reload stillschweigend verworfen
- [regex_redos] Regular Expression Denial of Service (ReDoS)
- [resolver_external] Verwendung externer DNS-Nameserver
- [return_bypasses_allow_deny] Return-Direktive umgeht allow/deny-Beschränkungen
- [ssl_ecdh_curve] Post-Quanten-Gruppen verhindern den Start von NGINX auf älterem OpenSSL
- [ssl_stapling_letsencrypt] OCSP-Stapling bewirkt nichts bei einem Let's-Encrypt-Zertifikat
- [ssl_stapling_without_resolver] OCSP-Stapling schlägt ohne Resolver stillschweigend fehl
- [ssrf] Server Side Request Forgery
- [stale_dns_cache] Veraltete/zwischengespeicherte DNS-Einträge in proxy_pass verwendet
- [status_page_exposed] Stellt sicher, dass status_page nicht öffentlich zugänglich ist
- [try_files_is_evil_too] Die
try_files-Direktive ist böse ohne open_file_cache - [unanchored_regex] Nicht verankerte reguläre Ausdrücke
- [unnamed_groups] Unbenannte Capture-Gruppen in rewrite-Query-String
- [valid_referers] none/blocked in valid_referers
- [version_disclosure] Verwendung unsicherer Werte für server_tokens
- [worker_rlimit_nofile_vs_connections]
worker_rlimit_nofilemuss mindestens doppelt so groß sein wieworker_connections
Etwas nicht erkannt? Bitte öffnen Sie ein Issue auf GitHub mit dem, was fehlt!
Verwendung (Flags)
gixy liest standardmäßig die NGINX-Konfiguration eines Systems aus /etc/nginx/nginx.conf. Sie können den Speicherort auch angeben, indem Sie ihn an gixy übergeben:
# Die Konfiguration in /opt/nginx.conf analysieren
gixy /opt/nginx.conf
Sie können mit --tests eine gezielte Teilmenge von Prüfungen ausführen:
# Nur diese Prüfungen ausführen
gixy --tests http_splitting,ssrf,version_disclosure
Oder einige störende Prüfungen mit --skips überspringen:
# Alles außer diesen Prüfungen ausführen
gixy --skips low_keepalive_requests,worker_rlimit_nofile_vs_connections
Um nur Probleme einer bestimmten Schwere oder höher zu melden, verwenden Sie das kumulierende -l-Flag:
# -l für LOW-Schwere-Probleme und höher, -ll für MEDIUM und höher, und -lll für nur HIGH-Schwere-Probleme
gixy -ll
Standardmäßig ist die Ausgabe von gixy ANSI-farbig; am besten in einem kompatiblen Terminal anzusehen. Sie können das --format-Flag (-f) mit dem Wert text verwenden, um eine ungefärbte Ausgabe zu erhalten:
$ gixy -f text
==================== Results ===================
Problem: [http_splitting] Possible HTTP-Splitting vulnerability.
Description: Using variables that can contain "\n" may lead to http injection.
Additional info: https://gixy.io/plugins/http_splitting/
Reason: At least variable "$action" can contain "\n"
Pseudo config:
include /etc/nginx/sites/default.conf;
server {
location ~ /v1/((?<action>[^.]*)\.json)?$ {
add_header X-Action $action;
}
}
==================== Summary ===================
Total issues:
Informational: 0
Low: 0
Medium: 0
High: 1
Sie können auch -f json verwenden, um eine reproduzierbare, maschinenlesbare JSON-Ausgabe zu erhalten:
$ gixy -f json
[{"config":"\nserver {\n\n\tlocation ~ /v1/((?<action>[^.]*)\\.json)?$ {\n\t\tadd_header X-Action $action;\n\t}\n}","description":"Using variables that can contain \"\\n\" or \"\\r\" may lead to http injection.","file":"/etc/nginx/nginx.conf","line":4,"path":"/etc/nginx/nginx.conf","plugin":"http_splitting","reason":"At least variable \"$action\" can contain \"\\n\"","reference":"https://gixy.io/plugins/http_splitting/","severity":"HIGH","summary":"Possible HTTP-Splitting vulnerability."}]
Sie können auch -f sarif verwenden, um ein SARIF 2.1.0-Log zu erhalten, z. B. zum Hochladen in das GitHub Code Scanning:
# Einen SARIF-Bericht in eine Datei schreiben, z. B. für `github/codeql-action/upload-sarif`
gixy -f sarif -o gixy-results.sarif
Weitere Flags zur Verwendung finden Sie, indem Sie --help an gixy übergeben. Weitere Informationen finden Sie auch im Usage Guide.
Konfiguration und Plugin-Optionen
Einige Plugins bieten Optionen, die Sie über CLI-Flags oder eine Konfigurationsdatei festlegen können. Mehr darüber können Sie im Configuration guide lesen.
Gixy-Next für NGINX-Sicherheit und Compliance
Anders als die Ausführung von nginx -t, die nur die Syntax prüft, analysiert Gixy-Next tatsächlich Ihre Konfiguration und erkennt ungehärtete Instanzen und Schwachstellen.
Mit Gixy-Next können Sie eine automatisierte Sicherheitsüberprüfung der NGINX-Konfiguration durchführen, die bei jeder Änderung lokal ausgeführt werden kann – sei es für Audits, Compliance oder allgemeine Tests – und die dazu beiträgt, umsetzbare Erkenntnisse zu liefern, die instabile/langsame NGINX-Server verhindern und das Risiko durch unsichere Direktiven und unsichere Standardeinstellungen reduzieren.
Mitwirken
Gixy-Next wird von Joshua Rogers gepflegt, aber Beiträge sind immer willkommen! Sie können uns auf verschiedene Weise helfen, wie zum Beispiel:
- Fehler melden.
- Neue Plugins zur Erkennung vorschlagen.
- Die Dokumentation verbessern.
- Code korrigieren, refaktorieren, verbessern und neuen Code schreiben.
Bevor Sie Änderungen in Pull Requests einreichen, lesen Sie bitte das Beitragsrichtlinien-Dokument, Contributing to Gixy-Next.
Die offizielle Homepage von Gixy-Next ist https://gixy.io/. Alle Änderungen an der Dokumentation in Gixy-Next werden automatisch auf dieser Website widergespiegelt.
Der Quellcode ist unter https://github.com/MegaManSec/Gixy-Next zu finden.
Was ist Gixy? (Hintergrund)
Gixy ist ein NGINX-Konfigurationsanalysator, der ursprünglich von Yandex' Andrew Krasichkov entwickelt wurde. Er wurde erstmals 2017 veröffentlicht und ist seitdem nicht mehr gepflegt. Er unterstützt keine modernen Python-Versionen, enthält zahlreiche Fehler und ist in seiner Funktionalität und Fähigkeit, verwundbare NGINX-Konfigurationen zu erkennen, eingeschränkt. Das Ausführen des ursprünglichen Gixy heute auf einem modernen System führt zu folgendem Fehler:
File "gixy/core/sre_parse/sre_parse.py", line 61, in <module>
"t": SRE_FLAG_TEMPLATE,
^^^^^^^^^^^^^^^^^
NameError: name 'SRE_FLAG_TEMPLATE' is not defined. Did you mean: 'SRE_FLAG_VERBOSE'?
Gixy-Next ist daher ein Fork, der Unterstützung für moderne Systeme hinzufügt, neue Prüfungen, Performance-Verbesserungen, Härtungsempfehlungen sowie Unterstützung für moderne Python- und NGINX-Versionen bietet.
Warum nicht gixy-ng?
Gixy-Next ist tatsächlich ein Fork von gixy-ng, das selbst ein Fork des ursprünglichen gixy war. Gixy-Next wurde erstellt, nachdem der Maintainer von gixy-ng begonnen hatte, große Mengen KI-unterstützter Änderungen und automatisch generierten Code zu produzieren, der sowohl unüberschaubar groß als auch fehlerhaft war.
Nach einiger Zeit begann der Maintainer von gixy-ng, KI-generierte Änderungen in die Codebasis einzuchecken, die offensichtliche Regressionen einführten, kritisches Verhalten des Tools brachen (was jeder, der das Tool benutzte, bemerkt hätte), zufällige KI-Tool-Artefakte hinzufügten und Code einführten, der schlicht nicht das tat, was er tun sollte. Am wichtigsten ist, dass der Maintainer auch Werbung für sein Unternehmen in alle Dokumentation, alle Ausgaben und den gesamten Quellcode von gixy-ng einfügte.
Mit anderen Worten: Der Maintainer von gixy-ng nahm das ursprüngliche gixy, bat die KI um Änderungen, führte eine Reihe von Fehlern (und anderen KI-Müll) ein und fügte dann Werbung in den Code ein. Er akzeptierte auch Beiträge in Form von Merge Requests, entfernte jedoch die Informationen des Autors (siehe diesen Beitrag und diesen Beitrag).
Gixy-Next konzentriert sich auf die Wiederherstellung von Qualität und wurde an NGINX-Konfigurationen erprobt, die fast 100.000 Zeilen lang sind. Es behebt Fehler und Fehlerkennungen, die durch Änderungen in gixy-ng eingeführt wurden, entfernt KI-Tool-Artefakte/-Müll und versucht, die Codebasis überprüfbar und wartbar zu halten. Dieser Fork ist für diejenigen gedacht, die an sauberem Code und langfristiger Wartbarkeit interessiert sind.
