Visit NES for PHP Home Page
NES for PHP 5 Release Notes: PHP 5.6
Comprehensive release notes and changelog for NES for PHP 5 Release Notes: PHP 5.6, including security patches, bug fixes, and feature updates across all supported versions.
127 Patched Vulnerabilities
VEX Statements
PHP 5.6
5.6.2 (NES) - October 26, 2026
Packages: https://registry.nes.herodevs.com/bin/nes/php/v5.6.40-nes-5.6.2/ (see Installation)
Windows: https://registry.nes.herodevs.com/bin/nes/php/v5.6.40-nes-5.6.2/php-v5.6.40-nes-5.6.2.windows.x64.ts.zip (Windows Server 2016, 2019, 2022 and 2025, x64; see Windows)
Based on PHP 5.6.40.
This release patches the following CVEs:
- CVE-2018-19395 On Windows,
com_properties_get()returned NULL forcom,dotnetandvariantobjects, and code that reads an object's properties (var_export(),serialize(), casting to an array) dereferenced it and crashed the process (denial of service). - CVE-2018-19396 On Windows,
unserialize()of acom,dotnetorvariantobject crashed the process (denial of service). - CVE-2019-11044 On Windows,
link()accepted a file name with an embedded NUL byte and silently used only the part before it, so a check made on the whole name could be bypassed. - (Low) - CVE-2024-4577 Argument injection: with Apache and php-cgi on Windows with code page 932, 936 or 950, the "best fit" conversion turned some bytes of a query string into
-, so options such as-d allow_url_include=1reached php-cgi and ran arbitrary code. - (Critical) - CVE-2024-8926 Bypass of the CVE-2024-4577 fix with some non-default Windows code page configurations. - (High)
- CVE-2026-17545 On Windows, a path component such as
CON,NUL,AUX,COM1orLPT1opens that device instead of a file, so an attacker-chosen file name could make PHP block on or write to a device (denial of service). - (Medium) - CVE-2026-45447 The official PHP 5.6.40 Windows zip was built with the 2018 VC11 library bundle from windows.php.net, which had OpenSSL 1.0.2q; these CVEs affect it. - (High)
- CVE-2018-1000300 The official PHP 5.6.40 Windows zip was built with the 2018 VC11 library bundle from windows.php.net, which had libcurl 7.59.0; these CVEs affect it. - (Critical)
- CVE-2016-4658 The official PHP 5.6.40 Windows zip was built with the 2018 VC11 library bundle from windows.php.net, which had libxml2 2.9.4; these CVEs affect it. - (Critical)
- CVE-2019-11068 The official PHP 5.6.40 Windows zip was built with the 2018 VC11 library bundle from windows.php.net, which had libxslt 1.1.29; these CVEs affect it. - (Critical)
- CVE-2016-9841 The official PHP 5.6.40 Windows zip was built with the 2018 VC11 library bundle from windows.php.net, which had zlib 1.2.7.3; these CVEs affect it. - (Critical)
- CVE-2017-12652 The official PHP 5.6.40 Windows zip was built with the 2018 VC11 library bundle from windows.php.net, which had libpng 1.5.26; these CVEs affect it. - (Critical)
- CVE-2020-14152 The official PHP 5.6.40 Windows zip was built with the 2018 VC11 library bundle from windows.php.net, which had IJG libjpeg 9b; these CVEs affect it. - (High)
- CVE-2016-10328 The official PHP 5.6.40 Windows zip was built with the 2018 VC11 library bundle from windows.php.net, which had FreeType 2.7.0; these CVEs affect it. - (Critical)
- CVE-2022-4883 The official PHP 5.6.40 Windows zip was built with the 2018 VC11 library bundle from windows.php.net, which had libXpm 3.5.12; these CVEs affect it. - (High)
- CVE-2019-12900 The official PHP 5.6.40 Windows zip was built with the 2018 VC11 library bundle from windows.php.net, which had bzip2 1.0.6; these CVEs affect it. - (Critical)
- CVE-2019-3859 The official PHP 5.6.40 Windows zip was built with the 2018 VC11 library bundle from windows.php.net, which had libssh2 1.8.0; these CVEs affect it. - (Critical)
- CVE-2026-6477 The official PHP 5.6.40 Windows zip was built with the 2018 VC11 library bundle from windows.php.net, which had libpq 9.6.2; these CVEs affect it. - (High)
Upgrade notes
- Session upload progress is off by default:
session.upload_progress.enablednow defaults toOffin the build and in the shippedphp.inifiles. This mitigates CVE-2026-115560, which needs session upload progress to be enabled and has no upstream fix yet. Session upload progress has had no effect since release 5.6.1, so settingsession.upload_progress.enabledtoOndoes not bring it back. - Windows: this release adds a zip of PHP for Windows, the thread-safe x64
build (see the Windows line above for the file and the supported Windows
versions, 2016 to 2025; each release is tested on 2016 and 2022). It runs
PHP from the command line, from IIS through FastCGI and from Apache
(
php5apache2_4.dll), and replaces the PHP 5.6.40 zip you use today: it is built with Visual C++ 2012 and keeps the extension build (API20131226,TS,VC11), so the extension DLLs you load today keep loading. It needs two Microsoft runtimes, which the zip does not include: the Visual C++ Redistributable for Visual Studio 2012 Update 4 (x64) and the one for Visual Studio 2015-2026 (x64).SHASUMS256.txt, signed with the release key, lists the zip; the programs are not Authenticode-signed. The Windows page has the download, verification and installation steps. - Windows: the zip carries the fixes for the Windows-only vulnerabilities
CVE-2024-4577 and
CVE-2024-8926 (php-cgi
argument injection), CVE-2019-11044
(
link()and NUL bytes), CVE-2018-19395 and CVE-2018-19396 (COM objects) and CVE-2026-17545 (device names in paths). Every release's zip is tested against them before it ships, with the default code page and with the Japanese code page 932 that CVE-2024-4577 needs. - Windows: every library the zip bundles is past its known High and Critical
CVEs (listed above). Among them: OpenSSL 3.5.9, where the PHP 5.6.40 zip you
use today has OpenSSL 1.0.2 (
libeay32.dllandssleay32.dllare gone, and the legacy provider is inextras\ssl), cURL 8.23.0, libxml2 2.10.4, libxslt 1.1.43, zlib 1.3.2, libpng 1.6.59, libjpeg-turbo 3.2.0, FreeType 2.10.4 with its security fixes, libssh2 1.11.1 and libpq 14.24. The zip has a CycloneDX SBOM atextras\sbom.cdx.json. - Windows: these extensions are not in the zip yet:
intl,ldap,imap,tidy,snmp,oci8,pdo_ociandenchant. Remove theirextension=lines from yourphp.ini. Thegdextension reads and writes no WebP images, andpg_trace()is not supported on Windows: it warns and returnsfalse. - Ubuntu 16.04: the debs now build ext/pcre and ext/gd on PHP's bundled PCRE and libgd, which have fixes Ubuntu 16.04's libpcre3 8.38 and libgd 2.1.1 lack; a pattern or a GD2 image that crashed PHP on the system libraries no longer does.
- The built-in timezone database is 2026.5 (IANA tzdata 2026e), where PHP 5.6 stopped at 2016.10. Builds that read the system's timezone data instead are unchanged.
- Ubuntu 22.04 (OpenSSL 3):
openssl_pkey_export_to_file()to a file that cannot be opened, and DSA or DH key generation, no longer crash. - This release also fixes these flaws, which have no CVE ids:
- DOM: a use-after-free when a
DOMXPath::registerPhpFunctions()callback returns a node of another document, and namespace nodes in XPath. Passing one to a PHP function read outside its structure and could crash, and a namespace node returned byDOMXPath::query()orDOMXPath::evaluate(), passed to a PHP function, or returned byDOMElement::getAttributeNode()for anxmlnsattribute, could outlive its parent element or that element's document. - XSL: passing a namespace node to a
php:function()callback read outside its structure and crashed. The callback now gets the namespace node in the transformed document. - SOAP: node names that PHP code supplies are limited to 50000 bytes, the
longest name libxml2 reads back. An over-long
SoapVarorSoapParamname is not used and the node keeps its default name; other over-long names fail with aSoapFault. - mysqlnd: a server's binary-protocol row too short for its NULL bitmap made the client read past the row. Such a row now fails with the warning "Malformed server packet. No packet space left for the NULL bitmap".
- intl:
locale_get_keywords()returned a keyword value of exactly the length of its buffer (100 bytes, or the length of the keyword value before it) without its terminating NUL, and leaked memory when it failed. unserialize(): a use-after-free when a nestedunserialize()call, made from theunserialize()method of aSerializableclass, replaces through a back-reference an object that is still being filled.SplObjectStorageandGMPobjects being unserialized are protected the same way.- cURL:
curl_copy_handle()left the copy's debug data pointing at the original handle, so withCURLINFO_HEADER_OUTthe copy wrote into the original after it was closed. SettingCURLOPT_POSTFIELDSto an array read past a pointer on the stack.
- DOM: a use-after-free when a
5.6.1 (NES) - October 25, 2026
Packages: https://registry.nes.herodevs.com/bin/nes/php/v5.6.40-nes-5.6.1/ (see Installation)
Based on PHP 5.6.40.
This release patches the following CVEs:
- CVE-2023-0567 An attacker who could place a malformed bcrypt hash in a password store could make any password validate; a short hash could also cause an out-of-bounds read. - (High)
- CVE-2023-0568 An attacker able to influence a path or working directory of maximum supported length could trigger a one-byte stack overwrite and crash PHP. - (High)
- CVE-2023-0662 An unauthenticated attacker could send excessive multipart form parts to consume CPU and flood warning logs. - (High)
- CVE-2023-3247 A malicious SOAP server could exploit predictable client nonces to make password guessing easier. - (Low)
- CVE-2023-3823 An attacker could make PHP load external entities and disclose local files if another library had enabled libxml global entity-loading defaults. - (High)
- CVE-2023-3824 An attacker-supplied archive with an oversized directory entry could cause a stack overwrite or an out-of-bounds read, potentially allowing code execution. - (Critical)
- CVE-2026-109618 A flaw in PHP's out-of-memory handling can leave request memory half-initialised and corrupt the heap, which is rated as remote code execution. A script that runs out of
memory_limitnow ends its process. - (Critical) - CVE-2026-109619 A flaw in PHP's request cleanup can leave global state pointing at freed memory, so a later request in the same process can read it. - (Critical)
- CVE-2026-6722 The SOAP decoder's map of already decoded values (
SOAP_GLOBAL(ref_map)) pointed at values it did not hold a reference to. - (Critical) - CVE-2026-91765 The SOAP extension's XML cleanup, its
hreflookup and its decoder recursed once per nesting level with no limit, so a message with very deep nesting, or a long or cyclic chain ofhrefreferences, exhausted the C stack and crashed the process (unauthenticated denial of service). - (High) - CVE-2025-14181 The SOAP client's HTTP response reader added up chunk sizes in an
intand guarded the buffer growth with a check that relies on signed overflow, which optimising compilers remove: a malicious SOAP server sending chunked data could wrap the size (a heap buffer overflow upstream; on PHP 5.6 builds, at least a huge allocation that ends the request). - (Medium) - CVE-2025-6491 With libxml2 older than 2.13, a node whose name cannot be copied is left without a name, and the SOAP encoder then compared that missing name: a NULL pointer dereference that crashes the process. - (Medium)
- CVE-2025-1735 The escaping functions of pgsql and pdo_pgsql ignored libpq's errors. - (Medium)
- CVE-2026-17543
pg_convert(), and through itpg_insert(),pg_update(),pg_select()andpg_delete(), quoted escaped strings asE'...'. - (High) - CVE-2024-11236 The dblib and Firebird quoters computed the quoted length in an integer that a long string of single quotes overflowed, so
PDO::quote()wrote past its buffer or returned a string with a corrupt length. - (Critical) - CVE-2026-6103 When reading a tar or phar archive, PHP accepted entry sizes it could not represent (they wrapped around) and skipped the data of regular files only, so the content of other entry types was read as further tar headers. - (Medium)
- CVE-2026-7260 A tar or phar archive whose symbolic links form a cycle made PHP follow the links recursively without limit until the process ran out of stack and crashed (denial of service). - (Medium)
- CVE-2026-91769 When verifying a TLS peer name, PHP checked the certificate's subjectAltName entries and, when none matched, fell back to the certificate's Common Name, which RFC 6125 forbids once the certificate has a DNS, URI or SRV name. - (Medium)
- CVE-2026-91767 Matching a peer name against a wildcard certificate name (for example
a*aaaaagainstaaaa) computed a negative length when the parts around the*overlapped, and the search then read far past the peer name (heap out-of-bounds read); a malicious server's certificate is enough. - (Medium) - CVE-2026-91768 php-fpm compared an IPv6 client address with the allowed addresses on their first 96 bits only, so any host sharing that prefix with an allowed client could send FastCGI requests to the pool and run scripts with parameters of its choice. - (Medium)
- GHSA-ch8v-r6jh-4vvr
FILTER_SANITIZE_ENCODEDread an uninitialised entry of its encoding table for byte 0xFF, so that byte could pass through unencoded depending on the stack. - (Low) - CVE-2026-92842 A
line-break-charsoption containing a NUL byte, given to theconvert.base64-encode,convert.quoted-printable-encodeorconvert.quoted-printable-decodefilter, made the filter copy heap memory past its copy of the option into its output (information disclosure). - (Medium) - CVE-2019-9638 A crafted image whose maker note is shorter than its declared offset made
exif_read_data()andexif_thumbnail()read uninitialised memory past the maker note's value. - CVE-2019-9639 A second case of the uninitialised read of CVE-2019-9638: a maker note in the default offset mode was processed with an uninitialised data length.
- CVE-2019-9640 A crafted embedded thumbnail made
exif_thumbnail()andexif_read_data()read a SOFn segment past the end of the thumbnail data. - CVE-2019-9641 The IFD bounds checks of TIFF parsing added offsets that could wrap around on a 32-bit
size_t, so a crafted TIFF passed them and was read outside the file buffer. - CVE-2019-11034 A maker note whose directory starts near the end of its value made
exif_read_data()read past the buffer (inphp_ifd_get32s()): information disclosure or a crash. - (Medium) - CVE-2019-11035 A tag whose declared size exceeds the bytes the file holds made
exif_read_data()copy past the end of the value (heap over-read): information disclosure or a crash. - (Medium) - CVE-2019-11036 A crafted IFD entry whose position is at or before the offset base made
exif_read_data()copy a tag value from outside the buffer (heap over-read in_estrndup()): information disclosure or a crash. - (Medium) - CVE-2019-11040 A truncated embedded thumbnail made
exif_read_data()read a segment length past the end of the thumbnail (inphp_jpg_get16()): information disclosure or a crash. - (Medium) - CVE-2019-9675 Writing a tar-based phar copied a symlink's target into the 100-byte
linknamefield of the tar header with the target's own length: a stack buffer overflow for a link target of 100 bytes or more. - CVE-2019-11045
DirectoryIterator,FilesystemIterator,RecursiveDirectoryIteratorandGlobIteratoraccepted a path with a NUL byte and listed the directory named by the part before it, so a check made on the whole string could be bypassed. - (Low) - CVE-2020-7063 Files added to a tar or zip archive by
Phar::buildFromIterator()orbuildFromDirectory()were stored with mode 0777, so anyone who extracted the archive got world-writable files. - (Medium) - CVE-2020-7068 Opening a zip-based phar with an alias registered the alias with a string that had just been freed (use after free): a crash, or reads of freed memory, from a crafted archive. - (Medium)
- CVE-2022-31628 The phar stream wrapper decompressed a gzip or bzip2 phar again for as long as the result was compressed, so a gzip "quine" made it loop forever: denial of service. - (Low)
- CVE-2019-9637 When
rename()moved a file to another file system, it copied the file and only then set the copy's owner and mode, so for a moment other local users could read (or write) the copy with the default umask's permissions. - CVE-2019-11048 The multipart/form-data parser kept part lengths in signed integers, so a file name or field name of 2 GiB or more wrapped negative: the request then made huge allocations and left its uploaded temporary files behind (denial of service, disk exhaustion). - (Medium)
- CVE-2020-7059 Stripping tags from some inputs read past the end of the buffer, through
fgetss()and thestring.strip_tagsstream filter: information disclosure or a crash. - (Medium) - CVE-2020-7066
get_headers()ignored everything after a NUL byte in the URL, so a URL an application validated as a whole fetched another host. - (Medium) - CVE-2020-7067 On EBCDIC platforms,
urldecode()andrawurldecode()indexed the EBCDIC conversion table with a signed char, reading before it for escapes above%7F. - (High) - CVE-2020-7070 PHP URL-decoded cookie names, so a cookie set as
..%5F_Host-nameby a sibling subdomain or over plain HTTP arrived as$_COOKIE['__Host-name']and defeated the__Host-and__Secure-prefixes. - (Medium) - CVE-2020-7071
FILTER_VALIDATE_URLaccepted URLs whose userinfo contains characters RFC 3986 forbids, so a URL that passed validation could be resolved byparse_url()or a client to a different host than the application checked. - (Medium) - CVE-2025-14177
getimagesize()with its$imageinfoargument returned uninitialised heap memory, which can include data freed by the same request, in theAPPnentries of a JPEG whose APP segment was shorter than announced or arrived in several reads (a truncated file, or a network stream that delivers the segment in several reads). - (Medium) - CVE-2019-11043 With a web server configuration that splits PATH_INFO with a regular expression (nginx's
fastcgi_split_path_info), a request whose PATH_INFO comes out empty made php-fpm compute a pointer before the PATH_INFO buffer and write a NUL there; public exploits turn this into remote code execution. - (High) - CVE-2019-11046 bcmath classified digits with
isdigit()on a plain char, so with a C library that calls some bytes above 0x7F digits, a crafted number madebc_shift_addsub()read before its buffer. - (Low) - CVE-2019-13224 The bundled Oniguruma's
onig_new_deluxe()converted a pattern between two different encodings into a buffer it then used after freeing. - CVE-2020-7060 libmbfl's BIG5 decoder indexed its conversion tables with an unchecked second byte, so converting attacker-supplied BIG5 text (
mb_convert_encoding(),mb_decode_mimeheader()and the like) read past a global table: information disclosure or a crash. - (Medium) - CVE-2020-7062 With
session.upload_progress.enabledon, a multipart upload whose part had no file name made the session upload progress handler dereference NULL: any client could crash the worker. - (High) - CVE-2021-21703 php-fpm's root master process followed pointers kept in the shared-memory scoreboard, which every worker can write, so a worker running attacker code could make the master read and write out of bounds and escalate to root. - (High)
- CVE-2019-11038
imagecreatefromxbm()used an uninitialised stack value for a pixel byte it could not parse, so a crafted XBM image disclosed stack memory in its pixels. - (Low) - CVE-2019-11039 An encoded word that ends in
=at the end of the input madeiconv_mime_decode()andiconv_mime_decode_headers()step the remaining length below zero and read past the buffer: information disclosure or a crash. - (Medium) - CVE-2019-11041 A thumbnail shorter than four bytes made
exif_read_data()compare its JPEG signature past the end of the thumbnail. - (Medium) - CVE-2019-11042 A UserComment tag shorter than two bytes made
exif_read_data()read a byte-order mark past the end of the value: information disclosure or a crash. - (Medium) - CVE-2019-11047 A maker note shorter than the camera maker's ID string made
exif_read_data()compare the ID past the end of the value (heap over-read): information disclosure or a crash. - (Medium) - CVE-2019-11050 Each maker note entry was processed with the length of the whole maker note rather than what remains after the entry, so a tag value could be read past the buffer (a use after free under a memory sanitizer). - (Medium)
- CVE-2020-7064 A JPEG whose EXIF section is one byte long made
exif_read_data()read the two-byte TIFF byte-order marker past the data, returning one byte of uninitialised memory in the result. - (Medium) - CVE-2024-3096 A bcrypt password beginning with a NUL byte was hashed as an empty password, so
password_verify()could accept an empty password for it. - (Medium) - CVE-2024-5458
FILTER_VALIDATE_URLaccepted URLs with invalid user information when the host was a bracketed IPv6 address, so an application could accept a URL that another parser reads differently. - (Medium) - CVE-2024-8925 A multipart boundary longer than the parser's read buffer could make PHP merge or drop form fields. - (Low)
- CVE-2024-8927 php-cgi took the client's
Redirect-Statusrequest header (HTTP_REDIRECT_STATUS) as proof that the web server had redirected the request, socgi.force_redirectcould be bypassed. - (High) - CVE-2024-11233 Data ending in a soft line break split across reads made the quoted-printable decoding filter read one byte past its buffer. - (Medium)
- CVE-2024-11234 With a proxy and
request_fulluriset in the stream context, carriage returns and line feeds in the URL went into the request line, so an attacker who controls part of the URL could inject headers or whole requests to the proxy. - (Medium) - CVE-2024-8932
ldap_escape()computed the escaped length without an overflow check; on 32-bit builds a very large value wrapped it, and the escaped string was written past a short buffer. - (Critical) - GHSA-4w77-75f9-2c8w After a request with a Content-Type header, a request without one reused the freed Content-Type of the previous request (heap use-after-free). - (Low)
- CVE-2026-6735 The full php-fpm status page printed request URIs without escaping, so a request URI an attacker chose could inject script into the page of whoever viewed it. - (High)
- CVE-2026-7261 When a SOAP header handler failed,
SoapServerfreed the handler object it keeps in the session, and a later request used the freed object. - (Medium) - CVE-2026-7262 A SOAP
apache:Mapitem without a<value>made the decoder dereference NULL and crash the process. - (Low) - CVE-2026-14355 With an AES key-wrap-with-padding cipher,
openssl_encrypt()sized its output one block too small, and OpenSSL wrote past it (heap overflow). - (Medium) - CVE-2015-9253 Each php-fpm child took its pool's listening socket as its stdin and accepted connections on it, so a script that made
php://stdinnon-blocking (directly or through a program it ran) made every child'saccept()fail: the master restarted children in an endless loop, using the CPU and filling the log (denial of service). - CVE-2016-7480
SplObjectStorage::unserialize()checked that a key was an object before it unserialized the key's information, and the information could change the key through a reference from__wakeup(), so the storage kept a non-object as a key. - CVE-2017-9118
preg_replace()kept the length of its result in an int, so a result longer than 2 GiB wrapped it negative and the next piece of the result was written at that negative offset from its buffer (heap out-of-bounds write). - CVE-2021-21702 SoapClient dereferenced NULL when a WSDL's XML schema had an attribute or element without the children it expected, so a hostile or spoofed WSDL crashed the process. - (Medium)
- CVE-2021-21704 pdo_firebird trusted lengths and strings in a Firebird server's replies: a stack buffer overflow in
firebird_info_cb()(bug 76448) and out-of-bounds reads infirebird_handle_doer(),firebird_stmt_execute()andfirebird_fetch_blob()(bugs 76449, 76450 and 76452), so a hostile server, or one an attacker can impersonate, could crash the client or worse. - (Medium) - CVE-2021-21705
FILTER_VALIDATE_URLaccepted URLs whose userinfo contained characters such as a backslash or a second@(https://example.com:\@test.com/), which clients then sent to a different host than the application checked: server-side request forgery. - (Medium) - CVE-2021-21706 On Windows,
ZipArchive::extractTo()treated only a leading slash as an absolute path, so an entry named with a drive letter or a backslash prefix was written outside the destination directory. - (Medium) - CVE-2021-21707 The XML functions passed a file path containing a NUL byte to libxml2, which used the part before it (
DOMDocument::load(),simplexml_load_file(),XMLReader::open(), SoapClient's WSDL and others), so a path validated as a whole loaded another file. - (Medium) - CVE-2022-31625 When a parameter of
pg_query_params()could not be converted to a string, the function freed an array of parameter strings it had not fully initialised: freeing uninitialised pointers, rated as remote code execution where an attacker controls the parameters. - (High) - CVE-2022-31626 mysqlnd sized the buffer for its authentication packet by the authentication data alone, without the packet header, so a long password overflowed the heap; an attacker who can make a script connect with a password they choose (database administration tools) can trigger it. - (High)
- CVE-2022-31629 Request variable names that PHP's name mangling turned into
__Host-or__Secure-(for example..Host-) reached$_COOKIEunder the prefixed name, so a sibling subdomain or plain HTTP could set a cookie the application trusts as secure. - (Medium) - CVE-2022-31631
PDO::quote()on an SQLite connection passed2 * length + 3tosqlite3_snprintf()as anint, so for a string of about 1 GiB or more the size wrapped and the result could come back unquoted or truncated: SQL injection. - (Critical) - CVE-2025-1217 The HTTP stream wrapper read each response header line on its own, so a folded header (a continuation line that starts with a space or tab) became a separate bogus header and its folded value was lost: an application could act on the wrong MIME type, Location or other header. - (Medium)
- CVE-2025-1734 The HTTP stream wrapper accepted a response header line without a colon, or with whitespace in its name, and put it in
$http_response_header, so a server could get a malformed line past code that reads the headers differently from the client. - (Medium) - CVE-2025-1736 Before adding its own Authorization, Host, User-Agent, From, Content-Length, Content-Type and Connection headers, the HTTP stream wrapper looked for them in the http context's
headeroption and accepted a match after a bare LF, a space or a tab. - (Medium) - CVE-2025-1861 The HTTP stream wrapper kept a redirect's Location header, and the URL it built from it, in 1024-byte buffers, so a longer Location was cut and the wrapper followed a different, truncated URL. - (Medium)
- CVE-2026-93682 Upstream's CVE-2025-1861 fix read outside the Location value when a redirect's Location header was empty (a one-character Location was also mishandled, without an out-of-bounds read). - (Medium)
- CVE-2026-91766 The HTTP stream wrapper repeated the http context's
headeroption on every redirect it followed, so Authorization, Cookie and Proxy-Authorization headers meant for one server went to whatever host, port or scheme a redirect named, including an https to http downgrade. - (Medium) - CVE-2025-1220
fsockopen()and the socket transports behindstream_socket_client()used the host name as a C string, so"localhost\0.example.com"connected to localhost while the application's own checks of the name (parse_url(), allow lists) saw another host. - (Low) - GHSA-www2-q4fc-65wf
dns_get_record(),checkdnsrr(),getmxrr(),getprotobyname(),getservbyname(),getservbyport(),inet_pton()andip2long(), and on PHP 5.6 alsogethostbyname(),gethostbynamel()andgethostbyaddr(), passed their argument to C functions that stop at a NUL byte, so a lookup of"php.net\0aa"resolved php.net while the application's checks saw another name. - (Low) - CVE-2026-7258 Many functions (
urldecode(),quoted_printable_decode(),version_compare(),sscanf(),html_entity_decode(),sprintf()and others) passed a signedcharto the ctype.h functions; for a byte >= 0x80 the argument was negative, and C libraries whose tables do not cover negative values (NetBSD) read before the table. - (Medium) - CVE-2024-8929 A hostile or compromised MySQL server could make mysqlnd read past its packet buffers and hand the bytes to the application, disclosing heap memory that may hold other data: the OK packet message, the LOCAL INFILE file name, a column's default value, every prepared-statement fetch function and the text-protocol row field length. - (Medium)
- CVE-2025-1218 The mysqlnd wire protocol decoders (greeting, OK, EOF, authentication and change user, result set header and fields, prepare response, rows, the sha256 public key exchange) read length-encoded integers and strings without checking that the packet still held them, and the prepared-statement row decoder trusted a field length shorter than its type's layout, so a malicious or impersonated MySQL server could make the client read past the packet buffer. - (Low)
- CVE-2024-2756 The CVE-2022-31629 fix checked request variable names for a mangled
__Host-or__Secure-prefix before PHP had finished mangling them, so names such as.[Host-or_[Host-(whose[becomes_later) still reached$_COOKIEas__Host-or__Secure-cookies, which a sibling subdomain or plain HTTP could then set. - (Medium) - CVE-2016-3191
compile_branch()mishandled(*ACCEPT)inside nested parentheses, so compiling such a pattern overflowed a stack buffer. - CVE-2017-7186 An invalid Unicode property lookup read outside PCRE's tables (denial of service).
- CVE-2020-14155 A large number after
(?Cin a pattern overflowed an integer when the pattern was compiled. - CVE-2017-11164 PCRE's interpreter recurses on the C stack once per nested backtracking point, and PHP 5.6's default
pcre.recursion_limit(100000) allows far more stack than a process has, so a repeated group on a long subject (/^(a\|b)*$/on 400000 characters) crashed the process (stack exhaustion) instead of failing. - CVE-2017-16231 PCRE's interpreter recurses on the C stack once per nested backtracking point, and PHP 5.6's default
pcre.recursion_limit(100000) allows far more stack than a process has, so a repeated group on a long subject (/^(a\|b)*$/on 400000 characters) crashed the process (stack exhaustion) instead of failing. - (Medium) - CVE-2019-16163 The parser and the compiler recurse once per nesting level of groups, character classes and quantifiers, with no limit, so a deeply nested pattern exhausted the stack.
- CVE-2019-19012 The search range computations added a pattern's match distances to subject pointers before checking them, so on 32-bit builds the address could wrap and the search read outside the subject.
- CVE-2019-19204 In the POSIX basic and grep syntaxes, an escaped interval (
\{n,m\}) cut short at the end of the pattern made the parser read past the pattern (heap over-read). - CVE-2019-19246 Case-insensitive matching compared the case-folded subject with the pattern string without checking the string's end (heap over-read).
- CVE-2014-8117 Magic entries could
usenamed entries without a limit on how many, so a magic list whose entries each use the next several times ran for exponential time (CPU denial of service). - CVE-2019-18218
cdf_read_property_info()did not limit the number of elements of aCDF_VECTORproperty in a CDF (OLE2) document, so a crafted document overflowed a heap buffer by 4 bytes. - CVE-2026-9672 The GIF LZW decoder of the bundled libgd initialised
table[1][0]instead oftable[1][i]and left its decoder state on the stack uninitialised, so a crafted GIF that uses a code before defining it read uninitialised stack memory into the image (information disclosure); it also kept decoding after the end code. - CVE-2016-6911
dynamicGetbuf()copied from its buffer at the current position without checking that the position was inside the buffer, and a seek could leave it before the start (out-of-bounds read). libgd found it through its TIFF reader; PHP's fork reaches the same function through the GD2 reader's seeks. - CVE-2016-6153 The SQLite advisories of 2016 to 2025 in the library itself (query planner, window functions, ALTER TABLE, JSON, FTS3, printf, concat_ws, the C API): memory corruption, out-of-bounds reads and crashes, mostly reachable by running crafted SQL or opening a crafted database. - (High)
- CVE-2020-12762 JSON-C's printbuf tracked its size in an int, so a JSON string longer than 2 GiB, which
JsonIncrementalParser::parse()andparseFile()build up across chunks, overflowed the size check and the next chunk was written past the buffer (heap out-of-bounds write). - (High) - CVE-2024-2408 The Marvin attack: RSA decryption with PKCS#1 v1.5 padding (
OPENSSL_PKCS1_PADDING, the default) reveals 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)
Upgrade notes
php -vandPHP_VERSIONreport5.6.40-nes, soversion_compare(PHP_VERSION, '5.6.40', '>=')is false.PHP_VERSION_IDstays 50640, and extensions built for PHP 5.6 load as before.- A script that runs out of
memory_limitnow ends its process: the fatal error goes to stderr (and toerror_logwhenlog_errorsis on), and no shutdown function runs. php-fpm starts a new worker in its place. Raisememory_limitwhere a script needs more. This is the mitigation of CVE-2026-109618 and CVE-2026-109619. - Session upload progress is disabled:
session.upload_progress.enabledhas no effect.