Visit NES for PHP Home Page
NES for PHP 8 Release Notes: PHP 8.2
Comprehensive release notes and changelog for NES for PHP 8 Release Notes: PHP 8.2, including security patches, bug fixes, and feature updates across all supported versions.
5 Patched Vulnerabilities
VEX Statements
PHP 8.2
8.2.1 (NES) - November 10, 2026
Packages: https://registry.nes.herodevs.com/bin/nes/php/v8.2.35-nes-8.2.1/ (see Installation)
Based on PHP 8.2.35.
This release patches the following CVEs:
- CVE-2021-38115 The bundled libgd's TGA reader ignored a short read of the image identification field, leaving the buffer uninitialised (CVE-2021-38115), and its BMP and WebP writers ignored gdPutBuf's result, the BMP writer's error path freeing the caller's context instead of its own temporary one (CVE-2021-40812).
- GHSA-m3wq-j48p-jxwh libzip before 1.12 indexed an archive's entry names in a hash table with an unkeyed 32-bit DJB2 hash and chained colliding names, so an archive whose names all have one hash value (65534 names of 32 bytes are easy to make) makes zip_open take time quadratic in the number of entries: seconds of CPU per archive. - (Low)
- CVE-2024-2408 The Marvin attack: RSA decryption with PKCS#1 v1.5 padding (
OPENSSL_PKCS1_PADDING, the default) leaks through timing whether the padding was valid, so an attacker who can submit many ciphertexts and time the answers can decrypt a ciphertext or forge a signature. - (Medium)
It also fixes 194 security issues without a CVE id (148 ported from later PHP versions, 39 found by NES and 7 in bundled libraries).
Upgrade notes
- This is the first release of NES for PHP 8.2, for RHEL 8 and its rebuilds (AlmaLinux 8, Rocky Linux 8, UBI 8), x86_64 and aarch64. There are no packages for other distributions, no container images and no Windows zip for PHP 8.2.
php -vandPHP_VERSIONreport8.2.35-nes, soversion_compare(PHP_VERSION, '8.2.35', '>=')is false.PHP_VERSION_IDstays 80235, the module API stays 20220829, and extensions built for PHP 8.2 load as before.- The packages keep Red Hat's names and layout (
php,php-cli,php-fpm,php-mysqlndand the rest) and are thephp:nes-8.2module stream. Every package's Release is1.nes82.el8(for examplephp-cli-8.2.35-1.nes82.el8.x86_64); no Epoch is raised, andphp-pearkeeps Red Hat's Epoch 1 (php-pear-1:1.10.18-1.nes82.el8). A host without PHP runsdnf module enable php:nes-8.2and thendnf install; a host on Red Hat'sphp:8.2, or another php stream, runsdnf module switch-to php:nes-8.2, which moves the installed PHP packages to the NES builds (Red Hat'sphp-pecl-xdebug3andphp-pecl-rrdstay, below). Withphp:nes-8.2enabled,dnf upgradenever takes Red Hat's builds back. - The packages are those of Red Hat's
php:8.2stream, lessphp-pecl-xdebug3andphp-pecl-rrd, plusphp-sodium, which needslibsodiumfrom EPEL 8: enable EPEL before installing it. Red Hat'sphp:8.2does not buildimap,pdo_firebird,pdo_dblib,tidyorpspell, and neither does this stream.phprecommendsphp-sodium, so on a host withphpinstalled and EPEL enabled the switch also installs it. php-pecl-zipis PECL zip 1.22.8, the newest release of the 1.22 series (Red Hat'sphp:8.2ships 1.22.3), for the memory-safety fixes of 1.22.5 to 1.22.8, with two further fixes of PHP's own zip extension added. It links the stream's ownlibzip1.7.3 build, whose entry-name hashing is keyed so a crafted archive cannot makezip_open()take quadratic time (GHSA-m3wq-j48p-jxwh). ItsValueErrormessages say "must not be empty" where 1.22.3 said "cannot be empty", and reflection lists a#[\Deprecated]attribute onzip_open()and the other proceduralzip_*()functions (PHP 8.2 cannot instantiate it; the functions behave as before).php-gdis built on PHP's bundled libgd, not on RHEL 8'sgd2.2.5, which keeps flaws in its TGA, XBM, BMP, WebP and GIF code and inimageaffine()'s matrix inversion. JPEG, PNG, WebP, FreeType and XPM are supported, as before;php-gdno longer requires thegdpackage.php-pecl-apcu,php-pecl-apcu-develandapcu-panelare APCu 5.1.28 (Red Hat's is 5.1.23).php-pearis PEAR 1.10.18; withphp-devel(and a compiler),pecl installworks.php-pecl-xdebug3andphp-pecl-rrdare not part of the stream: Red Hat's builds stay installed across the switch and load into NES's PHP, but cannot be newly installed whilephp:nes-8.2is enabled.php-commonrequiresopenssl-libs >= 1:1.1.1k-12, the RHEL 8 OpenSSL with implicit rejection for RSA PKCS#1 v1.5 decryption, which is the fix for the Marvin attack (CVE-2024-2408) onopenssl_private_decrypt(). Updateopenssl-libsfirst on a host that has an older build (updated RHEL 8.9 hosts and later have it). The RHEL 8.6 and 8.8 Extended Update Support builds of the same version are not verified to carry the fix: there, useOPENSSL_PKCS1_OAEP_PADDING.- Session upload progress is off: the shipped
/etc/php.inisetssession.upload_progress.enabled = Off, its compiled default isOff, and setting it toOnhas no effect. This mitigates CVE-2026-115560, which needs session upload progress and has no upstream fix yet; the fix will follow in a later release. - PHP-FPM keeps Red Hat's defaults: the
wwwpool runs asapache, listens on/run/php-fpm/www.sock(which theapacheandnginxusers may use), withpm = dynamicand 50 children at most, and logs errors to/var/log/php-fpm/www-error.log. Your edited/etc/php-fpm.conf,/etc/php-fpm.d/*.confand/etc/php.iniare kept across the switch. - PHP uses the system time zone database (
tzdata), as Red Hat's build does. On ubi-minimal 8, whosetzdatapackage has no/usr/share/zoneinfo, only UTC works untilmicrodnf upgrade tzdataandmicrodnf reinstall tzdataare run. - mysqlnd (mysqli and PDO MySQL) no longer sends a password in clear text
with the
mysql_clear_passwordauthentication plugin over a connection that is neither TLS nor a Unix socket: a server, or anyone between PHP and the server, could ask for that plugin and read the password. Such a connection now fails with error 2059 ("Authentication plugin 'mysql_clear_password' cannot be loaded: ..."). Connect accounts that use the plugin (PAM or LDAP authentication) over TLS or a Unix socket; any TLS connection is accepted, so verify the server's certificate to keep the password from a man in the middle. To allow the plugin over plain TCP as before, set the environment variableLIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=1for the PHP process, the switch libmysqlclient uses: under PHP-FPM,env[LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN] = 1in the pool configuration; for Apache's PHP module, the web server's own environment (SetEnvdoes not reach it). - A server that switches a
sha256_passwordlogin to a scramble shorter than 20 bytes, or to none, is now refused with error 2027 ("The server sent wrong length for scramble") instead of crashing the client. - From NES's own
php:nes-7.4(orphp:nes-7.2) stream: removephp-xmlrpcfirst (dnf remove php-xmlrpc; PHP 8 has no xmlrpc extension), then rundnf module switch-to php:nes-8.2.php-jsonis part of PHP 8 and goes with the switch. - The way back: remove the NES repository, then run
dnf module switch-to php:8.2, which returns every package to Red Hat's build. Withphp-sodiuminstalled, which Red Hat does not build, add--allowerasingso the switch removes it. - Security, by area: the 197 security fixes of this release (the CVEs above
and the issues without a CVE id) and one mitigation on top of PHP 8.2.35
are:
- 40 fixes made first on other NES for PHP lines whose flaw PHP 8.2 still
has, 38 of them for flaws NES found: unserialize lifetimes, DOM and XSL
namespace nodes, SOAP, intl, OpenSSL, mysqlnd authentication and wire
protocol, the HTTP stream wrapper,
getimagesize(), XSLTProcessor re-entry,DatePeriodandextract(), andtidy::cleanRepair()for builds from the source tarball (the RPMs build no tidy); - 144 memory-safety fixes that later PHP versions made and PHP 8.2 never received after it entered security-only support: the engine, allocator and opcache (25); DOM, XSL and SimpleXML (16); phar, zip, bz2, zlib and dba (25); PDO and the database drivers (11); the standard library, streams and the other core extensions (37); SPL, intl, the bundled libgd, date and the smaller extensions (22); PHP-FPM (5); and 3 more found later;
- 1 memory-safety fix for a flaw NES found in PHP's stream layer, which no PHP version has fixed yet;
- 12 library fixes: the bundled libgd's TGA, BMP, WebP and GIF fixes
(CVE-2021-38115,
CVE-2021-40812);
php-gdbuilt on that libgd in place of RHEL 8's gd 2.2.5; the built-in time zone database, updated to 2026f for builds from the source tarball; the OpenSSL requirement above; the stream'slibzip; and PECL zip 1.22.8 (five fixes since 1.22.3, and two more added).
Counted by origin, as above, the two fixes among the 40 that PHP made first and the two added PECL zip fixes are "ported from later PHP versions", and the library fixes with a CVE or advisory id are among the CVEs. 28 further findings were checked and do not apply to PHP 8.2. - 40 fixes made first on other NES for PHP lines whose flaw PHP 8.2 still
has, 38 of them for flaws NES found: unserialize lifetimes, DOM and XSL
namespace nodes, SOAP, intl, OpenSSL, mysqlnd authentication and wire
protocol, the HTTP stream wrapper,