
CVE-2026-86596 è una vulnerabilità di esecuzione di codice remoto (RCE) nel plugin s2Member per WordPress, con punteggio CVSS 9.8, gravità critica. Riguarda tutte le versioni fino alla 260927 inclusa. Se il tuo sito usa s2Member per abbonamenti, aree riservate o pagamenti PayPal, devi verificare la versione installata, controllare sull'advisory del produttore se esiste una versione corretta e, nel frattempo, ridurre l'esposizione. Al momento la falla non risulta nel catalogo CISA KEV, ma il tipo di vulnerabilità giustifica un intervento rapido.
Cosa è successo: la vulnerabilità CVE-2026-86596 in s2Member
s2Member gestisce livelli di iscrizione e notifiche di pagamento, in particolare quelle di PayPal. Il problema sta nel trattamento del parametro item_name. La funzione strip_php_tags_deep() dovrebbe ripulire l'input da codice PHP, ma rimuove solo le sequenze letterali <?. Il valore controllato dall'attaccante viene poi inserito in un template email e, dopo l'inserimento, una fase di pulizia dei segnaposto ricompone un'apertura <?php valida. Il codice iniettato viene quindi eseguito sul server. Secondo la descrizione ufficiale, l'attacco richiede un utente autenticato con accesso di livello custom o superiore.
Chi è colpito: versioni vulnerabili di s2Member
- Plugin s2Member per WordPress, tutte le versioni fino alla 260927 inclusa.
- I file indicati nei riferimenti pubblici sono quelli che gestiscono le notifiche PayPal in entrata (paypal-notify-in*.inc.php) e utilities.inc.php, dove si trova la funzione di sanificazione.
- Una versione corretta non è indicata nelle informazioni disponibili: va verificata sulla pagina del plugin su WordPress.org e nel changelog.
Un plugin disattivato non carica il proprio codice, ma i file restano sul server. Se non lo usi, rimuovilo invece di lasciarlo spento.
Quanto è grave: punteggio CVSS e sfruttamento attivo
Il vettore è CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H: attacco via rete, bassa complessità, nessuna interazione dell'utente, impatto alto su riservatezza, integrità e disponibilità. Il vettore indica nessun privilegio richiesto, mentre la descrizione parla di attaccanti autenticati con livello custom. Per prudenza considera esposto ogni sito con il plugin installato, soprattutto se la registrazione utenti è aperta.
Cosa ottiene chi sfrutta la falla: esecuzione di codice PHP con i permessi del processo web. In pratica può caricare una webshell, leggere wp-config.php con le credenziali del database, creare un amministratore, modificare i file del sito e, su hosting condivisi mal segmentati, muoversi verso altri siti. Sfruttamento attivo nel catalogo CISA KEV: non risulta al momento. Non è una garanzia: le RCE nei plugin WordPress vengono spesso cercate in automatico poco dopo la pubblicazione, come abbiamo visto per la RCE nel plugin Project Manager.
Come capire se sei esposto: verifica versione, esposizione e log
Verifica della versione di s2Member
- Da bacheca: Plugin > Plugin installati, cerca s2Member e leggi la versione.
- Con WP-CLI: wp plugin get s2member --field=version.
- Da file: l'intestazione di wp-content/plugins/s2member/s2member.php riporta la riga Version:.
Se la versione è minore o uguale a 260927 sei vulnerabile.
Esposizione del servizio
L'endpoint che riceve le notifiche PayPal deve per sua natura essere raggiungibile da internet, quindi non puoi contare sul fatto che sia nascosto. Controlla invece chi può autenticarsi: in Impostazioni > Generali verifica se la registrazione è aperta a chiunque e con quale ruolo predefinito. Con wp user list elenca gli utenti e verifica quanti hanno livelli s2Member e quanti sono stati creati di recente senza una ragione nota.
Log e indicatori di compromissione
- Log di accesso del web server: cerca richieste che contengono item_name con sequenze come <? o la forma codificata %3C%3F.
- File PHP nuovi o modificati in wp-content/uploads, nella root del sito o nelle cartelle dei plugin. Comandi utili: find . -name "*.php" -mtime -7, wp core verify-checksums e wp plugin verify-checksums --all.
- Utenti amministratori sconosciuti, eventi cron anomali (wp cron event list), modifiche a wp-config.php e .htaccess.
- Email in uscita con contenuti strani: la falla passa dai template email, quindi anche i log del server di posta possono aiutare.
Come risolvere la vulnerabilità: patch, aggiornamento e rimedio
La versione corretta non è nota dalle informazioni disponibili. Controlla la pagina del plugin su WordPress.org e il changelog: se esiste una release successiva alla 260927 che cita questa falla, aggiorna da Plugin > Aggiorna o con wp plugin update s2member, dopo un backup completo di file e database. Se gestisci un sito con pagamenti, prova prima l'aggiornamento su una copia di staging.
Se la patch non è ancora disponibile, dillo chiaramente a chi gestisce il sito e scegli tra queste alternative: disattivare e rimuovere il plugin, oppure mantenerlo con le mitigazioni della sezione seguente, accettando un rischio residuo. Un plugin di membership spento interrompe accessi e rinnovi, quindi la scelta va pianificata, non rimandata.
Cosa fare subito: mitigazioni e hardening
- Chiudi la registrazione aperta se non è indispensabile e rivedi i livelli assegnati agli utenti esistenti. La descrizione ufficiale lega l'attacco a utenti con livello custom o superiore: meno utenti con quei livelli, meno superficie.
- Regola WAF sul web server o sul servizio di protezione del sito: blocca richieste in cui item_name contiene <? anche in forma codificata. È una misura temporanea, non sostituisce la patch.
- Disabilita l'esecuzione di PHP nella cartella wp-content/uploads tramite configurazione del web server.
- Ruota le credenziali di amministrazione, database, FTP/SFTP e API PayPal se hai dubbi sull'integrità del sito.
- Isola il sito: su hosting condivisi o VPS con più siti, verifica che ogni sito giri con un utente di sistema separato.
- Backup verificato offline, da cui poter ripartire se serve un ripristino pulito.
Questi passaggi rientrano nei controlli di sicurezza base per un sito WordPress che consiglio comunque di tenere attivi.
Se sospetti una compromissione: incident response e analisi forense
Se trovi webshell, utenti sconosciuti o file modificati, non spegnere il server e non ripulire a mano. Cancellare file e reinstallare il sito distrugge le prove e spesso lascia una backdoor in posti che non hai controllato. Procedi così:
- Metti il sito in manutenzione o limita l'accesso a livello di rete, senza riavviare.
- Preserva i log del web server, di PHP e di posta, e se possibile la memoria del sistema.
- Esegui una copia forense del filesystem e del database prima di qualsiasi modifica.
- Valuta la notifica: se sono stati esposti dati personali di iscritti o clienti, il GDPR impone di valutare la comunicazione al Garante entro 72 ore dalla scoperta.
- Solo dopo, ripristina da backup pulito, aggiorna e ruota tutte le credenziali.
Come perito informatico forense mi occupo di questa fase: acquisizione delle prove, ricostruzione dell'intrusione e relazione tecnica utilizzabile con assicurazione, legale o autorità. L'incident response parte da 1.500 € con preventivo fisso. Per le prime ore ho descritto le priorità nell'articolo su cosa fare nelle prime 24 ore dopo un attacco.
Fonti ufficiali
- s2Member, utilities.inc.php (funzione strip_php_tags_deep)
- s2Member, paypal-notify-in.inc.php
- s2Member, paypal-notify-in-web-accept-sp.inc.php (riga 104)
- s2Member, paypal-notify-in-web-accept-sp.inc.php (riga 131)
- s2Member, paypal-notify-in-web-accept-sp.inc.php (riga 138)
- s2Member, paypal-notify-in-subscr-or-wa-w-level.inc.php
Hai s2Member sul tuo sito? Ti aiuto a verificare
Se non sai quale versione hai, se non riesci a leggere i log o se hai già trovato qualcosa di anomalo, scrivimi. Faccio una verifica della versione, dell'esposizione e degli indicatori di compromissione, e ti dico in modo chiaro se serve una patch, una mitigazione o un'analisi forense. Richiedi un preventivo gratuito, rispondo entro 24 ore, oppure passa dalla pagina contatti per un messaggio su WhatsApp.


