Preskoči na sadržaj
Kritična eskalacija privilegija u ACF Extended: kada registracijska forma može postati admin backdoor
Marko Kovačić
Marko Kovačić 19. January 2026. · 5 min čitanja

Kritična eskalacija privilegija u ACF Extended: kada registracijska forma može postati admin backdoor

WordPress sigurnosni incidenti često izgledaju isto: jedna „mala” postavka u pluginu + javno dostupna forma = potpuna kompromitacija weba. Upravo takav obrazac opisuje ranjivost u pluginu Advanced Custom Fields: Extended (ACF Extended), dodatku za ACF koji donosi naprednija polja i form manager (upravljanje formama i akcijama nakon slanja).

Prema analizi Wordfencea, ranjivost omogućuje neautentificiranom napadaču (dakle bez računa i bez prijave) da kroz formu za kreiranje korisnika zada ulogu administrator i time dobije administratorski pristup. Pogođeno je do 0.9.2.1, a zakrpa je objavljena u 0.9.2.2.

Što je ranjivo i kada je stvarno opasno

Ovo nije „svaki site je odmah probijen” situacija. Kritični dio je uvjet za eksploataciju: ranjivost se može iskoristiti samo ako je polje role mapirano na custom field u formi (odnosno ako u ACF Extended formi postoji odabir uloge i ta vrijednost završava u parametrima za kreiranje korisnika).

Drugim riječima, rizik je najveći za siteove koji su preko ACF Extended napravili vlastiti registration flow (npr. „prijavi se kao član/partner”) i pritom izložili odabir role ili su nesvjesno dopustili da se role pošalje u requestu.

Brza provjera rizika

Ako koristiš ACF Extended Form s akcijom „Create user” ili „Update user” i u mapiranju polja imaš nešto što utječe na role, tretiraj to kao hitno i ažuriraj plugin na 0.9.2.2.

Kako dolazi do eskalacije privilegija

ACF Extended ima mogućnost da kroz formu kreira korisnika (akcija tipa insert_user). U toj akciji plugin skuplja vrijednosti iz form fields i gradi $args koji zatim završava u wp_insert_user($args).

Problem je u tome što (u ranjivim verzijama) ne postoji stvarno ograničenje koje bi spriječilo slanje privilegirane uloge, iako UI/field group postavke mogu sugerirati da je uloga ograničena (npr. opcija tipa „Allow User Role”). Ako se role može podmetnuti, napadač može poslati administrator i dobiti admin račun.

<?php
// Konceptualni prikaz onoga što je u analizi problematično:
// forma -> mapiranje polja -> $args -> wp_insert_user($args)

$args = [];

// ... skupljanje vrijednosti iz forme u $args ...
// (ako 'role' završi u $args bez server-side ograničenja)

$user_id = wp_insert_user($args);
?>

Ovo je klasičan primjer gdje se previše vjeruje klijentu (formi) ili konfiguraciji u administraciji, a premalo se radi server-side validation (provjera na serveru) prije nego što se pozove WordPress API za kreiranje korisnika.

Zašto je ovo „Critical” (CVSS 9.8)

Jednom kad napadač dobije administratorsku ulogu, praktički ima punu kontrolu nad WordPress instalacijom: može instalirati pluginove/teme, uploadati ZIP s backdoorom, mijenjati sadržaj, ubaciti redirecte, spam ili JavaScript injekcije, te si otvoriti trajni pristup.

Zato ovakve ranjivosti gotovo uvijek treba tretirati kao potencijalnu potpunu kompromitaciju, čak i kad je uvjet eksploatacije specifičan.

Koje su verzije pogođene i što je zakrpano

  • Plugin: Advanced Custom Fields: Extended (slug: acf-extended)
  • Pogođene verzije: sve do i uključujući 0.9.2.1
  • Zakrpljena verzija: 0.9.2.2
  • CVE: CVE-2025-14533
  • Ocjena: CVSS 9.8 (Critical)

Kako se zaštititi (praktično i bez filozofije)

  1. Ažuriraj ACF Extended na 0.9.2.2 ili novije (što prije).
  2. Ako koristiš ACF Extended forme za registraciju: provjeri imaš li polje koje mapira role i ukloni ga iz javno dostupnih formi (ili ga barem privremeno isključi).
  3. Provjeri postoje li neočekivani admin korisnici kreirani u periodu izloženosti (Users → All Users) i resetiraj lozinke/ključeve gdje ima smisla.
  4. Ako koristiš Wordfence: imaj na umu da su Premium/Care/Response korisnici dobili WAF pravilo 11.12.2025., a Free korisnici 10.01.2026. (prema objavi).

Za developere: lekcija za custom forme

Ako radiš vlastiti registration flow (bilo kroz ACF Extended, bilo kroz custom endpoint), nikad se ne oslanjaj na UI ograničenja polja. Uloge i capability-ji moraju biti ograničeni na serveru, prije wp_insert_user() ili wp_update_user().

Što znamo o prijavi i vremenskoj liniji

Wordfence navodi da je ranjivost prijavljena kroz njihov Bug Bounty Program, validirana i proslijeđena vendor timu kroz Wordfence Vulnerability Management Portal. Zakrpa je objavljena brzo, 14.12.2025., a firewall zaštita je isporučena korisnicima Wordfencea prema njihovom modelu (Premium ranije, Free s odgodom).

  • 10.12.2025. — zaprimljena prijava ranjivosti
  • 11.12.2025. — potvrđen proof-of-concept i isporučeno WAF pravilo za Wordfence Premium/Care/Response
  • 11.12.2025. — detalji poslani vendor timu
  • 14.12.2025. — objavljena zakrpa (ACF Extended 0.9.2.2)
  • 10.01.2026. — WAF pravilo isporučeno Wordfence Free korisnicima

Zaključak

ACF Extended je popularan dodatak uz ACF, a ova ranjivost je dobar podsjetnik koliko su osjetljive forme koje kreiraju ili ažuriraju korisnike. Ako ti je na siteu igdje izložen „Create user”/„Update user” flow i postoji mogućnost da role završi u requestu, rizik je visok.

Minimalna akcija je jasna: ažurirati na 0.9.2.2, te pregledati forme i mapiranja kako role ne bi postao najkraći put do administratorskih privilegija.

ACF Extended postavke polja za korisničku ulogu s opcijom ograničenja (Allow User Role)
U ACF Extended moguće je ograničiti uloge kroz postavke polja, ali ranjiva verzija nije primjenjivala očekivana ograničenja na razini forme. — Forrás: Wordfence.com
ACF Extended forma s akcijom za kreiranje korisnika i mapiranjem polja
Problem nastaje kad forma mapira polje uloge (role) na akciju kreiranja korisnika bez server-side restrikcija. — Forrás: Wordfence.com

Pridružite se HelloWP zajednici!

Razgovarajte s nama o WordPressu, web razvoju i podijelite iskustva s drugim developerima.

- članovi
- online
Pridruži se

Koristimo kolačiće kako bismo poboljšali vaše iskustvo. Nastavkom se slažete s našom Politikom kolačića.