Seguretat

Obteniu més informació sobre la seguretat del programari principal de WordPress en aquest document tècnic gratuït. També podeu descarregar-lo enformat PDF.

Resum

Aquest document és una anàlisi i explicació del desenvolupament del programari principal del WordPress i els processos de seguretat relacionats, així com un examen de la seguretat inherent integrada directament al programari. Els qui prenen decisions que avaluen el WordPress com un sistema d'administració de contingut o un entorn de treball d'aplicació web, han d'usar aquest document en l'anàlisi i presa de decisions, i els desenvolupadors referir-se a ell per familiaritzar-se amb els components de seguretat i les millors pràctiques del programari.

La informació en aquest document està actualitzada per a l'última versió estable del programari, el WordPress 4.7 al moment de la publicació, però ha de considerar-se rellevant també per a les versions més recents del programari, ja que la compatibilitat amb versions anteriors és un enfocament important per a l'Equip de desenvolupament de WordPress. Les mesures de seguretat específiques i els canvis s'anotaran a mesura que s'hagin afegit al nucli del programari en versions específiques. Es recomana encaridament executar sempre l'última versió estable del WordPress per garantir l'experiència més segura possible.

Resum executiu

El WordPress és un sistema dinàmic de gestió de contingut de codi obert que s'utilitza per impulsar milions de llocs web, aplicacions web i blogs. Actualment potencia més de 35% dels 10 milions de llocs web més importants d'Internet. La usabilitat, l'extensibilitat i la madura comunitat de desenvolupament converteixen el WordPress en una opció popular i segura per a llocs web de totes les mides.

Des de la seva ideació l'any 2003, el WordPress ha anat millorant de manera constant de forma que el nucli del programari pugui resoldre i mitigar amenaces de seguretat comunes, incloses les 10 identificades a la llista de l'Open Web Application Security Project (OWASP) com a vulnerabilitats de seguretat comunes, que es discuteixen en aquest document.

L'equip de seguretat del WordPress, en coŀlaboració amb l'equip de lideratge dels components centrals del WordPress i recolzat per la comunitat global del WordPress, treballa per identificar i resoldre els problemes de seguretat al programari principal, disponible per a la distribució i instaŀlació a WordPress.org, així com per recomanar i documentar les millors pràctiques de seguretat per als autors d'extensions i temes de tercers.

Els desenvolupadors i administradors del lloc han de prestar especial atenció a l'ús correcte de les API principals i la configuració del servidor subjacent que han estat l'origin de vulnerabilitats comuns, així com garantir que tots els usuaris emprin contrasenyes segures per accedir al WordPress.

Una visió general del WordPress

El WordPress és un sistema de gestió de continguts (CMS) lliure i de codi obert. És el programari CMS més utilitzat en el món, i gestiona més del 35% dels 10 milions de llocs web més importants1, amb una quota de mercat estimada del 60% de tots els llocs web que utilitzen CMS.

El WordPress es distribueix sota la Llicència Pública General (GPLv2 o posterior), la qual ofereix quatre llibertats principals que poden ser considerades la declaració de drets del WordPress:

  1. La llibertat d'executar el programa, per a qualsevol propòsit.
  2. La llibertat d'estudiar com funciona el programa i canviar-ho perquè faci el que vulgueu.
  3. La llibertat de redistribuir.
  4. La llibertat de distribuir còpies de les versions modificades a uns altres.

L'equip de direcció del WordPress Core

El projecte WordPress es basa en la meritocràcia: executat per un equip de lideratge principal i dirigit pel co-creador i desenvolupador líder, Matt Mullenweg. L'equip determina tots els aspectes del projecte, incloen el desenvolupament del nucli, WordPress.org i les iniciatives de la comunitat.

L'equip de direcció del Core, o del nucli, consisteix de Matt Mullenweg, cinc desenvolupadors líders i més de mitja dotzena de desenvolupadors del nucli amb accés permanent per a fer canvis. Aquests desenvolupadors tenen autoritat final en decisions tècniques, i lideren les discussions d'arquitectura i els esforços d'implementació.

