{"id":140,"date":"2026-01-19T00:00:00","date_gmt":"2026-01-18T23:00:00","guid":{"rendered":"https:\/\/helloblog.io\/et\/acf-extended-oiguste-tostmine-cve-2025-14533\/"},"modified":"2026-01-19T00:00:00","modified_gmt":"2026-01-18T23:00:00","slug":"acf-extended-oiguste-tostmine-cve-2025-14533","status":"publish","type":"post","link":"https:\/\/helloblog.io\/et\/acf-extended-oiguste-tostmine-cve-2025-14533\/","title":{"rendered":"ACF Extended kriitiline \u00f5iguste t\u00f5stmise viga: millal on sinu WordPressi sait p\u00e4riselt ohus ja mida teha"},"content":{"rendered":"\n<p>WordPressi \u00f6kos\u00fcsteemis on <em>vormid, mis loovad kasutajaid<\/em> alati k\u00f5rgema riskiga koht: kui \u00fcks kontroll j\u00e4\u00e4b tegemata, saab r\u00fcndaja panna s\u00fcsteemi tegema midagi, mida ta muidu kunagi teha ei tohiks. Wordfence\u2019i v\u00e4rske teate j\u00e4rgi on Advanced Custom Fields: Extended (tuntud kui <strong>ACF Extended<\/strong>, pluginaslug <code>acf-extended<\/code>) tabanud kriitiline \u00f5iguste t\u00f5stmise (privilege escalation) haavatavus, mis m\u00f5jutab k\u00f5iki versioone kuni <code>0.9.2.1<\/code> (kaasa arvatud) ja on parandatud versioonis <code>0.9.2.2<\/code>.<\/p>\n\n\n\n<p>Oluline n\u00fcanss: see ei ole \u201ciga sait on 100% katki\u201d olukord. Ekspluateeritavus s\u00f5ltub v\u00e4ga konkreetsest konfiguratsioonist \u2013 aga kui see konfiguratsioon on olemas, on m\u00f5ju sisuliselt t\u00e4ielik saidi \u00fclev\u00f5tt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Mis t\u00e4pselt katki on (ja miks see on kriitiline)?<\/h2>\n\n\n\n<p>Haavatavuse m\u00f5te on lihtne: ACF Extendedi vormimoodul suudab luua v\u00f5i uuendada WordPressi kasutajaid (\u201cCreate user\u201d \/ \u201cUpdate user\u201d tegevus). Probleem on selles, et kasutaja rolli (<code>role<\/code>) ei piirata piisavalt rangelt hetkel, kui vormi kaudu kasutaja luuakse.<\/p>\n\n\n\n<p>Wordfence\u2019i anal\u00fc\u00fcsi j\u00e4rgi saab r\u00fcndaja saata registreerimise\/loomise k\u00e4igus rolli v\u00e4\u00e4rtuseks n\u00e4iteks <code>administrator<\/code> ja kui sinu vormi v\u00e4ljade kaardistuses (mapping) on <code>role<\/code> kasutajaandmete hulka seotud, v\u00f5ib WordPress luua kohe admin-\u00f5igustega konto. Kuna r\u00fcndaja ei pea enne autentima, on tegu <strong>unauthenticated privilege escalation<\/strong> juhtumiga.<\/p>\n\n\n\n<div class=\"wp-block-group callout callout-danger is-style-danger 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\">Miks CVSS 9.8?<\/h4>\n\n\n<p>Kui r\u00fcndaja saab ilma sisselogimiseta endale admin-rolli, on j\u00e4rg tavaliselt l\u00fchike: pahatahtlik plugina\/teema ZIP \u00fcleslaadimine, tagaukse lisamine, sisu muutmine, \u00fcmbersuunamised ja sp\u00e4mm. Seep\u00e4rast on CVSS hinnang Wordfence\u2019i andmetel 9.8 (Critical).<\/p>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Keda see reaalselt m\u00f5jutab?<\/h2>\n\n\n\n<p>ACF Extendedit kasutatakse sageli ACF-i lisana (addon), mis lisab muuhulgas vormihalduri. Wordfence r\u00f5hutab, et kriitiline m\u00f5ju puudutab eelk\u00f5ige neid saite, kus on tehtud j\u00e4rgmine kombinatsioon:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>Saidil on ACF Extended (<= 0.9.2.1).<\/li>\n\n\n<li>Oled loonud ACF Extendedi vormi, mille tegevus on \u201cCreate user\u201d v\u00f5i \u201cUpdate user\u201d.<\/li>\n\n\n<li>Vormi v\u00e4ljade kaardistuses on <code>role<\/code> seotud m\u00f5ne vormiv\u00e4ljaga (ehk roll tuleb kasutaja sisendist \/ vormi payload\u2019ist).<\/li>\n\n<\/ol>\n\n\n\n<p>Kui ACF Extended on olemas, aga sa ei kasuta selle kaudu kasutajate loomist\/uuendamist (v\u00f5i pole <code>role<\/code> \u00fcldse vormiga seotud), siis r\u00fcndevektorit ei pruugi olla. Samas praktikas on m\u00f5istlik eeldada, et vormikonfiguratsioonid v\u00f5ivad aja jooksul muutuda ja \u201ckeegi tegi kunagi \u00fche admin-vormi testimiseks\u201d on t\u00e4iesti tavaline stsenaarium.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Haavatavuse tehniline p\u00f5hjus (arendaja vaatenurk)<\/h2>\n\n\n\n<p>Wordfence\u2019i tehnilises kirjelduse j\u00e4rgi kasutatakse ACF Extendedis kasutaja loomisel\/uuendamisel funktsiooni, mis kogub vormi \u201csave\u201d andmed kokku ja annab need edasi <code>wp_insert_user()<\/code> kutsele.<\/p>\n\n\n\n<p>Kriitiline koht on rolli k\u00e4sitlemine: kuigi ACF Extendedi v\u00e4ljade konfiguratsioonis on UI tasemel olemas rolli piirang (\u201cAllow User Role\u201d), ei rakendunud haavatavas versioonis sama piirang vormi submit\u2019i ajal. Seega sai r\u00fcndaja sisestada rolliks suvalise v\u00e4\u00e4rtuse, sh <code>administrator<\/code>.<\/p>\n\n\n\n<div class=\"wp-block-group callout callout-info is-style-info 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\">Hea turvapraktika meeldetuletus<\/h4>\n\n\n<p>UI piirangud (valikud rippmen\u00fc\u00fcs, v\u00e4ljade peitmine jms) ei ole turvameede. Turvalisus peab olema serveripoolses valideerimises \u2013 eriti siis, kui andmeid kasutatakse rolli, \u00f5iguste v\u00f5i muude autoriseerimisotsuste tegemiseks.<\/p>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Mida teha kohe: kontrollnimekiri saidihaldurile<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>Uuenda ACF Extended v\u00e4hemalt versioonile <code>0.9.2.2<\/code> (Wordfence\u2019i teate j\u00e4rgi on see parandatud v\u00e4ljalase).<\/li>\n\n\n<li>Kaardista \u00fcle k\u00f5ik ACF Extendedi vormid, millel on \u201cCreate user\u201d v\u00f5i \u201cUpdate user\u201d action.<\/li>\n\n\n<li>Kontrolli, kas \u00fcksk\u00f5ik millises sellises vormis on <code>role<\/code> \u00fcldse kaardistatud sisendv\u00e4lja k\u00fclge. Kui on, eemalda see v\u00f5i piiritle serveripoolselt lubatud rollid.<\/li>\n\n\n<li>Kui sul on p\u00e4riselt vaja rolli valida (nt \u201csubscriber\u201d vs \u201ccustomer\u201d), siis k\u00e4sitle seda whitelist\u2019iga ja \u00e4ra lase kunagi kliendilt admin-rolli tulla.<\/li>\n\n\n<li>Vaata kasutajate nimekiri \u00fcle: otsi hiljutisi ootamatuid admin-kontosid (eriti kui saidil on avatud registreerimine v\u00f5i avalikud vormid).<\/li>\n\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Wordfence\u2019i kaitse: ajajoon ja mida see t\u00e4hendab<\/h2>\n\n\n\n<p>Wordfence\u2019i teate j\u00e4rgi said Wordfence Premium, Care ja Response kasutajad vastava tulem\u00fc\u00fcri (firewall) reegli juba 11. detsembril 2025. Wordfence Free kasutajatele j\u00f5udis sama kaitse 30 p\u00e4eva hiljem, 10. jaanuaril 2026.<\/p>\n\n\n\n<p>See on kasulik lisakaitse, aga plugina uuendamist see ei asenda: kui haavatav komponent on saidil alles ja r\u00fcndaja leiab teise tee (v\u00f5i reegel ei kata k\u00f5iki variatsioone), j\u00e4\u00e4b risk alles.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Avalikustamise ja paranduse ajajoon (Wordfence\u2019i info p\u00f5hjal)<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>10.12.2025 \u2013 haavatavus raporteeriti Wordfence Bug Bounty programmi kaudu.<\/li>\n\n\n<li>11.12.2025 \u2013 Wordfence valideeris ja kinnitas PoC exploiti; Premium\/Care\/Response said firewall reegli.<\/li>\n\n\n<li>11.12.2025 \u2013 detailid edastati tootjale Wordfence Vulnerability Management Portal\u2019i kaudu.<\/li>\n\n\n<li>14.12.2025 \u2013 tootja avaldas paranduse ja andis v\u00e4lja ACF Extendedi versiooni <code>0.9.2.2<\/code>.<\/li>\n\n\n<li>10.01.2026 \u2013 Wordfence Free sai firewall kaitse.<\/li>\n\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Kokkuv\u00f5te<\/h2>\n\n\n\n<p>CVE-2025-14533 on hea n\u00e4ide sellest, kuidas \u00fcks \u201cv\u00e4ike\u201d autoriseerimisloogika puuduj\u00e4\u00e4k v\u00f5ib muutuda admin-\u00f5iguste saamiseks ilma autentimiseta \u2013 eeldusel, et saidil on kasutajate loomise\/uuendamise vorm ning roll on vormiv\u00e4ljaga seotud. Parandus on olemas ACF Extendedi versioonis <code>0.9.2.2<\/code>, seega k\u00f5ige m\u00f5istlikum tegevus on uuendada ning vaadata \u00fcle k\u00f5ik vormid, mis tegelevad kasutajate haldusega.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"1600\" src=\"https:\/\/helloblog.io\/app\/uploads\/sites\/18\/2026\/01\/acfe-1-scaled-1.png\" alt=\"ACF Extendedi rolliv\u00e4lja seadistus, kus on n\u00e4ha rolli piirangute valikud\" class=\"wp-image-138\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/18\/2026\/01\/acfe-1-scaled-1.png 2560w, https:\/\/helloblog.io\/app\/uploads\/sites\/18\/2026\/01\/acfe-1-scaled-1-300x188.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/18\/2026\/01\/acfe-1-scaled-1-1024x640.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/18\/2026\/01\/acfe-1-scaled-1-768x480.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/18\/2026\/01\/acfe-1-scaled-1-1536x960.png 1536w, https:\/\/helloblog.io\/app\/uploads\/sites\/18\/2026\/01\/acfe-1-scaled-1-2048x1280.png 2048w, https:\/\/helloblog.io\/app\/uploads\/sites\/18\/2026\/01\/acfe-1-scaled-1-400x250.png 400w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><figcaption class=\"wp-element-caption\">Rolliv\u00e4lja konfiguratsioonis on olemas piirang (\u201cAllow User Role\u201d), kuid haavatavas versioonis ei rakendunud sama loogika vormi submit\u2019i ajal. \u2014 <em>Forr\u00e1s: Wordfence.com<\/em><\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"1599\" src=\"https:\/\/helloblog.io\/app\/uploads\/sites\/18\/2026\/01\/acfe-2-scaled-1.png\" alt=\"ACF Extendedi vormi seadistus, kus tegevus loob kasutaja ja v\u00e4ljad on tegevusega kaardistatud\" class=\"wp-image-139\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/18\/2026\/01\/acfe-2-scaled-1.png 2560w, https:\/\/helloblog.io\/app\/uploads\/sites\/18\/2026\/01\/acfe-2-scaled-1-300x187.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/18\/2026\/01\/acfe-2-scaled-1-1024x640.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/18\/2026\/01\/acfe-2-scaled-1-768x480.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/18\/2026\/01\/acfe-2-scaled-1-1536x959.png 1536w, https:\/\/helloblog.io\/app\/uploads\/sites\/18\/2026\/01\/acfe-2-scaled-1-2048x1279.png 2048w, https:\/\/helloblog.io\/app\/uploads\/sites\/18\/2026\/01\/acfe-2-scaled-1-400x250.png 400w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><figcaption class=\"wp-element-caption\">Kasutaja loomise tegevuse puhul saab v\u00e4ljad kaardistada; kriitiline on, kas <code>role<\/code> on sisendist v\u00f5etav. \u2014 <em>Forr\u00e1s: Wordfence.com<\/em><\/figcaption><\/figure>\n\n\n<div class=\"references-section\">\n                <h2>Viited \/ Allikad<\/h2>\n                <ul class=\"references-list\"><li><a href=\"https:\/\/www.wordfence.com\/blog\/2026\/01\/100000-wordpress-sites-affected-by-privilege-escalation-vulnerability-in-advanced-custom-fields-extended-wordpress-plugin\/\" target=\"_blank\" rel=\"noopener noreferrer\">100,000 WordPress Sites Affected by Privilege Escalation Vulnerability in Advanced Custom Fields: Extended WordPress Plugin<\/a><\/li><li><a href=\"https:\/\/www.wordfence.com\/threat-intel\/vulnerabilities\/wordpress-plugins\/acf-extended\/advanced-custom-fields-extended-0921-unauthenticated-privilege-escalation-via-insert-user-form-action\" target=\"_blank\" rel=\"noopener noreferrer\">Advanced Custom Fields: Extended &lt;= 0.9.2.1 &#8212; Unauthenticated Privilege Escalation via Insert User Form Action<\/a><\/li><li><a href=\"https:\/\/www.cve.org\/CVERecord?id=CVE-2025-14533\" target=\"_blank\" rel=\"noopener noreferrer\">CVE-2025-14533<\/a><\/li><li><a href=\"https:\/\/wordpress.org\/plugins\/acf-extended\/\" target=\"_blank\" rel=\"noopener noreferrer\">Advanced Custom Fields: Extended<\/a><\/li><\/ul>\n            <\/div>","protected":false},"excerpt":{"rendered":"<p>ACF Extendedi (acf-extended) kriitiline haavatavus v\u00f5imaldab teatud seadistuse korral luua endale admin-kasutaja ilma sisse logimata. Kui kasutad ACF Extendedi vorme kasutajate loomiseks v\u00f5i uuendamiseks, tasub see kohe \u00fcle kontrollida.<\/p>\n","protected":false},"author":49,"featured_media":137,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[50],"tags":[75,58,10,13,9],"class_list":["post-140","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-turvalisus","tag-acf-extended","tag-cve","tag-turvalisus","tag-wordfence","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/et\/wp-json\/wp\/v2\/posts\/140","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helloblog.io\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helloblog.io\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helloblog.io\/et\/wp-json\/wp\/v2\/users\/49"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/et\/wp-json\/wp\/v2\/comments?post=140"}],"version-history":[{"count":0,"href":"https:\/\/helloblog.io\/et\/wp-json\/wp\/v2\/posts\/140\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/et\/wp-json\/wp\/v2\/media\/137"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/et\/wp-json\/wp\/v2\/media?parent=140"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/et\/wp-json\/wp\/v2\/categories?post=140"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/et\/wp-json\/wp\/v2\/tags?post=140"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}