Seguridade

Aprende máis sobre a seguridade do software base de WordPress neste manual gratuito. Tamén podes descargalo en formato PDF.

Visión xeral

Este documento é unha análise e explicación do desenvolvemento do software base de WordPress e os seus procesos de seguridade relacionados, así como unha revisión da seguridade inherente construida directamente no software. Os responsables de decisións que evalúen WordPress como sistema de xestión de contidos ou ámbito de traballo para aplicacións web deberían empregar este documento na súa análise e toma de decisións, e os desenvolvedores deberían remitirse a el para familiarizarse coos compoñentes e boas prácticas de seguridade dosoftware.

A información deste documento está actualizada para a última versión estable do software, WordPress 4.9 á data da publicación, pero debería considerarse relevante tamén nas versións máis recentes do software xa que a compatibilidade con versións anteriores é un punto fundamental para o equipo de desenvolvemento de WordPress. As medidas de seguridade específicas e os cambios anotaranse a medida que se engadan ao software base en versións específicas. Recoméndase encarecidamente executar sempre a última versión estable de WordPress para asegurar a experiencia máis segura posible.

Resumo executivo

WordPress é un sistema de xestión de contidos dinámico de código aberto empregado para facer funcionar millóns de webs, aplicacións web e blogs. Actualmente fai funcionar 42% dos principais 10 millóns de webs de Internet. A usabilidade, extensibilidade e madura comunidade de desenvolvemento de WordPress fai que sexa una elección segura para webs de tódolos tamaños.

Dende o seu inicio en 2003, WordPress foise fortalecendo continuamente para que o seu software base sexa capaz de detectar e mitigar ameazas comúns de seguridade, incluída a lista Top 10 identificada polo proxecto de seguridade de aplicacións da web aberta (OWASP) e as vulnerabilidades de seguridade máis comúns, como se explica neste documento.

O equipo de seguridade de WordPress, en colaboración co equipo líder de desenvolvemento de WordPress, y apoados pola comunidade global WordPress, traballa para identificar e resolver problemas de seguridade no software base dispoñible en WordPress.org para a súa distribución e instalación, así como en recomendar e documentar as mellores prácticas de seguridade para autores de plugins e temas.

Ós desenvolvedores e administradores de sitios deberían prestar especial atención ao emprego correcto das APIs e a configuración do servidor subxacente que foran orixe de vulnerabilidades comúns, así como asegurarse de que tódolos usuarios empregan contrasinais fortes para acceder a WordPress.

Unha visión xeral de WordPress

WordPress ñe un sistema de xestión de contidos (CMS) gratuito e de código aberto. É o CMS máis empregado do mundo e fai funcionar máis do 42% dos 10 millóns de sitios máis grandes1, o que se traduce nunha estimación dunha cuota de mercado do 62% de tódolos sitios que empregan un CMS.

WordPress está suxeito á licenza General Public License (GPLv2 ou posterior), que fornece catro liberdades fundamentais que se poden considerar como a Declaración de Dereitos de WordPress:

  1. A liberdade de executar o programa, con calquera propósito.
  2. A liberdade de estudar como funciona o programa, e de cambialo para que faga o que ti queiras.
  3. A liberdade de redistribuír.
  4. A liberdade de distribuir a outros copias das túas versións modificadas.

O equipo de liderado do núcleo de WordPress

O proxecto WordPress é unha meritocracia dirixida por un equipo de liderazgo principal e guiada polo seu co-creador e xefe de desenvolvemento, Matt Mullenweg. O equipo goberna tódolos aspectos do proxecto, incluíndo o desenvolvemento do núcleo, WordPress.org e as iniciativas da comunidad.

O equipo líder do núcleo está composto por Matt Mullenweg, cinco desenvolvedores líderes e máis dunha docena de desenvolvedores do núcleo que teñen acceso de validación permanente. Estes desenvolvedores teñen a autoridade final sobre as decisións técnicas, debates de arquitectura principal e esforzos de implementación.

