Vulnerabilità critica di PHPMailer

Articolo aggiornato dopo la pubblicazione dei dettagli della vulnerabilità.

Dawid Golunski ha scoperto e segnalato una vulnerabilità critica di PHPMailer nelle versioni precedenti la 5.2.18 che consentirebbe l’esecuzione di codice arbitrario sul server della vittima.

Il problema è stato corretto dalla versione 5.2.18.

Dopo l’annuncio iniziale della notte tra il 25 e il 26 dicembre, sono stati pubblicati i dettagli di come sia possibile sfruttare questa vulnerabilità.

La vulnerabilità presenta dei fattori mitiganti, in quanto può essere sfruttata solamente in determinati casi.

Se si utilizza una stringa creata ad arte per ingannare la routine di sanificazione, è possibile utilizzare il parametro -X di sendmail per eseguire sul computer remoto file PHP arbitrari.

Se si utilizza il metodo isSMTP() (non di default) per inviare la mail, la routine interessata dal problema non viene eseguita. isSMTP() dice a PHPMailer di inviare la mail collegandosi alla porta 25 di un server agendo, quindi, come client SMTP. Questo sistema di invio della mail non richiama in shell alcun programma presente sul computer che sta eseguendo il codice PHP.

Inoltre l’MTA presente sul sistema vittima deve essere proprio sendmail, in quanto altri MTA che emulano la command line di sendmail ignorano il parametro -X.

Da ultimo, la stringa che può scatenare l’esecuzione remota di codice è quella del mittente impostata tramite il metodo SetFrom().

Riassumendo, il problema si presenta se si verificano almeno tutte queste condizioni:

  • viene lasciato il metodo di default di invio della mail;
  • l’indirizzo del mittente della mail viene inserito da terzi e non viene controllato o verificato in un qualche modo;
  • l’MTA del sistema su cui gira PHPMailer è proprio sendmail, non un altro MTA che lo emula come, ad esempio, Postfix o Exim.

Nonostante questi fattori mitiganti, è consigliabile aggiornare comunque il programma perché è possibile che altri stiano studiando metodi analoghi per aggirare in altri modi i controlli di validità di PHPMailer.

PHPMailer è molto utilizzato in diversi progetti basati su PHP, controllate se il software che avete installato contiene questa libreria e chiedete agli sviluppatori di rilasciare degli aggiornamenti.

Se aggiornate da una versione un po’ vecchia di PHPMailer, ricordate che nelle ultime versioni il file da includere è PHPMailerAutoload.php

L’ultima versione di PHPMailer è disponibile su GitHub.

Autore: Luigi Rosa

Consulente IT, sviluppatore, SysAdmin, cazzaro, e, ovviamente, geek.

Spazio per un commento