Збережений XSS
Посаджений один раз, після цього він працює для кожного відвідувача.
Що таке Збережений XSS?
Збережений міжсайтовий сценарій потрібно встановити лише один раз. Кожен користувач, який завантажує сторінку згодом, запускає сценарій зловмисника проти свого власного сеансу, не маючи посилання, яке потрібно натиснути, і нічого, що слід помітити. Ви перемістите тег зображення з обробником onerror у гостьову книгу, потім завантажите сторінку самостійно та подивіться, як друкується файл cookie сеансу. Виправлення виходить на межі візуалізації, тому ідентичне корисне навантаження, яке все ще знаходиться в базі даних, відображається як текст. Збережене значення ніколи не потрібно очищати, щоб виправлення збереглося.
Що ви дізнаєтесь у Збережений XSS
- Відрізняйте збережений XSS від відображеного XSS: тривале збереження корисного навантаження на сервері змінює модель загрози
- Поясніть, чому тег <img src=x onerror=alert(...)> запускається, навіть якщо в корисному навантаженні немає тегу <script>
- Визначте HTML-екранування межі візуалізації як правильний основний захист і поясніть, чому списки блокувань вхідного рівня та стратегії лише CSP не працюють
- Прочитайте функцію візуалізації Node.js достатньо добре, щоб помітити помилку concat-into-HTML і визначити рядок, куди потрібно вставити escape
- Зрозумійте, що збережене значення може залишатися таким, як є, коли рендерер виходить належним чином, базу даних не потрібно дезінфікувати, щоб виправлення працювало
Збережений XSS — Кроки навчання
-
Знайдіть форум спільноти
Сьогодні Боб націлений на Signal Coast, форум спільноти якого дозволяє будь-якому учаснику опублікувати коротку загальнодоступну замітку, яку читає кожен інший. Він входить за допомогою одноразового облікового запису та відкриває гостьову книгу форуму, щоб побачити, як вона обробляє те, що пишуть люди.
-
Примітки відображаються так, як вони написані
Гостьова книга дає обіцянку, яку більшість сайтів ніколи не виконують: вона відображає кожну нотатку точно так, як вона написана, включаючи HTML. Поле, яке перетворює все, що ви вводите, на живу розмітку, — саме те, що Боб сподівався знайти.
-
Опублікуйте звичайну замітку
По-перше, Боб поводиться як будь-який інший учасник і публікує звичайну нотатку, щоб побачити, як це обробляє гостьова книга. Записка приєднується до стіни саме так, як написано: простий текст, нічого незвичайного. Ця функція працює належним чином.
-
Перейти до сценарію
Поле відображає HTML, тому Боб передає в нього сценарій замість речення. Його зонд — це тег зображення з джерелом, яке не може завантажити, і обробником onerror , який читає файли cookie сеансу переглядача. Зображення не працює, обробник запускається, і браузер вискакує те, що йому вказує нотатка. Тут він друкує сеанс, доказ того, що нотатка може запускати код із доданим логіном переглядача.
-
Він запускається разом із сеансом
Ось воно: нотатка запустилася сама по собі та видалила файл cookie поточного сеансу глядача, без натискання посилання та відкриття файлу. Нешкідливий принт сьогодні; безшумний маяк на сервер Боба завтра. Боб довів, що стіна запускає все, що містить записка. Тепер він будує справжню зброю.
-
Підсадити фальшивий логін
Боб замінює зонд на примітку, яка переписує сторінку у вікно входу в сеанс із завершенням, за допомогою обробника, який передає все, що вводиться, на його власний сервер. Кожному учаснику, який завантажує стіну, здається, що форум просто попросив їх увійти знову. Облікові дані йдуть прямо до Боба.
-
Пастка озброєна
Фальшивий вхід тепер є найновішою заміткою на стіні, і це виглядає так само, як форум, який просить учасників увійти знову. Його обробник передає все, що вводиться в нього, прямо на сервер Боба. Він посадив його одного разу; кожен учасник, який довіряє йому та підписується, передає свій пароль.
-
Аліса відкриває стіну
Ви володієте кодом візуалізації гостьової книги. Цього ранку ви наздоганяєте спільноту, як і будь-який інший адміністратор, який починає свій день: відкрийте свій браузер і підійдіть до стіни. Ви не натиснули посилання й не запустили нічого. Ви просто завантажуєте сторінку, якою керуєте.
-
Удар під навантаженням
Сторінка ледь завершила завантаження, а спливаюче вікно вже друкує файл cookie сеансу. Ви нічого не вводили і нічого не клацали. Одна з нотаток Боба запустилася, миттєво відтворивши стіну, у вашому сеансі адміністратора. На його збірці той самий обробник передасть цей сеанс прямо йому.
-
І фальшивий логін під ним
Прокрутіть стіну, і ви побачите другу примітку: поле для входу в сесію закінчилося, яке виглядає як власне на форумі. Будь-який учасник, який довіряє йому та підписується, передає свій пароль зловмиснику. Це збережені нотатки, які запускаються браузером кожного глядача. Як інженер, який володіє цією сторінкою, ви знаєте, що виправлення є в коді візуалізації.
Охоплення стандартів безпеки
OWASP Top 10
- A05:2025 Injection
- A03:2021 Injection
CWE
- CWE-79 Improper Neutralization of Input During Web Page Generation
CIS Controls
- CIS 16 Application Software Security
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- PR.PS Platform Security