Authenticated Arbitrary File Upload che porta a Remote Code Execution. Analisi tecnica e riproduzione controllata di CVE-2026-38526 in Webkul Krayin CRM 2.2.x.
Caricamento arbitrario di file autenticato che porta a Remote Code Execution Analisi tecnica e riproduzione controllata di CVE-2026-38526 in Webkul Krayin CRM 2.2.x.
CVE-2026-38526 è una vulnerabilità di caricamento arbitrario di file autenticato che interessa Webkul Krayin CRM 2.2.x.
La funzionalità vulnerabile è esposta tramite l'endpoint di caricamento TinyMCE dell'applicazione:
POST /admin/tinymce/upload
L'applicazione non limita sufficientemente il tipo di file che può essere caricato. Un utente autenticato può inviare un file con un'estensione eseguibile lato server, come .php. L'applicazione memorizza il file caricato e restituisce il suo URL accessibile.
Quando il deployment consente l'esecuzione di PHP dalla posizione di caricamento, il file caricato può successivamente essere richiesto attraverso il web server, con conseguente remote code execution nel contesto del processo dell'applicazione web.
Il record CVE pubblicato valuta la vulnerabilità CVSS 3.1: 9.9 (Critical).
Questo repository contiene la mia analisi tecnica e la riproduzione controllata della vulnerabilità.
La vulnerabilità era già stata divulgata pubblicamente con CVE-2026-38526. Questo lavoro non rivendica la scoperta della vulnerabilità. Lo scopo di questa ricerca era comprendere l'implementazione vulnerabile, riprodurre il percorso di sfruttamento in un ambiente controllato ed esaminare le condizioni che trasformano il problema di caricamento file in remote code execution.
La vulnerabilità è stata utilizzata anche nella macchina Hack The Box GCSB 2026 Nexus, che ha fornito un ambiente pratico per studiare il problema.
Prodotto: Webkul Krayin CRM Versioni interessate: 2.2.x Vulnerabilità: Caricamento arbitrario di file Impatto risultante: Remote Code Execution Autenticazione: Richiesta Vettore di attacco: Rete CWE: CWE-434 — Caricamento senza restrizioni di file con tipo pericoloso CVSS: 9.9 Critical CVE: CVE-2026-38526
La funzionalità vulnerabile è gestita da:
/admin/tinymce/upload
L'endpoint accetta un file caricato tramite il parametro file. La logica applicativa rilevante deriva il nome del file memorizzato dal nome del file originale e ne preserva l'estensione originale.

Questo comportamento è importante perché l'applicazione non si limita ad accettare un oggetto caricato; mantiene un'estensione eseguibile controllata dall'attaccante e rende l'oggetto risultante accessibile tramite il meccanismo di storage dell'applicazione.
Il problema principale è la validazione lato server insufficiente dei file caricati.
L'applicazione utilizza l'estensione originale fornita dal client quando costruisce il nome del file memorizzato. Non esiste un'allowlist sufficientemente restrittiva che impedisca ai tipi di file eseguibili di raggiungere il livello di storage.
Il flusso rilevante è

L'uso di un nome file generato non risolve il problema di fondo.
Ad esempio, trasformare shell.php in un nome file generato come .php non rende sicuro il file caricato se il server continua a interpretare i file .php come codice PHP eseguibile.
Un caricamento senza restrizioni non significa automaticamente remote code execution.
Il percorso di esecuzione dipende dalla gestione del file caricato da parte del server.
Nello scenario di deployment vulnerabile, la catena diventa