WordPress ten moitos desenvolvedores colaboradores. Algúns deles son antiguos ou actuais validadores, e algúns é posible que sexan futuros validadores. Estes desenvolvedores colaboradores son colaboradores fiables e veteranos de WordPress, que gañaron un gran respecto entre os seus colegas. Cando se precisa, WordPress tamén ten validadores invitados, individuos aos que se lles concede acceso, ás veces para un compoñente específico, para tarefas temporais ou de probas.

Os desenvolvedores do núcleo e os colaboradores guían principalmente o desenvolvemento de WordPress. En cada versión centos de desenvolvedores contribúen ao código de WordPress. Estes colaboradores do núcleo son voluntarios que contribúen ao código base do núcleo nalgún modo.

O ciclo de publicación de WordPress

Cada ciclo de versión de WordPress diríxeo un ou máis dos desenvolvedores do núcleo de WordPress. Un ciclo de versións normalmente remata ó redor de 4 meses dende a reunión inicial ata o lanzamento da versión.

Un ciclo de versión segue o seguinte patrón2:

  • Fase 1: Líderes de planificación e do equipo de seguridade: Isto realízase na sala de chat #core de Slack. O líder da versión debate sobre as características da nova versión de WordPress. Os colaboradores de WordPress involúcranse no debate. O líder da versión identificará aos líderes do equipo para cada unha das características.
  • Fase 2: Comeza o traballo de desenvolvemento. Os líderes do equipo organizan os equipos e traballan nas características que se lles asignaron. Prográmanse charlas habituais para asegurar que o desenvolvemento sigue en marcha.
  • Fase 3: Beta. Lánzanse as betas, e pídese aos probadores de beta que comecen a informar de erros. A partir desta fase non se realizan máis propostas de novas melloras ou peticións de características. Anímase aos autores de plugins e temas a probar o seu código fronte a os futuros cambios.
  • Fase 4: Lista para o seu lanzamento. Hai un parón técnico para traducir os textos neste punto. O traballo céntrase só en repasos e bloqueos.
  • Fase 5: Lanzamento. Lánzase a versión de WordPress e está dispoñible para actualizar na administración de WordPress.

Numeración de versións e actualizacións de seguridade

Unha versión maior de WordPress díctana as primeras dúas secuencias. Por exemplo, 3.5 é unha versión maior, e 3.6, 3.7 ou 4.0. Non hai un “WordPress 3” ou “WordPress 4” e cada versión maior refírese á súa numeración, p.ej. “WordPress 3.9.”

As versións maiores poden engadir novas características de cara ao usuario e APIs para desenvolvedores. Aínda que o normal no mundo do software unha versión “maior” significa que podes romper a compatibilidade con versións anteriores, WordPress trata de nunca romper a compatibilidade con versións anteriores. A compatibilidade con versións anteriores é unha das filosofías máis importantes do proxecto, co obxectivo de facer cada actualización máis doada para os usuarios e mellor para os desenvolvedores.

Unha versión menor de WordPress díctaa a tercera secuencia. A versión 3.5.1 é unha versión menor, e a 3.4.23. Unha versión menor resérvase para arranxar vulnerabilidades de seguridade e para solucionar só erros críticos. Como as novas versións de WordPress se publican de maneira tan frecuente — o obxectivo é que haxa unha versión maior cada 4-5 meses, e as versións menores estarán dispoñibles a medida que se precisen — só son necesarias as versións maiores e menores.

Compatibilidade con versións anteriores

O proxecto WordPress ten un forte compromiso coa compatibilidade con versións anteriores. Este compromiso significa que os temas, plugins e o código personalizado sigan funcionando cando se actualice o núcleo de WordPress, animando aos propietarios de sitios a manter actualizada a súa versión de WordPress á última versión segura.

WordPress e a seguridade

O equipo de seguridade de WordPress

O equipo de seguridade de WordPress está formado por aproximadamente 50 expertos, incluídos os desenvolvedores líderes e investigadores de seguridade — cerca da metade son empregados de Automattic (creadores de WordPress.com, a primeira e maior plataforma de aloxamento WordPress na web), e outros traballan no campo da seguridade web. O equipo consulta a investigadores de seguridade fiables e coñecidos e a empresas de aloxamento3.

