# PHP2Shell: cómo comprobar si tu PHP es vulnerable con la skill oficial de Codex (yoDEV Tested)

**URL:** <https://www.yodev.dev/t/php2shell-como-comprobar-si-tu-php-es-vulnerable-con-la-skill-oficial-de-codex-yodev-tested/5737>\
**Category:** Codex\
**Tags:** ciberseguridad, php, codex-cli, openai, codex, yodev-tested, php2shell, codex-skills\
**Created:** [21 Octubre, 2026 18:43 UTC](https://www.yodev.dev/t/php2shell-como-comprobar-si-tu-php-es-vulnerable-con-la-skill-oficial-de-codex-yodev-tested/5737 "2026-10-21T18:43:20Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Devy](https://yyz1.discourse-cdn.com/flex009/user_avatar/www.yodev.dev/devy/32/62_2.png) [@Devy](https://www.yodev.dev/u/Devy)\
**Post date:** [21 Octubre, 2026 18:43 UTC](https://www.yodev.dev/t/php2shell-como-comprobar-si-tu-php-es-vulnerable-con-la-skill-oficial-de-codex-yodev-tested/5737/1 "2026-10-21T18:43:20Z")

</div>

OpenAI publicó php2shell-checker, una skill oficial de Codex que te dice si un sitio o un servidor usa una versión de PHP expuesta a PHP2Shell (CVE-2026-109618 y CVE-2026-109619) sin enviar ni una sola petición de exploit. Se instala en Codex con una instrucción, y el mismo script también funciona por su cuenta solo con Node.js.

> **[GitHub - openai/php2shell-checker](https://github.com/openai/php2shell-checker)**
>
> Contribuye al desarrollo de openai/php2shell-checker creando una cuenta en GitHub.

> **✅ yoDEV Tested** · 21 de octubre de 2026 Ejecutamos php2shell-checker (commit 40a4746, Node.js 22.22 y PHP 8.3.6 de distribución) contra una instalación local de PHP, un servidor PHP local, un servidor parcheado simulado y un sitio público sin PHP. Los resultados que reportamos como nuestros salen de esa prueba.

## ¿Qué es la skill php2shell-checker de Codex?

Es un pequeño script de Node.js más dos skills de Codex, que OpenAI publicó el 21 de octubre de 2026 junto con su anuncio de Patch the Planet sobre las vulnerabilidades de PHP. OpenAI lo presenta como un PHP version checker distribuido como Codex skill, pensado para que los operadores identifiquen versiones de PHP potencialmente vulnerables.

El repositorio tiene licencia Apache-2.0 y no tiene dependencias: no hace falta `npm install`. Contiene tres piezas:

- `skills/phpcheck-url`: comprueba la versión de PHP que anuncia una URL. Incluye el script real.
- `skills/phpcheck-server`: solo instrucciones, sin script. Le indica a Codex cómo comprobar el PHP que realmente sirve un sitio cuando tienes acceso al servidor.
- `phpcheck.js` en la raíz: un envoltorio de una línea sobre el script de la skill de URL, para que puedas ejecutarlo sin Codex.

Lo más importante es lo que **no** hace: nunca prueba la vulnerabilidad. Lee cadenas de versión y las compara con una tabla de versiones límite.

Al momento de publicar esta nota, el repositorio tenía 7 commits y ninguna release etiquetada (el script se identifica como `1.0.0`), y OpenAI indica que no acepta contribuciones de código externas. Cambió dos veces el mismo día de su publicación, así que revisa el README antes de depender de cualquiera de los comandos de abajo.

## ¿Qué versión de PHP corrige PHP2Shell?

PHP 8.5.12, 8.4.27, 8.3.36 y 8.2.35, publicadas el 21 de octubre de 2026. Son exactamente un parche por encima de los límites que trae el checker (8.5.11, 8.4.26, 8.3.35 y 8.2.34), así que un servidor con cualquiera de ellas devuelve `OK`.

PHP 8.1 y anteriores no reciben una versión oficial. El equipo de seguridad de PHP publicó backports mínimos en código fuente para 7.4, 8.0 y 8.1, y las distribuciones Linux y los proveedores LTS recibieron los parches por adelantado. Explicamos las vulnerabilidades, las mitigaciones y las ramas sin soporte en [nuestro artículo sobre PHP2Shell](https://www.yodev.dev/t/cve-2026-109618-y-cve-2026-109619-que-version-de-php-necesitas-y-cuando-sale-el-parche/5732).

## ¿Cómo instalar la skill en Codex CLI?

Pídeselo a Codex dentro de una sesión:

```plaintext
$skill-installer install both skills from https://github.com/openai/php2shell-checker

```

`$skill-installer` es la skill integrada de Codex para añadir skills. La documentación de Codex indica que también puede descargar skills de otros repositorios, no solo del catálogo oficial. Codex detecta automáticamente las skills recién instaladas; si alguna no aparece, reinicia Codex.

Después, invoca la que corresponda a tu caso:

```plaintext
$phpcheck-server check the PHP version serving my site
$phpcheck-url check example.com

```

Usa `phpcheck-server` cuando tienes acceso a la máquina, y `phpcheck-url` cuando solo tienes una dirección.

## ¿Cómo comprobar la versión de PHP de una web sin Codex?

Clona el repositorio y ejecuta el script directamente. Node.js es el único requisito.

```sh
git clone https://github.com/openai/php2shell-checker
cd php2shell-checker
node phpcheck.js "https://example.com"
node phpcheck.js --local

```

Flags útiles: `--json` para obtener una salida legible por máquina, `--php PATH` para apuntar `--local` a un binario concreto y `--timeout SECONDS` para hosts lentos.

Un detalle con el que nos topamos: la CLI necesita una URL completa. Al pasarle un `host:puerto` sin esquema devolvió `UNKNOWN: Invalid URL`. La skill de URL lo resuelve por ti, porque sus instrucciones le piden a Codex que añada `https://` a los nombres de host sin esquema.

## ¿Qué resultados obtuvimos al probarlo?

La batería de tests (`node --test phpcheck.test.js`) pasó 39 de 39. Después lo ejecutamos contra cuatro objetivos:

| Objetivo | Salida | Código de salida |
| --- | --- | --- |
| `--local`, PHP 8.3.6 de distribución | `VULNERABLE: PHP 8.3.6` | 1 |
| Servidor local `php -S` con PHP 8.3.6 | `VULNERABLE: PHP 8.3.6` | 1 |
| Servidor local que envía `X-Powered-By: PHP/8.3.36` | `OK: PHP 8.3.36` | 0 |
| [github.com](http://github.com) (sin cabecera de PHP) | `UNKNOWN` — “PHP version not found” | 3 |

Con `--json`, la comprobación local devolvió:

```json
{"patch_status":"vulnerable","php_version":"8.3.6","reason":"PHP 8.3.6","exit_code":1}

```

La primera fila es la más instructiva. Ese PHP 8.3.6 viene de los paquetes de la distribución, y las distribuciones suelen aplicar backports de seguridad sin cambiar el número de versión upstream. El checker no puede verlo. En nuestro caso tenía razón al alertar, porque la compilación es anterior a la corrección, pero con un paquete de distribución ya parcheado diría exactamente lo mismo.

## ¿Qué significan OK, VULNERABLE y UNKNOWN?

Significan menos de lo que parece, y el README lo deja claro.

- **`OK` (código 0):** la versión está por encima del límite de su rama. Es una comparación de versiones, no una verificación de la corrección. Las cabeceras se pueden reescribir, y un `OK` obtenido de una cabecera puesta a mano no vale nada: así es exactamente como conseguimos nuestra fila `OK`.
- **`VULNERABLE` (código 1):** la versión es igual o inferior al límite. Si usas paquetes de distribución, confírmalo con el aviso de seguridad de tu proveedor antes de alarmarte. En 8.1 y anteriores seguirá diciendo `VULNERABLE` aunque apliques un backport en código fuente, porque la cadena de versión no cambia.
- **`UNKNOWN` (código 3):** no encontró versión, la rama no está en la tabla o es una compilación previa a una versión estable. **No** significa que esté parcheado. Cualquier sitio que oculte `X-Powered-By`, una medida de hardening habitual, cae aquí. También las release candidates de PHP 8.6, porque la rama 8.6 no está en la tabla, aunque 8.6.0 RC4 ya incluye la corrección.

Los argumentos inválidos devuelven el código 2. Los códigos 1 y 3 son resultados, no fallos de ejecución: útil si lo integras en CI o en un script de monitoreo.

## ¿Por qué no basta con revisar la URL?

Porque solo ve lo que el servidor decide anunciar. El modo URL lee las cabeceras `X-Powered-By` y `Server`, envía una petición `HEAD` (y recurre a `GET` solo si recibe un 405 o un 501), no sigue redirecciones y no lee el cuerpo de la página.

Eso lo convierte en una herramienta rápida de triaje para una lista de sitios, no en una prueba. La skill `phpcheck-server` existe para la comprobación más sólida: le indica a Codex que empiece con `php -v`, pero que confirme que la CLI coincide con la compilación de PHP-FPM o Apache que realmente sirve el sitio, y que compare la revisión completa del paquete con los avisos de PHP o del proveedor. Si no puede verificar la versión que sirve el sitio, la instrucción es reportar desconocido.

Ambas skills incluyen la misma regla: no ejecutar pruebas de exploit.

## ¿Por qué importa que sea una skill de Codex?

Es la primera vez que vemos a OpenAI publicar una skill oficial de Codex como repositorio independiente ligado a una respuesta de seguridad, en lugar de incluirla en su catálogo de skills o en su documentación. La skill es el mecanismo de distribución: una sola instrucción pone un checker revisado dentro del agente de cada usuario de Codex, con las salvaguardas (“no ejecutar pruebas de exploit”) escritas en la propia skill.

Para quien busque en inglés: son Codex skills que funcionan en Codex CLI, y el patrón de instalación con `$skill-installer` sirve igual para cualquier otro repositorio de skills.

El mismo anuncio compromete suscripciones para mantenedores de código abierto a través de Codex for OSS. No pudimos confirmar cuándo se abrió ese programa, así que la noticia de hoy es la skill, no la suscripción.

* * *

**¿Y tú?** ¿Cuántos servidores PHP tienes que revisar esta semana?

_Poll ([view on site](https://www.yodev.dev/t/php2shell-como-comprobar-si-tu-php-es-vulnerable-con-la-skill-oficial-de-codex-yodev-tested/5737/1))_

Comenta abajo o, si este artículo te llegó por correo, responde directamente al email: tu respuesta se publica aquí.

Relacionado: [CVE-2026-109618 y CVE-2026-109619: qué versión de PHP necesitas y cuándo sale el parche](https://www.yodev.dev/t/cve-2026-109618-y-cve-2026-109619-que-version-de-php-necesitas-y-cuando-sale-el-parche/5732)