El WordPress té una sèrie de desenvolupadors contribuents. Alguns d'aquests són antics o actuals que pugen canvis, i alguns són probablement futurs desenvolupadors que pujaran. Aquests desenvolupadors contribuents són coŀlaboradors confiables i veterans del WordPress que s'han guanyat un gran respecte entre els seus companys. Segons sigui necessari, el WordPress també compta amb convidats que pugen canvis, persones a les quals se'ls atorga accés per pujar canvis, de vegades per a un component específic, de forma temporal o de prova.

Els desenvolupadors principals i contribuents guien principalment el desenvolupament del WordPress. Cada versió, centenars de desenvolupadors contribueixen amb el codi de WordPress. Aquests col·laboradors principals són voluntaris que contribueixen d'alguna manera al codi.

El cicle de publicació de versions del WordPress

Cada cicle de llançament del WordPress està dirigit per un o més dels desenvolupadors centrals del WordPress. Un cicle de llançament generalment dura al voltant de 4 mesos des de la reunió inicial d'abast fins al llançament de la versió.

Un cicle de publicació segueix el següent patró2:

  • Fase 1: Planificació i assegurament de líders d'equip. Això es fa a la sala de xat #core en Slack. El líder de la versió analitza les característiques de la propera versió del WordPress. Els coŀlaboradors de WordPress s'involucren amb aquesta discussió. El líder de llançament identificarà els líders de l'equip per a cadascuna de les funcions.
  • Fase 2: comença el treball de desenvolupament. Els líders d'equip reuneixen equips i treballen en les funcions assignades. Els xats regulars estan programats per garantir que el desenvolupament segueixi avançant.
  • Fase 3: Beta. Es llancen betes i se'ls demana als beta-testers que comencin a reportar errors. A partir d'aquesta fase, no es realitzen més confirmacions per a millores o sol·licituds de funcions noves. Es recomana als autors d'extensions i temes de tercers que provin el seu codi en relació amb els propers canvis.
  • Fase 4: Versió candidata. Hi ha una congelació de cadenes per a cadenes traduïbles a partir d'aquest punt. El treball està dirigit a regressions i bloquejadors solament.
  • Fase 5: Llançament. La versió de WordPress es llança i es posa a disposició en l'administrador de WordPress per a actualitzacions.

Numeració de versions i versions de seguretat

Una versió major del WordPress s'identifica amb les dues primeres xifres. Per exemple, la 3.5 és una versió major, com també ho són la 3.6, la 3.7 o la 4.0. No hi ha un «WordPress 3» o un «WordPress 4» i cada versió major s'identifica pel seu nombre; per exemple, «WordPress 3.9».

Les versions majors inclouen noves funcionalitats per als usuaris i API per als desenvolupadors. Normalment, una nova versió major al món del programari vol dir que es trenca la compatibilitat enrere. WordPress, però, s'esforça per evitar que això passi, ja que la compatibilitat enrere és una característica important del projecte, ja que es vol garantir que les actualitzacions siguin senzilles tant per als usuaris com per als desenvolupadors.

