Segurança

Saiba mais sobre os arquivos básicos do programa WordPress neste informativo grátis. Você também pode baixá-lo em PDF.

Visão geral

Este documento é uma análise e uma explicação sobre o desenvolvimento dos arquivos básicos do WordPress e seus relativos processos de segurança, bem como um exame da segurança do próprio programa. Tomadores de decisão avaliando o WordPress como um sistema de gerenciamento de conteúdo ou como uma estrutura para aplicações web devem usar este documento para suas análises e decisões. Desenvolvedores devem consultá-lo para se familiarizarem com os componentes de segurança e melhores práticas do programa.

As informações neste documento estão atualizadas com a versão estável mais recente do programa, o WordPress 4.7 no momento da publicação, mas devem ser consideradas relevantes também para a maioria das versões mais recentes do programa, já que retrocompatibilidade é algo que recebe bastante atenção da equipe de desenvolvimento do WordPress. Medidas e mudanças específicas de segurança são registradas porque elas são adicionadas aos arquivos básicos em lançamentos específicos. É altamente recomendável executar a versão estável mais recente do WordPress para garantir a experiência mais segura possível.

Resumo executivo

WordPress is a dynamic open-source content management system which is used to power millions of websites, web applications, and blogs. It currently powers more than 32% of the top 10 million websites on the Internet. WordPress’ usability, extensibility, and mature development community make it a popular and secure choice for websites of all sizes.

Desde sua criação em 2003, o WordPress vem trabalhando continuamente em sua segurança, de modo que seus arquivos básicos podem corrigir e mitigar ameaças comuns, incluindo a lista da The Open Web Application Security Project (OWASP) com as 10 principais e mais comuns vulnerabilidades de segurança, que são discutidas neste documento.

A Equipe de segurança do WordPress, em colaboração com os líderes da equipe responsável pelos arquivos básicos e apoiada pela comunidade global do WordPress, trabalha para identificar e resolver problemas de segurança dos arquivos do programa disponível para distribuição e instalação no WordPress.org, assim como para recomendar e documentar as melhores práticas de segurança para plugins de terceiros e autores de temas.

Desenvolvedores e administradores de sites devem prestar muita atenção ao uso correto das APIs dos arquivos básicos e às configurações do servidor por trás do site, que são a origem das vulnerabilidades mais comuns, e também garantir que todos os usuários utilizem senhas fortes para acessar o WordPress.

Visão geral do WordPress

WordPress is a free and open source content management system (CMS). It is the most widely-used CMS software in the world and it powers more than 32% of the top 10 million websites1, giving it an estimated 60% market share of all sites using a CMS.

WordPress is licensed under the General Public License (GPLv2 or later) which provides four core freedoms, and can be considered as the WordPress “bill of rights”:

  1. A liberdade para executar o programa, para qualquer propósito.
  2. A liberdade de estudar como o programa funciona e alterá-lo para fazer dele o que você quiser.
  3. A liberdade de redistribuir.
  4. A liberdade de distribuir cópias das suas versões modificadas para outros.

A liderança da Equipe dos arquivos básicos do WordPress

O projeto WordPress é uma meritocracia, executada por líderes da equipe dos arquivos básicos e dirigida por seu co-criador e líder de desenvolvimento, Matt Mullenweg. A equipe gerencia todos os aspectos do projeto, incluindo o desenvolvimento dos arquivos básicos, o WordPress.org e as iniciativas da comunidade.

A liderança da Equipe dos arquivos básicos é composta pelo Matt Mullenweg, cinco desenvolvedores líderes e mais de uma dúzia de desenvolvedores com acesso a commits, isto é, alterações no código presente no repositório oficial. Estes desenvolvedores têm a autoridade final em decisões técnicas e conduzem as discussões sobre arquitetura e esforços de implementação.

