2014-01-16 2 views
1

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

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

имя = 'document.cookie = "SESSION_ID = SID; домен = .mtgox.com; Path =/код"'; location = 'https: //payment.mtgox.com/38131846-a564-487c-abfb-6c5be47bce27/e6325160-7d49-4a69-b40f-42bb3d2f7b91? Платеж [отменить] = отменить';

  1. кнопку Создать Checkout 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 не назначит местоположение нашему URL-адресу javascript:.

  4. Получить гостевой SID с серверной стороны и зафиксировать его с помощью этого XSS. Он называется «Cookie», а наши cookie тени оригинальные SESSION_ID , потому что сначала отправляются более конкретные Path-s.
    document.cookie = "SESSION_ID = SID; Domain = .mtgox.com; Path =/code"

  5. Закрыть окно.

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

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

Каков ответ?

+0

Был ли мой ответ полезным? – SilverlightFox

ответ

0

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

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

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

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

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

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

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

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

+0

Зачем разрешать незащищенное соединение 'http' для чего-то чувствительного/связанного с безопасностью? –

+0

Фиксация сеанса была на 'payment.mtgox.com' из-за эксплойта xss, а не на сайте продавца (' example.com' в моем ответе). – SilverlightFox

Смежные вопросы