Una versió menor del WordPress s'identifica amb la tercera xifra. La versió 3.5.1 és una versió menor, així com la 3.4.23. Les versions menors només s'utilitzen per a corregir vulnerabilitats de seguretat i corregir errors crítics. Atès que les noves versions del WordPress es publiquen freqüentment (l'objectiu és publicar-ne una de major cada 4 o 5 mesos i les menors, quan sigui necessari), n'hi ha prou en tenir versions majors i menors.

Compatibilitat amb versions anteriors

El projecte WordPress té un compromís molt fort amb la compatibilitat cap enrere. Aquest compromís vol dir que temes, extensions i codi personalitzat continuarà funcionant quan s'actualitzi el nucli del WordPress, encoratjant els propietaris de llocs web a mantenir la seva versió de WordPress actualitzada a l'última versió segura.

El WordPress i la seguretat

L'equip de seguretat del WordPress

L'equip de seguretat del WordPress el conformen uns 50 experts, entre els quals hi ha desenvolupadors líder i investigadors de seguretat. Més o menys la meitat d'ells són treballadors d'Automattic (l'empresa darrere de WordPress.com, la primera i més gran plataforma d'allotjament del WordPress) i alguns d'ells treballen al camp de la seguretat. L'equip està en contacte amb investigadors de seguretat reconeguts i de confiança, així com amb empreses d'allotjament3.

L'equip de seguretat del WordPress sovint treballa amb altres equips per corregir errors a dependències comunes. Per exemple, les vulnerabilitats detectades a l'analitzador XML del PHP, que utilitza l'API XML-RPC del WordPress des de la versió 3.9.24, es va corregir gràcies al treball conjunt dels equips de seguretat del WordPress i el Drupal.

Riscos, processos i història de seguretat de WordPress

L'equip de seguretat del WordPress confia en la divulgació responsable com a mecanisme per a alertar-lo de qualsevol vulnerabilitat que s'hagi detecta. Se'ls pot fer arribar una vulnerabilitat de seguretat potencial via el WordPress HackerOne5. Les comunicacions internes de l'equip de seguretat es realitzen a un canal privat del Slack i treballen en un entorn segur i aïllat, amb un Trac privat per a monitorar, provar i corregir els errors i problemes de seguretat.

Cada informe de seguretat es contesta en rebre'l i l'equip treballa per verificar la vulnerabilitat i determinar-ne la severitat. Si es confirma, l'equip programa la correcció del problema, la qual es publicarà a la propera versió del WordPress o, si es tracta d'un a vulnerabilitat greu, prepararà una versió de seguretat immediata.

Quan hi ha una actualització de seguretat imminent, l'equip de seguretat publica un avís al lloc de notícies de WordPress.org6 anunciant la versió i detallant-ne els canvis. A l'avís s'hi agraeix la divulgació responsable de la vulnerabilitat, per tal de promoure que es continuïn reportant de la mateixa manera al futur.

Els administradors d'un WordPress veuen una notificació a l'escriptori recomanant-los actualitzar el lloc web quan hi ha una nova versió disponible. Després d'una actualització manual, es redirigeix a l'usuari a una pàgina amb informació detallada sobre els canvis. Si les actualitzacions automàtiques estan activades, els administradors rebran un correu en completar-se una actualització notificant-los-hi.

Actualitzacions automàtiques en segon pla per a llançaments de seguretat

A partir de la versió 3.7, el WordPress inclou la possibilitat d'instal·lar actualitzacions automàticament de versions menors7, com ara la 3.7.1 o la 3.7.2. L'equip de seguretat del WordPress pot identificar, corregir i publicar les millores de seguretat de tal manera que el propietari d'una web no s'hagi de preocupar de res, ja que l'actualització s'instal·larà automàticament.

Quan es publica una actualització de seguretat per a la versió actual del WordPress, l'equip del nucli també publica actualitzacions de seguretat per a totes aquelles versions que suporten les actualitzacions automàtiques (des de la 3.7) per tal que totes les versions recents rebin les millores de seguretat.

Els propietaris de llocs web poden desactivar les actualitzacions automàtiques canviant una opció del fitxer de configuració, però es recomana mantenir-les activades, així com executar la versió estable més actual del WordPress.

Top 10 de l'OWASP 2013

El projecte obert de seguretat d'aplicacions web (OWASP) és una comunitat en línia dedicada a la seguretat de les aplicacions web. La llista del top 10 de l'OWASP8 se centra en identificar els riscos a la seguretat més seriosos per a un gran ventall d'organitzacions. Els 10 elements de la llista se seleccionen i prioritzen de manera consensuada tenint-ne en compte l'explotabilitat, capacitat de detecció i estimacions de l'impacte que poden tenir.

Les següents seccions tracten les API, recursos i polítiques que utilitza el WordPress per protegir el nucli i les extensions i temes d'aquests riscos potencials.

A1 - Injecció

Hi ha un conjunt de funcions i API disponibles al WordPress que ajuden als desenvolupadors a assegurar-se que no es pot injectar codi no autoritzat i a validar i sanejar les dades. També existeix documentació i millors pràctiques9 explicant com utilitzar aquestes API per a protegir, validar i sanejar les entrades i sortides de dades a l'HTML, enllaços o capçaleres HTTP i en interaccionar amb la base de dades i el sistema de fitxers. Els administradors també poden restringir els tipus de fitxer que es poden pujar al sistema utilitzant filtres.

A2 - Gestió de sessions i autenticació trencada

El nucli del WordPress gestiona els comptes d'usuari i l'autenticació, de tal manera que els detalls d'un usuari com el seu ID, el nom o la contrasenya es gestionen al propi servidor. Les contrasenyes es protegeixen a la base de dades utilitzant els mètodes habituals de «salting» i «stretching». A partir de la versió 4.0, les sessions actives es destrueixen en tancar la sessió.

A3 - Cross Site Scripting (XSS)

El WordPress ofereix un gran ventall de funcions que permeten garantir que les dades que introdueix un usuari són segures10. Els usuaris confiables (és a dir, els administradors i editors d'un WordPress) i els administradors de la xarxa d'una instal·lació multilloc poden publicar HTML i JavaScript sense cap limitació dins d'una entrada o pàgina. El contingut enviat per la resta d'usuaris es filtra per tal d'eliminar entitats perilloses, utilitzant la biblioteca KSES a través de la funció «wp_kses».

Com a exemple, l'equip del nucli del WordPress va adonar-se, abans que es publiqués la versió 2.3, de què la funció «the_search_query()» s'estava utilitzant de manera incorrecta per molts autors, ja que no estaven escapant el contingut HTML. De manera atípica, es va decidir trencar lleugerament la compatibilitat enrere i fer que, a partir de la versió 2.3, la funció escapés el contingut automàticament.

A4 - Referència directa insegura a un objecte

El WordPress ofereix sovint referències directes als objectes a les URL o als camps d'un formulari, com ara un identificador numèric únic per als comptes d'usuaris o el contingut que hi ha disponible al web. Si bé aquest identificadors exposen informació del sistema, el sistema de permisos i control d'accés del WordPress evita que es facin peticions no autoritzades.

A5 - Mala configuració de seguretat

La majoria de les operacions de configuració de seguretat del WordPress estan limitades a un sol administrador autoritzat. La configuració predeterminada per al WordPress s'avalua contínuament a nivell de l'equip central, i l'equip central del WordPress proporciona documentació i millors pràctiques per reforçar la seguretat de la configuració del servidor per executar un lloc amb WordPress11.

A6 - Exposició a dades sensibles

Les contrasenyes d'usuari del WordPress es protegeixen utilitzant el Portable PHP Password Hashing Framework12. El sistema de permisos del WordPress s'utilitza per a controlar l'accés a informació privada, com ara la informació personal dels usuaris registrats o autors de comentaris, adreces de correu, contingut publicat de forma privada, etc. La versió 3.7 del WordPress va introduir una mètrica per avaluar la força d'una contrasenya i aportar consells sobre com millorar-la. El WordPress també disposa de paràmetres de configuració opcionals addicionals per a forçar l'ús d'HTTPS.

A7 - Manca de control d'accés al nivell de funcions

El WordPress comprova que es disposi de l'autorització i els permisos necessaris per a accedir a qualsevol funcionalitat abans que les accions s'executin. L'accés o visualització de les adreces d'administració, menús o pàgines sense els permisos adequats està fortament lligat amb el sistema d'autenticació per tal d'evitar que usuaris no autoritzats pugin accedir-hi.

A8 - Cross Site Request Forgery (CSRF)

WordPress usa testimonis criptogràfics, anomenats números utilitzats una vegada (nonces)13, per validar la intenció de les soŀlicituds d'acció d'usuaris autoritzats, per protegir-se contra possibles amenaces CSRF. El WordPress proporciona una API per a la generació d'aquests testimonis per crear i verificar testimonis únics i temporals. El testimoni es limita a un usuari específic, una acció específica, un objecte específic i un període de temps específic, que es pot afegir als formularis i URLs segons sigui necessari. A més, tots els números utilitzats una vegada, s'invaliden en tancar la sessió.

A9 - Ús de components amb vulnerabilitats conegudes

L'equip central del WordPress supervisa de prop les poques biblioteques i entorns de treball del WordPress integrats amb la funcionalitat dels components principals. En el passat, l'equip central ha realitzat contribucions a diversos components de tercers per fer-los més segurs, com l'actualització per corregir una vulnerabilitat entre llocs del TinyMCE en el WordPress 3.5.214.

Si és necessari, l'equip central pot decidir bifurcar o reemplaçar components externs crítics, com quan la biblioteca SWFUpload va ser oficialment reemplaçada per la biblioteca Plupload en la versió 3.5.2, i l'equip de seguretat va posar a disposició una bifurcació segura de SWFUpload<15 per a aquelles extensions que van continuar usant SWFUpload a curt termini.

A10 - Redireccions i reenviaments no validats

El sistema d'autenticació i control d'accés intern del WordPress protegirà als usuaris d'intents de redirecció a destinacions no desitjades o de redireccions automàtiques. Aquesta funcionalitat està disponible als desenvolupadors mitjançant la API wp_safe_redirect()16.

Altres riscos i preocupacions de seguretat

Atacs de processament XXE (XML eXternal Entity)

Quan processa XML, el WordPress deshabilita la càrrega d'entitats XML personalitzades per prevenir els atacs d'entitats externes i d'expansió d'entitats. A més de la funcionalitat de PHP, el WordPress no proporciona cap API de processament segur d'XML per als autors d'extensions.

Atacs SSRF (Server Side Request Forgery)

Les sol·licituds HTTP emeses per WordPress es filtren per evitar l'accés a les adreces IP privades i de bucle invertit. A més, l'accés només està permès a certs ports HTTP estàndard.

Seguretat de temes i extensions del WordPress

El tema predeterminat

El WordPress necessita que hi hagi un tema activat per tal de poder mostrar el contingut als visitants del web. El tema per defecte que inclou el WordPress (actualment, «Twenty Twenty») ha estat revisat i provat per l'equip de desenvolupadors de temes i per l'equip de desenvolupament del nucli.

El tema predeterminat pot servir com a punt de partida per al desenvolupament d'un tema personalitzat, i els desenvolupadors del lloc poden crear un tema secundari que inclogui certa personalització, però torni al tema predeterminat per a la major part de la funcionalitat i la seguretat. El tema predeterminat pot ser eliminat fàcilment per un administrador si no és necessari.

Repositoris de temes i extensions de WordPress.org

Hi ha més de 50.000 extensions i 5.000 temes a WordPress.org. Aquests temes i extensions s'envien per a incloure i es revisen manualment pels voluntaris abans que estiguen disponibles al repositori.

Que una extensió o un tema apareguin al directori d'extensions i temes de WordPress.org no garanteix que estiguin lliures de vulnerabilitats de seguretat. Els autors d'extensions tenen a la seva disposició un conjunt de directrius que han de revisar abans d'enviar la seva feina17 i també hi ha documentació exhaustiva sobre el desenvolupament de temes18 a WordPress.org.

Cada extensió i tema té la capacitat de ser desenvolupat contínuament pel propietari del mateix o del tema, ​​qualsevol correcció posterior o desenvolupament de característiques es pot penjar al repositori i posar a disposició dels usuaris aquesta extensió o tema instaŀlat amb una descripció d'aquest canvi. Els administradors del lloc són notificats dels complements que han d'actualitzar-se a través del tauler d'administració.

Quan l'equip de seguretat de WordPress descobreix una vulnerabilitat en una extensió, es posa en contacte amb l'autor de l'extensió i treballen junts per corregir i llançar-ne una versió segura. Si hi ha una falta de resposta per part de l'autor de l'extensió o si la vulnerabilitat és greu, l'extensió o tema s'extreu del directori públic i, en alguns casos, l'equip de seguretat ho corregeix i actualitza directament.

L'equip de revisió de temes

L'equip de revisió de temes és un grup de voluntaris liderat per membres reconeguts de la comunitat. Té com a objectiu revisar i aprovar els temes que s'envien al directori oficial de temes del WordPress. L'equip manté un document amb les directrius oficials per a la revisió de temes 19, les dades per a realitzar tests unitaris dels temes20 i l'extensió Theme Check21. També té com a objectiu educar als desenvolupadors de temes del WordPress sobre les millors pràctiques. La inclusió al grup és moderada per contribuïdors principals de l'equip de desenvolupament del WordPress.

El rol del proveïdor d'allotjament en la seguretat de WordPress

Es pot instal·lar el WordPress a moltes plataformes . Si bé el nucli del WordPress inclou moltes mesures per a garantir una web segura (les quals es tracten en aquest document), la configuració del sistema operatiu i el servidor web on s'executa el WordPress també juguen un paper molt important a l'hora de garantir la seguretat del propi WordPress.

Una nota sobre WordPress.com i la seguretat del WordPress

WordPress.com és el proveïdor d'allotjament de WordPress més gran del món i és propietat d'Automattic, Inc. El fundador d'aquesta empresa és el Matt Mullenweg, qui va co-crear el WordPress. WordPress.com utilitza el WordPress internament, però disposa dels seus propis processos de seguretat, riscos i solucions 22. Aquest document fa referència a les qüestions de seguretat que afecten a la versió del WordPress auto-hostatjada que trobareu a WordPress.org i que podeu instal·lar a qualsevol servidor del món.

Apèndix

APIs del nucli del WordPress

La Interfície de programació d'aplicacions (API) del nucli WordPress es compon de diverses API individuals23, cada una cobreix les funcions involucrades i l'ús d'un conjunt de funcionalitats. Juntes, formen la interfície del projecte que permet que els complements i els temes interactuïn, alterin i estenguin la funcionalitat central de WordPress de forma segura.

Mentre que cada API de WordPress proporciona les millors pràctiques i maneres estandarditzades d'interactuar i estendre el programari bàsic de WordPress, les següents API de WordPress són les més pertinents per fer complir i reforçar la seguretat de WordPress:

API de base de dades

L'API24 de la base de dades, agregada a WordPress 0.71, proporciona el mètode correcte per accedir a les dades com a valors anomenats que s'emmagatzemen a la capa de la base de dades.

API del sistema de fitxers

El sistema de fitxers API25, afegit al WordPress 2.626, va ser creat originalment per a la funcionalitat d'actualitzacions automàtiques del WordPress. L'API del sistema de fitxers resumeix la funcionalitat necessària per llegir i escriure fitxers locals al sistema de fitxers per fer-los de forma segura, en diversos tipus d'amfitrions.

Ho fa a través de la classe WP_Filesystem_Base i diverses subclasses que implementen diferents maneres de connectar-se al sistema de fitxers local, depenent del suport individual de l'amfitrió. Qualsevol tema o complement que necessiteu escriure fitxers localment hauria de fer-ho utilitzant la família de classes de WP_Filesystem.

API HTTP

L'API HTTP27, afegida en WordPress 2.728 i ampliada més en WordPress 2.8, estandarditza les sol·licituds HTTP de WordPress. L'API maneja les galetes, la codificació i descodificació de gzip, la descodificació de trossos (si HTTP 1.1) i diverses altres implementacions del protocol HTTP. L'API estandarditza les sol·licituds, comprova cada mètode abans de l'enviament i, segons la configuració del vostre servidor, fa servir el mètode adequat per fer la sol·licitud.

Permisos i API de l'usuari actual

Els permisos i l'API29 d'usuari actuals són un conjunt de funcions que us ajudaran a verificar els permisos i l'autoritat de l'usuari actual per realitzar qualsevol tasca o operació que es sol·liciti, i pot protegir encara més els usuaris no autoritzats que accedeixen o realitzen funcions més enllà de les seves capacitats permeses.

Llicència de contingut de paper blanc

El text d'aquest document (sense incloure el logotip de WordPress o marca comercial ) està llicenciat sota CC0 1.0 Universal (CC0 1.0) Dedicació de domini públic. Podeu copiar, modificar, distribuir i realitzar el treball, fins i tot amb fins comercials, tot sense demanar permís.

Gràcies especials al llibre blanc de seguretat del Drupal, que ens va aportar inspiració.

Lectura addicional


Autoritzat per Sara Rosso

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

Versió 1.0 Març de 2015


Notes de peu de pàgina