Malcolm — это набор инструментов для анализа сетевого трафика. Компонент загрузки файлов (бэкэнд FilePond PHP) принимает загрузки по адресу `POST/server/php/submit.php` и сохраняет их в каталоге, обслуживаемом одним и тем же экземпляром nginx и php-fpm. Список разрешений, который должен ограничивать принимаемые типы файлов, по умолчанию представляет собой пустой массив (`file-upload/php/config.php:16`), поэтому проверка типа не выполняется и принимается каждое расширение.
Дезинфицирующее средство имени файла сохраняет расширение `.php` нетронутым. Зафиксированные файлы помещаются в `/var/www/upload/server/php/files` (`file-upload/php/config.php:7`), и nginx компонента маршрутизирует любой URL-адрес, заканчивающийся на `.php`, на php-fpm. Аутентифицированный `GET /server/php/files/<name>.php` затем выполняет загруженный код как `www-data`.
До версии 26.06.1 в режиме RBAC конечная точка загрузки была доступна с помощью детализированной роли ROLE_UPLOAD (nginx/lua/nginx_auth_helpers.lua:71), роли, предназначенной только для отправки файлов захвата. В результате пользователь, обладающий ролью «только для загрузки», запускает произвольный PHP как «www-data» внутри контейнера для загрузки файлов. Версия 26.06.1 устраняет проблему.
Показать оригинальное описание (EN)
Malcolm is a network traffic analysis tool suite. The file-upload component (FilePond PHP backend) accepts uploads at `POST /server/php/submit.php` and stores them in a directory served by the same nginx and php-fpm instance. The allow-list that should restrict accepted file types is an empty array by default (`file-upload/php/config.php:16`), so the type check is a no-op and every extension is accepted. The filename sanitizer keeps the `.php` extension intact. Committed files land in `/var/www/upload/server/php/files` (`file-upload/php/config.php:7`), and the component's nginx routes any URL ending in `.php` to php-fpm. An authenticated `GET /server/php/files/<name>.php` then executes the uploaded code as `www-data`. Prior to version 26.06.1, in RBAC mode, the upload endpoint is reachable by the granular `ROLE_UPLOAD` role (`nginx/lua/nginx_auth_helpers.lua:71`), a role intended only for submitting capture files. As a result, a user holding the upload-only role runs arbitrary PHP as `www-data` inside the file-upload container. Version 26.06.1 fixes the issue.
Характеристики атаки
Последствия
Строка CVSS v3.1