
Reglas de Semgrep que señalan patrones de omisión de autenticación por confianza en encabezados (clase CVE-2025-29927). Complemento de bk-security.github.io.
Un pequeño conjunto de reglas de Semgrep que señala código que toma decisiones de autenticación, autorización o confianza basadas en cabeceras de solicitudes HTTP que un atacante controla.
El ejemplo canónico de esta clase de vulnerabilidad es
CVE-2025-29927: Next.js
confiaba en la cabecera x-middleware-subrequest para decidir si el middleware se ejecutaba,
y cualquier solicitud entrante que proporcionara un valor manipulado podía saltarse el middleware
por completo. El mismo patrón se repite en distintos frameworks y ecosistemas.
Este paquete incluye reglas para dos familias de lenguajes y tres subclases del error. Está pensado como una ayuda para la revisión de código, no como una puerta de CI completamente ajustada. Las reglas priorizan la exhaustividad sobre la precisión y es mejor ejecutarlas de forma interactiva, con un humano decidiendo sobre cada hallazgo.
Para un artículo más detallado sobre la clase de vulnerabilidad y las decisiones de diseño detrás de este paquete, consulte bk-security.github.io.
| Regla | Idioma | Severidad | Captura |
|---|---|---|---|
nodejs-header-flag-auth-bypass | JS / TS | Advertencia | Lecturas de cabeceras cuyo nombre sugiere uso de protocolo interno o bypass de autenticación (x-internal, x-bypass-auth, x-middleware-subrequest, x-admin-override, x-impersonate, etc.) |
nodejs-header-as-identity | JS / TS | Advertencia | Lecturas de cabeceras usadas convencionalmente para transportar la identidad del usuario (x-forwarded-user, x-authenticated-user, x-remote-user, etc.) |
nodejs-forwarded-for-trust | JS / TS | Información | Lecturas de x-forwarded-for, x-real-ip y cabeceras similares de IP de origen que suelen tomarse como confiables para decisiones de seguridad |
python-header-flag-auth-bypass | Python | Advertencia | Equivalente a la variante de Node.js, incluye acceso tipo Django request.META["HTTP_X_*"] |
python-header-as-identity | Python | Advertencia | Equivalente a la variante de Node.js, estilo Python |
python-forwarded-for-trust | Python | Información | Equivalente a la variante de Node.js, estilo Python |
Instalar Semgrep:
pip install semgrep
Ejecutar el paquete contra un objetivo:
semgrep --config /path/to/auth-header-trust-rules/rules /path/to/target
O ejecutar una sola regla:
semgrep --config /path/to/auth-header-trust-rules/rules/nodejs/header-flag-auth-bypass.yaml /path/to/target
Validar las reglas contra los fixtures incluidos:
semgrep --test --config rules/ tests/
Salida esperada:
6/6: ✓ All tests passed
Las reglas coinciden con una lista seleccionada de nombres de cabecera que se sabe que son peligrosas cuando se confía en ellas. Capturarán los casos comunes. No capturarán:
getInternalFlag(req) que lea x-some-novel-name pasará las reglas.x-internal-*, x-trust-* y x-bypass-*, pero nombres novedosos
se escaparán.Al extender el paquete para un código base específico, las adiciones de mayor valor suelen ser
patrones de funciones auxiliares específicos del framework. Si un código base tiene un helper
isInternalRequest(req), la regla que lo captura es una línea de YAML.
rules/<lang>/<name>.yaml.tests/<lang>/<name>.<ext> con ejemplos
positivos anotados # ruleid: <rule-id> y ejemplos negativos anotados
# ok: <rule-id>.semgrep --test --config rules/ tests/. La nueva regla y el fixture se
detectarán automáticamente; las pruebas deben pasar antes de enviar un cambio.MIT.
Bruce Kang. El código fuente de la publicación del blog complementaria se encuentra en bk-security.github.io.