Kritická chyba ve WPvivid Backup: neautentizovaný upload souborů může vést k převzetí webu (CVE-2026-1357)
Wordfence zveřejnil detaily kritické zranitelnosti v pluginu WPvivid Backup (na WordPress.org vedený jako „Migration, Backup, Staging – WPvivid Backup & Migration“). Jde o Unauthenticated Arbitrary File Upload – tedy možnost nahrát soubor na server bez přihlášení – s potenciálem Remote Code Execution (RCE), což je typicky cesta k úplnému převzetí webu.
Důležitý kontext: podle zveřejněných informací je zranitelnost kriticky relevantní hlavně pro weby, které mají v nastavení pluginu vygenerovaný klíč pro příjem zálohy z jiného webu. Tato funkce je ve výchozím stavu vypnutá a expiraci klíče lze nastavit maximálně na 24 hodin. To sice omezuje okno útoku, ale pokud je klíč aktivní, problém je vážný.

Shrnutí zranitelnosti (Wordfence Intelligence)
Wordfence ji eviduje jako: Migration, Backup, Staging <= 0.9.123 -- Unauthenticated Arbitrary File Upload.
- CVE: CVE-2026-1357
- Závažnost: CVSS 9.8 (Critical)
- Dotčené verze: <= 0.9.123
- Opravená verze: 0.9.124
- Plugin/slug: wpvivid-backuprestore
- Nálezce: Lucas Montes (NiRoX) (nahlášeno přes Bug Bounty Program)
- Bounty: $2,145.00
Podle Wordfence umožňuje kombinace několika chyb útočníkovi bez přihlášení nahrát na server libovolný soubor (včetně PHP) a následně spustit kód. V advisory je jako parametr zmiňováno spuštění přes požadavek s wpvivid_action=send_to_site.
Koho se to týká v praxi (a proč „jen někdy“)
WPvivid umí nejen zálohovat a obnovovat, ale také přijmout zálohu z jiného webu. Tohle „receive backup“ chování je navázané na krátkodobý vygenerovaný klíč v nastavení pluginu.
Z pohledu rizika je zásadní, že Wordfence explicitně uvádí: kritický dopad má primárně konfigurace, kdy máš vygenerovaný klíč povolený pro příjem záloh. Funkce je standardně vypnutá a klíč může mít expiraci maximálně 24 hodin – takže nejde o trvalé otevření endpointu, ale i tak je to dost dlouhé okno na automatizované skeny a cílené útoky.
Technické pozadí: co se pokazilo v kryptografii a zápisu souboru
Wordfence popisuje zranitelnost jako kombinaci dvou problémů:
- Nesprávné ošetření chyby při RSA dešifrování (včetně chování při selhání
openssl_private_decrypt()/ RSA decrypt kroku) - Chybějící sanitizace cesty/názvu souboru při zápisu nahraných dat (umožňující directory traversal a únik z „chráněného“ backup adresáře)
Tok zpracování je podle analýzy navázaný na metodu send_to_site() ve třídě WPvivid_Send_to_site, která obsluhuje příjem souboru zálohy včetně práce s obsahem z $_POST['wpvivid_content'] a tokenem uloženým v nastavení (wpvivid_api_token). Pokud token chybí nebo je expirovaný, plugin ukončí vykonávání (die()), ale v případě aktivního tokenu pokračuje přes dešifrování zprávy.
Klíčový detail: při dešifrování zprávy se má nejdřív RSA částí získat session key a tím pak symetricky dešifrovat payload (v advisory je zmiňovaný Rijndael/AES přes phpseclib). Pokud ale RSA decrypt selže a vrátí false, plugin podle Wordfence neukončí provádění a předá false do inicializace symetrické šifry. Knihovna pak tuto hodnotu interpretuje jako řetězec nulových bytů, čímž vznikne predikovatelný „null-byte key“. Útočník si následně může payload zašifrovat přesně tímto předvídatelným klíčem.
Druhý problém: plugin z dešifrovaného payloadu přijme název souboru bez dostatečné sanitizace, takže lze zneužít directory traversal a zapsat soubor mimo vyhrazený adresář záloh. V kombinaci s absencí kontroly typu/rozšíření souboru (v původním stavu) to otevírá možnost nahrát třeba PHP webshell do veřejně dostupného umístění a následně ho přímo zavolat – to je přesně ten scénář, který končí Remote Code Execution a často i kompletní kompromitací webu.
Proč je „arbitrary file upload“ prakticky vždy průšvih
Jakmile útočník dokáže bez přihlášení nahrát soubor do webrootu (nebo jiného veřejně dostupného adresáře) a neexistuje kontrola typu souboru, je běžným dalším krokem upload PHP webshellu a spuštění kódu. To obvykle znamená plný přístup k WordPressu i serveru v rámci práv webového procesu.
Jak vypadá oprava ve verzi 0.9.124
Podle Wordfence vývojáři opravili problém dvěma konkrétními zásahy:
- Do
decrypt_message()přidali kontrolu, že dešifrovaný$keynesmí býtfalseani prázdný. Pokud je, funkce vrátífalsea dál se nepokračuje – tím se zamezí použití „nulového“ klíče pro symetrickou šifru. - V
send_to_site()přidali kontrolu přípony souboru a povolili jen typické backup formáty. V patchi je uveden allowlist:zip,gz,tar,sql. Současně se název bezpečněji zpracuje přesbasename()apreg_replace('/[^a-zA-Z0-9._-]/', '', $safe_name); pokud přípona neprojde, vrátí se chyba „Invalid file type – only backup files allowed.“ a skript se ukončí (die()).
Doporučený postup pro správce a vývojáře (co udělat hned teď)
- Zjisti, jestli na webu běží WPvivid Backup / Migration, Backup, Staging (slug
wpvivid-backuprestore). - Ověř verzi pluginu. Pokud je 0.9.123 nebo starší, je potřeba aktualizace.
- Aktualizuj na WPvivid Backup 0.9.124 (Wordfence ji uvádí jako opravenou verzi) co nejdřív.
- Pokud používáš funkci pro příjem záloh „z jiného webu“ (generated key / API token), zvaž, jestli ji opravdu potřebuješ. Když je klíč vygenerovaný, je to přesně konfigurace, kterou Wordfence označuje jako kriticky dotčenou.
- Pokud máš Wordfence, zkontroluj úroveň ochrany: firewall rule byla podle oznámení nasazena dříve pro Premium/Care/Response a později pro Free (viz časová osa níže).
Časová osa zveřejnění a mitigace (Disclosure Timeline)
- January 12, 2026 – Wordfence obdržel hlášení zranitelnosti přes Bug Bounty Program.
- January 22, 2026 – Wordfence report ověřil, potvrdil proof-of-concept exploit a kontaktoval vendor (pozvánka do Wordfence Vulnerability Management Portal).
- January 22, 2026 – Uživatelé Wordfence Premium, Wordfence Care a Wordfence Response dostali firewall rule proti exploitům této chyby.
- January 23, 2026 – Vendor odpověděl, zvolil komunikaci e-mailem.
- January 23, 2026 – Wordfence poslal vendorovi plné detaily, vendor potvrdil a začal připravovat fix.
- January 28, 2026 – Vyšla opravená verze pluginu 0.9.124.
- February 21, 2026 – Uživatelé Wordfence Free mají podle oznámení obdržet stejnou firewall ochranu.
Poznámka k nálezu a Bug Bounty
Zranitelnost objevil a zodpovědně nahlásil Lucas Montes (NiRoX) přes Wordfence Bug Bounty Program. Wordfence uvádí, že report přišel pět dní po zavedení chyby a odměna byla $2,145.00. V rámci programu Wordfence zmiňuje, že výzkumníci mohou získat až $31,200 per vulnerability (pro zranitelnosti v rozsahu programu).
Závěr
CVE-2026-1357 je ukázkový případ toho, jak nešťastná kombinace kryptografického edge-case (pokračování po selhání RSA decrypt) a slabé práce s cestou/názvem souboru může skončit nejhorším možným scénářem: neautentizovaným nahráním PHP souboru a RCE. Oprava je k dispozici ve verzi 0.9.124 a pokud WPvivid používáš – obzvlášť pokud máš aktivní klíč pro příjem záloh – je aktualizace naprostá priorita.
Reference / Zdroje
- 800,000 WordPress Sites Affected by Arbitrary File Upload Vulnerability in WPvivid Backup WordPress Plugin
- Migration, Backup, Staging <= 0.9.123 — Unauthenticated Arbitrary File Upload
- CVE-2026-1357
- WPvivid Backup – WordPress plugin (wpvivid-backuprestore)
- Wordfence Bug Bounty Program
- Lucas Montes (NiRoX) – researcher profile
- Wordfence Vulnerability Management Portal
Jakub Dvořák
Linux administrátor a DevOps inženýr. Shell scripting a automatizace jsou mou vášní. Infrastruktura jako kód je budoucnost.
Všechny příspěvky