O equipo de seguridade de WordPress ás veces colabora con outros equipos de seguridade para solucionar problemas con dependencias comúns, tomo por exemplo resolvendo a vulnerabilidad no analizador XML de PHP, empregado pola API XML-RPC que se inclúe en WordPress, en WordPress 3.9.24. A solución a esta vulnerabilidade foi o resultado dun esfuerzo conxunto dos equipos de seguridade de WordPress e Drupal.

Riscos, proceso e historia da seguridade WordPress

O equipo de seguridade de WordPress cree na divulgación responsable que alerte ao equipo de seguridade inmediatamente de calquera vulnerabilidade potencial. Pódese avisar ao equipo de seguridade de vulnerabilidades potenciais de seguridad dende WordPress HackerOne5. O equipo de seguridade comunícase mediante unha canle privada de Slack, e traballa facendo probas, seguemento mediante Trac privado, e solucionando erros e problemas de seguridade.

Cada informe de seguridade respóndese ao recibilo, e o equipo traballa para verificar a vulnerabilidade e determinar a súa severidade. Se se confirma, o equipo de seguridade entón planifica un parche para solucionar o problema, que pode lanzarse nunha próxima versión do software WordPress ou pode lanzarse como unha versión inmediata de seguridade, dependendo da severidade do problema.

Cando hai unha actualización de seguridade inmediata o equipo de seguridade publica un aviso nas noticias6 do sitio WordPress.org anunciando a versión e detallando os cambios. Agradécese a divulgación responsable cando se avisa dunha vulnerabilidade para apoiar e reforzar o informe responsable continuo no futuro.

Os administradores do software WordPress ven un aviso no escritorio do seu sitio para que actualicen cando hai unha nova versión dispoñible, e tra-las actualizacións manuales redirixese aos usuarios a unha pantalla de Acerca de WordPress con detalles dos cambios. Se os administradores teñen activas as actualizacións en segundo plano recibirán un correo electrónico despois de que se complete unha actualización.

Actualizacións automáticas en segundo plano para versións de seguridade

Na versión 3.7 WordPress introduciu as actualizacións automáticas en segundo plano para tódalas versións menores7, como a 3.7.1 e a 3.7.2. O equipo de seguridade de WordPress pode identificar, arranxar e lanzar melloras de seguridade automáticas para WordPress sen que o propietario do sitio teñaa que facer nada pola súa parte, e a actualización de seguridade instalarase automáticamente.

Cando se lanza unha actualización de seguridade para a versión estable actual de WordPress, o equipo do núcleo tamén lanza actualizacións de seguridade para tódalas versións capaces de executar actualizacións en segundo plano (dende WordPress 3.7) para que estas versións anteriores, pero aínda recentes, de WordPress tamén reciban melloras de seguridade.

Os propietarios de sitios individuais poden optar por quitar as actualizacións automáticas en segundo plano mediante un sinxelo cambio no seu ficheiro de configuración, pero o equipo do núcleo recomenda encarecidamente manter activa a funcionalidade, así como executar a última versión estable de WordPress.

Top 10 2013 de OWASP

A Open Web Application Security Project / Proxecto de seguridade para aplicacións web abertas (OWASP) é unha comunidade online adicada á seguridade en aplicaciós web. A lista Top 108 da OWASP enfócase en identificar os riscos de seguridade máis serios en aplicacións nun amplio espectro de organizacións. Os elementos do Top 10 elíxense con estimacións consensuadas de explotabilidade, detectabilidade e impacto estimado.

As seguintes seccións tratan sobre APIs, recursos e políticas que emprega WordPress para fortalecer o software base e plugins e temas de terceiros fronte a estes riscos potenciais.

A1 - Inxección

Hai un conxunto de funcións e APIs dispoñibles en WordPress para axudar aos desenvolvedores a asegurar que non se poda inxectar código, e para axudalos a validar e sanear datos. Hai dispoñibles boas prácticas e documentación9 sobre cómo empregarar estas APIs para protexer, validar ou sanear introducción e saída de datos en HTML, URLs, cabeceiras HTTP e cando se interactúa coa base de datos e o sistema de ficheiros. Os administradores poden tamén incluso restrinxir mediante filtros os tipos de ficheiros que poden subirse.

