
Wprowadzenie do problemu / definicja luki
Wtyczki backupowe do WordPressa mają „uprzywilejowaną” pozycję: czytają i zapisują pliki, przenoszą archiwa, często dotykają całego drzewa katalogów WWW. Dlatego błąd typu „arbitrary file upload” (dowolny upload pliku) w takiej wtyczce niemal zawsze kończy się tym samym: zdalnym wykonaniem kodu (RCE), np. przez wrzucenie webshella .php.
Dokładnie ten scenariusz dotyczy WPvivid Backup & Migration (slug: wpvivid-backuprestore) – wtyczki raportowanej jako mającej 900 000+ aktywnych instalacji.
W skrócie
- CVE: CVE-2026-1357
- Waga (CVSS 3.1): 9.8 (Critical)
- Typ: nieautoryzowany upload dowolnego pliku + obejście katalogu docelowego (directory traversal) ⇒ RCE
- Wersje podatne: ≤ 0.9.123
- Wersja z poprawką: 0.9.124 (wydana 28 stycznia 2026)
- Warunek krytycznej ekspozycji: funkcja „receive backup from another site” (domyślnie wyłączona) i aktywny klucz (ważny maks. 24h)
Kontekst / historia / powiązania
Zgłoszenie pochodzi od badacza Lucasa Montesa (NiRoX) i trafiło do programu bug bounty Wordfence 12 stycznia 2026. Wordfence skontaktowało się z producentem 22 stycznia 2026, a łatka wyszła 28 stycznia 2026.
Temat został szerzej nagłośniony 12 lutego 2026 (m.in. BleepingComputer), podkreślając, iż choć nie każdy serwis ma włączoną podatną funkcję, to jest ona „praktyczna” i często używana w migracjach.
Analiza techniczna / szczegóły luki
Mechanizm ataku to interesująca kombinacja błędów kryptograficzno-logicznych i klasycznego braku walidacji ścieżek:
- Błędna obsługa porażki RSA
- W procesie odbierania backupu wtyczka deszyfruje klucz sesyjny przez openssl_private_decrypt().
- Gdy deszyfrowanie się nie powiedzie, kod nie przerywa działania i przekazuje wynik false dalej.
- „Przewidywalny” klucz AES (null bytes) w phpseclib
- Biblioteka AES (Rijndael) w phpseclib traktuje false jak ciąg bajtów \x00…, co skutkuje przewidywalnym kluczem.
- Atakujący może więc przygotować zaszyfrowany payload tak, aby został zaakceptowany przez wtyczkę.
- Brak sanitacji nazwy pliku + directory traversal
- Nazwy przesyłanych plików nie są poprawnie czyszczone, co umożliwia wyjście poza katalog backupów (np. sekwencjami ../) i zapis w lokalizacji dostępnej z WWW.
- Efekt końcowy: nieautoryzowany upload pliku PHP ⇒ RCE
- W praktyce atakujący dąży do uploadu pliku .php (webshell/backdoor), a następnie wywołuje go przez HTTP.
- Wektor/endpoint
- NVD/Wordfence opisują możliwość osiągnięcia RCE m.in. przez parametr akcji wpvivid_action=send_to_site.
Co zmienia poprawka?
Łatka (0.9.124) dodaje m.in.:
- twarde przerwanie procesu, gdy RSA się nie powiedzie,
- sanitację nazwy pliku,
- ograniczenie typów uploadu do formatów backupowych (np. ZIP/GZ/TAR/SQL).
Praktyczne konsekwencje / ryzyko
Jeśli Twoja instancja spełnia warunki ekspozycji, stawka jest maksymalna:
- pełne przejęcie strony (RCE ⇒ wykonanie dowolnych poleceń/uruchomienie webshella),
- kradzież danych (bazy, plików konfiguracyjnych, kluczy API),
- modyfikacja treści i SEO spam (doorway pages, przekierowania),
- pivot do infrastruktury (np. do kont hostingowych, jeżeli uprawnienia procesu WWW są zbyt szerokie),
- łańcuch dostaw: zainfekowana strona jako etap do ataków na użytkowników (malvertising, JS-injection).
Warto też pamiętać o „realistycznym” oknie: klucz odbioru backupu ma maksymalnie 24 godziny ważności, co ogranicza masowe skanowanie, ale nie eliminuje ryzyka (np. ataki oportunistyczne w czasie migracji).
Rekomendacje operacyjne / co zrobić teraz
Poniżej playbook w kolejności „największy efekt najszybciej”:
- Zaktualizuj WPvivid do 0.9.124 lub nowszej
- Na WordPress.org wersja meta wskazuje 0.9.124 jako aktualną oraz 900 000+ aktywnych instalacji – czyli patch jest dostępny w oficjalnym kanale.
- Podatne są wydania ≤ 0.9.123.
- Jeśli musisz odroczyć update (niezalecane): wyłącz/nie używaj „receive backup from another site”
- To jest najważniejszy warunek krytycznej ekspozycji.
- Zarządzanie kluczami transferu
- Usuń/odśwież generowane klucze transferu po zakończeniu migracji, skróć procesy migracyjne do minimum, nie zostawiaj „włączonego na chwilę” na weekend.
- WAF / reguły ochronne
- Wordfence publikuje, iż reguły firewalla dla klientów Premium/Care/Response były dostępne od 22 stycznia 2026, a dla wersji darmowej mają trafić 21 lutego 2026.
- Jeśli masz inny WAF (Cloudflare, reverse proxy), rozważ tymczasowe reguły ograniczające nietypowe żądania do endpointów akcji WPvivid (zwłaszcza w trakcie okien migracyjnych).
- Hunting / szybkie IOCs (praktycznie)
- Przejrzyj katalogi webroot pod kątem świeżych plików .php w nietypowych lokalizacjach (szczególnie tam, gdzie normalnie WPvivid nie zapisuje).
- Sprawdź logi WWW pod kątem żądań prowadzących do uploadu i późniejszych wywołań nowo zapisanych plików (w tym sekwencji sugerujących traversal).
- Jeżeli podejrzewasz kompromitację: odizoluj instancję, zresetuj hasła i klucze, porównaj pliki z kopią referencyjną, rozważ rotację sekretów aplikacyjnych.
Różnice / porównania z innymi przypadkami (jeśli dotyczy)
Klasyczne „arbitrary file upload ⇒ RCE” w WordPressie zwykle wynika z:
- braku sprawdzania rozszerzeń MIME/extension,
- braku kontroli uprawnień (kto może uploadować),
- niezabezpieczonych endpointów REST/AJAX.
Tutaj wyróżnia się to, iż exploit jest „podparty” błędem w obsłudze kryptografii (RSA → false → przewidywalny klucz AES), co pomaga atakującemu przejść przez warstwę, która miała zabezpieczać transfer backupu.
Dodatkowo dochodzi directory traversal, które zmienia „upload do katalogu backupu” w „upload gdziekolwiek”, co typowo przesądza o RCE.
Podsumowanie / najważniejsze wnioski
- CVE-2026-1357 to krytyczna podatność (CVSS 9.8) umożliwiająca RCE bez uwierzytelnienia w WPvivid Backup & Migration.
- Podatne są wersje ≤ 0.9.123, poprawka jest w 0.9.124.
- Ekspozycja jest najmocniejsza, gdy włączona jest opcja „receive backup from another site” i aktywny klucz transferu (max 24h), co często pojawia się przy migracjach.
- Priorytet: patch natychmiast, a jeżeli trwa migracja — traktuj to jak okno podwyższonego ryzyka.
Źródła / bibliografia
- BleepingComputer – opis podatności, wektor ataku, wersje i patch (BleepingComputer)
- Wordfence blog – timeline, warunek ekspozycji, techniczne szczegóły i patch (Wordfence)
- NVD (NIST) – rekord CVE-2026-1357 i opis techniczny (nvd.nist.gov)
- WordPress.org – metadane wtyczki (wersja 0.9.124, 900 000+ instalacji) (WordPress.org)
- Wordfence Intelligence – karta podatności + metadane publikacji/aktualizacji (Wordfence)





