On 20 and 21 October 2026, an announced PHP security release became an operational response. Two critical vulnerabilities affected PHP installations serving web requests. For us, that meant inventorying the estate, validating vendor information, prioritising exposed systems, increasing monitoring, deploying updates under change control and testing applications afterwards.

We observed attack attempts. Based on the evidence available to us so far, those attempts were not successful. That wording is deliberate: it reports the current result of our analysis without claiming that every conceivable activity can be excluded with absolute certainty.

In regularly maintained customer environments, we implemented the required security measures without service interruption. Zero downtime was not a single trick; it resulted from maintained package levels, known dependencies and repeatable operating procedures. Two older environments also demonstrated why deferred modernisation can turn a security update into a migration project.

PHP2Shell: Two critical vulnerabilities in PHP

The PHP project released security updates for CVE-2026-109618 and CVE-2026-109619 on 21 October 2026. Both vulnerabilities had been rated CVSS v4.0 9.2 and can allow unauthenticated remote code execution. The affected surface includes PHP runtimes serving web requests, such as PHP-FPM, Apache with mod_php, php-cgi, FrankenPHP and LiteSpeed.

CVE-2026-109618

Technical cause
Out-of-memory handling can leave internal request data only partially initialised before cleanup uses it.
Fixed upstream versions
PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35

CVE-2026-109619

Technical cause
Request-owned global state can survive freed memory and be reused by a later request in the same worker.
Fixed upstream versions
PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35

A visible version string alone is not sufficient evidence of patch status on Linux. Distributions can backport fixes into their own package revisions. We therefore evaluated installed packages, repositories, active PHP SAPIs and vendor advisories together. Ubuntu USN-8948-1, for example, documents fixed package revisions for several supported Ubuntu releases.

Security monitoring: Detecting and classifying attack attempts

An alert is not yet an incident, and a suspicious request does not prove a successful compromise. We correlated web server, application and security events, placed them on a common timeline and compared them with package and runtime states. The key question was whether an observation represented automated scanning or whether additional evidence indicated execution, file changes, unusual child processes or persistence.

  • identify exposed PHP applications and the runtimes actually serving requests
  • correlate suspicious access, process events and file changes
  • prioritise systems by exposure and criticality
  • assess patch status through distribution packages rather than `php -v` alone
  • document application and service checks after every change

Wazuh and centralised security analysis

Wazuh provides a central view of security-relevant events in this workflow. Agents send data to the central platform, where log events, integrity changes, vulnerability information and other signals can be analysed and prioritised. This makes it easier to identify patterns across systems.

Wazuh does not automatically prevent PHP2Shell. It helps us classify observations and direct follow-up work. We also do not claim that dedicated PHP2Shell rules were introduced, because that is not part of the documented response. Our Wazuh page explains the broader monitoring approach.

Fail2ban: Adapting protective controls to the threat situation

In parallel, we reviewed existing Fail2ban configurations and adjusted detection and blocking conditions. The objective was to identify recurring suspicious access patterns earlier and, where the evidence justified it, block them sooner. Public reporting does not include internal filters, thresholds, ban durations or addresses.

Fail2ban remains an additional layer. It can react to repeated patterns visible in logs, but it cannot replace a security update or sound application configuration. Rules that are too aggressive can also create false positives and disrupt legitimate use. Protection and operational risk must therefore be assessed together.

Security awareness starts before the incident

Operational security awareness is more than reading advisories. It is the ability to map an advisory to the actual estate: which applications use PHP directly or embed it, which runtime is active, who owns approval and operations, which change is immediately possible, and where isolation, backup or compatibility testing must come first.

The PHP project’s advance notice on 20 October provided a short preparation window. We used it for inventory, prioritisation and controlled update planning. When fixes became available on 21 October, the next steps were already defined.

Patch management: Zero downtime on regularly maintained systems

For regularly maintained environments, fixed package revisions were deployed shortly after they became available. We then verified active FPM services, web servers, authentication, sessions, database access and application-specific functions. These environments received the security measures without service interruption.

Here, zero downtime is the result of continuous maintenance: supported versions, traceable configuration, known dependencies, monitoring and a rehearsed recovery path reduce the number of unknowns. Where a vendor supplies a backport, its package revision is decisive. Where no confirmed fix exists, the status remains open and must be managed accordingly.

Two customers where security work became migration work

For two anonymised customer environments, a routine package update was not enough. The need for modernisation had already been identified but had not yet been implemented. During a security event this reduces the available options: an unsupported application or incompatible custom code cannot be repaired reliably through a runtime update alone.

This is not about assigning blame. It is an operational lesson: technical debt often becomes most expensive when there is the least time available to resolve it.

Shopware 5 to Shopware 6: Secure first, then migrate

