
Exploit de prueba de concepto para CVE-2024-34832: traversal de directorio en el panel de administración de CubeCart que conduce a ejecución remota de código mediante el parámetro `_g` manipulado y archivos `.inc.php` subidos.
En el panel de administración, parámetros como _g y node se utilizan para construir la ruta con la que se incluyen archivos .inc.php y se ejecuta código PHP. Un usuario malintencionado con la capacidad de subir archivos .inc.php en cualquier lugar del servidor puede explotar una vulnerabilidad de path traversal para incluirlos y ejecutar código malicioso.
.inc.php en cualquier lugar del servidor (por ejemplo, acceso a FTP, otra aplicación en el mismo servidor que permita la subida de archivos, nuevas vulnerabilidades en las funciones de subida de CubeCart, etc.).Digamos que hay un servidor FTP ejecutándose en el mismo servidor en el que está instalado CubeCart y un usuario puede subir archivos a una ubicación específica. En nuestro caso, digamos que cualquier cosa que se suba por FTP termina en /opt/FTP_Example.
Digamos también que este usuario subió un archivo llamado path_traversal.inc.php a través de FTP y su contenido es el siguiente código PHP <?php system('whoami;id;hostname;ls') ?>.

Inicialmente no hay peligro en subir este archivo, ya que no se ejecutará ni se encuentra en el directorio de un servidor web - como Apache - que pudiera ejecutarlo.
Este mismo usuario puede tener privilegios muy limitados o incluso ningún privilegio en el panel de administración de CubeCart, pero aun así puede iniciar sesión. Por ejemplo, creamos un usuario llamado julio que no tiene privilegio alguno.

Después de iniciar sesión en la aplicación como julio, comenzamos a probar los parámetros _g y node. Notamos que estos parámetros añadían .inc.php automáticamente al final de una ruta y parecían usar include() en ese archivo para ejecutar código PHP.
Como se ve a continuación, cuando no se encuentra el archivo, se devuelve el siguiente mensaje de error.

Empezamos a preguntarnos si podríamos atravesar la ruta y llegar a un archivo .inc.php en un directorio en algún otro lugar del servidor - como nuestra carpeta FTP.
Como teníamos un archivo llamado path_traversal.inc.php en la carpeta /opt/FTP_Example, intentamos agregar muchos /../../../ hasta llegar al directorio raíz, luego agregamos /opt/FTP_Example/path_traversal y la aplicación añadió automáticamente .inc.php al final de la ruta.
Como se ve a continuación, el código se ejecutó exitosamente.

Notamos que el parámetro node en realidad escapa las barras (/), pero _g no. Todos los parámetros utilizados para construir rutas deberían escapar las barras para prevenir vulnerabilidades de path traversal.
Aunque existen requisitos previos para la explotación exitosa de esta vulnerabilidad - lo que reduce considerablemente el riesgo - todavía se beneficia de un parche. Puedes consultar en las referencias cómo los autores de CubeCart corrigieron esta vulnerabilidad y aplicar las correcciones a tu propia instancia de CubeCart hasta que llegue una versión oficial ya parcheada.