Bezpečnost

Více informací o zabezpečení softwaru jádra WordPressu naleznete v tomto dokumentu. Můžete si jej také stáhnout ve formátu PDF (anglicky).

Obecný přehled

Tento dokument je analýzou a vysvětlením vývoje jádra softwaru WordPress a jeho souvisejících bezpečnostních procesů, jakož i zkoumání vlastního zabezpečení zabudovaného přímo do softwaru. Tvůrci rozhodnutí, kteří hodnotí WordPress jako systém pro správu obsahu nebo aplikační framework, by měli tento dokument používat ve své analýze a rozhodování, a pro vývojáři, aby se seznámili s bezpečnostními komponenty a osvědčenými postupy tohoto softwaru.

Informace v tomto dokumentu jsou aktuální pro nejnovější stabilní verzi softwaru, WordPress 4.7, v době vydání, ale měly by být považovány za relevantní i pro nejnovější verze softwaru, protože tým vývojářů WordPressu pečlivě dbá na zpětnou kompatibilitu. Specifická bezpečnostní opatření a změny budou zaznamenány, protože byly přidány do jádra softwaru ve specifických verzích. Důrazně je doporučeno používat vždy nejnovější stabilní verzi WordPressu, abyste zajistili co nejlepší zabezpečení.

Shrnutí

WordPress je otevřený software systému pro správu obsahu, který se používá u milionů webů, webových aplikací a blogů. V současné době ovládá více než 34% z top 10 milionů webů na internetu. Použitelnost WordPressu, rozšiřitelnost a vyspělá vývojová komunita z něj činí populární a bezpečnou volbu pro weby všech velikostí.

Od svého založení v roce 2003 prošel WordPress neustálým zpevňováním, takže jeho jádro může řešit a zmírňovat běžné bezpečnostní hrozby, včetně seznamu top 10 běžných bezpečnostních chyb dle Open Web Application Security Project (OWASP), které jsou popsány v tomto dokumentu.

Bezpečnostní tým WordPressu, ve spolupráci s vedením týmu jádra WordPressu a podpořený Celou komunitou WordPressu, pracuje na identifikaci a řešení bezpečnostních problémů v jádře softwaru, které je k dispozici pro distribuci a instalaci na WordPress.org, a také na doporučování a dokumentování osvědčených postupů pro bezpečnost šablon a pluginů.

Vývojáři a administrátoři webů by měli věnovat zvláštní pozornost správnému používání jednotlivých API jádra a základní konfiguraci serveru, které byly zdrojem častých chyb zabezpečení, a zajistit, aby všichni uživatelé používali pro přístup do WordPressu silná hesla.

Přehled WordPressu

WordPress je otevřený software systému pro správu obsahu (CMS). Jedná se o nejpoužívanější software na světě a používá ho více než 34% z top 10 milionů webů1, což mu dává odhadovaný 60% podíl na trhu všech webů používajících CMS.

WordPress je poskytován pod všeobecnou veřejnou licencí GNU (GPLv2 nebo novější), která umožňuje čtyři základní svobody. Berte je jako 𔅌listinu práv pro WordPress“:

  1. Svobodu používání programu k libovolným účelům.
  2. Svobodu zjišťovat, jak program funguje a upravit jej dle svých přání.
  3. Svobodu volně šířit WordPress.
  4. Svobodně šířit kopie upravených verzí ostatním.

Vedení týmu jádra WordPressu

Projekt WordPress je meritokracie, kterou řídí vedení týmu jádra projektu, vedený jeho spolutvůrcem a vedoucím vývojářem Mattem Mullenwegem. Tým řídí všechny aspekty projektu, včetně vývoje jádra, WordPress.org a komunitních iniciativ.

Hlavní vedoucí tým tvoří Matt Mullenweg, pět vedoucích vývojářů a více než tucet hlavních vývojářů s trvalým přístupem pro přispívání. Tito vývojáři mají pravomoc rozhodovat o technických rozhodnutích a vést architektonické diskuse a implementační snahy.

