Krytyczna luka RCE w WPvivid Backup & Migration (900 000+ instalacji): CVE-2026-1357

securitybeztabu.pl 1 dzień temu

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:

  1. 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.
  2. „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ę.
  3. 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.
  4. 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.
  5. 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”:

  1. 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.
  2. Jeśli musisz odroczyć update (niezalecane): wyłącz/nie używaj „receive backup from another site”
    • To jest najważniejszy warunek krytycznej ekspozycji.
  3. 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.
  4. 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).
  5. 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

  1. BleepingComputer – opis podatności, wektor ataku, wersje i patch (BleepingComputer)
  2. Wordfence blog – timeline, warunek ekspozycji, techniczne szczegóły i patch (Wordfence)
  3. NVD (NIST) – rekord CVE-2026-1357 i opis techniczny (nvd.nist.gov)
  4. WordPress.org – metadane wtyczki (wersja 0.9.124, 900 000+ instalacji) (WordPress.org)
  5. Wordfence Intelligence – karta podatności + metadane publikacji/aktualizacji (Wordfence)
Idź do oryginalnego materiału