Se hai ricevuto un’email da parte mia che ti rimanda a questa pagina, è perché il tuo sito sembra eseguire una versione di Content Views – Post Grid & Filter (il plugin WordPress di Content Views / PT Guy, che si trova nei tuoi file in /wp-content/plugins/content-views-query-and-display-post-page/) che rientra nell’intervallo interessato da un noto problema di sicurezza. Questa pagina spiega di cosa si tratta, quanto possa contare per il tuo sito, come leggere la tua versione senza essere fuorviato e come procedere all’aggiornamento.

Il problema è CVE-2026-15361, una SQL injection nella gestione dell’anteprima del plugin. Interessa ogni versione precedente alla 4.5 ed è risolto nella 4.5, rilasciata il 28 luglio 2026. Se stai eseguendo qualcosa di più vecchio della 4.5, aggiorna Content Views alla 4.5.1 o successiva, che è la versione attuale al momento della stesura (4 agosto 2026). Non esiste alcun punteggio CVSS pubblicato per questo problema, quindi non te ne citerò uno, e non sono a conoscenza di alcun codice di exploit pubblico per esso.

Non esiste una versione precedente che sia sicura. Non si tratta di una falla introdotta a metà della storia del plugin e poi corretta. Ho controllato ogni tag di rilascio pubblicato nella storia del plugin, dal primo nel 2014 fino alla 4.4, e il codice interessato è presente in tutti. “La mia installazione è troppo vecchia per essere interessata” non è una via d’uscita in questo caso. Le uniche versioni non interessate sono la 4.5 e successive.

Prima di tutto, la condizione che decide quanto questo conti per il tuo sito, perché preferisco dichiararla piuttosto che lasciare che l’avviso suoni più grave di quanto sia: questa falla può essere usata solo da qualcuno che ha effettuato l’accesso al tuo sito. Non importa cosa possa normalmente fare il suo account, e il ruolo più basso di WordPress è sufficiente, ma serve comunque un account. Quindi la domanda che decide la tua esposizione non è un’impostazione da qualche parte nel plugin, è chi può ottenere un account sul tuo sito. Posso leggere la versione del tuo plugin da un file pubblico, e posso vedere se WordPress serve la sua pagina di registrazione standard, ma non posso vedere chi detiene account sul tuo sito, quindi questo avviso è un avvertimento precauzionale piuttosto che una scoperta confermata su di te.

Nota cosa quella condizione non è. Non c’è un’opzione da disattivare, nessuna funzione da rimuovere dalla pubblicazione, e nessuna configurazione che ti porti fuori dall’intervallo interessato. Il gestore interessato è registrato su ogni installazione di una versione interessata, indipendentemente dal fatto che tu abbia mai inserito una griglia di post in una pagina. Se vai a cercare una casella da deselezionare, non la troverai, perché non esiste. Aggiornare è la soluzione.

Una parola sull’urgenza, poiché si tratta di un avviso condizionato. Se sei l’unica persona con un account sul sito e nessun altro può ottenerne uno, aggiornare è una normale manutenzione del plugin. Se il tuo sito accetta iscrizioni da altre persone, ti prego di trattarlo come una priorità, e nota che le iscrizioni assumono più forme di quella ovvia: un negozio WooCommerce, un plugin di iscrizione o forum, un blog multi-autore e una pagina di iscrizione personalizzata creano tutti account senza che il modulo di registrazione nativo di WordPress sia mai coinvolto.

Se hai la pagina di registrazione di WordPress aperta ai visitatori e non ne hai bisogno, disattivarla è un passo intermedio ragionevole, perché restringe chi può raggiungere questo problema. Ti prego però di non leggerlo come un attestato di sicurezza completa. Chiudere la registrazione chiude solo una delle diverse porte verso un account, e non fa nulla riguardo agli account che già esistono. Aggiornare il plugin è ciò che rimuove effettivamente il problema.

Vale anche la pena essere precisi su cosa questo problema sia e cosa non sia. Permette a qualcuno con un account a basso privilegio di leggere dati dal database del tuo sito che il suo account non dovrebbe poter vedere. Vale la pena correggerlo, poiché un database di WordPress contiene cose come indirizzi email degli utenti e password con hash, e su alcuni siti dati di membri o clienti. Ma non è una presa di controllo dell’amministratore, non è un modo per qualcuno di assegnarsi un account amministratore, e non è esecuzione di codice remoto. È più circoscritto dei problemi di compromissione totale di cui scrivo altrove, e preferisco impostare la scala onestamente piuttosto che lasciarti un’impressione più spaventosa di quanto i fatti supportino.

