Подписывайтесь на наш Telegram канал и будьте в курсе всех событий.

Hesko

22 677 Монеток

Уязвимость Environment Manipulation via Query String

В Laravel была устранена уязвимость (CVE-2024–52301) с уровнем опасности 8.7. Позволяющая изменить среду выполнения приложения (например, переключиться с production на development) через строку запроса URL. Это было возможно при включённой директиве PHP register_argc_argv. Используя специально сформированный URL, злоумышленник мог изменять настройки среды приложения и получить доступ к конфиденциальным данным, доступным только в режиме отладки.

Пример эксплуатации

Допустим, Laravel обрабатывает URL с параметром argv, например:

http://example.com/?argv[]=--env&argv[]=development

Такой запрос мог бы заставить приложение работать в среде development, если оно использует argv для определения текущей среды.

Версии, подверженные уязвимости

Версия Laravel Уязвимые версии
< 6.x До 6.20.45
7.x От 7.0.0 до 7.30.7
8.x От 8.0.0 до 8.83.28
9.x От 9.0.0 до 9.52.17
10.x От 10.0.0 до 10.48.23
11.x От 11.0.0 до 11.31.0

Решение

В новых версиях Laravel аргументы argv больше не учитываются для выбора среды выполнения при работе через веб-сервер (Только через консоль). По этому рекомендуется обновиться или отключить директиву register_argc_argv.

Предыдущая уязвимость в Laravel была найдена 7 декабря 2021 года.

0

Запускаем тесты PHPUnit в случайном порядке

Работая с тестами, иногда можно столкнуться с неприятной ситуацией: один тест проходит, только если выполняется сразу после другого. И если изменить порядок, этот тест ломается.

Это говорит о том, что тесты зависят друг от друга. А идеальный тест всегда должен быть независимым и начинаться с «чистого листа».

Хороший способ обнаружить такие скрытые зависимости это запускать тесты в случайном порядке. Если тест не проходит, когда порядок перемешан, это значит, что он зависит от других, и с этим нужно что-то сделать.

PHPUnit и Laravel поддерживают специальный флаг для случайного порядка --order-by=random

# Для Laravel
php artisan test --order-by=random

# Для Laravel Dusk
php artisan dusk --order-by=random

# Для PHPUnit
vendor/bin/phpunit --order-by=random

Попробуйте запустить свои тесты в случайном порядке и посмотрите, есть ли у вас зависимые тесты. 😉

Еще лучше добавьте атрибут executionOrder в конфигурационный файл, что бы запуск тестов в случайном порядке был по умолчанию 🚀.

<?xml version="1.0" encoding="UTF-8"?>
<phpunit 
    executionOrder="random"
>
1