
Write-up técnico y prueba de concepto para CVE-2023-46474, una vulnerabilidad de ejecución remota de código en PMB <=7.5.3 mediante carga de archivos sin restricciones, incluyendo pasos de reproducción y guía de remediación.
CVE-2023-46474
| Vector CVSS v3.1 | Puntuación CVSS v3.1 |
|---|---|
| AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H | 9.1 |
Descubierto durante una prueba de penetración por Marcus Reynaud de Devensys Cybersecurity
El script pmb/admin/convert/start_import.php es vulnerable a una falla de tipo , lo que permite obtener una ejecución de código arbitrario en el servidor.

El atacante debe obtener previamente acceso administrativo a la plataforma para utilizar esta funcionalidad.
El script PHP no verifica la extensión del archivo que es subido por el usuario, y lo almacena en un directorio accesible por el servidor web conservando su extensión. Así, es posible subir un script PHP y luego ejecutarlo visitando el lugar donde fue subido.
Es posible reproducir este comportamiento de la siguiente manera:
Se envía un archivo en .php que contiene el código que se desea ejecutar en el sistema. Aquí, ejecutaremos el comando del sistema id.

Al observar la respuesta, podemos recuperar el nombre del archivo tal como acaba de ser escrito en el servidor.

Para ejecutar nuestro código, basta con visitar /pmb/temp/[nombre_del_archivo].php con un navegador.

El resultado del comando es devuelto por el servidor.
La causa de esta vulnerabilidad es la falta de control sobre el archivo antes de escribirlo en el disco:

Para remediar esta vulnerabilidad, es necesario implementar un control de extensiones en los archivos subidos por los usuarios.
Le recomendamos utilizar un sistema de lista blanca, que solo autorice ciertas extensiones de archivo.
También puede escribir el archivo en el disco omitiendo la extensión (teniendo en cuenta que se trata de un almacenamiento temporal).
También es posible escribir el archivo en un directorio fuera del alcance del servidor web, lo que haría que el archivo fuera inaccesible en Internet, y el código no podría ejecutarse.
Las versiones 7.5.4 y superiores no son vulnerables, el script ha sido completamente reescrito.