В популярном фреймворке Laravel версии < 8.4.2 обнаружена критическая уязвимость (CVE-2021-3129), позволяющая злоумышленнику выполнять произвольный код на сервере. Уязвимость возникает, если включен режим отладки и активирован модуль ignition (версии < 2.5.2), отвечающий за генерацию страниц с ошибками в Laravel.
Этот функционал позволяет решать проблемы, возникающие во время разработки или изменения кода веб-приложения, путем внесения изменений в нужный файл на сервере. За путь до изменяемого файла отвечает параметр ViewFile
, содержимое которого берется из файла:
./vendor/facade/ignition/src/Solutions/MakeViewVariableOptionalSolution.php
Участок кода выглядит следующим образом:
$originalContents = file_get_contents($parameters['viewFile']); $newContents = str_replace('$'.$parameters['variableName'], '$'.$parameters['variableName']." ?? ''", $originalContents);
В HTTP-запросе передается как имя переменной для изменения variableName
, так и путь до изменяемого файла viewFile
, поэтому злоумышленник может видоизменить его перед отправкой на сервер.
Эксплуатация уязвимости возможна из-за того, что злоумышленник, имея доступ к журналу Laravel, может записать в него вредоносный код и обратиться к нему, указав путь к этому журналу в параметре viewFile
. На текущий момент при использовании фреймворков Laravel до 8.4.2 рекомендуется обновиться до последней версии.
Использование Nemesida WAF позволит блокировать попытки эксплуатации этой уязвимости.