Hooks

Hook cors: audita los orígenes CORS

Analiza el código fuente en busca de una lista de orígenes CORS permitidos que se pueda eludir, o evalúa si un único valor de origen concede un acceso demasiado permisivo, desde la línea de comandos.

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.

npx lagune read cors

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.

npx lagune read cors --origin '*' # => wildcard
npx lagune read cors --origin 'null' # => null
npx lagune read cors --origin 'https://app.example.com' # => safe
VeredictoSignificado
safeNo 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.
nullEl 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ónValorDescripción
--originun origenEvalúa un valor de origen. Repítela para evaluar varios, uno por línea.
--dirun directorioLimita el análisis a un directorio. Se puede repetir y combinar con --file.
--fileun archivoLimita 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.

Lo que no cubre

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.