Хуки

Хук cors: аудит джерел CORS

Перевірте вихідний код на allowlist джерел CORS, який можна обійти, або оцініть окреме значення джерела на надто вільний доступ просто з командного рядка.

Хук cors є детермінованим рушієм спеціалізації http-request, і ви можете запускати його самі. Він працює у двох режимах однієї команди: scan, що перевіряє вихідний код на allowlist джерел, який можна обійти (регулярний вираз для перевірки хоста, повз який прослизає хост зловмисника), і score, що оцінює окреме значення джерела CORS як wildcard, null або safe.

Перевірка кодової бази​

Без прапорців хук перевіряє весь проєкт.

npx lagune read cors

Він виводить кожен allowlist, який можна обійти, під одним заголовком, згрупувавши за файлами. Валідатор хоста, у якого .+/.* стоїть у сегменті authority перед суфіксом довіреного хоста (^https?://.+\.trusted\.com), пропускає хост зловмисника на кшталт your-site.com.attacker.com.

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

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

Це привід для перегляду, а не закрита знахідка: чи керує регулярний вираз реальним рішенням про довіру, неможливо визначити з тексту, тож перевірка ніколи не змінює код виходу. Перегляньте кожен і переконайтеся, що allowlist порівнює за повною рівністю. Якщо нічого не знайдено, хук виводить один рядок.

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

Оцінка джерела​

Передайте кожне джерело через --origin. Хук виводить по одному слову на джерело й завершується з ненульовим кодом за будь-якого wildcard чи null.

npx lagune read cors --origin '*' # => wildcard
npx lagune read cors --origin 'null' # => null
npx lagune read cors --origin 'https://app.example.com' # => safe
ВердиктЗначення
safeНе *, не null і не glob із *. Це не гарантує, що джерело правильно сформоване.
wildcard* або glob піддомену, хоста чи порту: будь-який сайт (або широке їх коло) може читати відповідь.
nullДжерело null, яке можуть підробити iframe у пісочниці й перенаправлення.

Дозволом є лише safe, а --origin є оракулом значень: він оцінює значення, а не обробник, тож перевірте обробник за допомогою спеціалізації http-request.

Параметри CLI​

ПараметрЗначенняОпис
--originджерелоОцінити одне значення джерела. Повторіть, щоб оцінити кілька, по одному на рядок.
--dirкаталогОбмежити перевірку каталогом. Повторюється й поєднується з --file.
--fileфайлОбмежити перевірку одним файлом. Повторюється й поєднується з --dir.

Без параметрів хук перевіряє весь проєкт. --origin вмикає режим score і не поєднується з --dir чи --file.

Чого він не охоплює

Перевірка розпізнає форму регулярного виразу, який можна обійти, а --origin оцінює значення джерел. Два шаблони на рівні вихідного коду залишаються поза її межами: віддзеркалення Origin запиту (сервер повертає вхідний Origin назад або поєднує його з обліковими даними) і надто вільний allowlist на основі endsWith чи підрядка. Розпізнайте їх у коді й діяйте так, як описує спеціалізація http-request.

Часті запитання

Iframe у пісочниці й деякі перенаправлення надсилають Origin: null, тож allowlist, що довіряє null, дає цим контекстам доступ на читання. Хук cors позначає його разом із wildcard.

Виконайте npx lagune read cors над кодовою базою. Він позначає регулярний вираз для перевірки хоста, у якого жадібний wildcard стоїть перед довіреним суфіксом, тож хост зловмисника на кшталт your-site.com.attacker.com прослизає повз нього.