Back to the Web Application Firewall section
CVE-2026-109618 and CVE-2026-109619, reported under the name "PHP2Shell", are two remote code execution flaws in the PHP engine. Both are scored 9.2 (CVSS v4.0). According to the reports, anyone who can send HTTP requests to a PHP application can run code on the server without logging in. The PHP project had not confirmed the technical details when this page was written (21 October 2026).
This page is about the websites you publish through the Artica reverse proxy.
The Artica appliance itself is covered by PHP2Shell remote code execution in PHP.
The reverse proxy reads every request before the PHP server does, so it can stop a malicious request on the way. It does not repair PHP: update the PHP servers behind it as soon as fixed versions are published.
Any website whose server runs PHP is concerned:
WordPress, Drupal, Nextcloud, PrestaShop, Moodle, GLPI or an in-house application.
The PHP server can sit behind the reverse proxy (site type Reverse Proxy) or be hosted by the appliance (site type Web site using PHP).
Websites that run no PHP at all (static pages, Java, .NET, Node.js) are not affected by these two flaws.
| Method | What it stops | Limit |
|---|---|---|
| Authentication in front of the website (OIDC SSO) | Every request from a visitor who has not logged in, whatever the attack technique. | Only for websites whose users have an account with an identity provider. Not offered for the Web site using PHP type. |
| Web Application Firewall rule on the upload progress field | The attack path suggested by the published workaround, on any website, public ones included. | No effect if the real exploit goes through another part of PHP. |
| Countries (Deny), Reputation service, CrowdSec Checking | Part of the attackers, based on where they come from or on their history. | A targeted attacker can use an address that none of these lists blocks. |
For a website reserved for staff or partners, use authentication. For a public website, use the WAF rule. Both can be combined.
All these settings are on the website itself: Web services, click the website name, then the Security section of the General settings tab.
With OIDC SSO enabled, the reverse proxy sends each visitor to your OpenID Connect identity provider before forwarding anything.
A request without a valid session is answered by the reverse proxy and never reaches the PHP server.
.well-known/openid-configuration), the client ID and the client secret given by your identity provider.The workaround published for these flaws is to turn off the PHP upload progress feature (session.upload_progress.enabled), which suggests that the attack goes through it.
PHP starts tracking an upload when the request carries a form field named PHP_SESSION_UPLOAD_PROGRESS.
Ordinary web applications almost never send it, so the rule below refuses any request that contains it.
The Web Application Firewall must be installed on the appliance.
If it is not, see Install the Web Application Firewall.
The default action decides whether the WAF blocks anything on this website.
With Alert and Pass it only writes events, and the rule below would let every request through.
Alert and Deny also lets the standard OWASP rules block requests on this website.
Watch the Web Firewall Audit page for a few days after the change.
If a legitimate request is refused, exclude the rule concerned as explained in Disable rules using threats events.
| Field | Value |
|---|---|
| Enabled | ON |
| Name | Upload progress field present |
| Scope | ARGS (click Browse...) |
| Operator | Does not exist |
| Negation | ON |
| Fields | PHP_SESSION_UPLOAD_PROGRESS |
| Pattern | leave empty |
Does not exist combined with Negation means "the field is present". The ARGS scope covers the query string, ordinary form posts and file upload forms (multipart).
Back on Web Firewall > Rules, click Compile your rules. The reverse proxy checks the new configuration, then reloads the web server.
The rule is active once Success is displayed.
Known issue: on reverse proxies where GeoIP is enabled, builds released before 21 October 2026 answer Error... at this step and apply nothing.
The reverse proxy log then contains unknown "geoip2_data_country_code" variable. The fix is in the next reverse proxy update.
From any computer, send one request with the field and one without it. Use the scheme and port the website really listens on: a request sent in HTTPS to a website published only in HTTP is answered by another website.
echo test > test.txt
# With the field: the reverse proxy answers 405
curl -s -o /dev/null -w '%{http_code}\n' -F PHP_SESSION_UPLOAD_PROGRESS=test -F file=@test.txt https://www.example.com/index.php
# Without the field: the website answers as usual
curl -s -o /dev/null -w '%{http_code}\n' -F file=@test.txt https://www.example.com/index.php
Each blocked request appears in Web Firewall Audit with the number and the name of the rule.
session.upload_progress.name), put that name in Fields.php_session_upload_progress is refused too.