Vários desenvolvedores colaboram para o WordPress. Alguns destes são ou foram committers e alguns ainda serão. Estes desenvolvedores são colaboradores veteranos e confiáveis do WordPress, que conquistaram o respeito de seus pares. Conforme o necessário, o WordPress também tem committers convidados, pessoas que recebem o acesso para realizar commits, às vezes para um componente específico, em caráter temporário ou experimental.

O desenvolvimento do WordPress é orientado principalmente pelos desenvolvedores que colaboram para os arquivos básicos. A cada versão, centenas de desenvolvedores contribuem com código para o WordPress. Estes colaboradores são voluntários que contribuem de alguma forma para a base de código dos arquivos do programa.

O ciclo de lançamento do WordPress

Cada ciclo de lançamento do WordPress é liderado por um ou mais desenvolvedores dos arquivos básicos do WordPress. Um ciclo de lançamento normalmente dura por volta de 4 meses, da reunião inicial de escopo até o lançamento da versão.

Um ciclo de lançamento segue o seguinte padrão2:

  • Fase 1: Planejamento e consolidação dos líderes de equipe. Isso é feito no canal #core do Slack internacional. O líder da versão discute os recursos do próximo lançamento do WordPress. Colaboradores do WordPress se envolvem nesta discussão. O líder da versão identificará líderes de equipe para cada um dos recursos.
  • Fase 2: O trabalho de desenvolvimento começa. Os líderes organizam as equipes e trabalham nos recursos que lhes foram atribuídos. Bate-papos regulares são agendados para garantir que o desenvolvimento continue progredindo.
  • Fase 3: Beta. As versões beta são lançadas e os testadores recebem pedidos para que comecem a enviar erros. Não há mais commits, ou alterações de código, para novas melhorias ou solicitações de novos recursos a partir desta fase. Plugins de terceiros e autores de tema são encorajados a testar seus códigos com as mudanças que estão por vir.
  • Fase 4: Release Candidate, ou candidato para lançamento. Há um congelamento dos textos para tradução a partir deste ponto. O trabalho é destinado somente a reversões e bloqueios.
  • Fase 5: Lançamento. A versão do WordPress é lançada e disponibilizada na administração do WordPress para atualização.

Numeração das versões e atualizações de segurança

A major WordPress version is dictated by the first two sequences. For example, 3.5 is a major release, as is 3.6, 3.7, or 4.0. There isn’t a “WordPress 3” or “WordPress 4” and each major release is referred to by its numbering, e.g., “WordPress 3.9.”

Major releases may add new user features and developer APIs. Though typically in the software world, a “major” version means you can break backwards compatibility, WordPress strives to never break backwards compatibility. Backwards compatibility is one of the project’s most important philosophies, with the aim of making updates much easier on users and developers alike.

Uma versão menor do WordPress é identificável pelo terceiro grupo de números. A versão 3.5.1 é um lançamento menor, assim como a 3.4.23. Uma versão menor se destina a corrigir somente problemas de segurança e erros críticos. Desde que as novas versões do WordPress são lançadas mais frequentemente — o objetivo é uma versão maior a cada 4 ou 5 meses e versões menores sempre que necessário — estes são os tipos de lançamentos necessários.

Retrocompatibilidade de versões

O projeto WordPress tem um grande compromisso com a retrocompatibilidade. Este compromisso significa que temas, plugins e códigos personalizados continuam funcionando quando os arquivos básicos do WordPress são atualizados, encorajando proprietários de sites a manter as suas versões do WordPress atualizadas para o lançamento mais recente e seguro.

WordPress e segurança

A Equipe de segurança do WordPress

A Equipe de segurança do WordPress é formada por aproximadamente 50 especialistas, incluindo desenvolvedores líderes e pesquisadores da área de segurança, sendo quase metade formada por empregados da Automattic (criadores do WordPress.com, a maior e mais antiga plataforma de hospedagem WordPress na internet) e vários trabalhadores da área de segurança da rede. A equipe consulta renomados pesquisadores de segurança e empresas de hospedagem3.

