PHP2Shell: Is Your Self-Hosted Phone System at Risk?

On 21 October 2026 the PHP project shipped emergency releases for two flaws in the PHP runtime itself, CVE-2026-109618 and CVE-2026-109619, which researchers have named PHP2Shell. Both are rated 9.2 out of 10, both can be reached by a single request from someone who has not logged in, and details had leaked a day before the fixes landed. Security firms reported probing traffic within hours. That matters to anyone who hosts their own phone system, because a large part of the self-hosted PBX world is managed through PHP: FreePBX and the products built on it, Issabel, FusionPBX and several billing platforms. Even where the phone software itself is not PHP, as appears to be the case with 3CX, the server it runs on often shares a host or a network with things that are. This briefing explains how PHP2Shell works at a technical level, which phone platforms are exposed, what an attacker gets from a compromised PBX, and the exact steps to take today.

Security Alert Β· PHP2Shell Β· 22 October 2026

PHP2Shell and Your Self-Hosted Phone System

Two critical PHP flaws went public on 21 October and were being probed within hours. If you run your own PBX, or anything with a PHP admin panel beside it, your call recordings, voicemail, call logs and SIP credentials are only as safe as the PHP version on that box. Here is how the bugs work and what to do today.

πŸ“… ⏱ 11 min read πŸ‡¦πŸ‡Ί Australian owned, Australian hosted, Australian supported
TL;DR

What it is: two bugs in PHP itself, not in any one application. One leaves request data half built when PHP runs out of memory; the other lets state from one request leak into the next on the same worker. Who is exposed: any PHP that serves web requests, with Apache mod_php the highest risk. Fixed in: PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35. PHP 8.1 and older get no official release. Phone systems: FreePBX, PBXact and Issabel run PHP and are under investigation; FusionPBX and ASTPP are listed as vulnerable on the NCSC-NL tracker. 3CX does not appear to use PHP, but check what else shares the server. Today: patch, restart every PHP worker, take the admin panel off the internet, and check call records for toll fraud.

What PHP2Shell Is

PHP2Shell is the name given to two vulnerabilities in the PHP language runtime, disclosed together on 21 October 2026. The PHP project describes them in its security release notes as remote code execution flaws that can be triggered without authentication, and rates both 9.2 under CVSS version 4. They were reported by researchers from Calif, Wiz, OpenAI and Quarkslab.

9.2
CVSS v4 score for each flaw, rated critical by the PHP project.
1
unauthenticated request is enough to reach the vulnerable code.
5.4
the oldest PHP release researchers believe is affected.

The timeline was compressed. Details leaked on 20 October, ahead of the planned disclosure. Fixed releases went out at 14:00 UTC on 21 October, which was 1am on 22 October in Sydney and Melbourne. ELLIO, which runs sensor networks, recorded the first exploit shaped request at 08:36 UTC on 21 October, more than five hours before the fix was public. Cloudflare reported attack traffic against its customers the same day, and by the early hours of 22 October ELLIO had seen the same route used to drop a botnet binary onto servers.

BranchFixed releaseStatus
PHP 8.58.5.12Supported, update now
PHP 8.48.4.27Supported, update now
PHP 8.38.3.36Supported, update now
PHP 8.28.2.35Supported, update now
PHP 8.1, 8.0, 7.4None from php.netMinimal source backports only, or your distribution or LTS vendor
PHP 7.3 and olderNoneUpgrade or take offline

How the Two Flaws Work

Both bugs live in the gap between PHP stopping a request abruptly and PHP cleaning up after it.

When a request hits a fatal condition, the classic one being memory_limit, PHP does not unwind politely. It performs what the engine calls a bailout: a longjmp() straight out of whatever it was doing, back to the request's top level. That is fast, and for decades it was considered safe. The researchers showed it is not always safe, because a bailout can land after PHP has published a pointer or claimed a slot somewhere, but before the bookkeeping that makes that pointer valid has run.

CVE-2026-109618: corruption on out of memory

In the PHP project's words, out of memory handling "can interrupt PHP while internal request data is only partially initialized", and request cleanup "may then treat the invalid data as valid". An attacker who can push a request to its memory limit at the right moment leaves half built structures behind, and the cleanup code reads them.

CVE-2026-109619: stale global state

Here, request owned state "can survive after its backing memory has been freed", and "a later request handled by the same worker may use that stale state before normal initialization resets it". In other words, one request poisons the worker, and the attacker's next request on that worker uses the poisoned state.