WordPress má řadu přispívajících vývojářů. Někteří z nich jsou bývalí nebo aktuální přispěvatelé, a někteří jsou pravděpodobně budoucí přispěvatelé. Tito přispívající vývojáři jsou důvěryhodní veteráni přispívající do WordPressu, kteří si od svých vrstevníků vysloužili velký respekt. Podle potřeby byl WordPress pověřen správci, jednotlivci, kterým byl udělen přístup, někdy pro určitou komponentu, na dočasném nebo zkušebním základě.

Základním a příspěvkovým vývojem je vývoj WordPressu. U každé verze, přispívají stovky vývojářů do WordPressu. Tito hlavní přispěvatelé jsou dobrovolníci, kteří nějakým způsobem přispívají k základnímu kódu jádra.

Cyklus vydání WordPressu

Každý cyklus vydání WordPressu je veden jedním nebo více hlavními vývojáři WordPressu. Cyklus vydání obvykle trvá asi 4 měsíce od počátečního meetingu po vydání verze.

Cyklus vydání se řídí následujícím vzorem2:

  • 1. fáze: Plánování a zajištění vedení týmu. To se provádí na Slacku, v kanále #core. Vedení vydání diskutuje funkce pro příští verzi WordPressu. Přispěvatelé WordPressu se do této diskuse také zapojují. Vedení konkrétní verze určí vedoucí týmů pro všechny funkce.
  • 2. fáze: Začátek vývoje. Vedoucí týmů sestaví jednotlivé týmy a pracují na svých přiřazených funkcích. Pravidelné chaty jsou naplánovány tak, aby byl zajištěn kontinuální postup.
  • 3. fáze: Beta. Bety jsou vydány a betatesteři jsou požádáni, aby začali hlásit chyby. Od této fáze se nepřidávají žádné další funkce ani vylepšení, a nepřijímají se požadavky na nové funkce. Autorům pluginů a šablon doporučujeme vyzkoušet si svůj kód vůči nadcházejícím změnám.
  • 4. fáze: Kandidát vydání (Release Candidate). Od tohoto okamžiku jsou zmražené řetězce překladu. Práce je zaměřena pouze na regrese a blokátory.
  • 5. fáze: Vydání. Verze WordPressu je vydána a zpřístupněna administrátorům pro aktualizaci.

Číslování verzí a bezpečnostních vydání

Hlavní verze WordPressu je určena prvními dvěma sekvencemi. Například, 3.5 je hlavní vydání, stejně jako 3.6, 3.7, nebo 5.2. Není žádný „WordPress 3“ nebo „WordPress 4“ každá hlavní verze je určena číselně, např., „WordPress 3.9.“

Hlavní verze mohou přidávat nové uživatelské funkce a vývojářská API. Ačkoli ve světě softwaru, „hlavní“ verze znamená, že můžete porušit zpětnou kompatibilitu, WordPress se snaží neporušit zpětnou kompatibilitu. Zpětná kompatibilita je jednou z nejdůležitějších filozofií projektu, jejímž cílem je usnadnit uživatelům a vývojářům aktualizace.

Vedlejší verze WordPressu jsou dány třetí číslicí. Verze 3.5.1 je vedlejší vydání, stejně jako 3.4.23. Vedlejší verze je vyhrazena pro opravu chyb zabezpečení a řešení kritických chyb. Vzhledem k tomu, že nové verze WordPressu jsou vydávány často - cíl je každých 4-5 měsíců pro hlavní vydání a vedlejší verze.

Zpětná kompatibilita verzí

Projekt WordPress má silný závazek ke zpětné kompatibilitě. Tento závazek znamená, že šablony, pluginy a vlastní kód i nadále fungují, když je aktualizováno jádro WordPressu, což podporuje majitele webů v proaktivním přístupu vzhledem k bezpečnosti.

WordPress a bezpečnost

Bezpečnostní tým WordPressu

Bezpečnostní tým WordPressu je tvořen přibližně 50 odborníky včetně vedoucích vývojářů a výzkumníků v oblasti bezpečnosti — asi polovinu tvoří zaměstnanci společnosti Automattic (tvůrci WordPress.com, nejstarší a největší WordPress hostingová platforma na internetu), a řada pracovníků z oblasti bezpečnosti webu. Tým konzultuje se známými a důvěryhodnými výzkumníky v oblasti bezpečnosti a hostingovými společnostmi3.

