Kritična ranjivost u WPvivid Backup: kako neautentificirani napadač može uploadati datoteku i preuzeti WordPress
Ako na projektima koristiš WPvivid Backup & Migration (plugin slug: wpvivid-backuprestore), vrijedi odmah provjeriti verziju i konfiguraciju. Wordfence je objavio detalje o kritičnoj ranjivosti (CVSS 9.8) koja omogućuje unauthenticated arbitrary file upload (upload proizvoljne datoteke bez prijave), a u praksi vrlo često završava kao remote code execution (RCE) i potpuni takeover weba.
Bitna nijansa: ovaj propust je kritično opasan prvenstveno za instalacije koje imaju generirani ključ u postavkama plugina kako bi drugi site mogao “poslati backup” na tvoj site. Ta mogućnost je po defaultu isključena, a rok trajanja ključa može se postaviti najviše na 24 sata. Ipak, s obzirom na broj instalacija, realno je očekivati da je velik broj webova tu opciju koristio barem povremeno.
Što je pogođeno (sažetak iz Wordfence Intelligence)
- Naziv ranjivosti: Unauthenticated Arbitrary File Upload
- Pogođeni plugin: Migration, Backup, Staging – WPvivid Backup & Migration
- Pogođene verzije: <= 0.9.123
- Zakrpljena verzija: 0.9.124
- CVSS: 9.8 (Critical)
- CVE: CVE-2026-1357 (cve.org zapis)
- Napadni vektor: parametar
wpvivid_action=send_to_site - Bug bounty nagrada: $2,145.00 (istraživač Lucas Montes / NiRoX)
Zašto je ovo opasno: od uploada do RCE-a u jednom koraku
“Arbitrary file upload” zvuči kao još jedan u nizu propusta, ali u WordPress svijetu to je često najkraći put do kompromitacije. Ako napadač uspije uploadati npr. .php datoteku u javno dostupnu mapu, onda je dovoljno pogoditi URL te datoteke i izvršiti kod na serveru. To se tipično koristi za webshell (npr. za daljnje ubacivanje backdoora, krađu podataka ili lateralno kretanje po hostingu).
U ovom slučaju, Wordfence navodi da ranjivost omogućuje neautentificiranim napadačima upload proizvoljnih datoteka, a zatim i izvršavanje malicioznog koda na serveru – što se u praksi vrlo često pretvara u potpuni takeover.
Tehnička analiza: gdje je točno puklo
WPvivid ima funkcionalnost primanja backupa s drugog sitea (“send backup to site”), a to se autorizira kratkotrajnim ključem generiranim u postavkama. Kod za primitak datoteke prolazi kroz send_to_site() metodu u klasi WPvivid_Send_to_site i očekuje payload u $_POST['wpvivid_content'] koji se base64-dekodira i zatim dekriptira.
Problem nastaje u procesu dekripcije: plugin koristi RSA da dekriptira session key, a zatim taj ključ koristi za simetričnu dekripciju (Rijndael/AES preko phpseclib). Ako RSA dekripcija padne, ključ postane false, ali izvršavanje se ne prekida na način koji bi spriječio daljnju obradu.
1) Neispravno rukovanje greškama u RSA dekripciji
Prema Wordfence opisu, kada openssl_private_decrypt() ne uspije dekriptirati session key, plugin ne prekida obradu nego prosljeđuje boolean false u inicijalizaciju AES/Rijndael šifre u phpseclib biblioteci. Ključni detalj je ponašanje biblioteke: false tretira kao string null bajtova. Time napadač dobiva predvidljiv “ključ” (niz