Carga de archivos arbitraria autenticada que conduce a la ejecución remota de código. Análisis técnico y reproducción controlada de CVE-2026-38526 en Webkul Krayin CRM 2.2.x.
Carga Arbitraria de Archivos Autenticada que conduce a Ejecución Remota de Código Análisis técnico y reproducción controlada de CVE-2026-38526 en Webkul Krayin CRM 2.2.x.
CVE-2026-38526 es una vulnerabilidad de carga arbitraria de archivos autenticada que afecta a Webkul Krayin CRM 2.2.x.
La funcionalidad vulnerable está expuesta a través del endpoint de carga de TinyMCE de la aplicación:
POST /admin/tinymce/upload
La aplicación no restringe suficientemente el tipo de archivo que se puede cargar. Un usuario autenticado puede enviar un archivo con una extensión ejecutable del lado del servidor, como .php. La aplicación almacena el archivo cargado y devuelve su URL accesible.
Cuando el despliegue permite la ejecución de PHP desde la ubicación de carga, el archivo cargado puede solicitarse posteriormente a través del servidor web, lo que resulta en ejecución remota de código en el contexto del proceso de la aplicación web.
El registro CVE publicado califica la vulnerabilidad con CVSS 3.1: 9.9 (Crítica).
Este repositorio contiene mi propio análisis técnico y reproducción controlada de la vulnerabilidad.
La vulnerabilidad ya había sido divulgada públicamente bajo CVE-2026-38526. Este trabajo no reclama el descubrimiento de la vulnerabilidad. El propósito de esta investigación fue comprender la implementación vulnerable, reproducir la ruta de explotación en un entorno controlado y examinar las condiciones que convierten el problema de carga de archivos en ejecución remota de código.
La vulnerabilidad también se utilizó en la , que proporcionó un entorno práctico para estudiar el problema.
Producto: Webkul Krayin CRM Versiones afectadas: 2.2.x Vulnerabilidad: Carga Arbitraria de Archivos Impacto resultante: Ejecución Remota de Código Autenticación: Requerida Vector de ataque: Red CWE: CWE-434 — Carga sin restricciones de archivos de tipo peligroso CVSS: 9.9 Crítica CVE: CVE-2026-38526
La funcionalidad vulnerable es gestionada por:
/admin/tinymce/upload
El endpoint acepta un archivo cargado a través del parámetro file. La lógica relevante de la aplicación deriva el nombre de archivo almacenado a partir del nombre de archivo original y conserva su extensión original.

Este comportamiento es importante porque la aplicación no se limita a aceptar un objeto cargado; está reteniendo una extensión ejecutable controlada por el atacante y haciendo que el objeto resultante sea accesible a través del mecanismo de almacenamiento de la aplicación.
El problema principal es la validación insuficiente del lado del servidor de los archivos cargados.
La aplicación utiliza la extensión original proporcionada por el cliente al construir el nombre de archivo almacenado. No existe una lista de permitidos suficientemente restrictiva que impida que los tipos de archivo ejecutables lleguen a la capa de almacenamiento.
El flujo relevante es

El uso de un nombre de archivo generado no aborda el problema subyacente.
Por ejemplo, cambiar shell.php por un nombre de archivo generado como .php no hace que el archivo cargado sea seguro si el servidor continúa interpretando los archivos .php como código PHP ejecutable.
Una carga sin restricciones no significa automáticamente ejecución remota de código.
La ruta de ejecución depende del manejo que haga el servidor del archivo cargado.
En el escenario de despliegue vulnerable, la cadena se convierte en
