Как предотвратить эту атаку фиксации сессии?

Я пытаюсь понять эту атаку сессионной фиксации, которая была теоретически описана против mtgox (хорошо известного обмена биткойнами):

Я обнаружил фиксацию сеанса, ведущую к захвату аккаунта. Короче говоря, вот подвиг:

name = 'document.cookie = "SESSION_ID = SID; Домен =.mtgox.com; Path=/code"'; место ='https://payment.mtgox.com/38131846-a564-487c-abfb-6c5be47bce27/e6325160-7d49-4a69-b40f-42bb3d2f7b91 платеж [отмена]= отмена';

  1. Создать кнопку "Оформить заказ" https://www.mtgox.com/merchant/checkout и установить Отменить URL-адрес для javascript:eval(имя);

  2. Поместите свою полезную нагрузку в window.name и перенаправьте на "https://payment.mtgox.com/38131846-a564-487c-abfb-6c5be47bce27/e6325160-7d49-4a69-b40f-42bb3d2f7b91?payment[cancel]=cancel" (GET-доступное действие). MtGox имеет X-Frame-Options, поэтому он не будет работать в iframe.

  3. Предполагается, что пользователь будет ждать 5 секунд, пока setTimeout в JS не назначит местоположение для нашего javascript: URL.

  4. Получите гостевой SID на стороне сервера и зафиксируйте его, используя этот XSS. Это называется выбрасыванием Cookie, и наши cookie скрывают оригинальный SESSION_ID, потому что сначала отправляются более конкретные пути.
    document.cookie = "SESSION_ID = SID; домен =.mtgox.com; путь = / код"

  5. Закройте окно.

  6. Когда-нибудь пользователь войдет в систему, и его сеанс останется прежним SID. Ваш серверный скрипт должен запускать задачу cron каждые 5 минут, проверяя, является ли SID все еще "гостевым". Как только пользователь входит в систему, вы можете использовать фиксированный SID для выполнения каких-либо действий от имени его учетной записи - "Сеанс катания".

Я бы подумал, что если бы mtgox установил свои куки только для http, то это могло бы предотвратить это?

Какой ответ?

1 ответ

Они должны подтвердить, что Cancel URL является действительным абсолютным URL-адресом HTTP.

т.е. проверьте, что это начинается с http:// или же https://

Все, что не соответствует, должно быть отклонено, и к ним помечено предупреждение.

Это должно остановить ввод кода JavaScript, так как протокол будет http/https и не javascript в ссылке отмены:

<a href="http://www.example.com">Cancel</a>

Cancel URL также должен быть правильно закодирован в HTML для предотвращения взлома href контекст значения атрибута.

Я бы подумал, что если бы mtgox установил свои куки только для http, то это могло бы предотвратить это?

Установка файлов cookie HttpOnly предотвратит их кражу, но если существует уязвимость XSS, это означает, что вероятны и другие уязвимости, например, описанные в вашем сценарии. Поскольку ваш файл cookie установлен в JavaScript, он переопределит флаг HttpOnly из-за более конкретного пути. Сервер не может проверить HTTP-запрос о том, что этот файл cookie - HttpOnly (или путь), поэтому этот флаг не остановит эту атаку.

Другие вопросы по тегам