A Equipe de segurança do WordPress colabora frequentemente com outras equipes de segurança para corrigir problemas de dependências comuns, como resolvendo problemas de vulnerabilidade no interpretador XML do PHP, usado pela API XML-RPC e que faz parte do WordPress desde a versão 3.9.24. A solução para esta vulnerabilidade foi o resultado de um esforço em conjunto das equipes de segurança do WordPress e do Drupal.

Riscos, processos e história da segurança do WordPress

A Equipe de segurança do WordPress acredita em divulgação responsável, isto é, em um alerta imediato para a equipe de segurança sobre quaisquer potenciais vulnerabilidades. Potenciais vulnerabilidades de segurança podem ser enviadas para a Equipe de segurança através do HackerOne do WordPress5. A Equipe de segurança se comunica através de um canal privado do Slack e trabalha em um rastreador de problemas privado, testando e corrigindo erros e problemas de segurança.

Cada aviso de segurança é tratado assim que é recebido e a equipe trabalha para verificar a vulnerabilidade e determinar sua severidade. Se confirmada, a equipe de segurança então se planeja para criar a correção do problema, que pode ser integrada ao código na próxima versão do WordPress ou pode criar uma atualização de segurança imediatamente, dependendo da gravidade do problema.

Para atualizações imediatas de segurança, um comunicado é publicado pela Equipe de segurança no site WordPress.org News6 anunciando o lançamento e detalhando as mudanças. O crédito pela divulgação responsável da vulnerabilidade é dado no comunicado para encorajar e reforçar a continuidade das divulgações responsáveis no futuro.

Administradores de instalações do WordPress recebem uma notificação em seus painéis para atualizar quando uma nova versão está disponível e, depois de atualizar manualmente, os usuários são redirecionados para a tela Sobre do WordPress, que detalha as mudanças. Se as atualizações automáticas em segundo plano estiverem habilitadas, os administradores receberão um e-mail depois da conclusão da atualização.

Instalação automática em segundo plano de atualizações de segurança

A partir da versão 3.7, o WordPress introduziu atualizações automáticas em segundo plano para lançamentos menores7, como 3.7.1 e 3.7.2. A Equipe de segurança do WordPress pode identificar, corrigir e enviar melhorias de segurança para o WordPress automaticamente, de modo que os proprietários de sites não precisem fazer nada, e a atualização de segurança será instalada automaticamente.

Quando uma atualização de segurança é enviada para a versão atual do WordPress, a equipe dos arquivos básicos do WordPress também enviará atualizações de segurança para todas as versões que são capazes de realizar atualizações em segundo plano (desde o WordPress 3.7), de forma que estas versões mais antigas do WordPress também receberão melhorias de segurança.

Proprietários de sites podem remover atualizações automáticas em segundo plano através de uma simples mudança em seus arquivos de configuração, mas manter esta funcionalidade é altamente recomendável pela equipe dos arquivos básicos, assim como executar sempre a versão estável mais recente do WordPress.

Top 10 2013 do OWASP

O Open Web Application Security Project (OWASP, Projeto de segurança de aplicações web abertas em tradução livre) é uma comunidade on-line dedicada à segurança de aplicações web. A lista Top 10 do OWASP8 se dedica a identificar os riscos de segurança mais sérios para uma ampla lista de organizações. Os itens da lista Top 10 são selecionados e priorizados combinando as estimativas de explorabilidade, detectabilidade e impacto.

As seções a seguir discutem as APIs, recursos e políticas usadas pelo WordPress para fortalecer os arquivos básicos do programa e os plugins e temas de terceiros contra estes potenciais riscos.

A1 - Injeção

Existe um conjunto de funções e APIs disponíveis no WordPress para auxiliar os desenvolvedores a ter certeza de que código não autorizado não possa ser injetado, ajudando-os a validar e higienizar os dados. Melhores práticas e documentação estão disponíveis9 sobre como usar estas APIs para proteger, validar ou higienizar entrada e saída de dados em HTML, URLs, cabeçalhos HTTP e ao interagir com banco de dados ou sistema de arquivos. Através de filtros, os administradores também podem restringir os tipos de arquivos que podem ser enviados.

