Preskočiť na obsah
Kritická chyba vo WPvivid Backup: neautentifikovaný upload súborov a potenciálne RCE (CVE-2026-1357)
Zuzana Horváthová
Zuzana Horváthová 11. February 2026 · 5 min čítania

Kritická chyba vo WPvivid Backup: neautentifikovaný upload súborov a potenciálne RCE (CVE-2026-1357)

WordPress ekosystém má jednu nepríjemnú vlastnosť: aj užitočné pluginy, ktoré riešia „ťažké“ veci ako migrácie a zálohy, musia pracovať so súbormi a (niekedy) aj s kryptografiou. A to je kombinácia, pri ktorej aj malá chyba v ošetrení okrajových stavov môže skončiť veľmi zle.

Wordfence zverejnil detailný rozbor kritickej zraniteľnosti v plugine WPvivid Backup & Migration (na WordPress.org vedený ako Migration, Backup, Staging). Ide o neautentifikovaný arbitrary file upload, ktorý sa dá zneužiť na Remote Code Execution (RCE) – typicky cez nahratie škodlivého PHP súboru do verejne prístupného adresára a jeho následné spustenie. Zraniteľnosť má pridelené CVE-2026-1357 a CVSS 9.8 (Critical).

Dôležitý kontext: netýka sa úplne každého

Podľa zverejnených informácií je problém kritický najmä pre weby, ktoré majú v nastaveniach WPvivid vygenerovaný kľúč pre funkciu prijatia zálohy z iného webu („send backup to site“). Táto funkcia je defaultne vypnutá a expiráciu kľúča je možné nastaviť maximálne na 24 hodín.

Koho a čo to presne ovplyvňuje (verzie, skóre, patch)

Zraniteľnosť sa týka pluginu na slugu wpvivid-backuprestore a podľa Wordfence Intelligence platí:

  • Názov v databáze: Migration, Backup, Staging – WPvivid Backup & Migration
  • Typ: Unauthenticated Arbitrary File Upload
  • CVE: CVE-2026-1357
  • CVSS: 9.8 (Critical)
  • Zasiahnuté verzie: <= 0.9.123
  • Opravená verzia: 0.9.124

Wordfence zároveň uvádza, že výskumník Lucas Montes (NiRoX) nahlásil problém cez Wordfence Bug Bounty Program, a to iba päť dní po tom, čo sa zraniteľnosť v plugine objavila. Za nález bola vyplatená odmena 2 145 USD.

Prečo je arbitrary file upload v praxi taký nebezpečný

Arbitrary file upload je jedna z tých kategórií chýb, ktoré sa často končia úplným kompromitovaním webu. Ak útočník dokáže bez prihlásenia nahrať vlastný súbor na server, typický ďalší krok je nahratie webshellu (jednoduchý skript na spúšťanie príkazov alebo ďalšieho kódu) a následne:

  • získanie perzistencie (ďalšie backdoory)
  • krádež databázových prístupov z wp-config.php
  • vkladanie škodlivého JavaScriptu do šablón alebo pluginov
  • vytváranie nových admin účtov
  • zneužitie servera na ďalšie útoky (spam, phishing, botnet)

V tomto prípade je dôležité, že podľa rozboru sa útočník vie dostať aj mimo „bezpečného“ adresára pre zálohy a nahrať súbor do verejne prístupnej cesty, čo je pre RCE spravidla rozhodujúce.

Technické pozadie: kde presne vznikol problém

WPvivid Backup má funkciu prijatia zálohy z iného webu. Táto komunikácia používa krátkodobo generovaný kľúč. Kľúčová časť spracovania prijatého obsahu ide podľa Wordfence cez metódu send_to_site() v triede WPvivid_Send_to_site, ktorá načíta šifrovaný payload z $_POST['wpvivid_content'], dekóduje ho (Base64) a následne ho dešifruje.

Problém je kombináciou dvoch zlyhaní:

  1. Nesprávne ošetrenie chyby pri RSA dešifrovaní session kľúča (konkrétne stav, keď dešifrovanie zlyhá a vráti false).
  2. Chýbajúca sanitizácia cesty/názvu súboru pri zapisovaní nahraného obsahu, čo umožňuje directory traversal a únik z chráneného backup adresára.

1) RSA zlyhá, ale kód pokračuje – a vznikne predvídateľný šifrovací kľúč

Wordfence popisuje, že plugin sa pokúša RSA dešifrovať hodnotu $key. Ak je hodnota nesprávna, výsledok dešifrovania je false. Namiesto toho, aby sa vykonávanie ukončilo, tento false prejde do inicializácie symetrického šifrovania (Rijndael/AES cez phpseclib). Knižnica false interpretuje ako reťazec nulových bajtov, čím vznikne predvídateľný „null-byte“ kľúč.

To je presne ten typ chyby, ktorý útočníkovi dá do ruky stabilný vektor: vie si pripraviť payload zašifrovaný kľúčom z nulových bajtov a plugin ho bude považovať za legitímne dešifrovaný obsah.

2) Názov súboru z payloadu bez sanitizácie → directory traversal

Druhá časť reťazca je, že plugin akceptoval názvy súborov z dešifrovaného payloadu bez dostatočnej kontroly/sanitizácie. To podľa Wordfence umožnilo directory traversal – teda použiť ../ a dostať sa mimo určený adresár pre zálohy.

Výsledok: neautentifikovaný útočník vedel nahrať ľubovoľný súbor (vrátane .php) do verejne prístupnej lokácie, a následne ho zavolať cez web, čím sa dosiahne Remote Code Execution.

