Sviluppatori di plugin e temi: ecco cosa puoi imparare dalla vulnerabilità di sicurezza del nostro SDK
Pubblicato: 2019-03-02Questa settimana è stata piuttosto intensa per il nostro team poiché abbiamo dovuto affrontare una vulnerabilità di sicurezza. La sicurezza è per noi la massima priorità e questa è la prima grande vulnerabilità rilevata nel nostro SDK in quattro anni. Sfortunatamente, come con qualsiasi software, anche gli sviluppatori sono esseri umani, quindi accadono errori, che tu sia uno sviluppatore indipendente, un negozio di temi di 20 persone o Google. Lo scopo di questo articolo è prima di tutto la trasparenza, ma anche quello di darti un'idea di come abbiamo gestito l'incidente e di cosa puoi imparare da esso.
Lunedì, 25 febbraio 2019, abbiamo ricevuto un'e-mail di supporto da un utile sviluppatore che si è imbattuto in un problema con GitHub sul repository WooCommerce. Il problema è stato creato da un rappresentante di una piccola società di hosting che ha notato attività sospette sui propri server. Il rappresentante includeva i registri delle attività pertinenti che indicavano due potenziali attacchi e uno di questi mirava a un plug-in che eseguiva Freemius SDK.
Poiché prendiamo molto sul serio la sicurezza, abbiamo immediatamente condotto un'indagine approfondita e abbiamo confermato che la vulnerabilità era effettivamente nel nostro SDK.
A causa della gravità della vulnerabilità, abbiamo iniziato subito a lavorare su una soluzione. Dopo solo poche ore abbiamo rilasciato un tag corretto e notificato a tutti gli sviluppatori che stavano utilizzando una versione SDK vulnerabile di aggiornare l'SDK su tutti i loro prodotti il prima possibile. Abbiamo anche aggiornato il problema originale di GitHub per farlo sapere al team di WooCommerce (il problema GH che abbiamo rimosso dopo poche ore per ridurre l'esposizione).
Per mitigare l'esposizione e dare a tutti un po' di "grazia" per aggiornare alla versione fissa, abbiamo chiesto agli sviluppatori due cose:
(a) Se questo aggiornamento di sicurezza verrà incluso nel registro delle modifiche, utilizzare solo parole generiche come "Correzione di sicurezza".
(b) Anche dopo l'aggiornamento e il rilascio delle versioni corrette, si prega di non divulgare questo problema nei prossimi 30 giorni, concedendo a tutti i nostri partner e ai loro utenti il tempo sufficiente per l'aggiornamento.
Appena un giorno dopo, un sito Web che copre le vulnerabilità dei plug-in (non collegandoli intenzionalmente o menzionando il loro nome) ha pubblicato un post sulla vulnerabilità, comprese le informazioni su come sfruttarla nominando alcuni dei plug-in interessati. Questo ci ha colto di sorpresa poiché abbiamo appena informato gli sviluppatori di plugin e temi del problema meno di 24 ore prima. Non ci hanno contattato né hanno seguito la pratica di mercato della Responsible Disclosure , che troviamo abbastanza irresponsabile e non etica.
Li ho contattati chiedendo di annullare temporaneamente la pubblicazione del rapporto per ridurre l'esposizione e offrire ai nostri sviluppatori e ai loro utenti la possibilità di aggiornare alle versioni corrette prima che attiri l'attenzione indesiderata di più hacker. Ma la persona con cui ho comunicato, che non ha mai esposto il proprio nome (gli ho chiesto loro), ha la sua ideologia giusta e sembra che il buon senso non le piaccia molto. Ho provato a spiegare la situazione problematica e l'aumento del rischio che stanno esponendo a molti sviluppatori e utenti, ma i miei sforzi sono caduti nel vuoto e mi sono reso conto che il mio scambio di e-mail era solo una perdita di tempo.
Poiché la community dei nostri sviluppatori stava aggiornando i propri plugin e temi all'SDK appena patchato che abbiamo rilasciato, abbiamo riscontrato due problemi:
- Diversi sviluppatori non hanno ricevuto la nostra e-mail di avviso perché si sono registrati su Freemius con un indirizzo e-mail che non stanno controllando.
- Non abbiamo intenzionalmente contrassegnato il tag GitHub con patch come versione ufficiale per evitare di attirare l'attenzione. Tuttavia, abbiamo appreso che gli sviluppatori che utilizzavano Composer per aggiornare le loro librerie non ricevevano l'ultimo aggiornamento perché packgist recupera solo le versioni, a meno che non specifichino un tag in modo esplicito.
Per superare questi problemi:
- Poiché la vulnerabilità era già stata pubblicata pubblicamente, due giorni fa abbiamo contrassegnato la versione con patch come versione ufficiale in modo che gli sviluppatori che si affidano a packgist possano eseguire l'aggiornamento.
- Questa mattina abbiamo inviato un'altra serie di messaggi via email agli sviluppatori che devono ancora aggiornare l'SDK su tutti i loro prodotti. Questa volta abbiamo inviato i messaggi ai loro canali di supporto ufficiali per aumentare le possibilità che tutti ricevano correttamente le e-mail.
Anche se volevamo posticipare la pubblicazione di questa vulnerabilità di almeno due settimane, abbiamo ricevuto un'ulteriore richiesta da WP Tavern che chiedeva il nostro contributo prima che pubblicassero il proprio articolo sull'argomento, che è stata la goccia che ha fatto traboccare il vaso della tastiera dello sviluppatore.
Gli errori che abbiamo fatto e cosa puoi imparare da loro
Ripensando all'incidente, abbiamo commesso diversi errori che avremmo potuto facilmente evitare e che avrebbero reso la vita di tutti molto più semplice.
Entra in modalità silenziosa e avvisa solo chi ha bisogno di sapere
Dato che eravamo così ansiosi di risolvere il problema al più presto, ho commesso personalmente un errore da "principiante" che ha attirato l'attenzione indesiderata troppo presto. Sono andato avanti e ho eseguito il commit della correzione nel repository GitHub che utilizziamo per gestire l'SDK. Non solo il repository è pubblico, ma ho spiegato la correzione e ho usato la parola "sicurezza" in esso.
L'approccio migliore era creare una versione privata/chiusa del repository, correggere il problema di sicurezza lì ed esporlo solo agli sviluppatori interessati invece di renderlo pubblico. Questo non attirerebbe l'attenzione dei “cacciatori di vulnerabilità”.
Non sprecare le tue energie con i "troll della sicurezza"
Il secondo errore è stato tentare di interagire con l'azienda dietro il sito che ha pubblicato la vulnerabilità. È stata una totale perdita di tempo ed energia e ha solo innescato un ulteriore antagonismo che si è concluso con un altro post sulla vulnerabilità. Direi che un buon indicatore per decidere se vale la pena dedicare del tempo a contattare un autore di un post che mette a rischio i tuoi utenti di plugin o temi, è se c'è un nome dietro il post/sito web/azienda. Se si nascondono dietro delegati e agiscono in modo irrazionale, la possibilità che tu possa parlare con loro di buon senso è praticamente zero.
Quindi questo è il mio consiglio: entra in modalità silenziosa e avvisa solo le persone che devono essere a conoscenza della vulnerabilità. Nel caso di un plugin/tema, sono i tuoi utenti. Questa è anche una buona opportunità per sottolineare l'importanza di raccogliere le email dei tuoi utenti. Se non hai un modo per comunicare privatamente con i tuoi utenti, non hai un modo efficace per notificarli privatamente sui problemi di sicurezza.
Lo stato attuale dell'incidente
Più del 60% degli sviluppatori che utilizzano il nostro SDK ha già eseguito l'aggiornamento alla versione con patch. Inoltre, l'SDK viene fornito con un meccanismo speciale che consente a più plugin o temi supportati da Freemius installati sullo stesso sito Web WordPress di utilizzare la versione più recente dell'SDK se uno dei prodotti è già aggiornato. Quindi va bene.
Detto questo, ci sono ancora molti siti vulnerabili. Ecco perché non ho menzionato alcun dettaglio tecnico sulla vulnerabilità stessa, né sui prodotti interessati. Vogliamo comunque offrire ai nostri sviluppatori la possibilità di applicare patch ai loro prodotti e consentire ai loro utenti di eseguire l'aggiornamento alle versioni sicure.
Come ridurre i rischi per la sicurezza nel tuo plugin/tema WordPress?
Se non hai alcuna esperienza in materia di sicurezza, consulta le "best practices per la sicurezza web" di Google e troverai tantissimi articoli e pratiche. Leggi alcuni di questi per essere consapevole dei rischi e degli errori potenziali moderni e tipici. Tienili a mente durante i processi di sviluppo e test. Un'altra buona pratica consiste nell'eseguire controlli di sicurezza periodici assumendo un ricercatore di sicurezza. Costerà alcune centinaia di dollari, ma se fai affidamento sul tuo prodotto come principale fonte di reddito, è un gioco da ragazzi.
Purtroppo, come nel nostro caso, possono ancora succedere cose brutte. Anche se abbiamo un background di sicurezza molto forte, conduciamo revisioni approfondite del codice e collaboriamo con un ricercatore di sicurezza esperto della comunità di HackerOne, ma questa vulnerabilità è comunque sfuggita alle crepe. 😔
Penso che uno dei motivi per cui è successo è perché il codice vulnerabile è stato effettivamente aggiunto per eseguire il debug dei casi limite e non fa parte della funzionalità principale dell'SDK. Quindi, se c'è una lezione qui, tratta qualsiasi pezzo di codice nel tuo prodotto allo stesso modo, sia che faccia parte della logica aziendale effettiva o qualsiasi altra cosa.
Ricapitolare
I problemi di sicurezza sono inevitabili nel mondo del software. Che ci piaccia o no, un giorno il tuo plugin o tema avrà un problema di sicurezza. Il problema può essere nel codice, in una libreria/framework che stai utilizzando, in un metodo core di WordPress che fornisce risultati imprevisti e in molti altri scenari.
Quando succede (spero che non accada), non stressarti (l'abbiamo sicuramente fatto) e agisci in modo impulsivo: farà solo più danni. Elabora un piano metodologico di ripristino, avvisa le parti interessate e sii presente per aiutare i tuoi utenti a proteggere i loro siti. Tutti sanno che i problemi di sicurezza accadono, ciò che è più importante è come affronti la situazione.
Detto questo, a nome di tutto il team Freemius, siamo veramente dispiaciuti per l'inconveniente e saremo qui per tutto il fine settimana per offrire supporto, consigli o qualsiasi altro aiuto relativo al problema. E per i nostri nuovi utenti, so quanto sia importante la prima impressione, e questa non è sicuramente una buona impressione. Spero che darai a Freemius un'altra possibilità e, con il tempo, vedrai le straordinarie funzionalità che offriamo per i tuoi plugin e temi WordPress.