Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2024-47051 — Mautic < 5.2.3 RCE autenticado | Kitploit
Herramientas/GitHubGitHub/mallo-m/cve-2024-47051
Análisis de VulnerabilidadesAnálisis de CódigoExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónDesarrollo de Payloads
GitHubmallo-m/cve-2024-47051

CVE-2024-47051

Mautic < 5.2.3 RCE autenticado

Ver Repositorio
53hace 1 añoAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Resumen

La mala sanitización del contenido, tipo y extensión de los archivos subidos en la función de Edición de Asset permite a un atacante autenticado escribir código PHP arbitrario dentro del directorio web y localizar dónde se escribe dicho archivo. Esto resulta en ejecución remota de código.

Un path traversal también permite explotar esta funcionalidad para eliminar recursivamente cualquier directorio del sistema de archivos que el usuario web tenga permiso de modificar.

Detalles - RCE

Al editar un Asset a través de la ruta /assets/view/{assetID}, se da la posibilidad de cambiar el archivo del asset.

La subida de un nuevo archivo finalmente llama a la siguiente función dentro de app/Bundles/AssetBundle/Controller/AssetController.php:

public function editAction(Request $request, UploaderHelper $uploaderHelper, AssetModel $model, $objectId, $ignorePost = false)

La lógica de subida se puede encontrar aquí:

root@kitploit:~
        if (!$ignorePost && 'POST' == $method) {
            $valid = false;
            if (!$cancelled = $this->isFormCancelled($form)) {
                if ($valid = $this->isFormValid($form)) {
                    $entity->setUploadDir($this->coreParametersHelper->get('upload_dir'));
                    $entity->preUpload();
                    $entity->upload();
Descargar herramienta

Más concretamente, nos interesan los métodos preUpload() y upload(), ya que manejan la escritura real del archivo en el disco. El primer defecto se encuentra en preUpload() en app/Bundles/AssetBundle/Entity/Asset.php, ya que la implementación nos permite especificar una extensión de archivo arbitraria (evadiendo así la protección que normalmente proporciona el array allowed_extensions):

root@kitploit:~

            $filename  = sha1(uniqid(mt_rand(), true));
            $extension = $this->getFile()->guessExtension();

            if (empty($extension)) {
                // get it from the original name
                $extension = pathinfo($this->originalFileName, PATHINFO_EXTENSION);
            }

            $this->path = $filename.'.'.$extension;

La línea $extension = $this->getFile()->guessExtension(); devolverá NULL si proporcionamos un nombre de archivo que termine en .php y contenido que comience con la etiqueta <?php. Por lo tanto, la comprobación empty($extension) se evaluará como verdadera, y la extensión del archivo se extraerá mediante la llamada a pathinfo(), lo que nos permite subir archivos temporales con contenido y extensión arbitrarios. No podemos controlar el nombre real del archivo, ya que se genera con sha1().

Luego, dentro del método upload() posterior, el archivo se escribirá realmente en el disco dentro del directorio web mediante la siguiente llamada:

$this->getFile()->move($this->getUploadDir(), $this->path);

Está usando nuestra extensión arbitraria (contenida en la variable $this->path). El nombre del archivo se puede recuperar entonces actualizando la página de detalles del Asset (/assets/view/{assetId}), en la entrada Local filename de la tabla.

NB : Esto también funciona alterando las peticiones enviadas al crear un nuevo Asset. Esto llamará a la función newAction(), pero la lógica es idéntica, y los defectos siguen estando en los métodos preUpload() y upload().

PoC - RCE

El PoC no se publicará durante un mes más o menos.

Esto es para dar tiempo a las organizaciones que dependen de este software a parchearlo sin temer que los script kiddies destrocen sus cosas.

Después de eso, este repositorio se actualizará con el script de explotación completo y las pruebas. De todos modos, ya hay suficiente información en esta página.

Detalles - Eliminación Arbitraria de Archivos

Al validar una subida temporal (a través de /s/assets/new o /s/assets/edit/{assetId}), el directorio que almacena el archivo temporal se elimina recursivamente al final de la petición. El parámetro encargado de contener el nombre del directorio temporal es susceptible a ataques de path traversal, lo que permite a un atacante autenticado eliminar cualquier directorio del sistema, siempre que el usuario web tenga permiso para ello. Esto puede resultar en pérdida de datos, o incluso en la destrucción de todo el sistema de archivos si el servidor se ejecuta como usuario root.

PoC - Eliminación Arbitraria de Archivos

Especifique cualquier archivo que exista en el sistema a través del endpoint utilizado a continuación. Si el archivo existe, el servidor intentará eliminar el directorio en el que está almacenado.

Impacto

Toma de control del servidor Denegación de servicio Pérdida de datos

Cronología

  • 14 de octubre de 2024 : Primer contacto y aviso enviado al equipo de Mautic
  • 12 de noviembre de 2024 : Script de explotación y sugerencias de remediación enviados al equipo de desarrollo
  • 13 de diciembre de 2024 : Segundo contacto
  • 21 de enero de 2025 : Parche listo para implementación
  • 25 de febrero de 2025 : CVE asignado y publicado