В популярном фреймворке 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 позволит блокировать попытки эксплуатации этой уязвимости.