Si tratta di una falla del plugin, non di una falla del core di WordPress. Un WordPress completamente aggiornato non ti protegge se il plugin Content Views stesso è su una versione interessata.

Questo messaggio è legittimo?

Sì. Si tratta di un avviso di divulgazione responsabile e di buona fede da parte di un ricercatore di sicurezza indipendente. Io non ti chiedo denaro, password o accesso al tuo sito, e non ho tentato di entrarci, di registrarmi su di esso o di sfruttare nulla.

Ho solo esaminato pagine e file che il tuo sito web serve a ogni visitatore (allo stesso modo in cui la tua homepage è pubblica) e ho annotato il numero di versione che il plugin rende noto. Una delle pagine che ho letto è stata la pagina di registrazione standard di WordPress del tuo sito, per vedere se è aperta ai visitatori, e leggerla è tutto ciò che ho fatto con essa. In particolare non ho inviato quel modulo, non ho creato un account, non ho effettuato l’accesso, e non ho inviato nulla alla funzione interessata. Nulla in questa verifica tocca i tuoi dati, la tua area di amministrazione o qualsiasi parte privata del tuo sito (maggiori dettagli sotto Cosa ho fatto e cosa non ho fatto di seguito).

Se desideri verificare chi sono, consulta i dettagli di contatto in fondo a questa pagina e la pagina Chi sono.

Perché è importante

Content Views crea griglie di post, elenchi e scroller sul tuo sito, così puoi mostrare una selezione filtrata di post o pagine senza scrivere alcun codice. Parte di come lo fa è un gestore di richieste che rende un’anteprima di una griglia a partire dalle impostazioni che gli vengono fornite.

Nelle versioni interessate, quel gestore controlla un token di sicurezza e si ferma lì. Non verifica mai se la persona che invia la richiesta sia autorizzata a usarlo, e il token in questione non è un segreto: il plugin lo pubblica a ogni visitatore del sito. Il gestore poi costruisce una query al database a partire da impostazioni prese direttamente dalla richiesta. La conseguenza è che qualcuno in possesso di nient’altro che l’account con i privilegi più bassi sul tuo sito può guidare quella query e leggere dati dal tuo database che il suo account non dovrebbe avere motivo di vedere.

La precondizione, da ripetere perché è la parte più probabile da fraintendere in entrambe le direzioni: un account, non una configurazione. Non deve essere abilitato nulla perché il gestore sia raggiungibile, e non c’è alcuna impostazione che porti una versione interessata fuori dall’intervallo. Ciò che sta tra un’installazione interessata e questo problema è semplicemente se qualcuno diverso da te possa effettuare l’accesso. Su un sito dove chiunque può iscriversi, questa non è una gran barriera. Su un sito dove sei l’unico utente, lo è davvero.

E il rovescio della medaglia, che conta altrettanto: un sito con il modulo di registrazione di WordPress chiuso non è per questo sicuro. Gli account arrivano per molte strade, e una qualsiasi di esse è sufficiente.

Lo descrivo al livello necessario a un proprietario del sito per agire, e non oltre. Non sto pubblicando i dettagli che permetterebbero a qualcuno di riprodurlo, e ti chiedo di non provarlo contro il tuo sito o contro quello di chiunque altro. Leggere il tuo numero di versione, come descritto di seguito, ti dice tutto ciò che ti serve per decidere cosa fare.

Se la mia email ha citato questo problema, significa che la versione riportata dal tuo sito è più vecchia della 4.5. Non ho testato se il tuo sito specifico sia sfruttabile, e non posso vedere chi ha account su di esso. Tutto ciò che ho osservato è la versione, e se la tua pagina di registrazione viene servita ai visitatori.

Sono interessato?

Si riduce a una sola domanda: quale versione di Content Views stai eseguendo?

Una breve nota su quale plugin sia questo, poiché il nome è condiviso. Questo avviso riguarda il plugin gratuito pubblicato su WordPress.org, quello la cui cartella è content-views-query-and-display-post-page. Lo stesso fornitore vende anche una linea Pro separata. Se la cartella del tuo plugin è quella, continua a leggere.

Dall’area di amministrazione di WordPress (fonte autorevole):

  1. Accedi alla tua bacheca di WordPress (di solito su yourdomain.com/wp-admin).
  2. Vai su Plugin poi Plugin installati.
  3. Trova Content Views – Post Grid & Filter, la voce la cui cartella è content-views-query-and-display-post-page, e annota la versione mostrata sotto il suo nome.

Dal manifesto pubblico (non serve il login): apri

yourdomain.com/wp-content/plugins/content-views-query-and-display-post-page/README.txt

