Apply the quick fix now
Applications built with Buildpacks can upgrade right away: deploy them again and the build installs the patched PHP release. For every other PHP application, the quick fix is three PHP settings. Add them now: it takes one deployment and no changes to your code, and file uploads, form posts and sessions keep working. The settings make the attack harder but don’t fully fix it, so also upgrade PHP when the patched release reaches your build. Pick the build strategy of the application. It’s in the Build strategy section of the application’s Settings tab.- Nixpacks
- Railpack
- Buildpacks
- Dockerfile
1
Add the settings file
Add a
php-conf.d folder to the build path, with this php.ini file in it:php-conf.d/php.ini
2
Point PHP at it
Add the environment variable
PHPRC with the value /app/php-conf.d, with Available during runtime and Available during buildtime both selected.3
Deploy
Deploy the application.
php -i | grep -E "upload_progress|memory_limit" prints memory_limit => -1 => -1 and session.upload_progress.enabled => Off => Off.Use PHPRC, not PHP_INI_SCAN_DIR. Nixpacks loads PHP’s extensions through PHP_INI_SCAN_DIR, so setting it removes them and the build fails with The iconv OR mbstring extension is required and both are missing.Check whether your application is affected
In the application’s Web terminal tab, runphp -v. The application is affected if the version is older than the fixed release of its branch:
See Web terminal to open a shell in a running instance.
What the quick fix changes
The settings don’t change upload size limits. PHP’s advisory asks for them in
php.ini, the PHP-FPM pool or the web server configuration, which is what the quick fix uses. Don’t set them with ini_set() or a .user.ini file instead, and don’t let your code set memory_limit back to a number. If you pass PHP settings per request (php_value or php_flag in .htaccess, or fastcgi_param PHP_VALUE in an nginx configuration), move them to php.ini.
Sevalla’s Cloudflare network passes these requests to your application like any other request, so the settings must be in the application.
Upgrade to the patched PHP release
Upgrading PHP is the only complete fix. Keep the quick fix in place until the upgrade is deployed.
Sevalla updates this table when patched builds become available.
Nixpacks
Nixpacks installs PHP from a fixed set of packages, so a new deployment doesn’t get the patched release. Keep the quick fix in place. This page lists the upgrade steps for Nixpacks when they’re available.Railpack
Railpack picks the newest PHP release that matchesrequire.php in composer.json and has a dunglas/frankenphp image, for example dunglas/frankenphp:php8.4.26-bookworm for "php": "^8.4". When FrankenPHP publishes the patched images, deploy again. The Packages table at the start of the build log shows the PHP version the build uses, for example php │ 8.4.27 │ composer.json > require > php (8.4), and php -v in the Web terminal tab prints it.
Buildpacks
Heroku has published PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35. Deploy the application again, with no other change: the build installs the newest PHP release thatrequire.php in composer.json allows, even with the build cache on. The build log lists the installed version, for example - php (8.5.12), and php -v in the Web terminal tab prints it.
- If
require.phppins an exact older release, such as"php": "8.4.26", change it to a range such as"^8.4", runcomposer update --lock, and commit both files before you deploy. heroku/builder:20doesn’t get the patched release: switch the pack builder toheroku/builder:22(see Pack builders).- If you applied the earlier quick fix (
fpm_custom.conf,-F fpm_custom.confandWEB_CONCURRENCY), it can stay. To remove it, delete the file, the-F fpm_custom.confoption and theWEB_CONCURRENCYvariable, then deploy.
Dockerfile
When Docker Hub publishes the patched tags, change theFROM line to the exact patched release of your branch, for example FROM php:8.4.27-apache instead of FROM php:8.4-apache, and deploy. An exact version shows which release the build uses. dunglas/frankenphp images get the fix when FrankenPHP publishes new images. After the deployment, php -v in the Web terminal tab prints the patched version.
Check for signs of an attack
A new deployment replaces the files in your instances, but not the files on a disk. If the application ran an affected PHP release, look for.php files on its disks that you didn’t add, such as files in an uploads folder. If you find any, delete them, then change the secrets the application can read: environment variables, database passwords and API keys.
More information
- PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35 release announcements
- GHSA-w8hw-w9fx-j79w (CVE-2026-109618)
- GHSA-6wmf-4rv5-p3rp (CVE-2026-109619)