Laravel Excel обеспечивает расширенный экспорт и импорт Excel в Laravel. С 3.1.8 по 3.1.70 в src/Files/Disk.php метод Maatwebsite\Excel\Files\Disk::copy() разрешает управляемый вызывающим объектом $destination, предоставленный через Excel::store(), $export->store() или storeExcel(), в отношении рабочего каталога процесса с помощью realpath() вместо настроенного диска файловой системы. Если путь указывает на существующий записываемый файл, Disk::copy() открывает его с помощью fopen() в режиме rb+ и используетstream_copy_to_stream(), обходя ограничение пути Flysystem и позволяя злоумышленнику, чей ввод приложения контролирует путь экспорта, перезаписать произвольные существующие файлы экспортируемым содержимым.
Поведение rb+ создает неусекающуюся перезапись и конечные байты, когда новый экспорт короче, а перезапись исполняемого файла PHP может привести к удаленному выполнению кода. Эта проблема исправлена в версии 3.1.70.
Показать оригинальное описание (EN)
Laravel Excel provides supercharged Excel exports and imports in Laravel. From 3.1.8 until 3.1.70, in src/Files/Disk.php the Maatwebsite\Excel\Files\Disk::copy() method resolves the caller-controlled $destination supplied through Excel::store(), $export->store(), or storeExcel() against the process working directory with realpath() instead of the configured filesystem disk. If the path names an existing writable file, Disk::copy() opens it with fopen() in rb+ mode and uses stream_copy_to_stream(), bypassing Flysystem path confinement and allowing an attacker whose application input controls the export path to overwrite arbitrary existing files with export content. The rb+ behavior creates a non-truncating overwrite and trailing bytes when the new export is shorter, and overwriting an executable PHP file can lead to remote code execution. This issue is fixed in version 3.1.70.
Характеристики атаки
Последствия
Строка CVSS v3.1