For an older Shopware 5 environment, public sales were disabled under controlled conditions. Before migration, we created a complete backup of the database, web root and relevant system configuration. Checksums confirmed integrity, and the backup was actually restored in an isolated environment.

  • back up the existing environment and verify the backup set
  • restore the database and complete web root in isolation
  • build a new Shopware 6 environment with a fixed PHP runtime
  • migrate business data through the intended migration path
  • document technical parity and known deviations
  • deploy the new environment in maintenance mode and preserve rollback

The technical migration has been completed, but the shop is not yet approved for normal sales. Extensions, payment flows, storefront work and functional acceptance remain separate work packages. That boundary matters: successful data migration is not the same as business release.

WordPress: When custom themes become the deciding factor

A second environment combined an older WordPress Multisite with custom themes. Core, plugin and PHP updates are necessary there, but they are not automatically sufficient. If a theme contains code that is incompatible with a current PHP runtime, that code must be analysed and adapted while preserving content, functions, navigation and SEO-relevant structures.

This modernisation focused in particular on the compatibility of the custom themes with current WordPress and PHP versions and on preserving existing functionality. Such changes must be implemented in a controlled manner and then assessed for their effects across the entire Multisite.

Enterprise IT Operations: How we apply ITIL and ITSM principles

We align our operational processes with established IT Service Management principles and the corresponding ITIL practices. This is not a claim of ITIL or ISO certification. It describes how we structure technical work and make it traceable.

Enterprise maturity is not determined by infrastructure size alone. It is also visible in how changes are prepared, risks assessed, measures documented and systems restored.

Monitoring and Event Management

How ForgeOne applies it
Infrastructure monitoring, Wazuh, log analysis and event assessment

Incident Management

How ForgeOne applies it
Classify unusual events, limit impact and coordinate the response

Information Security Management

How ForgeOne applies it
Assess risk, prioritise protective measures and maintain security awareness

Change Enablement

How ForgeOne applies it
Review change risk, dependencies, approval and recovery before implementation

Release Management

How ForgeOne applies it
Evaluate software levels and approve them for deployment

Deployment Management

How ForgeOne applies it
Install packages and applications under control and verify the result

Service Configuration Management

How ForgeOne applies it
Keep system states, runtimes, repositories and dependencies traceable

Service Continuity Management

How ForgeOne applies it
Plan backups, tested restoration and rollback options

Continual Improvement

How ForgeOne applies it
Feed findings back into monitoring, Fail2ban, automation and runbooks

Testing changes in the lab is not separate from operations. It reduces uncertainty before production changes. Automation with tools such as Ansible makes recurring inventory and change procedures repeatable.

Backups are only part of recoverability

A backup is initially just an available copy. Only a restore test demonstrates that it is complete, readable and usable under realistic conditions. In the Shopware case, the database and web root were restored to a separate target and checked through checksums and inventory comparisons. That produced a credible rollback point.

We do not generalise this single result to every customer environment. The specific restore is evidenced; the broader lesson is to treat recoverability as a capability of its own. For structured backup and restore operations, we also work with Bareos.

PHP2Shell – Version Fix: The soundtrack to the night shift

As the initial inventory became a long evening and then a night shift, a playlist grew with it. “Version Fix” was the dry commentary on the situation; it did not change the seriousness of the security assessment. Open the playlist on Spotify.

What we take away from PHP2Shell

  • Monitoring creates value when signals are translated into decisions.
  • Fail2ban and similar layers can buy time but cannot replace a vendor fix.
  • Current applications and maintained dependencies make critical updates much more manageable.
  • Having a backup is not the same as proving a restore.
  • Zero downtime is usually prepared long before the security event through continuous maintenance.
  • Open vendor and migration dependencies must remain visible instead of being hidden by blanket success claims.

PHP2Shell was therefore more than a patching task. It demonstrated how monitoring, incident classification, change enablement, deployment, recoverability and continual improvement must work together to handle a critical advisory under control.

FAQ

What is PHP2Shell? Action: Open answer

PHP2Shell refers to two critical PHP vulnerabilities, CVE-2026-109618 and CVE-2026-109619. On vulnerable web runtimes, both can allow unauthenticated remote code execution.

Which PHP versions fix PHP2Shell? Action: Open answer

The PHP project lists PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35. Linux distributions may use different fixed package revisions through security backports; the official distribution advisory is authoritative.

Can Fail2ban prevent PHP2Shell? Action: Open answer

No. Fail2ban can detect and block repeated patterns visible in logs, but it cannot replace the PHP security update or sound application configuration.

What role do Wazuh and security monitoring play? Action: Open answer

They help collect, correlate and prioritise security-relevant events centrally. This supports targeted investigation and incident response, but it does not replace a missing vendor fix.

Why do regular updates reduce the risk of service interruption? Action: Open answer

Supported applications, current dependencies and known deployment and rollback paths reduce the number of simultaneous changes. Critical patches can therefore be applied faster and with lower regression risk.