Ir al contenido
· 3 min de lectura

Cómo parchamos php2shell en Ubuntu 18.04 con PHP 7.2

Dos fallas críticas en PHP, un servidor viejo y un parche que oficialmente no existía para él. Lo resolvimos en 15 minutos, sin actualizar todo el sistema y sin pagar licencias.

El 21 de octubre se publicaron php2shell, dos vulnerabilidades críticas en el núcleo de PHP (CVE-2026-109618 y CVE-2026-109619, CVSS 9.2). Permiten ejecutar código en el servidor sin iniciar sesión, en cualquier aplicación PHP: WordPress, Drupal o un "Hola mundo". La publicación se adelantó un día por una filtración, así que no había margen para esperar.

Teníamos un servidor con Ubuntu 18.04 y PHP 7.2. Las versiones nuevas de PHP traen la corrección, pero PHP 7.2 dejó de recibir soporte hace años. Canonical publicó la corrección para 7.2, pero en 18.04 solo llega por Ubuntu Pro ESM.

Lo parchamos en unos 15 minutos. Solo cambiaron los 13 paquetes de PHP; nada más en el sistema. En el camino hubo dos problemas.

Problema 1: la verificación oficial dice que no tienes nada

Canonical sugiere este comando para ver qué PHP tienes instalado:

apt list '?installed ?name(^php[0-9.]+$)'

En 18.04 no imprime nada y no da error. Esos patrones de búsqueda llegaron con apt 2.0 (Ubuntu 20.04); 18.04 trae apt 1.6, que busca un paquete con ese nombre literal. No lo encuentra y se queda callado.

Un output vacío no significa que estés a salvo. La versión que sí funciona en 18.04:

apt list --installed 'php*' 'libapache2-mod-php*'

Nos mostró todo PHP 7.2 en 7.2.24-0ubuntu0.18.04.17, anterior a la versión corregida (+esm14). Vulnerable.

Problema 2: el parche está detrás de Ubuntu Pro

En 18.04 la corrección solo está en el repositorio ESM Infra. Un apt upgrade normal nunca la va a encontrar.

La primera página de Ubuntu Pro a la que llegas es un checkout de USD 500 al año. No hace falta: hay una suscripción personal gratuita para hasta 5 máquinas, pero está en otro lugar:

  1. Entra a ubuntu.com/pro/dashboard.
  2. Inicia sesión con una cuenta Ubuntu One (gratis).
  3. Copia el token personal que aparece ahí.

El plan gratuito es para uso personal y pequeño. Una organización con más servidores necesita un plan pagado.

La corrección, paso a paso

1. Conectar la máquina a Ubuntu Pro sin activar nada extra.

sudo pro attach <TU_TOKEN> --no-auto-enable

2. Activar solo ESM Infra. Agrega una fuente de apt; no instala nada.

sudo pro enable esm-infra

3. Confirmar que la versión corregida está disponible.

sudo apt update
apt-cache policy php7.2-common
# Candidate: 7.2.24-0ubuntu0.18.04.17+esm14

apt dirá que hay unas 250 actualizaciones pendientes. Es el acumulado de ESM desde 2023. Las dejamos para otro momento: hoy solo queríamos PHP.

4. Simular antes de tocar. -s muestra qué cambiaría sin cambiar nada. Resultado: 13 paquetes actualizados, 0 instalados, 0 eliminados.

sudo apt install -s --only-upgrade php7.2 php7.2-cli php7.2-common php7.2-curl \
  php7.2-gd php7.2-json php7.2-mbstring php7.2-mysql php7.2-opcache \
  php7.2-readline php7.2-xml php7.2-zip libapache2-mod-php7.2

Ajusta la lista a los paquetes que te mostró el paso de verificación.

5. Actualizar de verdad y reiniciar Apache. Con mod_php, Apache sigue usando el código viejo hasta que se reinicia.

sudo apt install --only-upgrade php7.2 php7.2-cli php7.2-common php7.2-curl \
  php7.2-gd php7.2-json php7.2-mbstring php7.2-mysql php7.2-opcache \
  php7.2-readline php7.2-xml php7.2-zip libapache2-mod-php7.2
sudo systemctl restart apache2

Cómo saber que quedó parchado

dpkg --compare-versions "$(dpkg-query -W -f='${Version}' php7.2-common)" \
  ge 7.2.24-0ubuntu0.18.04.17+esm14 && echo "PATCHED" || echo "VULNERABLE"

También puedes preguntarle a Ubuntu Pro por cada CVE. Si ya está corregido, no cambia nada:

pro fix CVE-2026-109618
pro fix CVE-2026-109619
CVE-2026-109618: PHP vulnerabilities
 - https://ubuntu.com/security/CVE-2026-109618

1 affected source package is installed: php7.2
(1/1) php7.2:
A fix is available in Ubuntu Pro: ESM Infra.
The update is already installed.

✔ CVE-2026-109618 is resolved.

Canonical no publica una prueba de explotación, así que verificar es confirmar dos cosas: que la versión corregida está instalada y que Apache arrancó después de instalarla.

Fuentes: php2shell.com, USN-8948-1, USN-8948-2.

¿Tu servidor sigue en PHP 7 o Ubuntu 18.04?

Lo revisamos y lo parchamos contigo.

Revisar mi servidor