El hook cors es el motor determinista en el que se apoya la especialización http-request, y puedes ejecutarlo tú mismo. Funciona en dos modos desde un mismo comando: un scan, que analiza el código fuente en busca de una lista de orígenes permitidos que se puede eludir (una regex de validación de host que un host atacante consigue burlar), y un score, que califica un único valor de origen CORS como wildcard, null o safe.
Analizar un proyecto
Sin ninguna opción, analiza todo el proyecto.
- Todo el proyecto
- Un directorio
- Un solo archivo
npx lagune read cors
npx lagune read cors --dir src/server
npx lagune read cors --file internal/auth/origin.go
Enumera todas las listas de permitidos que se pueden eludir bajo un único encabezado, agrupadas por archivo. Un validador de host cuyo .+/.* está en el segmento de autoridad, antes del sufijo del host de confianza (^https?://.+\.trusted\.com), deja pasar un host atacante como your-site.com.attacker.com.
Origin-allowlist patterns with a greedy wildcard (bypassable, review):
internal/auth/origin.go
^https?://.+\.trusted\.com
Es un indicio que revisar, no un hallazgo cerrado: el texto no permite decidir si la regex controla una decisión de confianza real, así que el análisis nunca cambia el código de salida. Lee cada una y confirma que la lista de permitidos compara por igualdad exacta. Si no encuentra nada, muestra una sola línea.
npx lagune read cors --dir src/clean
# => no bypassable origin allowlist found
Evaluar un origen
Pasa cada origen con --origin. El hook muestra una palabra por origen y termina con un código de salida distinto de cero ante cualquier wildcard o null.
- Un origen
- Varios orígenes
npx lagune read cors --origin '*' # => wildcard
npx lagune read cors --origin 'null' # => null
npx lagune read cors --origin 'https://app.example.com' # => safe
Repite --origin para evaluar toda una lista de permitidos en una sola llamada, con un veredicto por línea y en el mismo orden.
npx lagune read cors \
--origin 'https://app.example.com' \
--origin '*' \
--origin 'null'
# => safe
# => wildcard
# => null
| Veredicto | Significado |
|---|---|
safe | No es *, null ni un glob con *. No garantiza que el origen esté bien formado. |
wildcard | *, un glob de subdominio, host o puerto: cualquier sitio (o un conjunto amplio) puede leer la respuesta. |
null | El origen null, que los iframes en sandbox y las redirecciones pueden falsificar. |
Solo safe equivale a permitir, y --origin es un oráculo de valores: juzga el valor, no el handler, así que confirma el handler con la especialización http-request.
Opciones de la CLI
| Opción | Valor | Descripción |
|---|---|---|
--origin | un origen | Evalúa un valor de origen. Repítela para evaluar varios, uno por línea. |
--dir | un directorio | Limita el análisis a un directorio. Se puede repetir y combinar con --file. |
--file | un archivo | Limita el análisis a un solo archivo. Se puede repetir y combinar con --dir. |
Sin ninguna opción, analiza todo el proyecto. --origin es el modo score y no se puede combinar con --dir ni con --file.
El análisis detecta la forma de regex que se puede eludir, y --origin evalúa valores de origen. Hay dos patrones del código fuente que quedan fuera de su alcance: el reflejo del Origin de la petición (el servidor devuelve el Origin entrante tal cual, o lo combina con credenciales) y una lista de permitidos permisiva basada en endsWith o en subcadenas. Reconócelos en el código y trátalos como describe la especialización http-request.
Preguntas frecuentes
Los iframes en sandbox y algunas redirecciones envían Origin: null, así que una lista de permitidos que confía en null da acceso de lectura a esos contextos. El hook cors lo señala junto con el comodín.
Ejecuta npx lagune read cors sobre el proyecto. Señala cualquier regex de validación de host cuyo comodín voraz esté antes del sufijo de confianza, de modo que un host atacante como your-site.com.attacker.com consigue colarse.