Imperva's analysis describes five techniques built on these primitives: use after free conditions in the session decoder and session module data, a stale class cache pointer in OPcache shared memory that can redirect a file operation, an oversized session ID that leaks around 67 KB of process memory back in the Set-Cookie: PHPSESSID header, and a use after free in fatal error backtraces on PHP 8.5. Turning a crash into reliable code execution is the hard part, because the attacker has to get crafted data into freed memory on the same worker before it is reused. That is why the attack complexity is rated high, and also why it matters that the attempts are already automated.

Why the process model matters

Both flaws depend on a worker serving more than one request. That describes Apache prefork with mod_php, where each Apache child is a long lived PHP worker, and PHP-FPM pools, where workers handle many requests before recycling. The PHP project names mod_php as the highest risk. php-cgi, FrankenPHP and LiteSpeed are also listed as affected. Code that runs only from the command line, such as cron jobs, is not reachable by a web request.

Why No Login Is Needed

Most web application flaws need the attacker to reach a vulnerable page, often after logging in. PHP2Shell does not, because three of the five techniques use the session upload progress feature, session.upload_progress.enabled. It is on by default.

When upload progress is enabled, PHP watches every incoming multipart/form-data body for a field named after session.upload_progress.name, which defaults to PHP_SESSION_UPLOAD_PROGRESS, and writes progress into the session while it is still parsing the body. That happens inside the runtime, before your application has run a single line. So a login page, a provisioning endpoint or a script that only prints a static message can all be used to drive session handling and memory use. The requests ELLIO captured were exactly that shape: multipart POSTs carrying the progress field, hundreds of empty file fields, deeply nested field names, and bodies from a few hundred kilobytes up to 37 MB.

Code execution means the web server's account

Successful exploitation runs code as whichever user the PHP worker runs as. On a dedicated web server that limits the damage. On a phone system it often does not, as the next section explains.

Why Phone Systems Are an Obvious Target

A PBX is an unusually rich target, and the PHP admin panel is usually its front door.

  • The web user is the phone user. On a standard FreePBX build, Apache runs as the same asterisk account that runs the telephony engine. Code running as the web server can read Asterisk's configuration and everything it can reach.
  • Recordings and voicemail. Call recordings and voicemail audio sit on the same disk, often for years. For a clinic, law firm or agency that is sensitive personal information under the Privacy Act.
  • Call records. CDRs show who your business calls, when and for how long. That is a map of your customers and suppliers.
  • SIP trunk credentials. The username and password your PBX uses to place calls through your carrier. With those, an attacker can place calls on your account from anywhere.
  • Toll fraud. The usual way a hacked PBX is monetised is calls to premium and international numbers, often over a weekend. The bill arrives later and is usually yours to pay.
  • A foothold. A PBX sits on the office network, often with a route to the internet for remote extensions and provisioning. It is a quiet place to stay.

The admin panels are also more exposed than most owners realise. Remote handset provisioning, user portals for voicemail and recordings, and installers who want to log in from home all push the web interface onto the open internet.

Which Phone Platforms Run PHP

The Dutch National Cyber Security Centre keeps a public PHP2Shell software tracker. This is where the common phone platforms stood when we checked on 22 October. "Investigation" means the product is confirmed to use PHP but the vendor has not yet said whether these flaws can be reached. Check the tracker and your vendor before relying on any line here.

PlatformPHPNCSC-NL status, 22 Oct 2026
FreePBX 17PHP 8.2 tested platformInvestigation
PBXact 17 (Sangoma, commercial FreePBX)PHP 8.2Investigation
Issabel 5PHP 7.4Investigation
FusionPBXPHP-FPM, version depends on installVulnerable when run on an affected PHP
ASTPP v7 (VoIP billing)PHP 8.2Vulnerable
3CXNo public indication of PHPNot listed

Two rows deserve a comment. Issabel 5 ships PHP 7.4, which has had no official PHP release for some time, so there will be no 7.4.x update to install; the options are a distribution or vendor backport, the PHP project's minimal source backport, or moving off it. And older FreePBX releases such as 15 and 16 commonly sit on PHP versions that are also past end of life. If you inherited a PBX that has not been upgraded in a few years, assume it is in that group until you have checked.

Where 3CX Fits

We want to be precise here, because there is plenty of loose talk about 3CX. From everything published, 3CX on Linux runs its own Nginx web server and its own PostgreSQL database, and nothing public suggests the 3CX management console depends on PHP. It does not appear on the NCSC-NL tracker. On that evidence PHP2Shell is not a 3CX vulnerability, and you should check 3CX's own security notices rather than take anyone's word for it, including ours.