Bezpečnostní tým WordPressu často spolupracuje s dalšími bezpečnostními týmy na řešení problémů ve společných závislostech, jako je řešení zranitelnosti v analyzátoru PHP XML, který používá XML-RPC API, které je dodáváno s WordPressem, ve WordPressu 3.9.24. Toto řešení zranitelnosti bylo výsledkem společného úsilí bezpečnostních týmů WordPressu a Drupalu.

Bezpečnostní rizika WordPressu, proces a historie

Bezpečnostní tým WordPressu věří v odpovědné zveřejnění tím, že upozorní bezpečnostní tým okamžitě na případné zranitelnosti. Prostřednictvím WordPress HackerOne5 může být bezpečnostní tým upozorněn na potenciální bezpečnostní chyby. Bezpečnostní tým komunikuje sám soukromým kanálem na Slacku a pracuje na uzavřeném, soukromém Tracku pro sledování, testování a opravování chyb a bezpečnostních problémů.

Každá zpráva o zabezpečení je potvrzena při přijetí a tým pracuje na ověření této chyby zabezpečení a určení její závažnosti. Je-li chyba potvrzena, bezpečnostní tým naplánuje vydání opravy, která může být připojena k nadcházejícímu vydání WordPressu, nebo ji může okamžitě vydat jako bezpečnostní vydání, v závislosti na závažnosti problému.

Při okamžitém vypuštění bezpečnostního vydání bezpečnostní tým publikuje na stránce news webu WordPress.org6 oznámení vydání a podrobně popisuje provedené změny. Je také uveřejněn autor nalezené zranitelnosti s cílem podpořit a posílit další odpovědné hlášení chyb v budoucnu.

Administrátoři WordPressu vidí oznámení na nástěnce webu, aby provedli upgrade na novou verzi, a po manuálním upgradu budou uživatelé přesměrováni na stránku O WordPressu, která podrobně popisuje provedené změny. Pokud administrátoři používají automatické aktualizace na pozadí, obdrží po dokončení upgradu email.

Automatické aktualizace bezpečnostních verzí na pozadí

Počínaje verzí 3.7, WordPress představil automatické aktualizace na pozadí všech vedlejších verzí7, například 3.7.1 a 3.7.2. Bezpečnostní tým WordPressu může identifikovat, opravit a iniciovat automatizované vylepšení zabezpečení pro WordPress, aniž by vlastník webu musel na svém konci cokoliv dělat.

Když je aktualizace zabezpečení přesunuta na aktuální stabilní verzi WordPressu, tým jádra také zveřejní aktualizace zabezpečení pro všechny verze, které jsou schopné aktualizací na pozadí (od WordPressu 3.7), takže i tyto starší, ale stále nedávné verze WordPressu obdrží vylepšení zabezpečení.

Jednotliví vlastníci webů se mohou rozhodnout, zda-li odstraní automatické aktualizace na pozadí prostřednictvím jednoduché změny v konfiguračním souboru, ale tým jádra důrazně doporučuje zachování této funkčnosti, stejně jako používání nejnovější stabilní verze WordPressu.

OWASP top 10 - 2013

Open Web Application Security Project (OWASP) je online komunita věnovaná zabezpečení webových aplikací. Seznam OWASP Top 108 se zaměřuje na identifikaci nejzávažnějších bezpečnostních rizik pro celou řadu organizací. Top 10 položek je vybráno a upřednostňováno v kombinaci s odhady zranitelnosti, zjistitelnosti a dopadu.

Následující odstavce popisují API, prostředky a zásady, které WordPress používá k posílení jádra softwaru, a šablon i pluginů třetích stran proti těmto potenciálním rizikům.

A1 – Injektování

Ve WordPressu je k dispozici sada funkcí a API, které vývojářům pomáhají zajistit, aby nemohl být injektován nepovolený kód, a pomáhají ověřit a opravit data. K dispozici jsou osvědčené postupy a dokumentace9 o tom, jak tyto API používat k ochraně, ověřování nebo opravě vstupních a výstupních dat v HTML, URL, HTTP hlavičkách a při interakci s databází a souborovým systémem. Administrátoři mohou také dále omezit typy nahrávaných souborů za pomoci filtrů.

