Hooks

Hook cors : auditer les origines CORS

Analysez le code source à la recherche d'une liste d'origines CORS contournable, ou évaluez une seule valeur d'origine face à un accès trop permissif, en ligne de commande.

Le hook cors est le moteur déterministe derrière la spécialisation http-request, et vous pouvez l'exécuter vous-même. Il fonctionne en deux modes depuis une seule commande : une analyse qui parcourt le code source à la recherche d'une liste d'origines autorisées contournable (une regex de validation d'hôte qu'un hôte attaquant parvient à franchir), et une évaluation qui classe une seule valeur d'origine CORS en wildcard, null ou safe.

Analyser une base de code​

Sans option, il analyse tout le projet.

npx lagune read cors

Il liste chaque liste d'origines contournable sous un seul en-tête, regroupée par fichier. Un validateur d'hôte dont le .+/.* se trouve dans le segment d'autorité avant le suffixe de l'hôte de confiance (^https?://.+\.trusted\.com) laisse passer un hôte attaquant comme your-site.com.attacker.com.

Origin-allowlist patterns with a greedy wildcard (bypassable, review):

internal/auth/origin.go
^https?://.+\.trusted\.com

C'est une piste à examiner, pas un constat clos : savoir si la regex protège une vraie décision de confiance ne peut pas se trancher à partir du texte, donc une analyse ne change jamais le code de sortie. Lisez chacune et confirmez que la liste compare par égalité stricte. Quand rien n'est trouvé, il affiche une seule ligne.

npx lagune read cors --dir src/clean
# => no bypassable origin allowlist found

Évaluer une origine​

Passez chaque origine avec --origin. Le hook affiche un mot par origine et se termine avec un code non nul dès qu'il y a un wildcard ou un null.

npx lagune read cors --origin '*' # => wildcard
npx lagune read cors --origin 'null' # => null
npx lagune read cors --origin 'https://app.example.com' # => safe
VerdictSignification
safeNi *, ni null, ni un glob *. Cela ne garantit pas une origine bien formée.
wildcard*, ou un glob de sous-domaine, d'hôte ou de port : n'importe quel site (ou un large ensemble) peut lire la réponse.
nullL'origine null, que les iframes en sandbox et les redirections peuvent forger.

Seul safe vaut autorisation, et --origin est un oracle de valeur : il juge la valeur, pas le handler, donc confirmez le handler avec la spécialisation http-request.

Options de la CLI​

OptionValeurDescription
--originune origineÉvalue une valeur d'origine. Répétez-la pour en évaluer plusieurs, une par ligne.
--dirun répertoireLimite l'analyse à un répertoire. Peut être répétée et combinée avec --file.
--fileun fichierLimite l'analyse à un seul fichier. Peut être répétée et combinée avec --dir.

Sans option, il analyse tout le projet. --origin correspond au mode d'évaluation et ne peut pas être combinée avec --dir ou --file.

Ce qu'il ne couvre pas

L'analyse lit la forme de la regex contournable, et --origin évalue des valeurs d'origine. Deux motifs au niveau du code restent hors de portée : la réflexion de l'Origin de la requête (le serveur renvoie l'Origin reçue, ou l'associe aux identifiants) et une liste permissive par endsWith ou par sous-chaîne. Repérez-les dans le code et traitez-les comme le décrit la spécialisation http-request.

Questions fréquentes

Les iframes en sandbox et certaines redirections envoient Origin: null, donc une liste d'autorisation qui fait confiance à null donne à ces contextes un accès en lecture. Le hook cors la signale avec le wildcard.

Exécutez npx lagune read cors sur la base de code. Il signale une regex de validation d'hôte dont le wildcard gourmand se trouve avant le suffixe de confiance, ce qui laisse passer un hôte attaquant comme your-site.com.attacker.com.