General > Русский (ru)
CSRF уязвимости. возможность перехватить доступ к системе
pl-m:
здраствуйте!
я установил версию 1.6.4 mibew... и обнаружил что POST-запросы с форм (на панеле администратора/оператора) -- не проверяются на CSRF
например, у меня получилось провести CSRF-атаку для /webim/operator/operators.php (подстановка другого email для восстановления пароля оператора номер 1)
это значит злоумышленник сможет проделать тоже самое, если сможет подсунуть жертве (жертва -- оператор) заранее подготовленную ссылку, воспроизводящую CSRF-атаку
этуже проблему я вкрадце продублировал тут -- https://github.com/inspirer/mibew/issues/8
спасибо за уделённое мне внимание! (и заранее спасибо если проблему будет решена :))
pl-m:
один из вариантов (простого, но не самого лучшего :) ) патча для исправления проблемы, вот -- https://gist.github.com/1298748#file_0001_created_function_csrf_check_referer.patch
MSK:
Тут видимо надо использовать не
$_SERVER['SERVER_NAME']
а
$_SERVER['HTTP_HOST']
поскольку первый может отдать доменное имя без "www"
pl-m:
идея с 'HTTP_HOST' мне нравится (ведь 'HTTP_HOST' и 'HTTP_REFERER' находятся на одном уровне по способу получения).. главное только помнить что 'HTTP_HOST' в некоторых случаях содержит только <Имя> а в некоторых <Имя:Порт> ('SERVER_NAME' как показала моя практика содержит имя без номера порта)
тоесть в случае с 'HTTP_HOST' -- наверно усложнение будет заключаться в следущей чуток-усложнённой проверке (вместо простой прошлой) :-) :
--- Code: ---$http_referer_host = array_key_exists('host', $parsed_http_referer)?$parsed_http_referer['host']:'';
$http_referer_port = array_key_exists('port', $parsed_http_referer)?$parsed_http_referer['port']:'';
if($http_referer_host.':'.$http_referer_port != $_SERVER['HTTP_HOST'] &&
$http_referer_host != $_SERVER['HTTP_HOST'])
{
@header('Content-Type: text/plain;charset=utf-8');
die('Suspected to CSRF');
}
--- End code ---
MSK:
если нет $http_referer_port, то проверка
$http_referer_host.':'.$http_referer_port != $_SERVER['HTTP_HOST']
не пройдет, присутствует ":", которого нет в $_SERVER['HTTP_HOST']
Navigation
[0] Message Index
[#] Next page
Go to full version