A3 – Chybná autentizace a správa relace

Jádro WordPressu spravuje uživatelské účty, ověřovací data a podrobnosti, jako je ID uživatele, jméno a heslo jsou spravovány na straně serveru, stejně jako ověřovací soubory cookies. Hesla jsou v databázi chráněna standardními salt technikami a stretch. Stávající relace jsou přerušeny po odhlášení od verze WordPressu 4.0.

A3 – Cross Site Scripting (XSS)

WordPress poskytuje celou řadu funkcí, které mohou pomoci zajistit, že data dodaná uživatelem jsou bezpečná10. Důvěryhodní uživatelé, kteří jsou administrátoři a šéfredaktoři na jediné instalaci WordPressu, a administrátoři sítě webů pouze v síti webů WordPressu, mohou odesílat nefiltrované HTML nebo JavaScript podle potřeby, například uvnitř příspěvku nebo stránky. Nedůvěryhodní uživatelé a obsah odeslaný uživateli se standardně filtruje, aby se odstranily nebezpečné entity pomocí knihovny KSES prostřednictvím funkce wp_kses.

Jako příklad, tým jádra WordPressu si všiml před vydáním WordPressu 2.3, že funkce the_search_query() byla zneužívána většinou autorů šablon, kteří neescapovali výstupu funkce při použití v HTML. Ve velmi ojedinělém případě poškozujíc zpětnou kompatibilitu, byl výstup funkcí ve WordPressu 2.3 změněn tak ,aby byl předem escapován.

A4 – Nezabezpečený přímý odkaz na objekt

WordPress často poskytuje přímý odkaz na objekt, například jedinečné číselné identifikátory uživatelských účtů nebo obsahu, které jsou k dispozici v URL polích nebo u formulářů. I když tyto identifikátory odhalují přímé systémové informace, systém oprávnění a řízení přístupu WordPressu zabraňují neoprávněným požadavkům.

A5 – Nezabezpečená konfigurace

Většina operací konfigurace zabezpečení WordPressu je omezena na jednoho autorizovaného administrátora. Výchozí nastavení pro WordPress jsou průběžně vyhodnocovány na úrovni týmu jádra WordPressu, který poskytuje dokumentaci a osvědčené postupy pro zpřísnění zabezpečení konfigurace serveru pro používání WordPress webu11.

A6 – Expozice citlivých dat

Hesla uživatelského účtu WordPress mají přidán salt a jsou hašovaná na základě Portable PHP Password Hashing Framework12. Systémové oprávnění WordPressu se používá k řízení přístupu k soukromým informacím, jako jsou PII registrovaného uživatele, emailové adresy autorů komentářů, soukromě publikovaný obsah, atd. Ve WordPressu 3.7, byl představen indikátor síly hesla poskytující uživatelům další informace pro nastavení jejich hesel a rady pro zvýšení síly hesla. WordPress má také volitelné konfigurační nastavení pro vyžadování HTTPS.

A7 – Chyby v řízení úrovní přístupů

WordPress kontroluje správnou autorizaci a oprávnění pro všechny požadavky k přístupu na úrovni funkcí před provedením akce. Přístup nebo vizualizace administrativních URL adres, menu a stránek bez řádného ověření je úzce integrován s autentizačním systémem, aby se zabránilo přístupu neoprávněných uživatelů.

A8 – Cross-Site Request Forgery (CSRF)

WordPress používá kryptografické tokeny, nazývané nonce13, aby ověřil záměr žádostí o akci od autorizovaných uživatelů k ochraně před potenciálními CSRF hrozbami. WordPress poskytuje API pro generování těchto tokenů, pro vytváření a ověřování jedinečných a dočasných tokenů. Každý token je omezen na konkrétního uživatele, konkrétní akci, konkrétní objekt a konkrétní časové období, které lze přidat do formulářů a URL adres dle potřeby. Kromě toho jsou po odhlášení všechny nonce zneplatněny.

A9 – Použití známých zranitelných komponent

Tým jádra WordPressu bedlivě sleduje několik v jádře WordPressu obsažených knihoven a frameworků. V minulosti se tým jádra podílel na několika komponentách třetích stran, aby byly bezpečnější, jako je například aktualizace zabezpečení cross-site zranitelnosti v TinyMCE ve WordPressu 3.5.214.