in un browser, e leggi la riga Stable tag: vicino all’inizio. Questa è una delle due fonti pubbliche che ho letto.

Fai attenzione alle maiuscole in quel nome di file. I plugin di WordPress convenzionalmente distribuiscono un readme.txt minuscolo, ed è l’indirizzo che la maggior parte delle persone digita per abitudine. I pacchetti 4.x di questo plugin distribuiscono il file come README.txt in lettere maiuscole, quindi su un host sensibile alle maiuscole/minuscole l’indirizzo minuscolo restituisce un 404 e sembra che il file non ci sia. C’è. Prova la grafia maiuscola prima di concludere qualsiasi cosa.

Dalla sorgente della tua pagina (non serve il login): visualizza il codice sorgente della tua home page e cerca le risorse front-end proprie del plugin esattamente in questi percorsi:

/wp-content/plugins/content-views-query-and-display-post-page/public/assets/js/cv.js?ver=...
/wp-content/plugins/content-views-query-and-display-post-page/public/assets/css/cv.css?ver=...

Il numero ?ver= allegato a quei file è la versione propria del plugin. In un’installazione predefinita, questi si caricano su ogni pagina front-end, che vi appaia o meno una griglia di post, quindi la tua home page di solito è sufficiente. Nelle installazioni molto vecchie, gli stessi due file si chiamano public.js e public.css, e la stessa regola si applica a loro.

La trappola da evitare qui, ed è facile caderci. Questo plugin distribuisce copie incluse di diverse librerie di terze parti all’interno della propria cartella del plugin, e ciascuna di esse porta il proprio numero di versione, del tutto indipendente. Il codice sorgente della tua pagina potrebbe mostrare Bootstrap alla 3.3.5 o 3.3.0, Select2 alla 3.4.5, html5shiv alla 3.7.0, respond.js alla 1.4.2, e bootstrap-paginator alla 0.5, tutti su percorsi che iniziano con la cartella del plugin Content Views. Un operatore che cerca la cartella del plugin nel codice sorgente della pagina e legge il primo valore ?ver= che trova può facilmente convincersi che il plugin sia alla “3.3.5”, e poi chiedersi come questo si confronti con la 4.5. Non si confronta affatto. Un numero come 3.3.5 o 0.5 su un percorso bootstrap o select2 è la versione di un software completamente diverso. Leggi la versione solo da cv.js o cv.css (o public.js / public.css su un’installazione molto vecchia), e ignora ogni altro ?ver= nella pagina.

Se non riesci proprio a ottenere un numero leggibile dal codice sorgente della pagina, è comune e non è segno di nulla: i plugin di caching e ottimizzazione rimuovono regolarmente il valore ?ver= dagli indirizzi delle risorse, oppure raggruppano i file in uno script combinato. In quel caso il README.txt è la lettura pubblica affidabile, e la schermata di amministrazione nel primo controllo ha sempre la risposta.

Poi applica questa regola, notando che le versioni si confrontano numericamente, non alfabeticamente, quindi la 4.10 sarebbe più recente della 4.9 anche se sembra più piccola come testo:

  • Qualsiasi versione precedente alla 4.5: interessata. Aggiorna. Non c’è un limite sotto il quale una versione più vecchia torni a essere sicura.
  • 4.5 o successiva: già risolta per quanto riguarda questo problema. La versione attuale al momento della stesura è la 4.5.1, e prendere l’ultima versione disponibile è la mossa migliore.

Come effettuare l’aggiornamento

Il plugin è gratuito, ancora pubblicato e attivamente mantenuto, quindi la correzione è un normale aggiornamento. Il percorso più sicuro è aggiornare tramite WordPress stesso, e fare prima un backup:

  1. Esegui il backup del tuo sito (file e database) prima di apportare modifiche. La maggior parte dei provider di hosting offre backup con un solo clic, oppure puoi usare un plugin di backup per WordPress.
  2. Nell’amministrazione di WordPress, vai su Bacheca poi Aggiornamenti, oppure Plugin poi Plugin installati. Se è elencato un aggiornamento per Content Views, installalo da qui.
  3. Se preferisci la riga di comando, WP-CLI fa la stessa cosa: wp plugin update content-views-query-and-display-post-page (il comando utilizza il nome della cartella, non il nome visualizzato).
  4. Se non appare alcun aggiornamento, puoi ottenere l’ultima versione direttamente dalla pagina del plugin nella directory di WordPress.org, Content Views – Post Grid & Filter, e aggiornare tramite Plugin poi Aggiungi nuovo plugin poi Carica plugin.
  5. Dopo l’aggiornamento, conferma il nuovo numero di versione (4.5.1 o successivo) usando i passi sopra, e verifica che le tue griglie di post e ogni eventuale filtro su di esse funzionino ancora normalmente.