A2 - Autenticação interrompida e gerenciamento de sessões

Os arquivos básicos do WordPress gerenciam contas de usuários e a autenticação e os detalhes como o ID do usuário, nome e senha são gerenciados pelo lado do servidor, assim como os cookies de autenticação. Senhas são protegidas no banco de dados usando técnicas padrão de salto e alongamento. Sessões existentes são destruídas ao se desconectar em versões posteriores ao WordPress 4.0.

A3 - Execução de scripts de outros sites (XSS, Cross-Site Scripting)

O WordPress fornece uma série de funções que ajudam a garantir a segurança dos dados inseridos pelos usuários10. Usuários confiáveis, ou seja, administradores e editores de uma instalação simples do WordPress e somente administradores de rede no WordPress Multisite, podem publicar JavaScript ou HTML sem filtros conforme a necessidade, seja em um post ou em uma página. Usuários não confiáveis ou conteúdos enviados por usuários são filtrados por padrão para remover entidades perigosas, usando a biblioteca KSES através da função wp_kses.

Como exemplo, a equipe dos arquivos básicos do WordPress percebeu antes do lançamento do WordPress 2.3 que a função the_search_query() estava sendo usada de forma errada pela maioria dos autores de tema, que não estavam escapando a saída da função em conteúdos HTML. Em um caso muito raro de pequena quebra da retrocompatibilidade, a saída da função foi alterada no WordPress 2.3 para ser escapada previamente.

A4 - Referência direta e insegura a objeto

WordPress often provides direct object reference, such as unique numeric identifiers of user accounts or content available in the URL or form fields. While these identifiers disclose direct system information, WordPress’ rich permissions and access control system prevent unauthorized requests.

A5 - Erros nas configurações de segurança

A maioria das operações de configuração de segurança do WordPress estão limitadas a um único administrador autorizado. As configurações padrão do WordPress são continuamente avaliadas pela equipe dos arquivos básicos, que fornece documentação e melhores práticas para melhorar a segurança das configurações dos servidores que executam sites WordPress11.

A6 - Exposição de dados sensíveis

WordPress user account passwords are salted and hashed based on the Portable PHP Password Hashing Framework12. WordPress’ permission system is used to control access to private information such an registered users’ PII, commenters’ email addresses, privately published content, etc. In WordPress 3.7, a password strength meter was included in the core software providing additional information to users setting their passwords and hints on increasing strength. WordPress also has an optional configuration setting for requiring HTTPS.

A7 - Controle de nível de acesso à função

O WordPress verifica se há autorização e permissões adequadas para qualquer solicitação de acesso no nível de função antes da ação que está sendo executada. O acesso ou a visualização de URLs administrativos, menus e páginas sem autenticação adequada é totalmente integrado ao sistema de autenticação para impedir o acesso de usuários não autorizados.

A8 - Falsificação de solicitação entre sites (CSRF, Cross Site Request Forgery)

O WordPress usa tokens criptográficos, chamados nonces13, para validar a intenção de solicitações de ação de usuários autorizados para proteção contra potenciais ameaças CSRF. O WordPress fornece uma API para a geração desses tokens para criar e verificar tokens exclusivos e temporários, e o token é limitado a um usuário específico, uma ação específica, um objeto específico e um período de tempo específico, que pode ser adicionado a formulários e URLs, conforme necessário. Além disso, todos os nonces são invalidados no logout.

A9 - Uso de componentes com vulnerabilidades conhecidas

A equipe dos arquivos básicos do WordPress monitora de perto as poucas bibliotecas externas que o WordPress utiliza em suas funções. No passado, a equipe já contribuiu para vários componentes de terceiros tornando-os mais seguros, como a atualização para corrigir uma vulnerabilidade no TinyMCE no WordPress 3.5.214.