V případě potřeby se může tým jádra rozhodnout, že kritické externí komponenty vyřadí nebo nahradí, například když byla knihovna SWFUpload oficiálně nahrazena knihovnou Plupload ve verzi 3.5.2 a bezpečnostní odnož SWFUpload byla zpřístupněna bezpečnostním týmem <15 pro pluginy, které v krátkodobém horizontu používaly SWFUpload.

A10 – Neošetřené přesměrování a předávání

Systém vnitřní kontroly přístupu a ověřování ve WordPress bude chránit před pokusy o nasměrování uživatelů na nežádoucí cíle nebo automatické přesměrování. Tato funkce je také k dispozici vývojářům pluginů prostřednictvím API, wp_safe_redirect()16.

Další bezpečnostní rizika a obavy

Útoky typu XML-eXternal-Entity(XXE)

Při zpracování XML, WordPress zakáže načítání vlastních XML entit, aby zabránil útokům externích subjektů a rozšíření entit. Kromě základních funkcí PHP WordPress neposkytuje autorům pluginů další zabezpečené API pro zpracování XML.

Útoky typu Server-Side-Request-Forgery(SSRF)

HTTP požadavky vydané WordPressem jsou filtrovány, aby se zabránilo přístupu k loopbackům a soukromým IP adresám. Přístup je navíc povolen pouze pro určité standardní HTTP porty.

Bezpečnost WordPress šablon a pluginů

Výchozí šablona

WordPress potřebuje šablonu, aby vykreslovala obsah viditelný na frontendu. Výchozí šablona, který je dodávána s jádrem WordPressu (aktuálně „Twenty Nineteen“), byla z bezpečnostních důvodů důkladně přezkoumána a testována týmy vývojářů šablon a vývojářů jádra.

Výchozí šablona může sloužit jako výchozí bod pro vývoj vlastní šablony a weboví vývojáři mohou vytvořit odvozenou šablonu, která obsahuje některé úpravy, ale většina funkcí a zabezpečení se vrací k výchozí šabloně. Výchozí šablonu lze snadno odstranit administrátorem, pokud to není potřebná.

Šablony a pluginy v adresáři na WordPress.org

Na webu WordPress.org je hostováno přibližně 5 000+ šablon a 50 000+ pluginů. Tyto šablony a pluginy jsou odeslány k ruční kontrole, kde je dobrovolníci zkontrolují před jejich zpřístupněním v adresáři.

Zahrnutí šablon a pluginů do adresáře není zárukou, že neobsahují chyby zabezpečení. Pro autory pluginů existují pokyny, které by měly být dodrženy před odesláním pro zařazení do adresáře17. Web WordPress.org navíc obsahuje podrobnou dokumentaci o vývoji šablon pro WordPress18.

Každá šablona a plugin má schopnost být neustále vyvíjen vlastníkem a všechny následné opravy nebo vývoj funkcí lze nahrát do adresáře a zpřístupnit uživatelům s nainstalovanou šablonou nebo pluginem s přehledem provedených změn. Administrátoři webu jsou informováni o pluginech, které je třeba aktualizovat prostřednictvím nástěnky.

Když bezpečnostní tým WordPressu odhalí zranitelnost pluginu, kontaktují autora pluginu a spolupracují na opravě a vydání zabezpečené verze pluginu. Pokud od autora pluginu není dostatečná odezva nebo pokud je zranitelnost závažná, plugin/šablona je vyjmut/a z veřejného adresáře a v některých případech opraven/a a aktualizován/a přímo bezpečnostním týmem.

Tým kontroly šablon

Tým kontroly šablon je skupina dobrovolníků, vedená klíčovými a pevně stanovenými členy komunity WordPressu, kteří přezkoumávají a schvalují šablony, které mají být zařazeny do oficiálního adresáře šablon WordPressu. Tým kontroly šablon spravuje oficiální dokumentaci šablon19, Unit Test Data šablon20, a plugin Theme Check21, a snaží se zapojit a vzdělávat komunitu vývojářů šablon pro WordPress v rozvoji osvědčených postupů. Začlenění do skupiny je moderováno hlavními přispěvateli vývojového týmu WordPressu.

