Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
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-2025-68116 — Una documentación de CVE-2025-68116 | Kitploit
Herramientas/GitHubGitHub/x0root/cve-2025-68116
Análisis de VulnerabilidadesExplotaciónSeguridad WebPruebas de PenetraciónPapers e InvestigaciónAprendizaje y Educación
GitHubx0root/cve-2025-68116

CVE-2025-68116

Una documentación de CVE-2025-68116

Ver Repositorio
12hace 9 mesesAú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

CVE-2025-68116

Autor: @x0root
Vulnerabilidad: Cross-Site Scripting (XSS) Almacenado mediante subidas renderizables por el navegador (SVG / HTML)
Software afectado: FileRise (< 2.7.1)
Versión parcheada: 2.7.1
CVE oficial (solicitado vía GHSA): CVE-2025-68116 (seguimiento/aviso: GHSA-35pp-ggh6-c59c)
Aviso relacionado previo (mitigación original que fue eludida): GHSA-qrcv-vjvf-fr29

Evaluación CVSS:

  • CNA (GitHub): CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:L — 8.9 (Alta)
  • Informante (análisis del autor): CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:L — 9.6 (Crítica)

Justificación de la Puntuación CVSS (Informante)

La evaluación del informante valora los Privilegios Requeridos (PR) en el punto de explotación, no en el punto de introducción de la vulnerabilidad.

La explotación ocurre cuando una víctima accede a un enlace de compartición pública generado, lo que no requiere autenticación ni privilegios (PR:N).

La evaluación del CNA valora PR basándose en la capacidad de subir un archivo malicioso. Sin embargo, CVSS v3.1 define los Privilegios Requeridos (PR) como los privilegios que un atacante debe poseer en el momento en que la vulnerabilidad es explotada, no los privilegios necesarios para colocar o preparar la condición vulnerable.

Como tal, PR:N refleja con mayor precisión las condiciones reales de explotación, lo que resulta en una clasificación de severidad Crítica (9.6).

Nota: GHSA-qrcv-vjvf-fr29 introdujo una mitigación que impedía que los SVG se renderizaran dentro de la interfaz web de FileRise (panel de vista previa). Este informe documenta una elusión de esa mitigación —específicamente los endpoints backend de compartición/descarga—, que se rastrea como GHSA-35pp-ggh6-c59c / CVE-2025-68116.


Resumen

Este documento es un registro técnico completo de CVE-2025-68116: un XSS almacenado en FileRise que persistió después de una mitigación anterior y finalmente se corrigió en v2.7.1. Incluye el descubrimiento, pruebas de concepto de explotación, múltiples correcciones fallidas, un análisis preciso del flujo de control de causa raíz (con evidencia), la verificación final del parche y un análisis de las características de explotabilidad relevantes para la evaluación CVSS. Todo el contenido a continuación se basa en pruebas reproducidas, inspección del controlador y el hilo del aviso público.


1. Antecedentes: Aviso Previo y Corrección Incompleta

Un aviso previo, GHSA-qrcv-vjvf-fr29, abordó el XSS almacenado mediante subidas de SVG bloqueando la renderización en línea en la interfaz web de FileRise. Esa mitigación no abordó cómo los archivos SVG eran servidos por endpoints backend como:

  • /api/file/download.php
  • /api/file/share.php

CVE-2025-68116 (rastreado como GHSA-35pp-ggh6-c59c) documenta una elusión de la mitigación de GHSA-qrcv-vjvf-fr29: un atacante puede almacenar un SVG manipulado y entregarlo a las víctimas mediante enlaces de compartición pública o ciertos comportamientos de descarga, lo que lleva a la ejecución de scripts en el origen de FileRise.


2. Descubrimiento: Subida de Prueba de Concepto y Elusión

Para validar si el backend todavía exponía los SVG de forma que pudieran renderizarse, subí un SVG PoC simple:

El acceso al archivo mediante:

  • /api/file/download.php?…
    y, más importante, mediante:
  • /api/file/share.php?token=…

resultó en la ejecución de alert(). La mitigación original de GHSA-qrcv-vjvf-fr29 (bloqueo de vista previa en la interfaz) fue eludida mediante acceso directo a estos endpoints.


3. Demostrando el Impacto en el Mundo Real