A2 - Xestión de identificación rota e de sesión

O software base de WordPress xestiona as contas de usuario, a identificación e detalles tales como o ID de usuario e o nome, e os contrasinais xestiónanse dende o servidor así como as cookies de identificación. Os contrasinais protéxense na base de datos empregando técnicas estándar de salt e dilatación. As sesións activas péchanse ao desconectar nas versións de WordPress a partir da 4.0.

A3 - Cross Site Scripting (XSS)

WordPress ofrece un amplio rango de funcións que poden axudar a asegurar que os datos facilitados polo usuario están a salvo10. Os usuarios fiables, como os administradores e editores dunha instalación simple de WordPress, e só os administradores da rede nun WordPress multisitio, poden publicar HTML sen filtrado o JavaScript se o precisan, como por exemplo dentro dunha entrada ou páxina. Os usuarios non fiables e o contido enviado polos usuarios fíltrase por defecto para eliminar as entidades peligrosas, empregando a biblioteca KSES mediante a función wp_kses.

Como exemplo, o equipo do núcleo de WordPress avisou antes do lanzamento de WordPress 2.3 que a función the_search_query() estábase usando mal por parte da maioría dos autores de temas, que non estaban escapando a saída da función para o seu uso en HTML. Nun moi extraño caso de lixeira ruptura coa compatibilidade con versións anteriores, a salida da función cambiouse en WordPress 2.3 para que se escapase previamente.

A4 - Referencia directa a objetos inseguros

WordPress a menudo ofrece referencia directa a obxectos, como identificadores numéricos únicos das contas de usuario, do contido dispoñible na URL ou dos campos dun formulario. Aínda que estes identificadores revelan información directa do sistema, o amplio sistema de control de acceso e permisos de WordPress impide solicitudes non autorizadas.

A5 - Mala configuración de seguridade

A maioría das operacións de configuración de seguridade de WordPress están limitadas a un único administrador autorizado. Os axustes por defecto de WordPress evalúanse continuamente a nivel do núcleo, e o equipo do núcleo de WordPress ofrece documentación e boas prácticas para fortalecer a seguridade na configuración do servidor á hora de executar un sitio WordPress11.

A6 - Revelación de datos sensibles

Os contrasianis de usuario de WordPress están basados en salts e hashs no marco de traballo de hash de contrasinais portátil de PHP12. O sistema de permisos de WordPress emprégase para controlar o acceso a información privada como a PII (información privada persoal) dos usuarios rexistrados, correos electrónicos dos comentaristas, contido publicado en privado, etc. En WordPress 3.7 incluiuse no software base un medidor de fortaleza de contrasinais para ofrecer información adicional aos usuarios á hora de configurar os seus contrasinais, e trucos para aumentar a súa fortaleza. WordPress tamén ten un axuste opcional de configuración para requerir HTTPS.

A7 - Nivel de control de acceso a funcións non atopadas

WordPress comproba a correcta autorización e permisos de calquera nivel de petición acceso dunha función antes de executar a acción. O acceso ou visualización de URLs de administración, menús e páxinas sen a identificación adecuada está fortemente integrada co sistema de identificación para impedir acceso a usuarios sen autorización.

A8 - Cross Site Request Forgery / Peticións falsas en sitios cruzados (CSRF)

WordPress emprega tokens criptográficos, chamados nonces13, para validar intentos de peticións de accións dende usuarios autorizados para protexerse contra potenciais amenazas CSRF. WordPress ofrece unha API para a xeración destes tokens coa que crear e verificar tokens únicos e temporais, e o token está limitado a un usuario específico, unha acción específica, un obxecto específico e un periodo de tempo específico, que pode engadirse a formularios e URLs según se precise. Adicionalmente, todas as nonces quedan sen validar ao desconectar.

A9 - Utilización de compoñentes con vulnerabilidades coñecidas

