Cosa è successo
Il Team di sviluppo e manutenzione di PrestaShop è stato messo a conoscenza che alcuni attaccanti stavano sfruttando un insieme di vulnerabilità note e ignote del CMS per iniettare codice malevolo all'interno dei siti web realizzati in PrestaShop, consentendo loro di eseguire istruzioni arbitrarie e potenzialmente sottrarre informazioni di pagamento dei clienti.
Nell'analisi di questi attacchi, il team di PrestaShop ha individuato una catena di vulnerabilità sconosciute che sono in corso di correzione. Il problema affligge gli shop basati sulle versioni 1.6.0.10 o successive, soggette a vulnerabilità di tipo SQL Injection.
Le versioni 1.7.8.2 e successive non sono vulnerabili a patto che non stiano eseguendo un modulo oppure codice personalizzato che include una vulnerabilità di tipo SQL Injection.
Le versioni 2.0.0 e 2.1.0 del modulo "Wishlist" (blockwishlist) sono vulnerabili.
Come funziona l'attacco
L'attacco richiede che lo shop sia vulnerabile ad exploit di tipo SQL Injection. Ad oggi, il team di sviluppo ritiene che l'ultima versione di PrestaShop ed i suoi moduli di default sono privi di tali vulnerabilità.
Gli attaccanti hanno preso di mira shop che usano software obsoleto oppure moduli di terze parti vulnerabili o con vulnerabilità non ancora note.
Il modus operandi ricorrente è simile a quanto segue:
- L'attaccante invia una richiesta POST all'endpoint vulnerabile alla SQL Injection.
- Dopo circa un secondo, l'attaccante invia una richiesta GET all'homepage senza parametri. Questo risulta in un file PHP chiamato
blm.php
che viene creato nella root dello shop. - L'attaccante invia ora una richiesta GET al nuovo file creato
blm.php
, consentendogli di eseguire istruzioni arbitrarie.
Dopo aver preso il controllo dello shop, gli attaccanti iniettano un form di pagamento fasullo nella pagina di checkout pubblica. In questo scenario, i clienti dello shop potrebbero inserire informazioni sulle loro carte di credito nel form fasullo, inviandole inconsapevolmente agli attaccanti.
Questo è stato finora il pattern di attacco comune, tuttavia gli attacanti potrebbero usarne uno diverso, usando nomi dei file diversi, modificando altre parti del software oppure rimuovendo le proprie tracce dopo l'attacco.
Cosa fare per mantenere il proprio shop sicuro
Prima di tutto, assicurarsi che il proprio shop e tutti i moduli installati siano aggiornati all'ultima versione disponibile. Questo dovrebbe prevenire che il proprio shop sia esposto a vulnerabilità note e attivamente sfruttate.
Gli attaccanti potrebbero usare le funzionalità di storage MySQL di Smarty cache come parte del vettore di attacco. Queste funzionalità sono usate raramente e disabilitate di default, ma potrebbero essere attivate da remoto dall'attaccante.
Fino alla pubblicazione di una patch ufficiale, si raccomanda di disattivare fisicamente questa funzionalità nel codice di PrestaShop per bloccare la catena di attacco.
Per farlo, rintracciare il file config/smarty.config.inc.php
nell'installazione di PrestaShop, e rimuovi le righe 43-46 (in caso di PrestaShop 1.7) oppure 40-43 (PrestaShop 1.6).
if (Configuration::get('PS_SMARTY_CACHING_TYPE') == 'mysql') {
include _PS_CLASS_DIR_.'Smarty/SmartyCacheResourceMysql.php';
$smarty->caching_type = 'mysql';
}
Come verificare se si è stati attaccati
Controllare gli access log del proprio server per verificare i pattern di attacco indicati sopra.
Esempio:
- [14/Jul/2022:16:20:56 +0200] "POST /modules/XXX/XXX.php HTTP/1.1" 200 82772 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0.1 Safari/602.2.14"
- [14/Jul/2022:16:20:57 +0200] "GET / HTTP/1.1" 200 63011 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36"
- [14/Jul/2022:16:20:58 +0200] "POST /blm.php HTTP/1.1" 200 82696 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0"
(Il percorso è stato modificato per ragioni di sicurezza).
Non ritrovare questi pattern non inica che il sito non sia stato attaccato. Purtroppo la complessità dell'attacco implica che si siano potuti utilizzare altri path o altre vie per sfruttare la vulnerabilità.
Verificare anche le date di modifiche dei file dello spazio web aiuta ad identificare eventuali manomissioni.
Ulteriori informazioni
Il team di sviluppo di PrestaShop sta al momento predisponendo e testando una patch per mettere al sicuro gli shop.
Consigli pratici
- Assicurarsi di disporre delle ultime versioni di PrestaShop e dei moduli installati (temi inclusi).
- In caso di PrestaShop 1.7.1 e successivi, utilizzare il seguente modulo Open Source per verificare l'eventuale presenza della vulnerabilità: https://github.com/MathiasReker/blmvuln
- Eseguire la modifica sulla configurazione di Smarty Cache come indicato nei paragrafi precedenti.
- Verificare i log (access log) del proprio hosting.
- Verificare la data di modifica dei file nel proprio spazio web.
Aggiornamento del 25/07/2022
Il Team di PrestaShop ha rilasciato la nuova versione di PrestaShop 1.7.8.7 che corregge la vulnerabilità. Si consiglia l'aggiornamento.