On Laravel's local filesystem driver, a temporary signed URL could be read differently by the server than when it was signed. An expired link could keep working indefinitely, or a link could open a different file than the one that was signed. Temporary upload URLs could write to an unintended place.

The storage path wasn't URL-encoded inside the signed URL. Characters such as ?, & and # in a file's path could cut the path short and change how the URL's query string, including its expires value, was read. See the Laravel advisory and the fixes for 13.x and 12.x.

Who is affected

Apps that call Storage::temporaryUrl() or Storage::temporaryUploadUrl() on a disk that uses the local driver. The risk is highest when stored file paths can contain ?, & or #, for example when paths are built from the names of files users upload.

The advisory covers only the local filesystem driver. Temporary URLs from S3 and other drivers are not part of it.

What to do

Update laravel/framework to 12.61.1 on 12.x or 13.12.0 on 13.x.

Reported by teebow1e and zxcvbbq.