Error de seguridad grave en popular biblioteca PHP para crear archivos PDF

Un investigador descubrió una falla grave de seguridad que afecta una de las bibliotecas de PHP más famosa para crear archivos PDF.  La vulnerabilidad, es la derivación de otra ya descubierta anteriormente. 

La vulnerabilidad afecta a TCPDF, una de las «tres grandes» bibliotecas de PHP, junto con mPDF y FPDF, para convertir el código HTML en documentos PDF o armar archivos PDF.

La falla de seguridad puede ser explotada por un atacante para lograr la ejecución remota de código en sitios web y aplicaciones web que utilizan la biblioteca TCPDF, lo que le permite al ciberatacante ejecutar un código malicioso y llegar a controlar estos sistemas.

Ahora bien, esta vulnerabilidad es la variación de un descubrimiento realizado por Sam Thomas, quien en una serie de experimentos mostró un nuevo error de deserialización que afectaba a las aplicaciones PHP (esto pasó hace un año). Luego lanzó un artículo que detallaba los ataques de serialización de PHP contra las plataformas WordPress y Typo3 CMS, pero también la Biblioteca TCPDF incrustada dentro del CMS Contao.

Entonces… ¿Cómo funciona esta nueva variación de la vulnerabilidad?

De acuerdo a lo que informa el investigador (el italiano Polict) la vulnerabilidad puede ser explotada de dos formas:

  1. En sitios web que permiten que la información del usuario forme parte del proceso de generación de archivos PDF, como al agregar nombres u otros detalles dentro de las facturas.
  2. En sitios web que contienen vulnerabilidades de secuencias de comandos entre sitios (XSS) donde un atacante puede insertar un código malicioso dentro del código fuente HTML, el cual se enviará a la biblioteca TCPDF para convertirlo en un PDF.

El truco es suministrar datos con formato incorrecto a la biblioteca TCPDF. Estos datos se modifican de tal manera que obligan a la biblioteca TCPDF a llamar al «phar: //» wrapper del flujo del servidor PHP, y luego abusan del proceso de deserialización de PHP para ejecutar código en el servidor subyacente.

El ataque no es sencillo, y requiere conocimientos avanzados de codificación PHP para explotar. Las explotaciones de deserialización, en general, son difíciles de descubrir y son la ruina de muchos lenguajes de programación, incluidos Ruby, Java y .NET, además de PHP.

¿Y se hizo algo al respecto?

Se informó sobre la vulnerabilidad (CVE-2018-17057) al autor de la biblioteca TCPDF en agosto pasado. El equipo TCPDF lanzó TCPDF 6.2.20 en septiembre para abordar el problema.

Sin embargo, los usuarios deben actualizar al menos a la versión 6.2.22 porque el equipo de TCPDF volvió a introducir accidentalmente la vulnerabilidad notificada por Sam Thomas al intentar parchar la informada por Polict. Ambos problemas se consideraron resueltos en la versión 6.2.22.

El investigador de seguridad italiano publicó detalles sobre esta vulnerabilidad solo hoy, seis meses después del parche, debido a la gravedad del error y para permitir a los propietarios de sitios web y aplicaciones web el tiempo suficiente para parchar.