Se necessário, a equipe dos arquivos básicos pode decidir criar um fork, isto é, uma versão alterada, ou substituir um componente externo crítico, como o que aconteceu quando a biblioteca SWFUpload foi oficialmente substituída pela biblioteca Plupload na versão 3.5.2, e um fork seguro da SWFUpload foi disponibilizado pela equipe de segurança<15 para aqueles plugins que continuaram usando a SWFUpload no curto prazo.

A10 - Redirecionamentos sem validação

WordPress’ internal access control and authentication system will protect against attempts to direct users to unwanted destinations or automatic redirects. This functionality is also made available to plugin developers via an API, wp_safe_redirect()16.

Riscos e preocupações adicionais com segurança

Ataques no processamento de Entidades externas de XML (XXE, XML eXternal Entity)

When processing XML, WordPress disables the loading of custom XML entities to prevent both External Entity and Entity Expansion attacks. Beyond PHP’s core functionality, WordPress does not provide additional secure XML processing API for plugin authors.

Ataques por Falsificação de requisições feitas pelo lado do servidor (SSRF, Server Side Request Forgery)

As requisições HTTP feitas pelo WordPress são filtradas para prevenir acesso a endereços IP privados. Adicionalmente, o acesso só é permitido a certas portas padrão do HTTP.

Segurança de temas e plugins do WordPress

O tema padrão

O WordPress precisa que um tema esteja habilitado para exibir conteúdo para o usuário. O tema padrão, que é distribuído junto com os arquivos básicos do WordPress (atualmente o "Twenty Seventeen"), tem sido vigorosamente revisado e testado em questões de segurança, tanto pela equipe de desenvolvedores de tema quanto pela equipe de desenvolvimento dos arquivos básicos.

O tema padrão pode servir de ponto de partida para o desenvolvimento de temas personalizados, e desenvolvedores de sites podem criar temas descendentes, que incluem alguma personalização, mas utiliza o tema padrão para a maior parte das funcionalidades e segurança. Se não for necessário, o tema padrão pode ser facilmente removido por um administrador.

Repositórios de temas e plugins do WordPress.org

Existem mais de 50.000 plugins e mais de 5.000 temas listados no site WordPress.org. Estes temas e plugins são enviados para inclusão e são avaliados manualmente por voluntários antes que fiquem disponíveis no repositório.

A inclusão de plugins e temas no repositório não é uma garantia de que eles não possuem vulnerabilidades. Diretrizes para autores de plugins devem ser consultadas antes do envio para a inclusão no repositório17 e uma documentação extensiva sobre como desenvolver temas para o WordPress18 é fornecida no site WordPress.org.

Cada plugin e tema pode ser continuamente desenvolvido por seus proprietários e qualquer desenvolvimento de correções ou recursos pode ser enviado para o repositório, de forma a ficar disponível, junto com uma descrição da mudança, para os usuários com aquele plugin ou tema instalado. Administradores de sites são notificados de plugins que precisam ser atualizados através de seus painéis de administração.

Quando uma vulnerabilidade de um plugin é descoberta pela Equipe de segurança do WordPress, eles entram em contato com o autor do plugin para, juntos, trabalharem em uma correção e lançarem uma versão segura do plugin. Se não houver resposta do autor do plugin ou se a vulnerabilidade for muito grave, o tema ou plugin é retirado do diretório público e, em algum casos, corrigido e atualizado diretamente pela Equipe de segurança.

A Equipe de avaliação de temas

A Equipe de avaliação de temas é um grupo de voluntários, liderados por importantes membros-chave da comunidade WordPress, que avaliam e aprovam temas enviados para inclusão no diretório oficial de temas do WordPress. A Equipe de avaliação de temas mantém as Diretrizes oficiais de revisão de temas19, os Dados de testes unitários de temas20, os Plugins de verificação de temas21 e tenta engajar e educar a comunidade de desenvolvedores de tema do WordPress sobre as melhores práticas para desenvolvimento. A inclusão no grupo é moderada pelos membros da Equipe de desenvolvimento do WordPress que podem realizar commits, isto é, alterar oficialmente o código da ferramenta.

