<rmcreative>

RSS

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

  1. №9758
    dima
    dima 10.04.2015, 20:10:17

    Происки конкурентов

  2. №9759
    Nepster
    Nepster 10.04.2015, 21:09:53

    Проверил ради интереса у себя, выловил 404

  3. №9760
    mktums
    mktums 10.04.2015, 22:17:04

    Вообще должна быть 404. Да и мускуль сделал неправильно.

  4. №9761
    Sam
    Sam 11.04.2015, 0:06:58

    mktums, она и будет на других СУБД или если немного роутер Yii настроить. Но даже если настраивать лень и мускул, речь об уязвимости не идёт.

  5. №9768
    Дмитрий
    Дмитрий 24.04.2015, 10:23:40

    На сторожила фраза "Среди прочего..." Т.е. были другие обнаружения? Они исправляются? К 2.0.4 исправите?

  6. №9769
    Sam
    Sam 24.04.2015, 11:33:32

    Да.

  7. Тоже получил 404.

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.