CVE-2017-12933
Critical · 9.8CVSS
9.8
EPSS
6.9%
Published
Aug 18, 2017
CISA due date
—
Cloudanix analysis
A flaw in how PHP reads certain data can let attackers change how programs behave without permission.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Data Exposure
- Component
- Library
- Class
- Memory Corruption
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
The finish_nested_data function performs a buffer over-read during deserialization of attacker-controlled input, allowing out-of-bounds memory access that can corrupt process integrity.
Why it matters to the business
Attackers may be able to alter application behavior or data without authentication, leading to service disruption or unauthorized changes across any systems running the affected PHP versions.
How an attack unfolds
An attacker crafts a malicious serialized payload and supplies it to any PHP application that calls unserialize on untrusted data; the vulnerable deserializer reads past allocated buffers, enabling integrity violations.
How to fix it
Upgrade PHP to version 5.6.31 or later, 7.0.21 or later, or 7.1.7 or later; disable unserialize on untrusted data where possible and replace with safe alternatives such as JSON.
How to confirm the fix worked
Confirm the installed PHP version is at or above the fixed releases; test that crafted serialized payloads no longer trigger crashes or unexpected behavior.
Typical attack path
- Identify an entry point that accepts serialized input (e.g., cookie, POST body, or cache entry)
- Generate a specially formed serialized string that triggers nested data structures
- Submit the payload to the unserialize call
- Observe or leverage resulting memory state changes to affect application integrity
How to detect it
Review web server and application logs for unusually large or malformed serialized strings; look for segmentation faults or abnormal process terminations in PHP workers after receiving untrusted input.
What your security team should do
- Prioritize patching PHP installations that accept user-supplied serialized data
- Review application code for direct or indirect calls to unserialize on external input
- Implement input validation or switch to JSON encoding for all serialization needs
- Monitor vulnerability feeds for any future exploitation reports despite current low EPSS
The record
The finish_nested_data function in ext/standard/var_unserializer.re in PHP before 5.6.31, 7.0.x before 7.0.21, and 7.1.x before 7.1.7 is prone to a buffer over-read while unserializing untrusted data. Exploitation of this issue can have an unspecified impact on the integrity of PHP.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Debian:7 | php5 | 0 | 5.4.45-0+deb7u11 |
| Debian:8 | php5 | 0 | 5.6.33+dfsg-0+deb8u1 |
| Debian:9 | php7.0 | 0 | 7.0.27-0+deb9u1 |
| Red Hat:rhel_software_collections:3::el6 | rh-php70-php | 0 | 0:7.0.27-1.el6 |
| Red Hat:rhel_software_collections:3::el6 | rh-php70-php-bcmath | 0 | 0:7.0.27-1.el6 |
| Red Hat:rhel_software_collections:3::el6 | rh-php70-php-cli | 0 | 0:7.0.27-1.el6 |
| Red Hat:rhel_software_collections:3::el6 | rh-php70-php-common | 0 | 0:7.0.27-1.el6 |
| Red Hat:rhel_software_collections:3::el6 | rh-php70-php-dba | 0 | 0:7.0.27-1.el6 |
| Red Hat:rhel_software_collections:3::el6 | rh-php70-php-dbg | 0 | 0:7.0.27-1.el6 |
| Red Hat:rhel_software_collections:3::el6 | rh-php70-php-debuginfo | 0 | 0:7.0.27-1.el6 |
| Red Hat:rhel_software_collections:3::el6 | rh-php70-php-devel | 0 | 0:7.0.27-1.el6 |
| Red Hat:rhel_software_collections:3::el6 | rh-php70-php-embedded | 0 | 0:7.0.27-1.el6 |
| Red Hat:rhel_software_collections:3::el6 | rh-php70-php-enchant | 0 | 0:7.0.27-1.el6 |
| Red Hat:rhel_software_collections:3::el6 | rh-php70-php-fpm | 0 | 0:7.0.27-1.el6 |
| Red Hat:rhel_software_collections:3::el6 | rh-php70-php-gd | 0 | 0:7.0.27-1.el6 |
| Red Hat:rhel_software_collections:3::el6 | rh-php70-php-gmp | 0 | 0:7.0.27-1.el6 |
| Red Hat:rhel_software_collections:3::el6 | rh-php70-php-imap | 0 | 0:7.0.27-1.el6 |
| Red Hat:rhel_software_collections:3::el6 | rh-php70-php-intl | 0 | 0:7.0.27-1.el6 |
| Red Hat:rhel_software_collections:3::el6 | rh-php70-php-json | 0 | 0:7.0.27-1.el6 |
| Red Hat:rhel_software_collections:3::el6 | rh-php70-php-ldap | 0 | 0:7.0.27-1.el6 |
| Red Hat:rhel_software_collections:3::el6 | rh-php70-php-mbstring | 0 | 0:7.0.27-1.el6 |
| Red Hat:rhel_software_collections:3::el6 | rh-php70-php-mysqlnd | 0 | 0:7.0.27-1.el6 |
| Red Hat:rhel_software_collections:3::el6 | rh-php70-php-odbc | 0 | 0:7.0.27-1.el6 |
| Red Hat:rhel_software_collections:3::el6 | rh-php70-php-opcache | 0 | 0:7.0.27-1.el6 |
| Red Hat:rhel_software_collections:3::el6 | rh-php70-php-pdo | 0 | 0:7.0.27-1.el6 |
| Red Hat:rhel_software_collections:3::el6 | rh-php70-php-pgsql | 0 | 0:7.0.27-1.el6 |
| Red Hat:rhel_software_collections:3::el6 | rh-php70-php-process | 0 | 0:7.0.27-1.el6 |
| Red Hat:rhel_software_collections:3::el6 | rh-php70-php-pspell | 0 | 0:7.0.27-1.el6 |
| Red Hat:rhel_software_collections:3::el6 | rh-php70-php-recode | 0 | 0:7.0.27-1.el6 |
| Red Hat:rhel_software_collections:3::el6 | rh-php70-php-snmp | 0 | 0:7.0.27-1.el6 |
| Red Hat:rhel_software_collections:3::el6 | rh-php70-php-soap | 0 | 0:7.0.27-1.el6 |
| Red Hat:rhel_software_collections:3::el6 | rh-php70-php-tidy | 0 | 0:7.0.27-1.el6 |
| Red Hat:rhel_software_collections:3::el6 | rh-php70-php-xml | 0 | 0:7.0.27-1.el6 |
| Red Hat:rhel_software_collections:3::el6 | rh-php70-php-xmlrpc | 0 | 0:7.0.27-1.el6 |
| Red Hat:rhel_software_collections:3::el6 | rh-php70-php-zip | 0 | 0:7.0.27-1.el6 |
| Red Hat:rhel_software_collections:3::el7 | rh-php70-php | 0 | 0:7.0.27-1.el7 |
| Red Hat:rhel_software_collections:3::el7 | rh-php70-php-bcmath | 0 | 0:7.0.27-1.el7 |
| Red Hat:rhel_software_collections:3::el7 | rh-php70-php-cli | 0 | 0:7.0.27-1.el7 |
| Red Hat:rhel_software_collections:3::el7 | rh-php70-php-common | 0 | 0:7.0.27-1.el7 |
| Red Hat:rhel_software_collections:3::el7 | rh-php70-php-dba | 0 | 0:7.0.27-1.el7 |
| Red Hat:rhel_software_collections:3::el7 | rh-php70-php-dbg | 0 | 0:7.0.27-1.el7 |
| Red Hat:rhel_software_collections:3::el7 | rh-php70-php-debuginfo | 0 | 0:7.0.27-1.el7 |
| Red Hat:rhel_software_collections:3::el7 | rh-php70-php-devel | 0 | 0:7.0.27-1.el7 |
| Red Hat:rhel_software_collections:3::el7 | rh-php70-php-embedded | 0 | 0:7.0.27-1.el7 |
| Red Hat:rhel_software_collections:3::el7 | rh-php70-php-enchant | 0 | 0:7.0.27-1.el7 |
| Red Hat:rhel_software_collections:3::el7 | rh-php70-php-fpm | 0 | 0:7.0.27-1.el7 |
| Red Hat:rhel_software_collections:3::el7 | rh-php70-php-gd | 0 | 0:7.0.27-1.el7 |
| Red Hat:rhel_software_collections:3::el7 | rh-php70-php-gmp | 0 | 0:7.0.27-1.el7 |
| Red Hat:rhel_software_collections:3::el7 | rh-php70-php-intl | 0 | 0:7.0.27-1.el7 |
| Red Hat:rhel_software_collections:3::el7 | rh-php70-php-json | 0 | 0:7.0.27-1.el7 |
| Red Hat:rhel_software_collections:3::el7 | rh-php70-php-ldap | 0 | 0:7.0.27-1.el7 |
| Red Hat:rhel_software_collections:3::el7 | rh-php70-php-mbstring | 0 | 0:7.0.27-1.el7 |
| Red Hat:rhel_software_collections:3::el7 | rh-php70-php-mysqlnd | 0 | 0:7.0.27-1.el7 |
| Red Hat:rhel_software_collections:3::el7 | rh-php70-php-odbc | 0 | 0:7.0.27-1.el7 |
| Red Hat:rhel_software_collections:3::el7 | rh-php70-php-opcache | 0 | 0:7.0.27-1.el7 |
| Red Hat:rhel_software_collections:3::el7 | rh-php70-php-pdo | 0 | 0:7.0.27-1.el7 |
| Red Hat:rhel_software_collections:3::el7 | rh-php70-php-pgsql | 0 | 0:7.0.27-1.el7 |
| Red Hat:rhel_software_collections:3::el7 | rh-php70-php-process | 0 | 0:7.0.27-1.el7 |
| Red Hat:rhel_software_collections:3::el7 | rh-php70-php-pspell | 0 | 0:7.0.27-1.el7 |
| Red Hat:rhel_software_collections:3::el7 | rh-php70-php-recode | 0 | 0:7.0.27-1.el7 |
| Red Hat:rhel_software_collections:3::el7 | rh-php70-php-snmp | 0 | 0:7.0.27-1.el7 |
| Red Hat:rhel_software_collections:3::el7 | rh-php70-php-soap | 0 | 0:7.0.27-1.el7 |
| Red Hat:rhel_software_collections:3::el7 | rh-php70-php-xml | 0 | 0:7.0.27-1.el7 |
| Red Hat:rhel_software_collections:3::el7 | rh-php70-php-xmlrpc | 0 | 0:7.0.27-1.el7 |
| Red Hat:rhel_software_collections:3::el7 | rh-php70-php-zip | 0 | 0:7.0.27-1.el7 |
| SUSE:Linux Enterprise Module for Web and Scripting 12 | php5 | 0 | 5.5.14-109.8.2 |
| SUSE:Linux Enterprise Module for Web and Scripting 12 | php7 | 0 | 7.0.7-50.18.1 |
| SUSE:Linux Enterprise Server 11 SP4 | php53 | 0 | 5.3.17-112.5.1 |
| SUSE:Linux Enterprise Server for SAP Applications 11 SP4 | php53 | 0 | 5.3.17-112.5.1 |
| SUSE:Linux Enterprise Software Development Kit 11 SP4 | php53 | 0 | 5.3.17-112.5.1 |
| SUSE:Linux Enterprise Software Development Kit 12 SP2 | php5 | 0 | 5.5.14-109.8.2 |
| SUSE:Linux Enterprise Software Development Kit 12 SP2 | php7 | 0 | 7.0.7-50.18.1 |
| SUSE:Linux Enterprise Software Development Kit 12 SP3 | php5 | 0 | 5.5.14-109.8.2 |
| SUSE:Linux Enterprise Software Development Kit 12 SP3 | php7 | 0 | 7.0.7-50.18.1 |
| Ubuntu:14.04:LTS | php5 | 0 | 5.5.9+dfsg-1ubuntu4.23 |
| Ubuntu:14.04:LTS | php5 | 0 | 5.5.9+dfsg-1ubuntu4.29+esm2 |
| Ubuntu:16.04:LTS | php7.0 | 0 | 7.0.22-0ubuntu0.16.04.1 |
| Ubuntu:Pro:14.04:LTS | php5 | 0 | 5.5.9+dfsg-1ubuntu4.29+esm2 |
Related vulnerabilities
- CVE-2016-10158 The exif_convert_any_to_int function in ext/exif/exif.c in PHP before 5.6.30, 7.0.x… Also affects php5
- CVE-2016-10161 The object_common1 function in ext/standard/var_unserializer.c in PHP before 5.6.30… Also affects php5
- CVE-2016-7479 In all versions of PHP 7, during the unserialization process, resizing the 'properties'… Also affects php5
- CVE-2016-7478 Zend/zend_exceptions.c in PHP, possibly 5.x before 5.6.28 and 7.x before 7.0.13, allows… Also affects php5
- CVE-2016-7418 The php_wddx_push_element function in ext/wddx/wddx.c in PHP before 5.6.26 and 7.x before… Also affects php5
- CVE-2016-7124 ext/standard/var_unserializer.c in PHP before 5.6.25 and 7.x before 7.0.10 mishandles… Also affects php5
- CVE-2016-5771 spl_array.c in the SPL extension in PHP before 5.5.37 and 5.6.x before 5.6.23 improperly… Also affects php5
- CVE-2016-6296 Integer signedness error in the simplestring_addn function in simplestring.c in… Also affects php5