A função do serviço de hospedagem na segurança do WordPress

O WordPress pode ser instalado em diversas plataformas. Apesar dos arquivos básicos do WordPress fornecerem várias formas para operar uma aplicação web segura, as quais foram abordadas neste documento, as configurações do sistema operacional e do servidor por trás do programa são igualmente importantes para manter as aplicações WordPress seguras.

Uma observação sobre a segurança do WordPress e do WordPress.com

O WordPress.com é a maior instalação do WordPress no mundo, e pertence e é gerenciada pela Automattic, Inc., fundada por Matt Mullenweg, o coautor do projeto WordPress. O WordPress.com executa os mesmos arquivos básicos do WordPress, mas possui seus próprios processos de segurança, gerenciamento de riscos e soluções22. Este documento se refere à segurança do programa WordPress que pode ser baixado e hospedado por conta própria, disponível no WordPress.org e instalável em qualquer servidor no mundo.

Apêndice

APIs dos arquivos básicos do WordPress

A Interface de Programação de Aplicação (API, do inglês Application Programming Interface) dos arquivos básicos do WordPress compreende várias APIs individuais23, cada uma cobrindo as funções envolvidas em, e usadas para, um determinado conjunto de funcionalidades. Juntas, elas formam a interface do projeto que permite que plugins e temas interajam com, alterem e estendam as funcionalidades básicas do WordPress com segurança.

Enquanto cada API do WordPress fornece melhores práticas e formas padronizadas de estender e interagir com os arquivos básicos do WordPress, as seguintes APIs são as mais importantes para reforçar a segurança do WordPress:

API de banco de dados

A API de banco de dados24, adicionada no WordPress 0.71, fornece o método correto para acessar, de forma estruturada, os dados que estão armazenados na camada de banco de dados.

API de sistema de arquivos

The Filesystem API25, added in WordPress 2.626, was originally created for WordPress’ own automatic updates feature. The Filesystem API abstracts out the functionality needed for reading and writing local files to the filesystem to be done securely, on a variety of host types.

A API faz isso através da classe WP_Filesystem_Base e várias subclasses, que implementam diferentes formas de conexão com o sistema de arquivos local, dependendo do suporte fornecido pela hospedagem. Qualquer tema ou plugin que precise gravar arquivos localmente deveria fazê-lo usando a família de classes WP_Filesystem.

API HTTP

A API HTTP27, adicionada no WordPress 2.728 e estendida no WordPress 2.8, padroniza as requisições HTTP para o WordPress. A API manipula cookies, codificação e decodificação gzip, decodificação de fragmentos (se HTTP 1.1) e várias outras implementações do protocolo HTTP. A API padroniza as requisições, testa cada método antes de enviar e, baseada nas configurações do servidor, usa o método apropriado para fazer a requisição.

Permissões e API de usuário atual

The permissions and current user API29 is a set of functions which will help verify the current user’s permissions and authority to perform any task or operation being requested, and can protect further against unauthorized users accessing or performing functions beyond their permitted capabilities.

Licença de conteúdo do informativo

O texto deste documento (não incluindo o logo do WordPress ou sua marca registrada) está licenciado sob CC0 1.0 Universal (CC0 1.0) Dedicação ao Domínio Público. Você pode copiar, modificar, distribuir e executar o trabalho, mesmo para fins comerciais, sem necessidade de permissão.

A special thank you to Drupal’s security white paper, which provided some inspiration.

Leitura adicional


Autora: Sara Rosso

Contribuições de Barry Abrahamson, Michael Adams, Jon Cave, Helen Hou-Sandí, Dion Hulse, Mo Jangda, Paul Maiorana

Versão 1.0 Março de 2015


Notas de rodapé