Un alert() es una prueba de concepto; probé el impacto real haciendo que el payload interactuara con las APIs internas.

Payload de prueba utilizado:

<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
  <script type="text/javascript">
    fetch('/api/upload/upload.php')
      .then(response => response.text())
      .then(data => alert('API Response: ' + data));
  </script>
</svg>

Cuando un administrador con sesión iniciada abría un enlace de compartición que contenía este SVG, el script se ejecutaba y realizaba solicitudes API autenticadas. Los efectos observados incluyeron:

  • Respuestas de la API devueltas al script (la información sensible podría quedar expuesta)
  • La respuesta de la API indicaba el estado del token CSRF (p. ej., {"csrf_expired":true,"csrf_token":"..."})
  • La interacción invalidaba el token CSRF existente del administrador, impidiendo más acciones que cambiaran el estado hasta la recuperación (denegación de servicio práctica contra las funciones de administración)

Clasificación de impacto demostrada durante las pruebas:

  • Confidencialidad: Alta (C:H)
  • Integridad: Alta (I:H)
  • Disponibilidad: Baja (A:L)

4. Cronología de la Divulgación y Múltiples Intentos de Corrección

Informé del problema de forma privada. El mantenedor publicó varias correcciones incrementales:

  • v2.6.0 — Se aplicó la mitigación al endpoint de descarga; el endpoint de compartición seguía siendo vulnerable.
  • v2.6.2 — Intentos adicionales; el endpoint de compartición seguía siendo vulnerable en mis pruebas.
  • v2.7.0 — Endurecimiento reclamado para el endpoint de compartición; aún explotable en mi entorno.
  • v2.7.1 — Corrección final que verifiqué y que resuelve el problema (ver la sección de Verificación).

Desde v2.6.0 → v2.7.0, el endpoint de enlaces de compartición continuó sirviendo el SVG de una manera que permitía la renderización en línea y la ejecución de scripts. El análisis de causa raíz a continuación explica por qué las correcciones anteriores no lograron cerrar por completo el vector.


5. Análisis de Causa Raíz — Flujo de Control y Fallo de Cabeceras (Evidencia)

La causa subyacente no era una única cabecera faltante, sino el flujo de control y el orden de la salida dentro de shareFile() (controlador), que impedía que las cabeceras de seguridad se aplicaran en muchas rutas de ejecución. Había dos clases de problemas:

  • Múltiples puntos de exit; tempranos que cortocircuitaban la función antes de que se establecieran las cabeceras de seguridad.
  • Avisos/notificaciones de PHP que emitían salida antes de las llamadas a cabeceras, causando errores de "headers already sent" (cabeceras ya enviadas).

5.1 Enumeración de salidas tempranas

Utilicé un escaneo con awk para listar las apariciones de header() y exit; dentro de shareFile() hasta la llamada a readfile():

Comando: awk '/function shareFile(/ {flag=1} /readfile(/ {flag=0} flag && /(header|exit;)/ {printf "%4d | %s\n", NR, $0}' src/controllers/FileController.php

Salida observada (abreviada de mi ejecución):

1649 | header('Content-Type: application/json; charset=utf-8'); 1651 | exit; 1657 | header('Content-Type: application/json; charset=utf-8'); 1659 | exit; 1664 | header('Content-Type: application/json; charset=utf-8'); 1666 | exit; 1670 | header("Content-Type: text/html; charset=utf-8"); 1693 | exit; 1699 | header('Content-Type: application/json; charset=utf-8'); 1701 | exit; 1719 | header('Content-Type: application/json; charset=utf-8'); 1721 | exit; 1725 | header('Content-Type: application/json; charset=utf-8'); 1727 | exit;

Las cabeceras de seguridad (la lógica de endurecimiento) comienzan en la línea ~1743:

1743 | header('X-Content-Type-Options: nosniff'); ... 1770 | header("Content-Disposition: attachment; ...");

Debido a que la función emite cabeceras + exit; antes en muchas rutas, esas solicitudes nunca llegaban al código de endurecimiento que establece Content-Disposition, nosniff o el tipo restrictivo.

5.2 Ruta de solicitud de contraseña

En el flujo de compartición protegida por contraseña, la función emitía temprano el HTML de solicitud de contraseña:

Descargar herramienta