Skip to content
php2shell-checker

php2shell-checker

Sploitus • October 21, 2026

**PHP** ([October 21, 2026 advisory](

| CVE-2026-109618 | RCE via OOM corruption | [GHSA-w8hw-w9fx-j79w]( |

| CVE-2026-109619 | RCE via stale global state | [GHSA-6wmf-4rv5-p3rp]( |

- Fixed versions: **8.5.12, 8.4.27, 8.3.36 and 8.2.35**.

- Affects every installation serving web requests: PHP-FPM, Apache with

mod_php (highest risk), php-cgi, FrankenPHP and LiteSpeed.

- PHP 8.1 and older have no official fixed release. They are fixed only by

your distribution or LTS vendor's backport, or by building from the source

backport branches the PHP team published for 7.4, 8.0 and 8.1.

- The advisory's temporary mitigations reduce exposure but do **not** make an

installation safe. Updating is the only complete fix.

**Node.js** ([October 21, 2026 security releases](

the checker connects to servers you do not control, and these releases fix,

among others, a Brotli decoder RCE (CVE-2026-111497) and several TLS

certificate validation bypasses. Use **Node 22.23.4, 24.22.1, 26.12.1 or

later** on your release line. The `/phpcheck:url` skill checks your Node

/plugin marketplace add masteread/php2shell-checker-claude

claude plugin marketplace add masteread/php2shell-checker-claude

If you prefer not to install a plugin, copy the folders in `skills/` to

`~/.claude/skills/` (they are then invoked as `/url` and `/server`).

There are two skills. Claude picks them on its own when you ask your PHP

version or PHP2Shell, and you can also invoke them directly:

| `/phpcheck:url` | You only have the site's URL | `/phpcheck:url example.com` |

| `/phpcheck:server` | You have local or SSH access to the server | `/phpcheck:server check the PHP serving my site` |

Is still vulnerable to PHP2Shell?

Only check sites and servers you own or are authorized to assess.

node phpcheck.js " --json

node phpcheck.js --local # command-line PHP

node phpcheck.js --local --php /usr/sbin/php-fpm8.3

| `OK` | `0` | Stable version newer than the cutoff for its branch. |

| `VULNERABLE` | `1` | Version at or below the cutoff for its branch. |

| `UNKNOWN` | `3` | No version or response found, an unlisted branch, or a prerelease build (RC, beta…). |

With `--json`, `patch_status` is `ok`, `vulnerable` or `unknown`. Invalid

### Vulnerable versions (October 20, 2026 cutoffs)

| Branch | Vulnerable through (inclusive) | Branch | Vulnerable through (inclusive) |

- Only evaluates the version shown in the `Server` and `X-Powered-By` headers,

or by `php -v`. Sends `HEAD` (asking for an uncompressed response) and falls

back to `GET` only when `HEAD` returns 405 or 501. Does not follow redirects

- `OK` is a version comparison against the embedded cutoffs. It assumes later

stable patches in each branch contain the fix; it does not verify the fix

itself. Compare the cutoffs with the official PHP security advisory.

- Headers can be hidden or changed, and distribution patches (Debian, Ubuntu,

RHEL…) can fix an older version without changing its number. Check your

The tests start local HTTP servers that simulate PHP headers; no PHP install

[Apache License 2.0](LICENSE). See [NOTICE](NOTICE) for the code's origin and

# Español — PHP2Shell Checker para Claude Code

Comprueba si un sitio web o un servidor usa una versión de PHP afectada por

**PHP2Shell**: las dos vulnerabilidades críticas de ejecución remota de código

(CVE-2026-109618 y CVE-2026-109619) corregidas en las versiones de seguridad

de PHP publicadas el 21 de octubre de 2026. No envía peticiones de explotación:

solo lee la versión que anuncia el servidor (cabeceras HTTP) o la que devuelve

[openai/php2shell-checker](

(Apache 2.0), empaquetada como plugin. Usa Node.js (versión parcheada, ver

**PHP** ([aviso del 21 de octubre de 2026](

| CVE-2026-109618 | RCE por corrupción tras falta de memoria (OOM) | [GHSA-w8hw-w9fx-j79w]( |

| CVE-2026-109619 | RCE por estado global obsoleto entre peticiones | [GHSA-6wmf-4rv5-p3rp]( |

- Versiones corregidas: **8.5.12, 8.4.27, 8.3.36 y 8.2.35**.

- Afecta a toda instalación que sirva peticiones web: PHP-FPM, Apache con

mod_php (el riesgo más alto), php-cgi, FrankenPHP y LiteSpeed.

- PHP 8.1 y anteriores no tienen versión oficial corregida: solo backports de

tu distribución o proveedor LTS, o las ramas de código fuente que publicó el

- Las mitigaciones temporales del aviso reducen la exposición, pero **no**

hacen segura la instalación. Actualizar es la única solución completa.

**Node.js** ([avisos del 21 de octubre de 2026](

el checker se conecta a servidores que no controlas, y estas versiones

corrigen, entre otros fallos, una RCE en el descompresor Brotli

(CVE-2026-111497) y varios saltos de validación de certificados TLS. Usa

**Node 22.23.4, 24.22.1, 26.12.1 o posterior** en su rama. La skill

`/phpcheck:url` revisa tu versión de Node antes de ejecutar el checker.

/plugin marketplace add masteread/php2shell-checker-claude

claude plugin marketplace add masteread/php2shell-checker-claude

Si prefieres no instalar un plugin, copia las carpetas de `skills/` a

`~/.claude/skills/` (en ese caso se invocan como `/url` y `/server`).

Hay dos skills. Claude las elige solo cuando preguntas por la versión de PHP o

por PHP2Shell, y también puedes invocarlas directamente:

| `/phpcheck:url` | Solo tienes la URL del sitio | `/phpcheck:url ejemplo.com` |

| `/phpcheck:server` | Tienes acceso local o por SSH al servidor | `/phpcheck:server revisa el PHP que sirve mi sitio` |

¿Mi sitio sigue vulnerable a PHP2Shell?

Usa estas herramientas solo en sitios y servidores tuyos o que tengas

node phpcheck.js " --json

node phpcheck.js --local # PHP de la línea de comandos

node phpcheck.js --local --php /usr/sbin/php-fpm8.3

| Resultado | Código de salida | Significado |

| `OK` | `0` | Versión estable posterior al corte de su rama. |

| `VULNERABLE` | `1` | Versión igual o anterior al corte de su rama. |

| `UNKNOWN` | `3` | No se encontró versión o respuesta, la rama no está en la tabla, o es una versión de prueba (RC, beta…). |

Con `--json`, `patch_status` vale `ok`, `vulnerable` o `unknown`. Los

argumentos inválidos salen con código `2`.

### Versiones vulnerables (corte del 20 de octubre de 2026)

| Rama | Vulnerable hasta (inclusive) | Rama | Vulnerable hasta (inclusive) |

- Solo evalúa la versión que aparece en las cabeceras `Server` y

`X-Powered-By`, o en `php -v`. Envía `HEAD` (pidiendo respuesta sin

comprimir) y solo recurre a `GET` si `HEAD` devuelve 405 o 501. No sigue

redirecciones ni lee el cuerpo de la respuesta.

- `OK` es una comparación de versiones contra los cortes incluidos. Supone que

los parches estables posteriores de cada rama incluyen la corrección; no

verifica la corrección por sí mismo. Contrasta los cortes con el aviso de

- Las cabeceras se pueden ocultar o modificar, y los parches que aplican las

distribuciones (Debian, Ubuntu, RHEL…) pueden corregir una versión antigua

sin cambiar su número. Revisa el aviso de tu distribución.

- `UNKNOWN` **no** significa que esté parcheado.

Las pruebas levantan servidores HTTP locales que simulan cabeceras de PHP; no

hace falta tener PHP instalado ni acceso a internet.

[Apache License 2.0](LICENSE). Ver [NOTICE](NOTICE) para el origen del código

Extracted Entities

Attack Types (1)

Companies (1)

Domains (1)

Tools (1)

Vulnerabilities (1)