O equipo do núcleo de WordPress vixía de cerca as poucas bibliotecas incluídas e os ambientes de traballo que integra WordPress na funcionalidade do seu núcleo. No pasado, o equipo do núcleo fixo colaboracións a diversos compoñentes de terceiros para facelos máis seguros, como por exemplo para solucionar unha vulnerabilidad cross-site en TinyMCE en WordPress 3.5.214.

Se fose preciso, o equipo do núcleo pode decidir bifurcar ou reemplazar compoñentes externos críticos, tales como cando a biblioteca SWFUpload se reemplazou oficialmente pola biblioteca Plupload na versión 3.5.2, e o equipo de seguridade fixo dispoñible unha bifurcación segura de SWFUpload<15 para aqueles plugins que seguían empregando SWFUpload de momento.

A10 - Redireccións e envíos sen validar

O sistema de identificación e control de acceso interno de WordPress protexerá de intentos de dirixir aos usuarios a destinos non desexados e de redireccións automáticas. Esta funcionalidade tamén está dispoñible para desenvolvedores de plugins mediante unha API, wp_safe_redirect()16.

Máis riscos e problemas de seguridade

Ataques de procesamento XXE (XML eXternal Entity / Entidade externa XML)

Ao procesar o XML, WordPress desactiva a carga de entidades XML personalizadas para impedir ataques tanto de entidades externas como en entidades expandidas. Máis alá da funcionalidade do núcleo de PHP, WordPress non ofrece unha API de procesamento seguro XML adicional aos autores de plugins.

Ataques SSRF (Server Side Request Forgery / Peticións falsas ao servidor)

As peticións HTTP enviadas por WordPress fíltranse para evitar accesos a bucle de retorno e direccións IP privadas. Adicionalmente, o acceso só se permite a certos portos HTTP estándar.

Seguridade de temas e plugins WordPress

O tema por defecto

WordPress require un tema activo para mostrar o contido visible na portada. O tema por defecto includo no núcleo de WordPress (actualmente "Twenty Twenty-One") foi revisado intensamente, e comprobado por motivos de seguridade tanto polo equipo de desenvolvemento de temas como polo equipo de desenvolvemento do núcleo.

O tema por defecto pode servir de punto de comezo para o desenvolvemento de temas a medida, e os desenvolvedores poden crear un tema fillo que inclúa algunhas personalizacións aínda que dependan do tema por defecto a maior parte das funcionalidades e seguridade. O tema por defecto pode borralo un administrador fácilmente se non o precisa.

Directorios de temas e plugins de WordPress.org

Hai aproximadamente 50.000+ plugins e 5.000+ temas listados no sitio WordPress.org. Estes temas e plugins envíanse para a su inclusión e revísanos manualmente voluntarios antes de facer que estén dispoñibles no directorio.

A inclusión de plugins e temas no directorio non é unha garantía de que estén libres de vulnerabilidades de seguridade. Ofrécense directrices aos autores de plugins para que as consulten antes de enviar calquera inclusión no directorio17, e no sitio WordPress.org ofrécese extensa documentación sobre como desenvolver temas18.

Cada plugin e tema ten a posibilidade de ser desenvolto continuamente polo propietario do plugin ou tema, e calquera arranxo ou característica posterior ou futuro desenvolvemento pode subirse ao directorio e facer que esté dispoñible para os usuarios con ese plugin ou tema instalado cunha descripción do que cambiou. Avísase aos administradores dos sitios dos plugins que teñen que actualizarse dende o escritorio de administración.

Cando o equipo de seguridade de WordPress descubre unha vulnerabilidade contacta co autor do plugin e traballan xuntos para solucionar e lanzar unha versión segura do plugin. Se hai algunha falta ou atraso na resposta por parte do autor do plugin ou se a vulnerabilidade é grave, o plugin/tema retírase do directorio público e, nalgúns casos, directamente o arranxa e actualiza o equipo de seguridad.

O equipo de revisión de temas

O equipo de revisión de temas é un grupo de voluntarios, liderados por membros clave estables da comunidade WordPress, que revisan y aproban os temas enviados para incluirse no directorio oficial de temas WordPress. O equipo de revisión de temas mantén as directrices de revisión de temas19, os datos de proba20 e os plugins de comprobación de temas21, e trata de involucrar e educar á comunidade de desenvolvemento de temas WordPress nas mellores prácticas de desenvolvemento. Os validadores principales do equipo de desenvolvemento de WordPress moderana inclusión neste grupo.

