{"id":133,"date":"2026-01-19T00:00:00","date_gmt":"2026-01-18T23:00:00","guid":{"rendered":"https:\/\/helloblog.io\/fi\/acf-extended-kriittinen-oikeuksienkorotus-mita-tarkistaa\/"},"modified":"2026-01-19T00:00:00","modified_gmt":"2026-01-18T23:00:00","slug":"acf-extended-kriittinen-oikeuksienkorotus-mita-tarkistaa","status":"publish","type":"post","link":"https:\/\/helloblog.io\/fi\/acf-extended-kriittinen-oikeuksienkorotus-mita-tarkistaa\/","title":{"rendered":"ACF Extended -lis\u00e4osan kriittinen oikeuksienkorotus: mit\u00e4 pit\u00e4\u00e4 tarkistaa ja miten riski rajataan"},"content":{"rendered":"\n<p>WordPress-projekteissa ACF (Advanced Custom Fields) ja sen lis\u00e4osat ovat arkip\u00e4iv\u00e4\u00e4, ja siksi kaikki k\u00e4ytt\u00e4j\u00e4hallintaan liittyv\u00e4t lomakeominaisuudet kannattaa katsoa erityisell\u00e4 varovaisuudella. Wordfencen raportin mukaan <strong>Advanced Custom Fields: Extended (ACF Extended)<\/strong> -lis\u00e4osasta on l\u00f6ytynyt <strong>kriittinen oikeuksienkorotus (Privilege Escalation)<\/strong>, joka koskee versiota <strong>0.9.2.1 ja sit\u00e4 vanhempia<\/strong>.<\/p>\n\n\n\n<p>Haavoittuvuuden idea on ik\u00e4v\u00e4n suoraviivainen: jos sivustolla on rakennettu k\u00e4ytt\u00e4j\u00e4n luontiin\/p\u00e4ivitykseen liittyv\u00e4 lomaketoiminto niin, ett\u00e4 lomakekentt\u00e4 mapataan k\u00e4ytt\u00e4j\u00e4n rooliin, hy\u00f6kk\u00e4\u00e4j\u00e4 voi manipuloida kent\u00e4n arvon ja asettaa rooliksi esimerkiksi <code>administrator<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Mik\u00e4 on vaikutus ja ket\u00e4 t\u00e4m\u00e4 oikeasti koskee?<\/h2>\n\n\n\n<p>Wordfencen mukaan lis\u00e4osalla on yli <strong>100 000 aktiivista asennusta<\/strong>, mutta kriittisyydest\u00e4 huolimatta hyv\u00e4ksik\u00e4ytt\u00f6 edellytt\u00e4\u00e4 tietty\u00e4 toteutusta: sivustolle pit\u00e4\u00e4 olla rakennettu ACF Extendedin lomake, jossa k\u00e4ytet\u00e4\u00e4n <strong>\u201cCreate user\u201d<\/strong>&#8211; tai <strong>\u201cUpdate user\u201d<\/strong> -toimintoa ja jossa <strong>rooli (role)<\/strong> on mukana kentt\u00e4n\u00e4 ja kytkettyn\u00e4 k\u00e4ytt\u00e4j\u00e4tietojen tallennukseen.<\/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\">T\u00e4rke\u00e4 rajaus<\/h4>\n\n\n<p>Haavoittuvuus on Wordfencen kuvauksen mukaan kriittinen erityisesti silloin, kun lomakkeessa on kentt\u00e4, joka mapataan rooliin (role). Jos et k\u00e4yt\u00e4 k\u00e4ytt\u00e4j\u00e4n luontia\/p\u00e4ivityst\u00e4 ACF Extendedin lomakkeilla tai et mapppaa roolia kent\u00e4st\u00e4, hy\u00f6kk\u00e4yspinta on k\u00e4yt\u00e4nn\u00f6ss\u00e4 pienempi.<\/p>\n\n<\/div>\n\n\n\n<p>Jos hy\u00f6kk\u00e4\u00e4j\u00e4 saa yll\u00e4pit\u00e4j\u00e4n oikeudet, seuraukset ovat samat kuin miss\u00e4 tahansa admin-tason kompromississa: lis\u00e4osien ja teemojen asennus (my\u00f6s haitalliset zipit), asetusten muuttaminen, sis\u00e4lt\u00f6jen manipulointi ja esimerkiksi uudelleenohjaukset tai roskasis\u00e4ll\u00f6n injektointi.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Mit\u00e4 haavoittuvuudessa tapahtuu teknisesti?<\/h2>\n\n\n\n<p>ACF Extended on ACF:n p\u00e4\u00e4lle rakennettu lis\u00e4osa, joka tuo mm. lis\u00e4\u00e4 kentti\u00e4 ja <strong>form managerin<\/strong> (lomakehallinnan). Wordfencen teknisess\u00e4 analyysiss\u00e4 ongelma liittyy k\u00e4ytt\u00e4j\u00e4n luonnin\/p\u00e4ivityksen polkuun, jossa lomakkeelta ker\u00e4tyt arvot kootaan argumenteiksi ja v\u00e4litet\u00e4\u00e4n lopulta WordPressin k\u00e4ytt\u00e4j\u00e4nluontiin.<\/p>\n\n\n\n<p>Raportin ydin on, ett\u00e4 <code>insert_user<\/code>-polussa rooli ei ole riitt\u00e4v\u00e4sti rajattu: vaikka kentt\u00e4ryhm\u00e4n puolella olisi ajatus \u201cAllow User Role\u201d -tyyppisest\u00e4 rajoituksesta, lomakkeen kautta tulevaa arvoa ei haavoittuvissa versioissa pakoteta samaan rajoitukseen. T\u00e4ll\u00f6in hy\u00f6kk\u00e4\u00e4j\u00e4 voi l\u00e4hett\u00e4\u00e4 rooliksi <code>administrator<\/code>.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>\/\/ Idea: lomakkeelta ker\u00e4tyt arvot kootaan $args-taulukkoon\n\/\/ ja sy\u00f6tet\u00e4\u00e4n wp_insert_user():lle.\n\/\/ Haavoittuvassa toteutuksessa roolin (role) rajaaminen puuttuu,\n\/\/ jos role on mapattu lomakekent\u00e4st\u00e4.\n\n$user_id = wp_insert_user($args);\n\n\/\/ Jos $args['role'] voidaan sy\u00f6tt\u00e4\u00e4 vapaasti, rooliksi voi p\u00e4\u00e4ty\u00e4 esim. 'administrator'.\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#6A737D\">\/\/ Idea: lomakkeelta ker\u00e4tyt arvot kootaan $args-taulukkoon<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\">\/\/ ja sy\u00f6tet\u00e4\u00e4n wp_insert_user():lle.<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\">\/\/ Haavoittuvassa toteutuksessa roolin (role) rajaaminen puuttuu,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\">\/\/ jos role on mapattu lomakekent\u00e4st\u00e4.<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">$user_id <\/span><span style=\"color:#F97583\">=<\/span><span style=\"color:#B392F0\"> wp_insert_user<\/span><span style=\"color:#E1E4E8\">($args);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\">\/\/ Jos $args['role'] voidaan sy\u00f6tt\u00e4\u00e4 vapaasti, rooliksi voi p\u00e4\u00e4ty\u00e4 esim. 'administrator'.<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Versiot, CVE ja korjaus<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>CVE: <strong>CVE-2025-14533<\/strong><\/li>\n\n\n<li>Vaikuttaa: <strong>Advanced Custom Fields: Extended <= 0.9.2.1<\/strong><\/li>\n\n\n<li>Korjattu versiossa: <strong>0.9.2.2<\/strong><\/li>\n\n\n<li>Vakavuus: <strong>CVSS 9.8 (Critical)<\/strong><\/li>\n\n<\/ul>\n\n\n\n<p>Wordfencen mukaan toimittaja julkaisi korjauksen nopeasti, ja suositus on yksiselitteinen: <strong>p\u00e4ivit\u00e4 ACF Extended v\u00e4hint\u00e4\u00e4n versioon 0.9.2.2<\/strong> mahdollisimman pian.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Nopea tarkistuslista kehitt\u00e4j\u00e4lle \/ yll\u00e4pit\u00e4j\u00e4lle<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>P\u00e4ivit\u00e4 lis\u00e4osa: varmista, ett\u00e4 <strong>ACF Extended on 0.9.2.2 tai uudempi<\/strong>.<\/li>\n\n\n<li>Etsi riskilomakkeet: k\u00e4y l\u00e4pi ACF Extendedin lomakkeet, joissa on \u201cCreate user\u201d tai \u201cUpdate user\u201d -toiminto.<\/li>\n\n\n<li>Tarkista roolin mappaus: varmista, ettei lomakekentt\u00e4\u00e4 ole mapattu suoraan k\u00e4ytt\u00e4j\u00e4n rooliin (role) \u2014 tai ett\u00e4 rooli on tiukasti rajattu turvalliseksi.<\/li>\n\n\n<li>Arvioi tarve: jos k\u00e4ytt\u00e4j\u00e4nluonti ACF Extendedin kautta ei ole v\u00e4ltt\u00e4m\u00e4t\u00f6nt\u00e4, poista toiminto k\u00e4yt\u00f6st\u00e4 tai korvaa se turvallisemmalla toteutuksella.<\/li>\n\n\n<li>Katso lokit: jos sivustolla on ollut julkinen rekister\u00f6itymislomake, tarkista viimeaikaiset uudet k\u00e4ytt\u00e4j\u00e4t ja erityisesti admin-roolit.<\/li>\n\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Wordfence-suojaus ja aikajana (olennaiset kohdat)<\/h2>\n\n\n\n<p>Wordfencen raportissa kuvataan my\u00f6s suojausten jakelua: maksulliset Wordfence-tuotteet saivat palomuuris\u00e4\u00e4nn\u00f6n jo <strong>11.12.2025<\/strong>, ja Wordfence Free sai saman suojauksen my\u00f6hemmin <strong>10.1.2026<\/strong>. Lis\u00e4ksi tieto v\u00e4litettiin toimittajalle Wordfencen Vulnerability Management Portal -kanavan kautta ja korjattu versio julkaistiin <strong>14.12.2025<\/strong>.<\/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\">Miksi t\u00e4m\u00e4 on hyv\u00e4 muistutus ACF-pohjaisista lomakkeista<\/h4>\n\n\n<p>Kun rakennat lomakkeita, jotka kirjoittavat WordPressin k\u00e4ytt\u00e4j\u00e4objektiin, pienikin validoinnin puute muuttuu helposti admin-tason kompromissiksi. Kentt\u00e4ryhm\u00e4n asetukset eiv\u00e4t aina takaa sit\u00e4, ett\u00e4 runtime-polku (lomakkeen submit) noudattaa samoja rajoituksia.<\/p>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Yhteenveto<\/h2>\n\n\n\n<p>ACF Extendedin (<= 0.9.2.1) haavoittuvuus mahdollistaa kirjautumattoman oikeuksienkorotuksen tilanteissa, joissa sivustolla on ACF Extendedin k\u00e4ytt\u00e4j\u00e4nluonti-\/p\u00e4ivityslomake ja rooli mapataan lomakekent\u00e4st\u00e4. <strong>P\u00e4ivit\u00e4 versioon 0.9.2.2<\/strong>, tarkista lomakkeiden roolimappaukset ja k\u00e4y l\u00e4pi k\u00e4ytt\u00e4j\u00e4listaus mahdollisten poikkeamien varalta.<\/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\/15\/2026\/01\/acfe-1-scaled-1.png\" alt=\"ACF Extendedin kentt\u00e4ryhm\u00e4, jossa k\u00e4ytt\u00e4j\u00e4n rooliin liittyv\u00e4 kentt\u00e4 ja rajoitusasetuksia\" class=\"wp-image-131\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/15\/2026\/01\/acfe-1-scaled-1.png 2560w, https:\/\/helloblog.io\/app\/uploads\/sites\/15\/2026\/01\/acfe-1-scaled-1-300x188.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/15\/2026\/01\/acfe-1-scaled-1-1024x640.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/15\/2026\/01\/acfe-1-scaled-1-768x480.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/15\/2026\/01\/acfe-1-scaled-1-1536x960.png 1536w, https:\/\/helloblog.io\/app\/uploads\/sites\/15\/2026\/01\/acfe-1-scaled-1-2048x1280.png 2048w, https:\/\/helloblog.io\/app\/uploads\/sites\/15\/2026\/01\/acfe-1-scaled-1-400x250.png 400w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><figcaption class=\"wp-element-caption\">Kentt\u00e4ryhm\u00e4\u00e4n voidaan lis\u00e4t\u00e4 k\u00e4ytt\u00e4j\u00e4tietoja, mukaan lukien rooli, ja sille on asetuksia kuten \u201cAllow User Role\u201d. \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\/15\/2026\/01\/acfe-2-scaled-1.png\" alt=\"ACF Extendedin lomake, jossa \u201cCreate user\u201d -toiminto ja kenttien mappaus k\u00e4ytt\u00e4j\u00e4tietoihin\" class=\"wp-image-132\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/15\/2026\/01\/acfe-2-scaled-1.png 2560w, https:\/\/helloblog.io\/app\/uploads\/sites\/15\/2026\/01\/acfe-2-scaled-1-300x187.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/15\/2026\/01\/acfe-2-scaled-1-1024x640.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/15\/2026\/01\/acfe-2-scaled-1-768x480.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/15\/2026\/01\/acfe-2-scaled-1-1536x959.png 1536w, https:\/\/helloblog.io\/app\/uploads\/sites\/15\/2026\/01\/acfe-2-scaled-1-2048x1279.png 2048w, https:\/\/helloblog.io\/app\/uploads\/sites\/15\/2026\/01\/acfe-2-scaled-1-400x250.png 400w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><figcaption class=\"wp-element-caption\">Lomakkeessa kent\u00e4t voidaan mapata k\u00e4ytt\u00e4j\u00e4nluontitoiminnon parametreihin. Jos rooli mapataan, se pit\u00e4\u00e4 rajata turvallisesti. \u2014 <em>Forr\u00e1s: Wordfence.com<\/em><\/figcaption><\/figure>\n\n\n<div class=\"references-section\">\n                <h2>Viitteet \/ L\u00e4hteet<\/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 (WordPress.org plugin page)<\/a><\/li><\/ul>\n            <\/div>","protected":false},"excerpt":{"rendered":"<p>ACF Extended -lis\u00e4osasta l\u00f6ytyi kriittinen haavoittuvuus, jonka avulla kirjautumaton hy\u00f6kk\u00e4\u00e4j\u00e4 voi joissain konfiguraatioissa nostaa itsens\u00e4 yll\u00e4pit\u00e4j\u00e4ksi. Olennaisinta on p\u00e4ivitt\u00e4\u00e4 ja varmistaa, ettei lomakkeissa voi sy\u00f6tt\u00e4\u00e4 roolia suoraan.<\/p>\n","protected":false},"author":58,"featured_media":130,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[76,78,77,15,10],"class_list":["post-133","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tietoturva","tag-acf-extended","tag-cve","tag-haavoittuvuus","tag-wordfence","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/posts\/133","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/users\/58"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/comments?post=133"}],"version-history":[{"count":0,"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/posts\/133\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/media\/130"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/media?parent=133"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/categories?post=133"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/tags?post=133"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}