13 / 17 Plugins para WordPress com mais de 150/270 mil downloads ativos com o mesmo problemas de segurança.

13 / 17 Plugins para WordPress com mais de 150/270 mil downloads ativos com o mesmo problemas de segurança.

A Introdução:

No final de novembro reparei em uma função de tratamento de arquivos no PHP que estava passando despercebido pelo desenvolvedores, talvez por parecer inofensivo. A função em questão é a unlink, que, para quem não conhece, serve para deleção de um arquivo no filesystem.

É comum se preocupar com funcionalidades de upload de arquivos, até mesmo aquelas que fazem leitura. Infelizmente, esquecem da deleção.

Essa análise foi possível, pois estava trabalhando com mais um projeto meu, o Tintin. Que consiste na análise estática do código com finalidade de achar algum bug de segurança.

Veja a lista no final do post.


O problema:

Quando a função unlink, é utilizada junto com uma entrada de dados por parâmetro (seja do tipo GET, POST, REQUEST). Uma falha de segurança pode existir.

Exemplo simples:

Unlink( $_GET[‘filename’] );

Se passar para o parametro $_GET[‘filename’] arquivos importantes para seu sistema, isso pode ser fatal. Como por exemplo, no caso do WordPress com o wp-config.php:

http://www.target.com/?filename=wp-config.php

Dependendo do uso do unlink você terá que andar para trás nos diretórios com ../ , e possivelmente o arquivo será deletado.

http://www.target.com/?filename=../wp-config.php

http://www.target.com/?filename=../../wp-config.php

E, por padrão no wordpress, ao acessar o sistema após essa ação, você poderá fazer uma nova instalação e apontar para o banco de dados que você quiser.

Bingo!! Attack success.

OBS: A má utilização do unlink não é um problema só do WordPress e sim do PHP em geral.


Números:

Existem mais de 270 mil downloads ativos com este problema. Apesar disso, acredito que somente serão aceitos como bug’s de segurança um pouco mais da metade, ou seja 150 mil (o que não é pouco), a outra parte não serão considerados como bug de segurança, por serem executadas somente com administrador e por terem uma validação contra CRSF.

Apesar dos dois mecanismos de defesa,  ainda é uma falha? Para mim sim, considero um bug de segurança de nível baixo ou simplesmente bug, pelo simples fato de efetuar ação no sistema que não era sua finalidade, podendo até reiniciar todo sistema.

Todos os plugins estão reportados, alguns já resolvidos.

 


Solução: 

Como todo problema existem várias soluções eu vou indicar alguns:

Uso de filtros:

PHP/WordPress -> elimine o uso de “../” para navegação entre as pastas. Mas faça da forma correta para não sofrer um bypass no ataque, elimine por partes “..” e “/”.

PHP/WordPRess -> se você possui uma pasta default especifica use o método basename para extrair unicamente o nome do arquivo eliminando o caminho completo da pasta.

WordPress -> crie filtro com o wp_delete_file, esse método serve para apagar o arquivo assim como o unlink mas você pode criar filtros.

Fiz um commit para o core do WordPress melhorando a segurança para essa vulnerabilidade, deixando bloqueadas por default pastas do core e não deixando que arquivos dos diretórios do core sejam excluídos. Mas deixei um mecanismo que libera diretório por diretório, caso realmente precise apagar algo do core. Ainda está em análise para aprovação, bem aqui. 

Não foi aceito, mas irei abrir outra novamente explicando alguns questionamentos. Pois o WordPress precisa ter um método que salve as pasta do core.

Pequena resposta a “não”.

É obviu que nunca vou conseguir proibir o uso do unlink, assim como não consigo proibir que façam querys sem usar o $wpdb, nunca vou conseguir inibir métodos default, mas o WordPress tem responsabilidade de ter um método com o mínimo de segurança.


Lista dos plugins:

Os exploits serão liberados de acordo com os ajustes forem sendo feitos.

Title Level Type Data Discovery Publish Contact Vendor Resolved Possible Targets
Not resolved low
  • Remote Code Execution - RCE
01/04/2018 6k
Not resolved high
  • Remote Code Execution - RCE
12/08/2017 7k
Plugin Media Library Assistant 2.65 RCE - Unlink / Local File Download medium_low
  • Local File Domwload LFD
  • Remote Code Execution - RCE
  • Vulnerabilidades Encontradas
12/29/2017 40k
Not resolved low
  • Remote Code Execution - RCE
11/21/2017 20k
Not resolved medium_high
  • Remote Code Execution - RCE
12/23/2017 8k
Not resolved low
  • Remote Code Execution - RCE
11/29/2017 5k
Not resolved medium_low
  • Remote Code Execution - RCE
11/29/2017 3k
Not resolved low
  • Remote Code Execution - RCE
11/27/2017 10k
Not resolved low
  • Local File Inclusion - LFI
  • Remote Code Execution - RCE
11/23/2017 10k
Not resolved medium_high
  • Remote Code Execution - RCE
11/25/2017 3k
Not resolved medium_high
  • Remote Code Execution - RCE
11/23/2017 20k
Not resolved low
  • Remote Code Execution - RCE
11/23/2017 80k
Plugin WPBackItUp Backup 1.15.3 - RCE - Unlink low
  • Remote Code Execution - RCE
  • Vulnerabilidades Encontradas
11/28/2017 20k
Not resolved high
  • Remote Code Execution - RCE
11/25/2017 2 k
Not resolved low
  • Remote Code Execution - RCE
11/25/2017 10k
Not resolved medium_high
  • Remote Code Execution - RCE
11/22/2017 2k
Not resolved low
  • Remote Code Execution - RCE
11/22/2017 30k

Leave a reply