lab.

Заметка для тех, кто пользуется генерацией кода в Yii2

Yii2 является одним из популярных PHP-фреймворков, название которого сложно прочитать. Правильное использование фреймворков заметно сокращает время разработки, а также закрывает большинство вопросов с безопасностью. Но это, конечно, не означает абсолютную безопасность приложений на Yii2, так как в любой системе есть присутствие человеческого фактора. Эта краткая заметка показывает реальный кейс, когда кодогенерация в Yii2 или в любом другом фреймворке может подставить с безопасностью.

Итак, представим, что у нас есть таблица users:

После генерации CRUD в Gii для таблицы users, у нас появляется новый файл UsersSearch.php, который отвечает за поиск данных по нашей таблице. Из всего файла нам интересен данный участок кода:

Бездушному скрипту автогенерации, конечно же, все равно, необходим ли поиск людей по паролю, поэтому тот честно генерирует запрос для поля password. Зачастую, разработчики убирают вывод поля password из всех вьюшек и т.д., но забывают удалить из сгенерированного класса для поиска. В результате чего, можно провернуть следующее:

Добавив к запросу поиска параметр UsersSearch[password], мы можем посимвольно перебирать пароль пользователя. Хотя пароли хэшируются необратимой функцией, при желании и хороших мощностях, всегда можно сбрутить хэш несложного пароля. Даже если это не пароль, это может быть какой-то конфиденциальной информации типа номера телефона, места жительства и т.д.

            Для опытных разработчиков Америку не открыли, но рекомендуем проверить свои проекты на существование такого участка кода. Информация может быть актуальна для любых фреймворков, где используется подобная генерация кода.

Автор: manfromkz

Вам также может быть интересно:

Описание CVE-2020-29139, CVE-2020-29140, CVE-2020-29142, CVE-2020-29143 в OpenEMR 6.0.0-dev, OpenEMR 5.0.2(5)

В ходе исследования движка для медицинских организаций OpenEMR с открытым исходным кодом были обнаружены 4 уязвимости типа SQL-инъекция. Тестирование уязвимостей производилось на Windows 10, Apache 2.4, 10.3.22-MariaDB. PHP 7.1.33 для OpenEMR 5.0.2(5) и PHP 7.4 для OpenEMR 6.0.0-dev. Настоятельно рекомендуем обновиться до последней версии продукта.