En este puerto se aloja AJP13 (Apache JServ Protocol versión 1.3)

Este es un protocolo binario diseñado por rendimiento para comunicar un servidor web frontal (como Apache HTTP Server) con un servidor de aplicaciones Java Backend (como Apache Tomcat)

En lugar de usar HTTP normal, que es texto plano y consume más recursos procesando cabeceras, el servidor web traduce la petición a este protocolo binario rápido y la envía al puerto 8009 del Tomcat.

Reconocimiento

Las versiones antiguas de Tomcat es que el conector AJP tiene una confianza ciega en quien se conecta. Esto da lugar a una vulnerabilidad famosa llamada Ghostcat y está asociada al CVE-2020-1938.

Si el puerto está expuesto directamente a la red, cualquier atacante puede enviarle peticiones AJP modificadas para:

  • Leer archivos arbitrarios del servidor web (incluyendo archivos de configuración, código fuente de aplicaciones Java y credenciales en texto plano de /WEB-INF/web.xml).
  • Ejecución remota de código (RCE) si el atacante logra subir previamente un archivo de texto o imagen con un código malicioso al servidor (por ejemplo, a través de otra vulnerabilidad o formulario de subida).

Hardening

Dado a que Tomcat está configurado para un entorno web integrado (donde no necesitamos un servidor apache frontal que hable AJP para despachar las páginas en el puerto 8180), la mejor práctica es deshabilitar por completo el conector AJP en los archivos de configuración de Tomcat.

Primero debemos localizar el archivo de configuración principal.

find / -name "server.xml" 2>/dev/null

editamos el archivo

nano /var/lib/tomcat5.5/conf/server.xml

y buscamos la sección que define el conector AJP en el puerto 8009

que hicimos:

quitamos el comentario (–>) de la primera línea y lo movimos al final.

luego reiniciamos el servicio para que aplique el cambio

/etc/init.d/tomcat5.5 restart