Wordfence uvádza aj konkrétny parameter, cez ktorý sa útok realizuje: wpvivid_action=send_to_site.

Čo opravili v 0.9.124: dve dôležité brzdy

Vendor vydal opravu v 0.9.124. Podľa zverejneného diffu ide o dve podstatné zmeny:

Oprava v decrypt_message(): kontrola prázdneho/nesprávneho kľúča

Do dešifrovacej funkcie pribudla kontrola, či RSA dešifrovanie vrátilo false alebo prázdnu hodnotu. Ak áno, funkcia skončí a vráti false, namiesto toho, aby pokračovala so symetrickým šifrovaním na „nulovom“ kľúči.

$key = $rsa->decrypt($key);

// Patch: nepokračuj, ak RSA dešifrovanie zlyhalo
if ($key === false || empty($key)) {
    return false;
}

$rij = new Crypt_Rijndael();
$rij->setKey($key);
return $rij->decrypt($data);

Oprava v send_to_site(): kontrola prípony a „bezpečný“ názov súboru

Druhá zmena pridáva kontrolu typu/prípony súboru a zároveň robí názov súboru bezpečnejším: používa basename() a následne odfiltruje nežiaduce znaky regexom. Plugin následne povolí len vybrané prípony typické pre zálohy.

$safe_name = basename($params['name']);
$safe_name = preg_replace('/[^a-zA-Z0-9._-]/', '', $safe_name);

$allowed_extensions = array('zip', 'gz', 'tar', 'sql');
$file_ext = strtolower(pathinfo($safe_name, PATHINFO_EXTENSION));

if (!in_array($file_ext, $allowed_extensions, true)) {
    $ret['result'] = WPVIVID_FAILED;
    $ret['error']  = 'Invalid file type - only backup files allowed.';
    echo wp_json_encode($ret);
    die();
}

Táto druhá časť je dôležitá najmä preto, že v pôvodnom stave podľa Wordfence neexistovali ani základné kontroly typu súboru či rozšírenia. V kombinácii s directory traversal to bola priama cesta k nahratiu spustiteľného PHP.

Časová os zverejnenia (Disclosure Timeline)

  • January 12, 2026 – Wordfence dostal hlásenie cez Bug Bounty Program.
  • January 22, 2026 – Wordfence report overil, potvrdil proof-of-concept a oslovil vendor (s ponukou použiť Wordfence Vulnerability Management Portal).
  • January 22, 2026 – Wordfence Premium / Care / Response dostali firewall rule na mitigáciu.
  • January 23, 2026 – Vendor odpovedal a zvolil komunikáciu e-mailom.
  • January 23, 2026 – Wordfence poslal plné detaily zraniteľnosti, vendor potvrdil a začal pracovať na oprave.
  • January 28, 2026 – Vyšla opravená verzia pluginu 0.9.124.
  • February 21, 2026 – Wordfence Free má (podľa oznámenia) dostať rovnakú ochranu.

Wordfence ochrana: kto dostal pravidlo a kedy

Wordfence nasadil ochranu na úrovni WAF (web application firewall) formou pravidla, ktoré blokuje pokusy o exploitovanie tejto zraniteľnosti:

  • Používatelia Wordfence Premium, Wordfence Care a Wordfence Response dostali firewall rule January 22, 2026.
  • Používatelia Wordfence Free majú dostať rovnakú ochranu February 21, 2026 (30-dňové oneskorenie oproti plateným plánom).

Čo spraviť na weboch, ktoré WPvivid používajú

Ak WPvivid Backup používaš (alebo ho spravuješ klientom), minimum je jasné: aktualizovať. Wordfence pri publikovaní odporúča prejsť na WPvivid Backup 0.9.124 čo najskôr.

  1. Skontroluj verziu pluginu WPvivid Backup & Migration (Migration, Backup, Staging).
  2. Ak je verzia 0.9.123 alebo nižšia, aktualizuj na 0.9.124.
  3. Over, či nemáš zapnutú funkcionalitu prijímania záloh z iných webov cez generovaný kľúč (feature je defaultne vypnutá, ale v niektorých nasadeniach sa používa).
  4. Ak používaš Wordfence, skontroluj, či máš aktívne WAF pravidlá (a rátaj s tým, že Wordfence Free dostáva niektoré pravidlá neskôr).

Poznámka k riziku v praxi

Aj keď je kľúč v WPvivid časovo obmedzený (max 24 hodín) a funkcia je defaultne vypnutá, v reálnych projektoch sa táto voľba často zapína kvôli migráciám alebo centralizovaným zálohám. Práve vtedy sa z „teoretickej“ chyby stáva veľmi praktický incident.

Zhrnutie

CVE-2026-1357 v plugine WPvivid Backup ukazuje klasický pattern: kryptografická chyba v ošetrení zlyhania (RSA dešifrovanie → false) + slabá práca s cestami/názvami súborov = neautentifikovaný upload súborov a potenciálne RCE. Oprava je dostupná vo verzii 0.9.124 a zmysel dáva riešiť ju okamžite, najmä ak používaš funkciu prijímania záloh cez generovaný kľúč.

Pridajte sa ku komunite HelloWP!

Chatujte s nami o WordPresse, webovom vývoji a zdieľajte skúsenosti s ostatnými vývojármi.

- členovia
- online
Pridať sa

Používame súbory cookie na zlepšenie vášho zážitku. Pokračovaním súhlasíte s našimi Zásadami používania súborov cookie.