Client Side Prototype Pollution
Discovering using Automatic tools
Інструменти https://github.com/dwisiswant0/ppfuzz, https://github.com/kleiton0x00/ppmap та https://github.com/kosmosec/proto-find можна використовувати для виявлення вразливостей прототипного забруднення.
Більше того, ви також можете використовувати розширення браузера PPScan для автоматичного сканування сторінок, які ви відвідуєте, на наявність вразливостей прототипного забруднення.
Debugging where a property is used
Виявлення корінної причини забруднення прототипу
Якщо вразливість забруднення прототипу була виявлена будь-яким із інструментів, і якщо код не є надто складним, ви можете знайти вразливість, шукаючи ключові слова, такі як location.hash
, decodeURIComponent
або location.search
у Chrome Developer Tools. Цей підхід дозволяє вам точно визначити вразливу частину JavaScript-коду.
Для більших і складніших кодових баз простий метод виявлення вразливого коду включає наступні кроки:
Використовуйте інструмент для виявлення вразливості та отримайте payload, призначений для встановлення властивості в конструкторі. Приклад, наданий ppmap, може виглядати так:
constructor[prototype][ppmap]=reserved
.Встановіть точку зупинки на першому рядку JavaScript-коду, який буде виконуватись на сторінці. Оновіть сторінку з payload, призупинивши виконання на цій точці зупинки.
Поки виконання JavaScript призупинено, виконайте наступний скрипт у консолі JS. Цей скрипт сигналізуватиме, коли властивість 'ppmap' буде створена, що допоможе в її виявленні:
Перейдіть назад на вкладку Sources і виберіть “Resume script execution”. JavaScript продовжить виконання, і властивість 'ppmap' буде забруднена, як і очікувалося. Використання наданого фрагмента полегшує визначення точного місця, де властивість 'ppmap' забруднена. Переглядаючи Call Stack, можна спостерігати різні стеки, де відбулося забруднення.
При виборі стека для дослідження часто корисно націлюватися на стеки, пов'язані з файлами бібліотек JavaScript, оскільки забруднення прототипів часто відбувається в цих бібліотеках. Визначте відповідний стек, перевіривши його прив'язку до файлів бібліотек (видно справа, подібно до зображення, наданого для орієнтації). У випадках з кількома стеками, такими як ті, що на рядках 4 і 6, логічним вибором є стек на рядку 4, оскільки він представляє початкове забруднення і, отже, корінь вразливості. Клікнувши на стек, ви перейдете до вразливого коду.
Знаходження скриптових гаджетів
Гаджет — це код, який буде зловживатися після виявлення вразливості PP.
Якщо додаток простий, ми можемо шукати ключові слова такі як srcdoc/innerHTML/iframe/createElement
і переглянути вихідний код, щоб перевірити, чи він призводить до виконання javascript. Іноді згадані техніки можуть взагалі не знаходити гаджети. У такому випадку чистий перегляд вихідного коду виявляє деякі хороші гаджети, як у наведеному нижче прикладі.
Приклад знаходження гаджета PP у коді бібліотеки Mithil
Перевірте цей звіт: https://blog.huli.tw/2022/05/02/en/intigriti-revenge-challenge-author-writeup/
Перекомпіляція пейлоадів для вразливих бібліотек
Обхід HTML-санітизаторів через PP
Це дослідження показує гаджети PP, які можна використовувати для обходу санітизацій, наданих деякими бібліотеками HTML-санітизаторів:
sanitize-html
dompurify
Closure
Посилання
Last updated