Role poskytovatele hostingu v bezpečnosti WordPressu

WordPress lze instalovat na spoustu platforem. Ačkoli jádro WordPressu poskytuje spoustu ustanovení pro provozování bezpečné webové aplikace, které byly pokryty v tomto dokumentu, konfigurace operačního systému a základního softwaru webového serveru je pro bezpečný chod neméně důležité.

Poznámka o WordPress.com a bezpečnosti WordPressu

WordPress.com je největší instalace WordPressu na světě a je vlastněna a spravována společností Automattic, Inc., kterou založil Matt Mullenweg, spoluautor projektu WordPress. WordPress.com běží na jádru WordPressu, a má své vlastní bezpečnostní procesy, rizika a řešení22. Tento dokument se týká zabezpečení týkajícího se samostatně hostovaného otevřeného softwaru WordPress, který lze stáhnout z WordPress.org a lze jej nainstalovat na libovolný server kdekoliv na světě.

Dodatek

API jádra WordPressu

WordPress Core Application Programming Interface (API) se skládá z několika samostatných API23, z nichž každé pokrývá funkce zahrnuté do dané sady funkcí. Společně tvoří rozhraní projektu, které umožňuje šablonám a pluginům bezpečně a zabezpečeně komunikovat, měnit a rozšiřovat základní funkce WordPressu.

Zatímco každé WordPress API poskytuje osvědčené postupy a standardizované způsoby, jak komunikovat a rozšířit jádro WordPressu, následující WordPress API jsou nejvhodnější pro vynucení a zlepšení zabezpečení WordPressu:

Databázové API

Databázové API24, přidané ve WordPressu 0.71, poskytuje správnou metodu pro přístup k datům jako pojmenovaným hodnotám, které jsou uloženy ve databázové vrstvě.

API souborového systému

API souborového systému (Filesystem API25), přidané do WordPressu 2.626, bylo původně vytvořeno pro vlastní automatickou aktualizaci WordPressu. API souborového systému odstraňuje funkce potřebné pro čtení a zápis místních souborů do souborového systému, který má být prováděn bezpečně, na různých typech hostitelů.

Děje se to prostřednictvím třídy WP_Filesystem_Base a několika podtříd, které implementují různé způsoby připojení k lokálnímu souborovému systému v závislosti na individuální podpoře hostitele. Jakákoliv šablona nebo plugin, která potřebuje lokálně zapisovat soubory, by to měla provést pomocí rodiny tříd WP_Filesystem.

HTTP API

HTTP API27, přidané do WordPressu 2.728 a rozšířené dále ve WordPressu 2.8, standardizuje HTTP požadavky pro WordPress. API zpracovává cookies, gzip kódování a dekódování, dekódování chunk (pro HTTP 1.1) a různé další implementace HTTP protokolu. API standardizuje požadavky, testuje každou metodu před odesláním a na základě konfigurace serveru použije příslušnou metodu k provedení požadavku.

API oprávnění a aktuálního uživatele

API oprávnění a aktuálního uživatele29 je sada funkcí, která pomůže ověřit aktuální oprávnění uživatele a oprávnění provádět jakýkoli úkon nebo operaci, která je požadována, a může dále chránit uživatele před neoprávněnými uživateli, kteří přistupují k funkcím a vykonávají funkce nad rámec jejich povolených oprávnění.

Licence obsahu tohoto dokumentu

Text v tomto dokumentu (bez loga WordPress nebo ochranné známky) je licencován pod CC0 1.0 Universal (CC0 1.0) Public Domain Dedication. Toto dílo můžete kopírovat, upravovat, distribuovat a používat dílo, a to i pro komerční účely, aniž byste k tomu měli povolení.

Se zvláštním poděkováním Drupalu za bezpečnostní dokument, který poskytl trochu insiprace.

Reference


Autor: Sara Rosso

Ve spolupráci s Barry Abrahamson, Michael Adams, Jon Cave, Helen Hou-Sandí, Dion Hulse, Mo Jangda a Paul Maiorana.

Verze 1.0 březen 2015


Reference