
# Snow Monkey Forms <= 12.0.3 - Eliminazione Arbitraria di File Non Autenticata tramite Path Traversal (CVE-2026-1056)
Questo repository contiene una Proof of Concept (PoC) per una vulnerabilità critica nel plugin WordPress Snow Monkey Forms (versioni <= 12.0.3). La vulnerabilità consente a un attaccante non autenticato di eliminare file arbitrari sul server tramite Path Traversal.
Riferimento: Sarawut Poolkhet (MisterHelloz)
Snow_Monkey\Plugin\Forms\App\Rest\Route\View.php/wp-json/snow-monkey-form/v1/view)La vulnerabilità risiede nel gestore REST API situato in Snow_Monkey\Plugin\Forms\App\Rest\Route\View.php. Il metodo send() determina il flusso in base ai parametri di input dell'utente.
// File: App/Rest/Route/View.php
public function send() {
Csrf::save_token();
$method = Meta::get_method(); // Proviene da $_POST['snow-monkey-forms-meta']['method']
// VULNERABILITÀ: Se 'method' è 'input', il controllo CSRF critico viene BYPASSATO.
if ( 'input' === $method ) {
return $this->_send(); // Flusso di esecuzione diretto a _send()
}
// Il controllo CSRF viene eseguito solo per altri metodi (es. 'confirm', 'complete')
if ( ! Csrf::validate( Meta::get_token() ) ) { ... }
Fornendo input come parametro del metodo, un attaccante forza l'applicazione a eseguire immediatamente la funzione _send(), saltando il controllo di sicurezza Csrf::validate() progettato per prevenire azioni non autorizzate.
All'interno del metodo _send(), l'applicazione tenta di eseguire una routine di pulizia per le directory temporanee specifiche dell'utente. Questa routine si basa sul parametro formid.
// File: App/Rest/Route/View.php -> _send()
// 'form_id' proviene direttamente dai dati POST tramite la classe Meta senza sanificazione
$user_dirpath = Directory::generate_user_dirpath( $this->setting->get( 'form_id' ), false );
Directory::do_empty( $user_dirpath, true ); // Elimina ricorsivamente i contenuti
Directory::remove( $user_dirpath ); // Elimina la directory stessa
Il difetto critico risiede nel modo in cui Directory::generate_user_dirpath costruisce il percorso:
// File: App/Model/Directory.php
public static function generate_user_dirpath( $form_id, $do_create_directory = true ) {
$saved_token = Csrf::saved_token();
// ... (Esiste un controllo regex per il token, ma non per form_id) ...
$user_dir = path_join( static::get(), $saved_token );
// VULNERABILITÀ: $form_id viene aggiunto direttamente.
// path_join() di WordPress NON risolve né sanifica le sequenze '../'.
$user_dir = path_join( $user_dir, (string) $form_id );
return $user_dir;
}
La variabile $form_id viene convertita in stringa ma non viene mai validata come intero. Ciò consente a un attaccante di iniettare caratteri di traversal delle directory (es. ../../../../).
requests (pip install requests)python exploit.py -u <TARGET_URL> -f <TRAVERSAL_PAYLOAD>