That does not mean a self-hosted 3CX system is outside the blast radius. Three common situations put it inside:

  • Shared boxes. 3CX on a VPS or office server that also runs a website, a WordPress install, a call recording viewer, a wallboard or a monitoring panel written in PHP.
  • Shared networks. A PHP based provisioning server, CRM or booking system on the same network segment as the PBX, with nothing between them.
  • Shared people. The same administrator credentials used on the PHP apps and the PBX console, so data stolen from one opens the other.

The wider point applies to every self-hosted phone system. When you run it yourself, you are the security team for the operating system, the web server, the database, the runtime and every other package on the box, not just the phone software. PHP2Shell is one bad week. The 3CX desktop app supply chain compromise in 2023 was another. Our 3CX migration guide covers the move if you are weighing it up.

What to Do Today

In order of priority. If you look after phone systems for clients, do this for every one of them.

  1. Find every PHP that answers web requests. On each box run php -v, but remember the command line can differ from the web runtime. Check the SAPI that actually serves requests: the FPM service version, or apachectl -M for php_module. Include anything sharing the host or network with the PBX.
  2. Update. Install 8.5.12, 8.4.27, 8.3.36 or 8.2.35, or your distribution's patched package. Distributions and LTS vendors had fixes before the public release, so apt update or dnf update should offer them. Help Net Security notes that the volunteer run Remi repository had no update at the time of its report.
  3. Restart every worker. Restart PHP-FPM pools and Apache fully. A patched package does nothing for workers already running the old code, and CVE-2026-109619 lives in long lived workers.
  4. If you cannot patch yet, apply the interim settings the PHP project published, in php.ini or the pool or Apache config, never through ini_set() or .user.ini, then restart: session.upload_progress.enabled = 0, memory_limit = -1 with a sensible post_max_size, and on PHP 8.5 fatal_error_backtraces = 0. Replace the memory limit with a container or cgroup limit, and do not use RLIMIT_AS or RLIMIT_DATA, which can trigger the bug. The PHP project is clear these reduce risk and do not make an install safe.
  5. Take the admin panel off the internet. The FreePBX or FusionPBX GUI and user portals should be reachable only over a VPN or from a short allow list of addresses. Do it today and leave it that way after you patch.
  6. Limit requests at the edge. Block multipart/form-data on endpoints that never take uploads, and cap body size, part count, field count and headers on the ones that do. ELLIO points out that a size cap alone misses bodies that stay under post_max_size.
  7. If you cannot do any of that, take it offline. That is the UK NCSC's advice for systems that cannot be fixed straight away. Route calls to mobiles in the meantime.
  8. Assume exposure if it was public and unpatched. Rotate SIP trunk passwords, admin passwords and API keys, set or lower spend limits with your carrier, and turn on international call barring you do not need.

Signs Someone Has Already Tried

Where to lookWhat it looks like
Web server access logsMultipart POSTs containing PHP_SESSION_UPLOAD_PROGRESS, boundaries beginning ----p2s, very large bodies, hundreds of empty file fields, deeply nested field names
PHP and FPM error logsBursts of "Allowed memory size exhausted" errors and worker segfaults from the same addresses
Response headersUnusually large PHPSESSID values in Set-Cookie, a sign of the memory disclosure technique
Process listPHP workers, or the asterisk user, spawning shells, interpreters, curl, wget or unfamiliar binaries
File systemNew PHP files in web directories, new cron entries, new SSH keys, unfamiliar files in /tmp
Call detail recordsCalls to international or premium numbers you do not normally call, especially overnight or at weekends, and new extensions or trunks you did not create
If you find something, do not just patch

Patching closes the door for the next attacker. It does not remove anyone already inside. If any of the signs above show up, take the box off the network, keep the logs, and rebuild from known good media with fresh credentials. Report the incident to the Australian Cyber Security Centre through ReportCyber, and if personal information may have been accessed, assess whether the Notifiable Data Breaches scheme applies.

The Case for Not Being Your Own Patch Team

Nothing about PHP2Shell is a reason to panic about cloud phone systems or a reason to throw out a well run on premises PBX. Plenty of IT providers patched overnight and went back to bed. It is a reminder of the job you take on when the phone system lives on your own server, and of how short the gap now is between a fix being published and attacks starting. Our guide to hosted versus on premise PBX sets out the trade offs fairly.

With Uniden Voice there is no PBX server in your office or on your VPS for you to patch. The platform is ours to run and maintain in Australia, and the only things on your side are the apps and handsets. For what it is worth, unidenvoice.com itself runs on PHP, and it was on the fixed 8.5.12 release when we checked on 22 October. The questions to ask any provider, us included, are the same: who patches the platform, how quickly, and how will you hear about it. Our wider piece on phone system security covers the rest of the list.

