Вплив
Зловмисник може викрасти конфіденційні автентифіковані дані користувачів уразливої програми [S2]. Якщо користувач відвідує зловмисний веб-сайт під час входу в уразливу програму, зловмисний сайт може надсилати перехресні запити до API програми та читати відповіді [S1][S2]. Це може призвести до викрадення особистої інформації, зокрема профілів користувачів, маркерів CSRF або особистих повідомлень [S2].
Основна причина
CORS — це механізм на основі HTTP-заголовків, який дозволяє серверам вказувати, яким джерелам (домену, схемі або порту) дозволено завантажувати ресурси [S1]. Уразливості зазвичай виникають, коли політика сервера CORS є занадто гнучкою або погано реалізована [S2]:
- Відображений заголовок походження: Деякі сервери зчитують заголовок
Originіз запиту клієнта та відтворюють його в заголовку відповідіAccess-Control-Allow-Origin(ACAO) [S2]. Це дозволяє будь-якому веб-сайту отримати доступ до ресурсу [S2]. - Неправильно налаштовані символи підстановки: Хоча символ підстановки
*дозволяє будь-якому джерелу отримати доступ до ресурсу, його не можна використовувати для запитів, які вимагають облікові дані (наприклад, файли cookie або заголовки авторизації) [S3]. Розробники часто намагаються обійти це, динамічно генеруючи заголовок ACAO на основі запиту [S2]. - Білий список «null»: Деякі програми додають джерело
nullу білий список, що може бути викликано переспрямованими запитами або локальними файлами, що дозволяє шкідливим сайтам маскуватися під джерелоnull, щоб отримати доступ [S2][S3]. - Помилки аналізу: Помилки в регулярних виразах або відповідності рядків під час перевірки заголовка
Originможуть дозволити зловмисникам використовувати такі домени, якtrusted-domain.com.attacker.com[S2].
Важливо зазначити, що CORS не є захистом від міжсайтової підробки запитів (CSRF) [S2].
Конкретні виправлення
- Використовуйте статичний білий список: Уникайте динамічного створення заголовка
Access-Control-Allow-Originіз заголовкаOriginзапиту [S2]. Натомість порівняйте джерело запиту з жорстко закодованим списком довірених доменів [S3]. - Уникайте «нульового» джерела: Ніколи не включайте
nullу свій білий список дозволених джерел [S2]. - Обмежити облікові дані: встановлюйте
Access-Control-Allow-Credentials: true, лише якщо це абсолютно необхідно для конкретної взаємодії між джерелами [S3]. - Використовуйте належну перевірку: якщо вам потрібно підтримувати кілька джерел, переконайтеся, що логіка перевірки для заголовка
Originє надійною та не може бути обійдена субдоменами або схожими на вигляд доменами [S2].
Як FixVibe перевіряє це
FixVibe тепер включає це як закритий активний чек. Після перевірки домену active.cors надсилає запити API того самого походження з синтетичним походженням зловмисника та переглядає заголовки відповіді CORS. У ньому відображено довільне джерело, CORS із символом підстановки та широко відкрите CORS на непублічних кінцевих точках API, уникаючи шуму загальнодоступних активів.