Mentre sei lì, vale la pena confermare che il core di WordPress e i tuoi altri plugin siano aggiornati, poiché lo stesso principio si applica a tutti loro.

Dopo l’aggiornamento

Aggiornare alla 4.5.1 o successiva chiude il problema, e per la maggior parte dei siti questo è l’intero compito. Questa pagina è un avviso precauzionale, non un rapporto d’incidente: non ho alcuna visibilità su ciò che è accaduto o meno sul tuo sito, e non ho verificato.

Due piccole cose valgono la pena di essere fatte finché l’aggiornamento è recente:

  • Conferma che la versione sia effettivamente cambiata, usando quale dei controlli sopra ti è risultato più semplice, e carica una pagina che mostra una delle tue griglie di post per assicurarti che venga ancora visualizzata correttamente.
  • Se avevi la registrazione di WordPress aperta e non ne hai bisogno, valuta di chiuderla. Questo è igiene generale piuttosto che una correzione per questo problema, che l’aggiornamento ha già risolto, ed è utile ricordare che altri plugin sul tuo sito potrebbero comunque creare account.

Noterai che non c’è alcuna lista di controllo “presumi di essere stato compromesso” in questa pagina, e questo è deliberato, non una dimenticanza. Ciò che questo problema produce è una lettura del database raggiungibile da un account a basso privilegio. Non consegna a nessuno un account amministratore e non esegue codice sul tuo server, quindi la verifica degli amministratori e la procedura di rotazione delle password che consiglio dopo una falla di tipo takeover non sarebbero proporzionate qui. Aggiorna, conferma, e prosegui.

Cosa ho fatto e cosa non ho fatto

Per essere pienamente trasparente riguardo al controllo dietro la mia email, ecco tutto quanto. Ho letto pagine e file che il tuo sito serve già a ogni visitatore:

  • la tua home page, e gli indirizzi delle risorse scritti in essa;
  • il README.txt pubblico del plugin all’interno di wp-content/plugins/content-views-query-and-display-post-page/;
  • la pagina di registrazione standard di WordPress del tuo sito, a /wp-login.php?action=register, per vedere se è aperta ai visitatori. È una pagina pubblicata, e leggerla è tutto ciò che ho fatto.

Non ho inviato quel modulo di registrazione, non ho creato un account, e non ho effettuato l’accesso al tuo sito. Non ho inviato nulla alla funzione interessata. Quest’ultimo punto è quello su cui voglio essere più chiaro: il problema è un punto di inserimento per SQL injection, e lanciare un payload contro il database di qualcun altro non è qualcosa che questo progetto fa, né in laboratorio né in produzione. Nulla è stato inviato, testato o sfruttato, e nulla ha toccato la tua area di amministrazione di WordPress, il tuo database, o qualsiasi parte privata del sito.

Sto anche deliberatamente non pubblicando i dettagli che aiuterebbero qualcuno ad agire su questo problema. La descrizione sopra si ferma al livello di cui un proprietario del sito ha bisogno, e non collego alcun codice proof-of-concept.

Questa è un’osservazione basata sulla versione: il tuo sito segnala una versione più vecchia della 4.5. Non è un’affermazione che il tuo sito fosse sfruttabile al momento del mio controllo. Poiché usare questo problema richiede che qualcuno abbia effettuato l’accesso, e non posso vedere chi detiene account sul tuo sito, un sito nell’intervallo interessato potrebbe benissimo non essere affatto esposto, e un sito in quell’intervallo potrebbe essere separatamente protetto da altri mezzi come un firewall per applicazioni web o una correzione retroportata.

Non ho un webmaster / Sono bloccato

Se non sei la persona che mantiene il sito, per favore inoltra questa pagina a chi se ne occupa (il tuo sviluppatore web, agenzia o provider di hosting). Riconosceranno rapidamente i passaggi sopra.

Se stai mantenendo il sito da solo e ti blocchi, sono felice di aiutarti indicando la direzione giusta senza costi. Contattami utilizzando i dettagli di contatto di seguito.

Contatti

Evan Harris, Ricercatore di sicurezza

Mi metto in contatto riguardo a problemi come questo puramente per aiutare gli operatori a proteggere i loro siti. Se preferisci non essere contattato di nuovo, fammelo sapere e lo rispetterò.

Riferimenti

Avvisi ufficiali e tracciamento

Fornitore / plugin