Vulnerabilidade no acesso de administrador do WP

Hoje em dia é natural ter diferentes ambientes rodando uma mesma aplicação. Para o meu blog por exemplo mantenho três ambientes, "Desenvolvimento"(aka localhost), Homologação e Produção.

Modificando um plugin para o wordpress neste final de semana, me deparei com um fato interessante. Estava logado no localhost(que está configurado como virtualhost apontando para eliasgranja.com) editando algumas configurações. Decidi conferir se as mudanças batiam com os settings de produção. Estava "deslogado" do ambiente, mas resolvi acessar diretamente pela URL de administração. Por algum motivo estranho consegui entrar diretamente na seção de administrador.  Acreditando fielmente que eu estava ficando doido acessei meu site no Chrome para fazer um teste. Garanti que não estava logado em produção, liguei o localhost e me loguei. Logo após desliguei o apache, apontei o dominio para o local certo e então acessei produção e magicamente estava logado.

Fiquei em estado de alarme, já que esse tipo de erro nos cookies é algo perigoso, principalmente em ambientes corporativos onde nem todos que tem acesso ao ambiente de desenvolvimento deveria ter ao de produção.

Fui estudar como o wp criava seus cookies e achei o seguinte trecho de código no arquivo wp-config.php.

Pouco acima deste trecho existe um comentário dizendo para trocar esses valores utilizando a ferramenta do wordpress disponível no endereço "https://api.wordpress.org/secret-key/1.1/salt/". Assim, após trocar estes dados no wordpress local refiz o teste acima e não consegui ser redirecionado diretamente para o painel de administração em produção.

Resumindo, o sistema de cookies do wordpress se baseia nessas keys para criar os cookies de login, assim elas devem ser únicas para cada "instância" da aplicação.

Minha recomendação é gerar as chaves de autenticação diferentes para cada ambiente, evitando assim que usuários sem permissão de acesso em outros ambientes acessem o painel de administração de seu blog. No meu caso, por exemplo, eu gerei um código diferente para os ambientes de produção, homologação e produção. Assim evito por exemplo de algum amigo que venha a desenvolver para o meu blog tenha acesso a ele em produção pelo simples fato de ter o código do meu wordpress. Além disso, caso tenha deixado o seu blog logado em algum ambiente público, como na faculdade, basta você fazer o mesmo procedimento de trocar as keys que automaticamente forçará todos os usuários logados a entrar com username/password novamente.