mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
68 lines
6.9 KiB
Markdown
68 lines
6.9 KiB
Markdown
# Cookie Tossing
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|
||
|
||
### Опис
|
||
|
||
Якщо зловмисник може **контролювати піддомен або домен компанії або знаходить XSS у піддомені**, він зможе виконати цю атаку.
|
||
|
||
Як було зазначено в розділі про Хакінг Куків, коли **кука встановлюється для домену (з його зазначенням), вона буде використовуватися в домені та піддоменах.**
|
||
|
||
> [!CAUTION]
|
||
> Тому, **зловмисник зможе встановити для домену та піддоменів конкретну куку, зробивши щось на кшталт** `document.cookie="session=1234; Path=/app/login; domain=.example.com"`
|
||
|
||
Це може бути небезпечно, оскільки зловмисник може:
|
||
|
||
- **Фіксувати куку жертви на обліковий запис зловмисника**, тому якщо користувач не помітить, **він буде виконувати дії в обліковому записі зловмисника**, і зловмисник може отримати деяку цікаву інформацію (перевірити історію пошуків користувача на платформі, жертва може вказати свою кредитну картку в обліковому записі...)
|
||
- Якщо **кука не змінюється після входу**, зловмисник може просто **фіксувати куку (session-fixation)**, почекати, поки жертва увійде, а потім **використати цю куку, щоб увійти як жертва**.
|
||
- Іноді, навіть якщо куки сесії змінюються, зловмисник використовує попередню і також отримає нову.
|
||
- Якщо **кука встановлює деяке початкове значення** (як у flask, де **кука** може **встановити** **CSRF токен** сесії, і це значення буде зберігатися після входу жертви), **зловмисник може встановити це відоме значення і потім зловживати ним** (в цьому сценарії зловмисник може змусити користувача виконати CSRF запит, оскільки знає CSRF токен).
|
||
- Так само, як встановлення значення, зловмисник також може отримати неавтентифіковану куку, згенеровану сервером, отримати з неї CSRF токен і використовувати його.
|
||
|
||
### Порядок Кук
|
||
|
||
Коли браузер отримує дві куки з однаковим ім'ям, **які частково впливають на один і той же обсяг** (домен, піддомени та шлях), **браузер надішле обидва значення куки**, коли обидва є дійсними для запиту.
|
||
|
||
В залежності від того, хто має **найбільш специфічний шлях** або яка з них є **найстарішою**, браузер **встановить значення куки спочатку** і потім значення іншої, як у: `Cookie: iduser=MoreSpecificAndOldestCookie; iduser=LessSpecific;`
|
||
|
||
Більшість **вебсайтів використовуватимуть лише перше значення**. Тому, якщо зловмисник хоче встановити куку, краще встановити її перед тим, як буде встановлена інша, або встановити її з більш специфічним шляхом.
|
||
|
||
> [!WARNING]
|
||
> Більше того, можливість **встановити куку в більш специфічному шляху** є дуже цікавою, оскільки ви зможете змусити **жертву працювати зі своєю кукою, за винятком специфічного шляху, де буде надіслана зловмисна кука**.
|
||
|
||
### Обхід Захисту
|
||
|
||
Можливий захист від цієї атаки полягав би в тому, що **веб-сервер не прийматиме запити з двома куками з однаковим ім'ям, але з двома різними значеннями**.
|
||
|
||
Щоб обійти сценарій, де зловмисник встановлює куку після того, як жертва вже отримала куку, зловмисник може викликати **переповнення куки**, а потім, як тільки **легітимна кука буде видалена, встановити зловмисну**.
|
||
|
||
{{#ref}}
|
||
cookie-jar-overflow.md
|
||
{{#endref}}
|
||
|
||
Ще один корисний **обхід** може полягати в тому, щоб **URL-кодувати ім'я куки**, оскільки деякі захисти перевіряють наявність 2 куків з однаковим ім'ям у запиті, а потім сервер декодує імена куків.
|
||
|
||
### Cookie Bomb
|
||
|
||
Атака Cookie Tossing також може бути використана для виконання атаки **Cookie Bomb**:
|
||
|
||
{{#ref}}
|
||
cookie-bomb.md
|
||
{{#endref}}
|
||
|
||
### Захисти
|
||
|
||
#### **Використовуйте префікс `__Host` в імені куки**
|
||
|
||
- Якщо ім'я куки має цей префікс, вона **буде прийнята** в директиві Set-Cookie лише якщо вона позначена як Secure, була надіслана з безпечного джерела, не містить атрибут Domain і має атрибут Path, встановлений на /
|
||
- **Це запобігає піддоменам від примушення куки до основного домену, оскільки ці куки можуть розглядатися як "прив'язані до домену"**
|
||
|
||
### Посилання
|
||
|
||
- [**@blueminimal**](https://twitter.com/blueminimal)
|
||
- [**https://speakerdeck.com/filedescriptor/the-cookie-monster-in-your-browsers**](https://speakerdeck.com/filedescriptor/the-cookie-monster-in-your-browsers)
|
||
- [**https://github.blog/2013-04-09-yummy-cookies-across-domains/**](https://github.blog/2013-04-09-yummy-cookies-across-domains/)
|
||
- [**Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities**](https://www.youtube.com/watch?v=F_wAzF4a7Xg)
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|