O perfil do proovedor de aloxamento na seguridade WordPress

WordPress pode instalarse en multitude de plataformas. Aínda que o núcleo de WordPress ofrece moitas garantías para operar unha aplicación web segura, que cubrimos neste documento, a configuración do sistema operativo e o software instalado no servidor web do aloxamento son igualmente importantes para manter aplicacións WordPress seguras.

Unha nota sobre WordPress.com e a seguridade en WordPress

WordPress.com é a maior instalación de WordPress do mundo, é propiedade e está administrada por Automattic, Inc., a cal foi fundada por Matt Mullenweg, co-creador do proxecto WordPress, e ten os seus propios procesos, riscos y solucións de seguridade22. Este documento refírese á seguridade respecto ao software WordPress de código aberto, aloxado pola súa conta, descargable y dispoñible en WordPress.org, que podes instalar en calquera servidor do mundo.

Apéndice

APIs do núcleo de WordPress

A interface de programación de aplicacións (API) do núcleo de WordPress comprende varias APIs23 individuais, e cada unha delas cubre as funcións que cubre y emprega, para un conxunto dado de funcionalidades. Xuntas, forman a interface do proxecto que permite aos plugins e temas interactuar, alterar e ampliar o núcleo de WordPress de forma sana y segura.

Aínda que cada API de WordPress ofrece as mellores prácticas e métodos estandarizados para interactuar e ampliar o software do núcleo de WordPress, as seguintes APIs de WordPress son as máis pertinentes para reforzar a seguridade de WordPress:

API da base de datos

A API da base de datos24, engadida en WordPress 0.7.1, ofrece o método correcto de acceder aos datos como valores con nome que se almacenan na capa da base de datos.

API do sistema de arquivos

A API do sistema de ficheiros25, engadida en WordPress 2.626, creouse orixinalmente para a característica de actualizacións automáticas propia de WordPress. A API do sistema de ficheiros abstrae a funcionalidade precisa para ler e escribir ficheiros locais no sistema de ficheiros para facelo con seguridade, e unha gran variedade de tipos de aloxamento.

Faino mediante a clase WP_Filesystem_Base e diversas subclases que implementan distintas maneiras de conectar co sistema de ficheiros local, dependendo da compatibilidade de cada aloxamento. Calquera tema ou plugin que necesite escribir ficheiros localmente debería usar a familia de clases WP_Filesystem.

HTTP API

A API HTTP27, engadida en WordPress 2.728 e ampliada en WordPress 2.8, estandariza as peticións HTTP de WordPress. A API xestiona as cookies, a codificación e decodificación gzip, a decodificación en partes (si é HTTP 1.1) e outras diversas implementacións do protocolo HTTP. A API estandariza as peticións, comproba cada método antes de envialo, e basándose na configuración do teu servidor, emprega o método máis axeitado para facer a petición.

Permisos e a API do usuario actual

Os permisos e a 29a API do usuario actual é un conxunto de funcións que axudarán a verificar os permisos e autoridade do usuario actual para levar a cabo calquera tarea ou operación solicitada, e pode protexer contra accesos de usuarios non autorizados ou de realizar funcións máis alá das súas capacidades permitidas.

Licencia do manual de contenido

O texto deste documento (sen incluir o logotipo de WordPress ou a marca rexistrada) está baixo a licencia CC0 1.0 Universal (CC0 1.0) Public Domain Dedication. Podes copialo, modificalo, distribuílo e realizar traballos con el, incluso con propósitos comerciais, todo sen ter que pedir permiso.

Un agradecemento especial ao manual de seguridadede Drupal, que ofreceu algo de inspiración.

Lectura adicional


Feito por Sara Rosso

Colaboracións de Barry Abrahamson, Michael Adams, Jon Cave, Helen Hou-Sandí, Dion Hulse, Mo Jangda, Paul Maiorana

Version 1.0 Marzo 2015


Notas ó pé