Done being your own patch team?

Talk to us about moving your numbers onto a phone system that someone else keeps patched. Setup and porting are free, and your old service stays live until the port is complete.

Book a Demo Or call 1300 881 662

Frequently Asked Questions

What is PHP2Shell?
PHP2Shell is the name for two critical vulnerabilities in the PHP runtime, CVE-2026-109618 and CVE-2026-109619, which the PHP project fixed on 21 October 2026. Both can allow remote code execution without logging in and are rated 9.2 under CVSS version 4. The first comes from the way PHP aborts a request when it runs out of memory, which can leave internal request data half initialised for the cleanup code to trust. The second lets internal state from one request survive after its memory has been freed, so a later request on the same worker can use it. Because the session upload progress feature processes request bodies before any application code runs, an attacker can reach the flaws on almost any page of a PHP site. The fixed releases are PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35.
Is 3CX affected by PHP2Shell?
On the evidence available on 22 October 2026, PHP2Shell is not a 3CX vulnerability. 3CX on Linux runs its own Nginx web server and PostgreSQL database, nothing published suggests its management console depends on PHP, and it does not appear on the Dutch NCSC's PHP2Shell software tracker. Check 3CX's own security notices to confirm. A self-hosted 3CX system can still be put at risk by PHP software around it: a website, call recording viewer, wallboard or provisioning tool on the same server, a PHP application on the same network segment with nothing between them, or administrator passwords shared between a PHP app and the 3CX console. Check every PHP install that shares the host or network with your PBX, patch it, and keep the 3CX console off the open internet.
Is FreePBX vulnerable to PHP2Shell?
FreePBX is a PHP application, so it is only as safe as the PHP it runs on. On 22 October 2026 the Dutch NCSC tracker listed FreePBX 17 and Sangoma's PBXact 17 as under investigation, meaning the PHP dependency is confirmed but the vendor had not said whether the flaws can be reached through its code. The safe assumption is that an internet facing FreePBX on an unpatched PHP is exposed. Update PHP to a fixed release or your distribution's patched package, restart Apache and every PHP worker, and put the admin interface behind a VPN or an allow list. Older FreePBX versions often run PHP releases that are past end of life and will not get an official update, so they need a backport, an upgrade or to come off the internet. If an unpatched system was public, rotate trunk and admin credentials and check your call records for toll fraud.
How do I check if my server is patched against PHP2Shell?
Check the PHP that serves web requests, not just the command line, because they can be different builds. Running php -v shows the command line version. For the web side, check the PHP-FPM service version or the PHP module loaded into Apache, or use a temporary script that prints the version, and delete it straight away. A patched server shows 8.5.12, 8.4.27, 8.3.36, 8.2.35 or later on the same branch, or a distribution package whose changelog names CVE-2026-109618 and CVE-2026-109619. Then make sure every PHP-FPM pool and Apache process has been restarted since the update, because workers that were already running keep the old code in memory. Do this for every server that shares a host or network with your phone system, not only the PBX itself.
What can an attacker do with a hacked phone system?
Quite a lot, which is why phone systems are an attractive target. Code running as the web server on a typical FreePBX build runs as the same account as the telephony engine, so it can read call recordings, voicemail, call detail records and configuration, including the SIP trunk username and password your system uses to make calls through your carrier. The most common way attackers make money from a hacked PBX is toll fraud: placing large numbers of calls to premium and international numbers, usually overnight or across a weekend, which the business is generally left to pay for. A compromised PBX can also expose sensitive customer conversations, give the attacker a foothold on the office network, or be enrolled in a botnet. Spend limits and international barring with your carrier reduce the cost if it happens.
Are cloud phone systems safe from PHP2Shell?
A cloud phone system moves the patching job from you to the provider, which is the point, but it does not make the question go away. You should still ask any provider who patches the platform, how quickly they act on a critical issue like this one, and how customers are told. With a cloud system there is no PBX server, admin panel or PHP runtime in your office or on your virtual server for an attacker to reach, and the things on your side are apps and handsets that update themselves. The provider's websites and portals may well run PHP, as most of the web does, so it is reasonable to ask whether those were updated too. For Uniden Voice, unidenvoice.com was running the fixed PHP 8.5.12 release when we checked on 22 October 2026.

What to Read Next

Your next reads

Australia’s smartest AI-powered cloud phone system. Australian owned, Australian hosted, Australian supported. unidenvoice.com | 1300 881 662