Yii 2.0 HP Fortify WebInspect SQL Injection: Blind
10 апреля 2015
Знакомые попросили проверить отчёт сканирования приложения Yii 2.0 на безопасность. Среди прочего HP Fortify WebInspect нашёл "SQL Injection: Blind" по URL:
http://example.com/post/view?id=10%27%09and%091%09%3d%09if(5%3d5%2c%09sleep(200)%2c%090)%09and%09%271%27%3d%271
что расшифровывается как
`10' and 1 = if(5=5, sleep(2000), 0) and '1'='1`
То есть классически закрыли кавычку и т.д.
Сделал тестовое приложение, запустил, получил страницу с постом с id = 10. То есть сканер среагировал на то, что нет ошибки или 404. Возможно, что SQL injection прошёл успешно.
Полез в код, там ничего особенного:
public function actionView($id) { $model = News::findOne($id); if (!$model) { throw new HttpException(404); } return $this->render('index', ['model' => $model]); }
Полез глубже и убедился, что параметр не вставляется в SQL. Используется prepared statement, всё как положено. Задумался.
Выполнил в консольке MySQL вот такое:
select * from post WHERE id = '10lalalallala';
Получил запись с id = 10 и вспомнил, что MySQL приводит строки к int-у почти как PHP. То есть, что бы мы не вставили после 10, MySQL переварит и не поперхнётся.
В итоге:
- С Yii всё хорошо.
- HP Fortify нашёл то, чего нет, и пометил как критическое.
Комментарии RSS по email OK
Происки конкурентов
Проверил ради интереса у себя, выловил 404
Вообще должна быть 404. Да и мускуль сделал неправильно.
mktums, она и будет на других СУБД или если немного роутер Yii настроить. Но даже если настраивать лень и мускул, речь об уязвимости не идёт.
На сторожила фраза "Среди прочего..." Т.е. были другие обнаружения? Они исправляются? К 2.0.4 исправите?
Да.
Тоже получил 404.