Engine V3.4.0 Exploit - Zend
class Vuln
function __destruct()
// Override get_properties pointer via memory spray
$obj = new Vuln();
// Trigger via unserialize() with crafted property handler offset
One of the most famous exploits targeting the ZE v3.4.0 era was the "PHP phar:// deserialization" vulnerability. While the bug existed in the phar extension, the root cause lived in the Zend Engine's object instantiation handlers.
The Mechanism:
When PHP unserializes data, the Zend Engine calls zend_object_std_init. In v3.4.0, a race condition existed between the destruction of a class's __destruct method and the restoration of the object's properties. zend engine v3.4.0 exploit
Exploit Workflow:
Consequences: An attacker could overwrite the zend_object handlers table, redirecting function calls (like get_class) to system(), achieving RCE with the server's privileges. One of the most famous exploits targeting the ZE v3
| Component | Vulnerability Type | Example |
|-----------|--------------------|---------|
| zend_gc (garbage collector) | Use-after-free | Recursive array destruction |
| zend_hash (HashTable) | Double free / out-of-bounds read | Crafted array keys |
| zend_objects (object handlers) | Type confusion | Overriding get_properties |
| zend_vm (opcode handlers) | JIT miscompilation (not in 3.4.0) | N/A (no JIT yet) |
| zend_string | Off-by-one | zend_string_realloc | zend engine v3.4.0 exploit