Впервые в жизни пишу о скомпрометированном ресурсе. Хотя, бывали случае в N раз крупнее…
Предыстория.
Есть такой университет, как ОтУС — Открытый Университет Сколково. Был (есть) раньше только в Москве, сейчас открывается еще в Томске/Питере. Собственно приехали они к нам с презентацией, замотивировали (правда, очень клевые ребята приехали, вдохновили на поступление, учитывая, что я скептически отношусь (относился) к Сколково), чтобы поступали ну и т.д. Зашел я заполнять заявку и просто сработала привычка…
аплоад кастомных файлов с отсутствием правильно настроенного .htaccesss
Итог: полный доступ к исходным кодам, материалам, заявкам на поступление и базам данных следующих сайтов:
- openu.ru — Открытый университет Сколково
- apply.openu.ru — Отбор студентов в Открытый университет Сколково
- eskolkovo.ru — ДО в Открытом университете Сколково
- blog.eskolkovo.ru — вроде уже тоже самое, что и openu.ru
- edu.opensingularity.ru — Открытый университет сингулярных технологий
И вроде еще какие-то, уже не помню.
Но, студенты то не при чем, я даже не стал копать глубже, посмотрел архитектуру ресурса, БД, пару исходников (я такого кода никогда в жизни не видел, под катом я расскажу про капчу, govnokod #1 просто) и сообщил саппорту.
Цель поста — быть на 100% уверенным, что после этой публикации данный скрипт приема студентов уберут навсегда
(хоть и с администратором мы немного поговорили на эту тему). Но чтобы как обычно не забылось, с мыслью — работает и ладно, сделаем контрольный выстрел.
Базы данных
Пароли хранятся в чистом виде. На тот момент было около 1,5к+ юзеров с различными персональными данными.
Владельцы папок/процессы веба
Все сайты под одним пользователем (как процесс веб-сервера, так и папки) //в принципе, частично простительно, не хостинг
Исходный код apply.openu
Это просто звиздец. Такого я никогда нигде не видел. Я расскажу вам про обещанную капчу…
Было у них нарисовано 30 картинок с изображением кодов (подозреваю, сделанных в paint, искажений изображения не было), одна из которых рандомно выдавалась юзеру (не фиксировалось, какая). А на серверной стороне…
$c1 = $_REQUEST['thecode']; $i = 0; $names[]="GH4BFRO"; $names[]="EWRHJ42"; $names[]="JSWDWQ5"; $names[]="REJ5JN4"; $names[]="JFUJN47"; $names[]="WFEW4B2"; $names[]="QSDY68M"; $names[]="BNMCF9J"; $names[]="VBDXIN5"; $names[]="RVXSBT5"; $names[]="XCHJN5S"; $names[]="UETRJ65"; $names[]="VBNH3UA"; $names[]="VBRJM4Z"; $names[]="RSNZGWE"; $names[]="GHFTGRO"; $names[]="AZWDWQ5"; $names[]="EWUBN42"; $names[]="AQW5JN4"; $names[]="JF66N47"; $names[]="GHJW4B2"; $names[]="QS45V8M"; $names[]="BCVAF9J"; $names[]="5VASIN5"; $names[]="CVBZBT5"; $names[]="X3CZN5S"; $names[]="UBN2RJ6"; $names[]="VBNHR4Z"; $names[]="VBBNM4Z"; $names[]="QWSX2IX"; ... for ($i ==0; $i < 30; $i++) { if ($c1 == $names[$i]) { ...
Тупо зашитые коды капчи. Принимаем запрос, бежим циклом по всему массиву, нашли совпадение — капча валидна.
Это я просто, об уровне кода
и все в такое же духе.
Я правда верю, что этот кабинет будет удален с потрохами и руководство позаботится не только о красивом дизайне, но и о безопасности своих ресурсов. На данный момент личный кабинет закрыт, так как закрыт прием заявок и я с чистой совестью опубликовал пост. // мне немного рассказали, почему все так «плохо», но видимо нужна взбучка, и будет все по-другому
Студентам успешного обучения, надеюсь программа курса будет на достойном уровне (как по рассказам было в Мск)
А в чём конкретно то уязвимость заключалась?