Task 1: Introduction
On 21 October 2026 the PHP project disclosed two vulnerabilities that, between them, let an unauthenticated attacker run commands on almost any PHP server with nothing but ordinary HTTP requests, and began shipping emergency fixes across every supported branch. No login, no file upload the application accepts, and no bug in the application itself: the flaw lives in the PHP runtime, below whatever framework or CMS happens to be installed. The disclosure was named PHP2Shell, and because the vulnerable code has been present since PHP 5.4.0 in 2012, it reaches fourteen years of releases at once.
The two issues are tracked as CVE-2026-109618 and CVE-2026-109619, both scored 9.2 Critical on CVSS v4.0. They were found by researchers at Wiz, OpenAI and Calif, reported privately to the PHP security team, and patched in PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35. Details leaked a day before the fix, and network sensors recorded exploitation attempts within hours of disclosure, some even before the patched releases were out, so this is a live threat rather than a theoretical one.
This room takes you through the vulnerability from the ground up. You will see the harmless PHP feature it abuses, understand the single mistake in the engine that turns that feature into a weapon, and then run a working exploit against a vulnerable server in the lab to read a flag as the web server user. The focus throughout is on why the bug exists and why patching the application does nothing to stop it.
Learning Objectives
- Explain what
session.upload_progressdoes and why it runs before any application code. - Understand how a PHP memory bailout leaves a dangling pointer that survives into the next request.
- Distinguish the two CVEs: a memory-disclosure path and a remote-code-execution path.
- Run the public exploit chain to leak memory, defeat ASLR and execute a command.
- Detect the attack and apply the mitigations that actually work.
Connecting to the Lab
Start the target by pressing the Start Machine button at the top of this task. Give it about two minutes to boot. The machine runs a vulnerable copy of PHP (8.4.26) behind Apache, served from a container that listens on 127.0.0.1:8088, so you attack it from a shell on the machine itself rather than across the network.
Connect over SSH using the credentials below, from the AttackBox or your own terminal:
Credentials
Everything you need is already on the machine: the vulnerable server is running, and the exploit is in the ubuntu user's home directory. Work through the tasks in order, as each one builds on the last.