Kritieke file upload-kwetsbaarheid in WPvivid Backup treft tot 800.000 sites (CVE-2026-1357)
Er is een kritieke Arbitrary File Upload-kwetsbaarheid gevonden in de WordPress-plugin WPvivid Backup & Migration (slug: wpvivid-backuprestore), een plugin met meer dan 800.000 actieve installaties. De impact is fors: een niet-authenticeerde aanvaller kan onder de verkeerde omstandigheden willekeurige bestanden uploaden en daarmee Remote Code Execution (RCE) bereiken-oftewel: code draaien op je server, wat in de praktijk vaak eindigt in een complete site-overname.
Belangrijk nuancepunt: volgens de advisory is dit vooral kritiek voor sites waar je in de plugin-instellingen een gegenereerde key hebt aangemaakt om een backup van een andere site te laten ontvangen. Die functie staat standaard uit, en de key-expiratie kan maximaal op 24 uur worden gezet. Maar als die feature aan stond (of recent aan heeft gestaan), dan wil je hier niet mee wachten.
Wat is er precies aan de hand?
De kwetsbaarheid is geregistreerd als CVE-2026-1357 met een CVSS-score van 9.8 (Critical). Wordfence beschrijft het als: Unauthenticated Arbitrary File Upload in versies t/m 0.9.123, opgelost in 0.9.124.
- Kwetsbaarheid: Unauthenticated Arbitrary File Upload
- CVE: CVE-2026-1357
- CVSS: 9.8 (Critical)
- Getroffen versies: <= 0.9.123
- Gepatcht in: 0.9.124
- Plugin: Migration, Backup, Staging – WPvivid Backup & Migration (slug
wpvivid-backuprestore)
In de aanvalsketen combineert de plugin (in de getroffen versies) een cryptografische foutafhandeling met onvoldoende sanitization van paden/bestandsnamen. Dat maakt het mogelijk om een payload zó te construeren dat er uiteindelijk een upload op schijf belandt op een plek waar je ‘m publiek kunt benaderen-en als dat bestand PHP is, heb je al snel RCE.
Wanneer is je site vooral kwetsbaar?
De kern zit in een WPvivid-feature waarmee je een backup kunt ontvangen van een andere site. Daarvoor genereert WPvivid een kortlevende key in de instellingen. In de advisory wordt expliciet benadrukt:
- De feature om een backup te ontvangen via een gegenereerde key is disabled by default.
- De key expiration kan maximaal op 24 uur worden ingesteld.
- Het risico is vooral kritisch wanneer zo’n key aanwezig/actief is in de plugininstellingen (om ‘send to site’ te gebruiken).
Technische analyse (wat ging er fout?)
Wordfence beschrijft dat WPvivid de ontvangen backup-afhandeling doet via send_to_site() in de class WPvivid_Send_to_site. De request bevat onder andere $_POST['wpvivid_content'] (base64) en wordt gedecrypteerd met een sleutel uit de pluginoptie wpvivid_api_token (met o.a. een private_key). De decryptieroute loopt via WPvivid_crypt::decrypt_message().
Het probleem begint bij het RSA-decrypten van een sessiesleutel. Als het decrypten faalt (Wordfence noemt specifiek een falende openssl_private_decrypt()-stap; in de getoonde code gebeurt decryptie via Crypt_RSA()->decrypt()), levert dat een boolean false op. En daar gaat het mis: de plugin stopt de uitvoering niet, maar gebruikt die false als input voor de AES/Rijndael-initialisatie (via phpseclib). In die library wordt false vervolgens geïnterpreteerd als een string van null bytes. Daardoor wordt de gebruikte sleutel voorspelbaar.
Gevolg: een aanvaller kan de payload zó encrypten dat die correct ‘decrypteert’ onder die voorspelbare null-byte key. Daar bovenop komt dat de plugin bestandsnamen uit de gedecrypteerde payload accepteert zonder voldoende pad-sanitization, waardoor directory traversal mogelijk is om buiten de bedoelde backup-directory te schrijven. Uiteindelijk kun je dan een willekeurige PHP-file in een publiek toegankelijke directory plaatsen en die aanroepen voor Remote Code Execution, volgens Wordfence via de parameter wpvivid_action=send_to_site.
Waarom Arbitrary File Upload bijna altijd ‘game over’ is
Zodra een aanvaller (zonder login) een PHP-bestand kan uploaden naar een uitvoerbare locatie, is het typische vervolg: webshell plaatsen, persistente backdoors, admin accounts aanmaken, of server-side pivots. Daarom worden dit soort issues vaak als ‘complete compromise’ gezien.
De patch: wat is er aangepast in 0.9.124?
De vendor heeft de kwetsbaarheid op twee plekken aangescherpt:
- In
decrypt_message()is een extra check toegevoegd: als$key === falseofempty($key), dan stopt de functie en returntfalse. Daarmee voorkom je dat een mislukte decryptie alsnog leidt tot een voorspelbare null-byte sleutel in de cipher-initialisatie. - In
send_to_site()is een file extension allowlist toegevoegd zodat alleen backup-bestandstypes geaccepteerd worden. In de patch worden o.a.zip,gz,tarensqltoegestaan, en wordt de naam genormaliseerd metbasename()en eenpreg_replace('/[^a-zA-Z0-9._-]/', '', ...)voordat de extensie gecheckt wordt. Bij een ongeldige extensie wordt de upload geweigerd met de foutmelding:Invalid file type - only backup files allowed.
Wordfence mitigatie: firewall rules en timing
Naast de pluginfix heeft Wordfence een firewallregel uitgerold om exploitpogingen tegen te houden:
- January 22, 2026: firewall rule beschikbaar voor Wordfence Premium, Wordfence Care en Wordfence Response.
- February 21, 2026: dezelfde bescherming komt (30 dagen later) beschikbaar voor Wordfence Free.
Disclosure timeline (zoals gerapporteerd)
- January 12, 2026 – Wordfence ontvangt de melding van de Arbitrary File Upload-kwetsbaarheid via het Wordfence Bug Bounty Program.
- January 22, 2026 – Wordfence valideert de report en bevestigt een proof-of-concept exploit. De vendor wordt benaderd met een uitnodiging voor het Wordfence Vulnerability Management Portal: https://www.wordfence.com/threat-intel/vendor/vulnerability-management-portal/
- January 22, 2026 – Wordfence Premium/Care/Response-klanten krijgen een firewall rule ter extra bescherming.
- January 23, 2026 – Vendor reageert en kiest voor disclosure via e-mail.
- January 23, 2026 – Wordfence stuurt de volledige disclosure details; vendor bevestigt en start met een fix.
- January 28, 2026 – Release van de volledig gepatchte pluginversie 0.9.124.
- February 21, 2026 – Wordfence Free krijgt dezelfde firewallbescherming.
Wat moet je nu doen? (praktische checklist)
- Update WPvivid Backup & Migration naar 0.9.124 (of nieuwer) zo snel mogelijk. Alles <= 0.9.123 is kwetsbaar volgens de advisory.
- Controleer in WPvivid of je ooit een gegenereerde key hebt gebruikt om backups van een andere site te ontvangen. Deze feature is de kritieke ‘trigger’ volgens de advisory.
- Als je ‘send to site’ niet nodig hebt: zorg dat het uit staat en verwijder/laat keys verlopen (de expiratie kan max. 24 uur zijn, maar ga niet alleen daarop vertrouwen).
- Als je Wordfence gebruikt: weet dat Premium/Care/Response sinds 22 januari 2026 een firewall rule hebben; Free volgt op 21 februari 2026. Zie dit als extra mitigatie, niet als vervanging van patchen.
- Behandel dit als een mogelijk incident als je tekenen ziet van onverwachte bestanden of vreemde PHP in upload-/public directories: Arbitrary File Upload wordt vaak misbruikt voor webshells en persistente toegang.
Bug bounty en credits
De kwetsbaarheid is ontdekt en verantwoordelijk gemeld door Lucas Montes (NiRoX) via het Wordfence Bug Bounty Program. Volgens Wordfence werd de issue vijf dagen nadat die was geïntroduceerd al gerapporteerd. De bijbehorende bounty was $2,145.00.
Meer context over het programma (zoals Wordfence het zelf vermeldt): vendors kunnen zonder kosten deelnemen, en researchers kunnen tot $31,200 per vulnerability verdienen voor in-scope meldingen. Links: Bug Bounty Program en submit.
Samenvatting
WPvivid Backup & Migration had in versies t/m 0.9.123 een kritieke unauthenticated arbitrary file upload (CVE-2026-1357) die kan leiden tot Remote Code Execution en volledige site-compromittering, met name wanneer je de feature gebruikt waarbij een andere site een backup naar jouw site kan sturen via een gegenereerde key. De issue is opgelost in 0.9.124 door betere key-validatie tijdens decryptie en een allowlist op upload-extensies. Update dus direct.
Referenties / Bronnen
- 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 & Migration (WordPress plugin directory)
- Wordfence Bug Bounty Program
- Wordfence Vulnerability Management Portal
- Wordfence Premium
- Wordfence Care
- Wordfence Response
Naomi Wijngaard
Frontend-ontwikkelaar en CSS-kunstenaar. Het maken van animaties en interactieve websites is mijn passie. Fan van Svelte en SvelteKit.
Alle berichtenMeer van Naomi Wijngaard
GPT-5.3-Codex: Codex wordt een echte computer-collega (sneller, agentischer en met stevige cyber safeguards)
Wordfence bedienen via WP-CLI én de nieuwe Abilities API (WP 6.9+): scans, firewall en issues automatiseren
HelloBlog.io is live: een advertentievrij, meertalig techblog met open-source focus (22 talen)