{"id":224,"date":"2026-02-11T16:38:29","date_gmt":"2026-02-11T15:38:29","guid":{"rendered":"https:\/\/helloblog.io\/sv\/kritisk-filuppladdningssarbarthet-i-wpvivid-backup\/"},"modified":"2026-02-11T16:38:29","modified_gmt":"2026-02-11T15:38:29","slug":"kritisk-filuppladdningssarbarthet-i-wpvivid-backup","status":"publish","type":"post","link":"https:\/\/helloblog.io\/sv\/kritisk-filuppladdningssarbarthet-i-wpvivid-backup\/","title":{"rendered":"Kritisk filuppladdningss\u00e5rbarhet i WPvivid Backup: n\u00e4r en \u201cbackup-nyckel\u201d r\u00e4cker f\u00f6r att ta \u00f6ver sajten"},"content":{"rendered":"\n<p>En obehaglig p\u00e5minnelse om varf\u00f6r \u201cbackup-plugins\u201d f\u00f6rtj\u00e4nar extra mycket s\u00e4kerhetsk\u00e4rlek: Wordfence har rapporterat en <strong>oautentiserad Arbitrary File Upload<\/strong> i <strong>WPvivid Backup &#038; Migration<\/strong> (plugin-slug: <code>wpvivid-backuprestore<\/code>). S\u00e5rbarheten \u00e4r klassad som <strong>kritisk (CVSS 9.8)<\/strong> och kan i praktiken anv\u00e4ndas f\u00f6r <strong>Remote Code Execution (RCE)<\/strong> \u2013 allts\u00e5 att angriparen kan k\u00f6ra egen kod p\u00e5 servern, vilket ofta betyder total kompromettering av WordPress-installationen.<\/p>\n\n\n\n<p>Det viktiga f\u00f6r dig som utvecklare\/ansvarig: den h\u00e4r buggen blir <strong>kritisk fr\u00e4mst i ett specifikt scenario<\/strong> \u2013 n\u00e4r du i WPvivid har <strong>genererat en nyckel<\/strong> i inst\u00e4llningarna f\u00f6r att l\u00e5ta en annan sajt skicka en backup till din sajt. Funktionen \u00e4r enligt uppgifterna <strong>avst\u00e4ngd som standard<\/strong>, och nyckeln kan bara ha en giltighetstid upp till <strong>24 timmar<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Vad \u00e4r det som \u00e4r s\u00e5rbart \u2013 i korthet?<\/h2>\n\n\n\n<p>S\u00e5rbarheten g\u00e4ller <strong>WPvivid Backup<\/strong> i versioner <strong>t.o.m. 0.9.123<\/strong> och \u00e4r \u00e5tg\u00e4rdad i <strong>0.9.124<\/strong>. Den har f\u00e5tt CVE-identifieraren <strong>CVE-2026-1357<\/strong>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Typ: Unauthenticated Arbitrary File Upload<\/li>\n\n\n<li>P\u00e5verkar: versioner \u2264 0.9.123<\/li>\n\n\n<li>Fixad i: 0.9.124<\/li>\n\n\n<li>CVE: CVE-2026-1357<\/li>\n\n\n<li>CVSS: 9.8 (Critical)<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">N\u00e4r \u00e4r du faktiskt i riskzonen?<\/h2>\n\n\n\n<p>Det h\u00e4r \u00e4r den del m\u00e5nga missar n\u00e4r man bara ser rubriken \u201coautentiserad filuppladdning\u201d. Enligt beskrivningen \u00e4r attackytan kopplad till WPvivids funktion f\u00f6r att <strong>ta emot en backup fr\u00e5n en annan sajt<\/strong>. F\u00f6r att det ska fungera beh\u00f6ver du generera en <strong>kortlivad nyckel (token\/nyckel)<\/strong> i pluginets inst\u00e4llningar.<\/p>\n\n\n\n<div class=\"wp-block-group callout callout-warning is-style-warning is-layout-flow wp-block-group-is-layout-flow\" style=\"border-width:1px;border-radius:8px;padding-top:1rem;padding-right:1.5rem;padding-bottom:1rem;padding-left:1.5rem\">\n\n<h4 class=\"wp-block-heading callout-title\">Kritisk p\u00e5verkan g\u00e4ller inte alla installationer i praktiken<\/h4>\n\n\n<p>S\u00e5rbarheten blir kritisk f\u00f6r de sajter som har en <strong>genererad nyckel<\/strong> aktiverad i WPvivid-inst\u00e4llningarna f\u00f6r att ta emot backups fr\u00e5n annan sajt. Funktionen \u00e4r avst\u00e4ngd som standard och nyckelns max-giltighet \u00e4r 24 timmar.<\/p>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Teknisk genomg\u00e5ng: varf\u00f6r g\u00e5r det att ladda upp valfria filer?<\/h2>\n\n\n\n<p>Det intressanta h\u00e4r \u00e4r att det inte \u201cbara\u201d \u00e4r en sak som g\u00e5r fel. Wordfence beskriver en kedja d\u00e4r kryptologik och filhantering tillsammans \u00f6ppnar d\u00f6rren.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1) Felhantering i RSA-dekryptering leder till en f\u00f6ruts\u00e4gbar AES-nyckel<\/h3>\n\n\n\n<p>N\u00e4r WPvivid tar emot en backup anv\u00e4nds en metod (<code>send_to_site()<\/code>) i klassen <code>WPvivid_Send_to_site<\/code>. Den tar emot <code>wpvivid_content<\/code> via POST, base64-dekoder inneh\u00e5llet och dekrypterar via <code>decrypt_message()<\/code> i <code>class-wpvivid-crypt.php<\/code>.<\/p>\n\n\n\n<p>Problemet uppst\u00e5r n\u00e4r pluginet f\u00f6rs\u00f6ker dekryptera en sessionsnyckel med RSA (via OpenSSL\/<code>openssl_private_decrypt()<\/code> enligt sammanfattningen; i koden syns RSA-dekryptering via phpseclib <code>Crypt_RSA<\/code>). Om dekrypteringen misslyckas blir resultatet <strong>boolean <code>false<\/code><\/strong>. I st\u00e4llet f\u00f6r att avbryta forts\u00e4tter exekveringen och skickar vidare det h\u00e4r <code>false<\/code>-v\u00e4rdet som nyckel till symmetrisk kryptering (Rijndael\/AES via phpseclib).<\/p>\n\n\n\n<p>Konsekvensen: biblioteket behandlar <code>false<\/code> som en str\u00e4ng av <strong>null-bytes<\/strong>. Det g\u00f6r att en angripare kan skapa ett krypterat payload med en <strong>f\u00f6ruts\u00e4gbar \u201cnull-byte key\u201d<\/strong> och d\u00e4rmed producera data som pluginet accepterar och dekrypterar p\u00e5 ett kontrollerat s\u00e4tt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2) Inget ordentligt skydd f\u00f6r filnamn \u2192 directory traversal<\/h3>\n\n\n\n<p>Ut\u00f6ver kryptodelen pekar Wordfence p\u00e5 att pluginet accepterar filnamn fr\u00e5n den dekrypterade payloaden <strong>utan tillr\u00e4cklig sanering<\/strong>. Det m\u00f6jligg\u00f6r <strong>directory traversal<\/strong> (t.ex. <code>..\/<\/code>) f\u00f6r att ta sig ut ur den t\u00e4nkta backup-katalogen och skriva filer p\u00e5 andra platser i filsystemet \u2013 inklusive kataloger som \u00e4r publikt \u00e5tkomliga via webben.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3) Ingen filtyps-\/\u00e4ndelsekontroll \u2192 uppladdning av PHP och RCE<\/h3>\n\n\n\n<p>N\u00e4r du v\u00e4l kan skriva filer godtyckligt och det inte finns kontroller f\u00f6r filtyp\/fil\u00e4ndelse, kan en angripare ladda upp en <strong>PHP-fil<\/strong> (t.ex. en webshell) och d\u00e4refter anropa den \u00f6ver HTTP. Det \u00e4r den klassiska v\u00e4gen till <strong>Remote Code Execution<\/strong> och ofta ett fullst\u00e4ndigt sajt\u00f6vertagande.<\/p>\n\n\n\n<p>Wordfence n\u00e4mner specifikt att detta g\u00e5r att trigga via parametern <strong><code>wpvivid_action=send_to_site<\/code><\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Vad \u00e4ndrades i patchen (0.9.124)?<\/h2>\n\n\n\n<p>Leverant\u00f6ren patchade problemet i tv\u00e5 tydliga steg:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>De lade till en kontroll i <code>decrypt_message()<\/code> s\u00e5 att om <code>$key<\/code> \u00e4r <code>false<\/code> eller tomt, s\u00e5 returnerar funktionen <code>false<\/code> direkt i st\u00e4llet f\u00f6r att forts\u00e4tta med en ogiltig nyckel.<\/li>\n\n\n<li>De lade till en fil\u00e4ndelsekontroll i <code>send_to_site()<\/code> s\u00e5 att endast f\u00f6rv\u00e4ntade backup-relaterade filtyper f\u00e5r laddas upp (enligt patch-exemplet: <code>zip<\/code>, <code>gz<\/code>, <code>tar<\/code>, <code>sql<\/code>). Dessutom g\u00f6rs filnamnet s\u00e4krare med <code>basename()<\/code> och en <code>preg_replace()<\/code> som tar bort otill\u00e5tna tecken.<\/li>\n\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Rekommenderade \u00e5tg\u00e4rder f\u00f6r WordPress-team och drift<\/h2>\n\n\n\n<p>Om du har WPvivid i n\u00e5gon milj\u00f6 (produktion, staging, kundsajt) \u00e4r det h\u00e4r en s\u00e5n sak som \u00e4r v\u00e4rd att hantera som ett larm: uppdatera, verifiera och st\u00e4ng av on\u00f6diga integrationsytor.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>Uppdatera WPvivid Backup till <strong>0.9.124<\/strong> (eller nyare) omedelbart.<\/li>\n\n\n<li>Kontrollera om funktionen f\u00f6r att ta emot backups fr\u00e5n annan sajt \u00e4r aktiverad: finns en <strong>genererad nyckel<\/strong> i plugininst\u00e4llningarna? Om du inte anv\u00e4nder funktionen \u2013 ta bort\/rotera nyckeln och l\u00e5t den vara avst\u00e4ngd.<\/li>\n\n\n<li>Om du beh\u00f6ver funktionen: h\u00e5ll nycklar <strong>kortlivade<\/strong> (max 24 timmar \u00e4r vad pluginet uppges till\u00e5ta) och hantera dem som riktiga credentials.<\/li>\n\n\n<li>Granska webbserverns skrivbara kataloger och filr\u00e4ttigheter \u2013 minimera var PHP kan skrivas och exekveras.<\/li>\n\n\n<li>Titta efter indikatorer p\u00e5 kompromettering (ok\u00e4nda PHP-filer, avvikande trafik, nya admin-konton), s\u00e4rskilt i publika kataloger under <code>wp-content\/<\/code>.<\/li>\n\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Wordfence-skydd och tidslinje f\u00f6r ansvarsfull rapportering<\/h2>\n\n\n\n<p>S\u00e5rbarheten rapporterades via Wordfence Bug Bounty Program av <strong>Lucas Montes (NiRoX)<\/strong>, bara fem dagar efter att den introducerats enligt Wordfence. Uppt\u00e4ckten gav en bounty p\u00e5 <strong>$2,145.00<\/strong>.<\/p>\n\n\n\n<p>Wordfence skickade \u00e4ven ut en WAF-regel (brandv\u00e4ggsregel) till betalande kunder och planerade utrullningen till gratisversionen senare:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>22 januari 2026<\/strong>: Wordfence Premium\/Care\/Response f\u00e5r en firewall rule f\u00f6r att skydda mot exploitf\u00f6rs\u00f6k.<\/li>\n\n\n<li><strong>21 februari 2026<\/strong>: Wordfence Free f\u00e5r samma skydd (30 dagar senare).<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Disclosure timeline (enligt Wordfence)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>January 12, 2026<\/strong> \u2013 Inskick via Wordfence Bug Bounty Program.<\/li>\n\n\n<li><strong>January 22, 2026<\/strong> \u2013 Rapporten valideras och PoC bekr\u00e4ftas. Wordfence kontaktar leverant\u00f6ren och tipsar om <a href=\"https:\/\/www.wordfence.com\/threat-intel\/vendor\/vulnerability-management-portal\/\">Wordfence Vulnerability Management Portal<\/a>.<\/li>\n\n\n<li><strong>January 22, 2026<\/strong> \u2013 Firewall rule g\u00e5r ut till Wordfence Premium\/Care\/Response.<\/li>\n\n\n<li><strong>January 23, 2026<\/strong> \u2013 Leverant\u00f6ren svarar och v\u00e4ljer e-postsp\u00e5r f\u00f6r disclosure.<\/li>\n\n\n<li><strong>January 23, 2026<\/strong> \u2013 Full disclosure-detaljer skickas, leverant\u00f6ren bekr\u00e4ftar och p\u00e5b\u00f6rjar fix.<\/li>\n\n\n<li><strong>January 28, 2026<\/strong> \u2013 Patchad version <strong>0.9.124<\/strong> sl\u00e4pps.<\/li>\n\n\n<li><strong>February 21, 2026<\/strong> \u2013 Samma skydd planeras n\u00e5 Wordfence Free.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Slutsats<\/h2>\n\n\n\n<p>CVE-2026-1357 \u00e4r en klassisk \u201ch\u00f6g impact\u201d-bugg: kombinationen av oautentiserad filuppladdning, m\u00f6jlighet att skriva utanf\u00f6r avsedd katalog och avsaknad av filtypkontroller \u00e4r exakt det som angripare beh\u00f6ver f\u00f6r att plantera en webshell och k\u00f6ra kod. Det som g\u00f6r den h\u00e4r incidenten extra intressant f\u00f6r oss som bygger och granskar WordPress-l\u00f6sningar \u00e4r hur en <strong>liten felhantering i krypto-fl\u00f6det<\/strong> (att inte avbryta vid misslyckad RSA-dekryptering) kan leda till en helt f\u00f6ruts\u00e4gbar nyckel och d\u00e4rmed en praktisk exploit.<\/p>\n\n\n\n<p>\u00c5tg\u00e4rden \u00e4r tydlig: k\u00f6r du WPvivid, se till att ligga p\u00e5 <strong>0.9.124+<\/strong> och behandla \u201csend backup to site\u201d-nycklar som en skarp exponeringsyta \u2013 s\u00e4rskilt p\u00e5 sajter som annars \u00e4r l\u00e5sta bakom bra adminrutiner.<\/p>\n\n\n<div class=\"references-section\">\n                <h2>Referenser \/ K\u00e4llor<\/h2>\n                <ul class=\"references-list\"><li><a href=\"https:\/\/www.wordfence.com\/blog\/2026\/02\/800000-wordpress-sites-affected-by-arbitrary-file-upload-vulnerability-in-wpvivid-backup-wordpress-plugin\/\" target=\"_blank\" rel=\"noopener noreferrer\">800,000 WordPress Sites Affected by Arbitrary File Upload Vulnerability in WPvivid Backup WordPress Plugin<\/a><\/li><li><a href=\"https:\/\/www.wordfence.com\/threat-intel\/vulnerabilities\/wordpress-plugins\/wpvivid-backuprestore\/migration-backup-staging-09123-unauthenticated-arbitrary-file-upload\" target=\"_blank\" rel=\"noopener noreferrer\">Migration, Backup, Staging &lt;= 0.9.123 &#8212; Unauthenticated Arbitrary File Upload<\/a><\/li><li><a href=\"https:\/\/www.cve.org\/CVERecord?id=CVE-2026-1357\" target=\"_blank\" rel=\"noopener noreferrer\">CVE-2026-1357<\/a><\/li><li><a href=\"https:\/\/wordpress.org\/plugins\/wpvivid-backuprestore\/\" target=\"_blank\" rel=\"noopener noreferrer\">WPvivid Backup &amp; Migration<\/a><\/li><li><a href=\"https:\/\/www.wordfence.com\/threat-intel\/bug-bounty-program\/\" target=\"_blank\" rel=\"noopener noreferrer\">Wordfence Bug Bounty Program<\/a><\/li><li><a href=\"https:\/\/www.wordfence.com\/threat-intel\/vendor\/vulnerability-management-portal\/\" target=\"_blank\" rel=\"noopener noreferrer\">Wordfence Vulnerability Management Portal<\/a><\/li><li><a href=\"https:\/\/www.wordfence.com\/products\/wordfence-premium\/\" target=\"_blank\" rel=\"noopener noreferrer\">Wordfence Premium<\/a><\/li><li><a href=\"https:\/\/www.wordfence.com\/products\/wordfence-care\/\" target=\"_blank\" rel=\"noopener noreferrer\">Wordfence Care<\/a><\/li><li><a href=\"https:\/\/www.wordfence.com\/products\/wordfence-response\/\" target=\"_blank\" rel=\"noopener noreferrer\">Wordfence Response<\/a><\/li><\/ul>\n            <\/div>","protected":false},"excerpt":{"rendered":"<p>WPvivid Backup anv\u00e4nds p\u00e5 \u00f6ver 800\u202f000 sajter \u2013 och en nyuppt\u00e4ckt s\u00e5rbarhet kan ge oautentiserade angripare m\u00f6jlighet att ladda upp valfria filer och k\u00f6ra kod p\u00e5 servern. Den kritiska detaljen: risken \u00e4r i praktiken kopplad till om du har aktiverat en tidsbegr\u00e4nsad nyckel f\u00f6r att ta emot backups fr\u00e5n en annan sajt.<\/p>\n","protected":false},"author":62,"featured_media":223,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[60,119,11,10,120],"class_list":["post-224","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sakerhet","tag-cve","tag-plugin-sarbarheter","tag-sakerhet","tag-wordpress","tag-wpvivid-backup"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/sv\/wp-json\/wp\/v2\/posts\/224","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helloblog.io\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helloblog.io\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helloblog.io\/sv\/wp-json\/wp\/v2\/users\/62"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/sv\/wp-json\/wp\/v2\/comments?post=224"}],"version-history":[{"count":0,"href":"https:\/\/helloblog.io\/sv\/wp-json\/wp\/v2\/posts\/224\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/sv\/wp-json\/wp\/v2\/media\/223"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/sv\/wp-json\/wp\/v2\/media?parent=224"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/sv\/wp-json\/wp\/v2\/categories?post=224"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/sv\/wp-json\/wp\/v2\/tags?post=224"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}