
Gixy-Next v0.6.0
Gixy-Next: Escáner de seguridad de configuración y verificador de rendimiento de NGINX
Gixy-Next: Escáner de seguridad de configuración NGINX para auditorías de seguridad
Resumen
Gixy-Next (Gixy) es un escáner de seguridad de configuración NGINX y una herramienta de endurecimiento de código abierto que analiza estáticamente tu nginx.conf para detectar configuraciones inseguras, carencias de endurecimiento y errores comunes de rendimiento antes de que lleguen a producción. Es un fork mantenido activamente del Gixy de Yandex. El código fuente de Gixy-Next está disponible en GitHub.
Gixy-Next también se puede ejecutar en el navegador en esta página. No es necesario descargar nada; puedes analizar tus configuraciones en el sitio web (localmente, mediante WebAssembly).
Inicio rápido
Gixy-Next (la CLI gixy o gixy-next) se distribuye en PyPI. Puedes instalarlo con pip o uv:
# pip
pip3 install gixy-next
# uv
uv pip install gixy-next
Después puedes ejecutarlo:
# gixy defaults to reading /etc/nginx/nginx.conf
gixy
# But you can also specify a path to the configuration
gixy /opt/nginx.conf
También puedes exportar tu configuración de NGINX a un único archivo de volcado (consulta nginx -T Volcado de configuración activa):
# 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 -
Escáner basado en web
En lugar de descargar y ejecutar Gixy-Next localmente, puedes usar esta página web y analizar una configuración desde tu navegador (localmente, mediante WebAssembly).
Analizar con Docker
Gixy-Next está disponible como imagen de Docker desde Docker Hub o GitHub Registry.
Analiza un archivo de configuración local montándolo en el contenedor:
# 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
Analiza un volcado de configuración activa de NGINX:
# 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
Analizar desde 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 -
Qué puede hacer
Gixy-Next puede detectar una amplia gama de configuraciones incorrectas de seguridad y rendimiento de NGINX en nginx.conf y en los archivos de configuración incluidos. Se admiten los siguientes plugins:
- [add_header_content_type] Establecer Content-Type mediante add_header
- [add_header_multiline] Cabeceras de respuesta multilínea
- [add_header_redefinition] Redefinición de cabeceras de respuesta mediante la directiva "add_header"
- [alias_traversal] Path traversal mediante alias mal configurado
- [allow_without_deny] Directiva allow especificada sin deny
- [default_server_flag] Falta el indicador default_server
- [error_log_off]
error_logestablecido enoff - [hash_without_default] Falta default en los bloques hash
- [host_spoofing] Falsificación de la cabecera Host de la solicitud
- [http2_misdirected_request] Falta la salvaguarda contra solicitudes mal dirigidas en HTTP/2
- [http_splitting] División de respuesta HTTP
- [if_is_evil] If es perjudicial cuando se usa en el contexto location
- [invalid_regex] Grupos de captura de regex no válidos
- [low_keepalive_requests] Valor bajo de
keepalive_requests - [missing_worker_processes] Falta
worker_processes - [mixed_case_variable] Referencias a variables con mayúsculas y minúsculas mezcladas
- [origins] Problemas con la validación de las cabeceras referer/origin
- [overlapping_captures] Capturas superpuestas en el contexto rewrite redirect/args
- [proxy_buffering_off] Deshabilitar
proxy_buffering - [proxy_pass_normalized] Problemas de normalización de la ruta en
proxy_pass - [quic_bpf_reuseport] Conexiones QUIC descartadas silenciosamente tras un reload
- [regex_redos] Denegación de servicio por expresiones regulares (ReDoS)
- [resolver_external] Uso de servidores DNS externos
- [return_bypasses_allow_deny] La directiva return evita las restricciones allow/deny
- [ssl_stapling_without_resolver] El OCSP stapling falla silenciosamente sin un resolver
- [ssrf] Falsificación de solicitudes del lado del servidor
- [stale_dns_cache] Registros DNS en caché obsoletos/desactualizados usados en proxy_pass
- [status_page_exposed] Garantiza que status_page no esté expuesta al mundo
- [try_files_is_evil_too] La directiva
try_fileses perjudicial sin open_file_cache - [unanchored_regex] Expresiones regulares no ancladas
- [unnamed_groups] Grupos de captura sin nombre en la cadena de consulta de rewrite
- [valid_referers] none/blocked en valid_referers
- [version_disclosure] Uso de valores inseguros para server_tokens
- [worker_rlimit_nofile_vs_connections]
worker_rlimit_nofiledebe ser al menos el doble deworker_connections
¿Algo no detectado? ¡Abre un issue en GitHub indicando qué falta!
Uso (flags)
Por defecto, gixy lee la configuración de NGINX del sistema desde /etc/nginx/nginx.conf. También puedes especificar la ubicación pasándosela a gixy:
# Analyze the configuration in /opt/nginx.conf
gixy /opt/nginx.conf
Puedes ejecutar un subconjunto específico de comprobaciones con --tests:
# Only run these checks
gixy --tests http_splitting,ssrf,version_disclosure
O omitir algunas comprobaciones ruidosas con --skips:
# Run everything except these checks
gixy --skips low_keepalive_requests,worker_rlimit_nofile_vs_connections
Para informar solo de problemas de una severidad determinada o superior, usa el flag -l acumulativo:
# -l for LOW severity issues and higher, -ll for MEDIUM and higher, and -lll for only HIGH severity issues
gixy -ll
Por defecto, la salida de gixy está coloreada con ANSI; se ve mejor en una terminal compatible. Puedes usar el flag --format (-f) con el valor text para obtener una salida sin color:
$ 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
También puedes usar -f json para obtener una salida JSON reproducible y legible por máquina:
$ 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."}]
También puedes usar -f sarif para obtener un registro SARIF 2.1.0, p. ej., para subirlo al escaneo de código de GitHub:
# Write a SARIF report to a file, e.g. for `github/codeql-action/upload-sarif`
gixy -f sarif -o gixy-results.sarif
Puedes encontrar más flags de uso pasando --help a gixy. También puedes encontrar más información en la Guía de uso.
Opciones de configuración y de plugins
Algunos plugins exponen opciones que puedes configurar mediante flags de CLI o un archivo de configuración. Puedes leer más sobre ellas en la Guía de configuración.
Gixy-Next para seguridad y cumplimiento de NGINX
A diferencia de ejecutar nginx -t, que solo comprueba la sintaxis, Gixy-Next analiza realmente tu configuración y detecta instancias sin endurecer y vulnerabilidades.
Con Gixy-Next, puedes realizar una revisión de seguridad automatizada de la configuración de NGINX que se puede ejecutar localmente en cada cambio, ya sea para auditoría, cumplimiento o pruebas generales, lo que ayuda a generar hallazgos accionables que contribuyen a prevenir servidores NGINX inestables/lentos y a reducir el riesgo de directivas inseguras y valores predeterminados no seguros.
Contribuciones
Gixy-Next es mantenido por Joshua Rogers, ¡pero las contribuciones siempre son bienvenidas! Puedes ayudarnos de diferentes maneras, como:
- Informando de errores.
- Sugiriendo nuevos plugins de detección.
- Mejorando la documentación.
- Corrigiendo, refactorizando, mejorando y escribiendo código nuevo.
Antes de enviar cualquier cambio en pull requests, lee el documento de pautas de contribución, Contribuyendo a Gixy-Next.
La página oficial de Gixy-Next es https://gixy.io/. Cualquier cambio en la documentación de Gixy-Next se reflejará automáticamente en ese sitio web.
El código fuente se puede encontrar en https://github.com/MegaManSec/Gixy-Next.
¿Qué es Gixy? (Antecedentes)
Gixy es un analizador de configuración de NGINX que fue desarrollado originalmente por Andrew Krasichkov de Yandex. Se publicó por primera vez en 2017 y desde entonces ha quedado sin mantenimiento. No es compatible con las versiones modernas de Python, contiene numerosos errores y tiene una funcionalidad y capacidad limitadas para detectar configuraciones NGINX vulnerables. Ejecutar el Gixy original hoy en un sistema moderno produce el siguiente error:
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, por tanto, es un fork que añade soporte para sistemas modernos, nuevas comprobaciones, mejoras de rendimiento, sugerencias de endurecimiento y soporte para versiones modernas de Python y NGINX.
¿Por qué no gixy-ng?
Gixy-Next es en realidad un fork de gixy-ng, que a su vez era un fork del gixy original. Gixy-Next se creó después de que el mantenedor de gixy-ng comenzara a producir grandes cantidades de cambios asistidos por IA y código autogenerado que era a la vez demasiado grande para revisar y defectuoso.
Con el tiempo, el mantenedor de gixy-ng comenzó a incorporar al código cambios generados por IA que introdujeron regresiones evidentes, rompieron el comportamiento crítico de la herramienta (algo que cualquier usuario de la herramienta habría detectado), añadieron artefactos aleatorios de herramientas de IA e introdujeron código que simplemente no hacía lo que se suponía que debía hacer. Lo más importante: el mantenedor también añadió publicidad de su negocio a toda la documentación, toda la salida y todo el código fuente de gixy-ng.
En otras palabras, el mantenedor de gixy-ng tomó el gixy original, pidió a la IA que hiciera cambios, introdujo un montón de errores (y otros desperdicios de IA), y luego añadió publicidad al código. También aceptó contribuciones en forma de merge requests, pero eliminó la información de los autores (consulta esta publicación y esta publicación).
Gixy-Next se centra en restaurar la calidad y ha sido probado en condiciones reales sobre configuraciones NGINX de casi 100.000 líneas. Corrige errores y falsas detecciones introducidos por los cambios de gixy-ng, elimina artefactos/basura de herramientas de IA y trata de mantener el código revisable y mantenible. Este fork es para quienes están interesados en código limpio y mantenibilidad a largo plazo.
