
Gixy-Next v0.7.1
Gixy-Next : Scanner de sécurité de configuration NGINX et vérificateur de performances
Gixy-Next : Scanner de sécurité pour configurations NGINX pour les audits de sécurité
Aperçu
Gixy-Next (Gixy) est un scanner de sécurité et un outil de durcissement pour configurations NGINX open source qui analyse statiquement votre nginx.conf afin de détecter les erreurs de configuration de sécurité, les lacunes de durcissement et les pièges de performance courants avant qu'ils n'atteignent la production. C'est un fork activement maintenu de Gixy de Yandex. Le code source de Gixy-Next est disponible sur GitHub.
Gixy-Next peut également être exécuté dans le navigateur sur cette page. Aucun téléchargement n'est nécessaire ; vous pouvez analyser vos configurations sur le site web (localement, via WebAssembly).
Démarrage rapide
Gixy-Next (l'interface en ligne de commande gixy ou gixy-next) est distribué sur PyPI. Vous pouvez l'installer avec pip ou uv :
# pip
pip3 install gixy-next
# uv
uv pip install gixy-next
Vous pouvez ensuite l'exécuter :
# gixy defaults to reading /etc/nginx/nginx.conf
gixy
# But you can also specify a path to the configuration
gixy /opt/nginx.conf
Vous pouvez également exporter votre configuration NGINX vers un fichier dump unique (voir nginx -T Live Configuration Dump) :
# Dumps the full NGINX configuration into a single file (including all includes)
nginx -T > ./nginx-dump.conf
# Scan the dump elsewhere (or via stdin):
gixy ./nginx-dump.conf
# or
cat ./nginx-dump.conf | gixy -
Scanner web
Au lieu de télécharger et d'exécuter Gixy-Next localement, vous pouvez utiliser cette page web et analyser une configuration depuis votre navigateur web (localement, via WebAssembly).
Analyse avec Docker
Gixy-Next est disponible sous forme d'image Docker depuis Docker Hub ou GitHub Registry.
Analysez un fichier de configuration local en le montant dans le conteneur :
# Use Github Registry
docker run --pull=always --rm -v "$PWD/nginx.conf:/nginx.conf:ro" ghcr.io/megamansec/gixy-next /nginx.conf
# Or Docker Hub
docker run --pull=always --rm -v "$PWD/nginx.conf:/nginx.conf:ro" megamansec/gixy-next /nginx.conf
Analysez un dump de configuration NGINX en direct :
# Dumps the full NGINX configuration into a single file (including all includes)
nginx -T > ./nginx-dump.conf
# Use Github Registry
docker run --pull=always --rm -v "$PWD/nginx-dump.conf:/nginx-dump.conf:ro" ghcr.io/megamansec/gixy-next /nginx-dump.conf
# Or Docker Hub
docker run --pull=always --rm -v "$PWD/nginx-dump.conf:/nginx-dump.conf:ro" megamansec/gixy-next /nginx-dump.conf
Analysez depuis stdin :
# Use Github Registry
nginx -T | docker run --pull=always --rm -i ghcr.io/megamansec/gixy-next gixy-next -
# Or Docker Hub
nginx -T | docker run --pull=always --rm -i megamansec/gixy-next gixy-next -
Ce qu'il peut faire
Gixy-Next peut détecter un large éventail d'erreurs de configuration de sécurité et de performance NGINX dans nginx.conf et les fichiers de configuration inclus. Les plugins suivants sont pris en charge :
- [add_header_content_type] Setting Content-Type via add_header
- [add_header_multiline] Multiline response headers
- [add_header_redefinition] Redefining of response headers by "add_header" directive
- [alias_traversal] Path traversal via misconfigured alias
- [allow_without_deny] Allow specified without deny
- [default_server_flag] Missing default_server flag
- [error_log_off]
error_logset tooff - [hash_without_default] Missing default in hash blocks
- [host_spoofing] Request's Host header forgery
- [http2_misdirected_request] Missing HTTP/2 misdirected-request safeguard
- [http_splitting] HTTP Response Splitting
- [if_is_evil] If is evil when used in location context
- [invalid_regex] Invalid regex capture groups
- [low_keepalive_requests] Low
keepalive_requests - [missing_worker_processes] Missing
worker_processes - [mixed_case_variable] Mixed-case variable references
- [origins] Problems with referer/origin header validation
- [overlapping_captures] Overlapping captures in rewrite redirect/args context
- [proxy_buffering_off] Disabling
proxy_buffering - [proxy_pass_normalized]
proxy_passpath normalization issues - [proxy_set_header_redefinition] Redefining of proxied request headers by "proxy_set_header" directive
- [quic_bpf_reuseport] QUIC connections silently dropped after reload
- [regex_redos] Regular expression denial of service (ReDoS)
- [resolver_external] Using external DNS nameservers
- [return_bypasses_allow_deny] Return directive bypasses allow/deny restrictions
- [ssl_ecdh_curve] Post-quantum groups stop NGINX from starting on older OpenSSL
- [ssl_stapling_letsencrypt] OCSP stapling does nothing for a Let's Encrypt certificate
- [ssl_stapling_without_resolver] OCSP stapling silently fails without a resolver
- [ssrf] Server Side Request Forgery
- [stale_dns_cache] Outdated/stale cached DNS records used in proxy_pass
- [status_page_exposed] Ensures that status_page is not exposed to the world
- [try_files_is_evil_too]
try_filesdirective is evil without open_file_cache - [unanchored_regex] Unanchored regular expressions
- [unnamed_groups] Unnamed capture groups in rewrite query string
- [valid_referers] none/blocked in valid_referers
- [version_disclosure] Using insecure values for server_tokens
- [worker_rlimit_nofile_vs_connections]
worker_rlimit_nofilemust be at least twiceworker_connections
Quelque chose n'est pas détecté ? Veuillez ouvrir une issue sur GitHub en précisant ce qui manque !
Utilisation (options)
gixy lit par défaut la configuration NGINX du système depuis /etc/nginx/nginx.conf. Vous pouvez également spécifier l'emplacement en le passant à gixy :
# Analyze the configuration in /opt/nginx.conf
gixy /opt/nginx.conf
Vous pouvez exécuter un sous-ensemble ciblé de vérifications avec --tests :
# Only run these checks
gixy --tests http_splitting,ssrf,version_disclosure
Ou ignorer quelques vérifications bruyantes avec --skips :
# Run everything except these checks
gixy --skips low_keepalive_requests,worker_rlimit_nofile_vs_connections
Pour ne signaler que les problèmes d'une certaine sévérité ou plus, utilisez l'option cumulative -l :
# -l for LOW severity issues and higher, -ll for MEDIUM and higher, and -lll for only HIGH severity issues
gixy -ll
Par défaut, la sortie de gixy est colorée en ANSI ; elle est mieux visualisée dans un terminal compatible. Vous pouvez utiliser l'option --format (-f) avec la valeur text pour obtenir une sortie sans couleur :
$ 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
Vous pouvez également utiliser -f json pour obtenir une sortie JSON reproductible et lisible par machine :
$ 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."}]
Vous pouvez également utiliser -f sarif pour obtenir un journal SARIF 2.1.0, par exemple pour le téléverser vers l'analyse de code GitHub :
# Write a SARIF report to a file, e.g. for `github/codeql-action/upload-sarif`
gixy -f sarif -o gixy-results.sarif
D'autres options d'utilisation sont disponibles en passant --help à gixy. Vous pouvez également trouver plus d'informations dans le Guide d'utilisation.
Configuration et options des plugins
Certains plugins exposent des options que vous pouvez définir via des options CLI ou un fichier de configuration. Vous pouvez en savoir plus à ce sujet dans le Guide de configuration.
Gixy-Next pour la sécurité et la conformité NGINX
Contrairement à l'exécution de nginx -t qui ne vérifie que la syntaxe, Gixy-Next analyse réellement votre configuration et détecte les instances non durcies et les vulnérabilités.
Avec Gixy-Next, vous pouvez effectuer une revue de sécurité automatisée de la configuration NGINX qui peut s'exécuter localement à chaque modification, que ce soit pour l'audit, la conformité ou les tests généraux, aidant à produire des résultats exploitables qui aident à prévenir les serveurs NGINX instables/lents et à réduire les risques liés aux directives non sécurisées et aux valeurs par défaut non sécurisées.
Contribution
Gixy-Next est maintenu par Joshua Rogers, mais les contributions sont toujours les bienvenues ! Vous pouvez nous aider de différentes manières, telles que :
- Signaler des bugs.
- Suggérer de nouveaux plugins de détection.
- Améliorer la documentation.
- Corriger, refactoriser, améliorer et écrire du nouveau code.
Avant de soumettre des modifications dans des pull requests, veuillez lire le document de directives de contribution, Contributing to Gixy-Next.
La page d'accueil officielle de Gixy-Next est https://gixy.io/. Toute modification de la documentation dans Gixy-Next sera automatiquement reflétée sur ce site web.
Le code source se trouve à l'adresse https://github.com/MegaManSec/Gixy-Next.
Qu'est-ce que Gixy ? (Contexte)
Gixy est un analyseur de configuration NGINX qui a été initialement développé par Andrew Krasichkov de Yandex. Il a été publié pour la première fois en 2017 et n'est depuis plus maintenu. Il ne prend pas en charge les versions modernes de Python, contient de nombreux bugs et ses fonctionnalités et sa capacité à détecter les configurations NGINX vulnérables sont limitées. Exécuter le Gixy original aujourd'hui sur un système moderne entraînera l'erreur suivante :
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 est donc un fork qui ajoute la prise en charge des systèmes modernes, ajoute de nouvelles vérifications, des améliorations de performance, des suggestions de durcissement et la prise en charge des versions modernes de Python et NGINX.
Pourquoi pas gixy-ng ?
Gixy-Next est en fait un fork de gixy-ng, qui était lui-même un fork du gixy original. Gixy-Next a été créé après que le mainteneur de gixy-ng a commencé à produire de grandes quantités de modifications assistées par IA et de code auto-généré qui était à la fois trop volumineux pour être révisé et défectueux.
Après un certain temps, le mainteneur de gixy-ng a commencé à committer des modifications générées par IA dans la base de code, ce qui a introduit des régressions évidentes, cassé le comportement critique de l'outil (ce que n'importe quel utilisateur de l'outil aurait remarqué), ajouté des artefacts aléatoires d'outils d'IA et introduit du code qui ne faisait tout simplement pas ce qu'il était censé faire. Plus important encore, le mainteneur a également ajouté de la publicité pour son entreprise dans toute la documentation, toutes les sorties et tout le code source de gixy-ng.
En d'autres termes, le mainteneur de gixy-ng a pris le gixy original, a demandé à l'IA d'apporter des modifications, a introduit un tas de bugs (et d'autres déchets d'IA), puis a ajouté de la publicité dans le code. Il a également accepté des contributions sous forme de merge requests, mais a supprimé les informations de l'auteur (voir ceci et ceci).
Gixy-Next se concentre sur la restauration de la qualité et a été éprouvé sur des configurations NGINX de près de 100 000 lignes. Il corrige les bugs et les erreurs de détection introduits par les modifications apportées dans gixy-ng, supprime les artefacts/déchets d'outils d'IA et s'efforce de maintenir la base de code révisable et maintenable. Ce fork est destiné à ceux qui s'intéressent au code propre et à la maintenabilité à long terme.
