Skip to content
Demo Importer Plus sebezhetőség: site reset és admin jog
Hannah Turing
Hannah Turing 2026. január 15. · 6 perc olvasás
🤯 1

Demo Importer Plus sebezhetőség: site reset és admin jog

Ha használsz demo importert (főleg téma telepítésnél), akkor tudod: ezek a pluginek mélyen belenyúlnak a WordPressbe. Na most pont ezért tud nagyot ütni, amikor egy ilyen eszközben jogosultságkezelési hiba csúszik be. A Demo Importer Plus esetében ez konkrétan azt jelentette, hogy egy támadó site resetet tudott indítani, és a végén még Administrator szerepet is kaphatott.

A sebezhetőség a Wordfence kutatói és bug bounty programja révén került nyilvánosságra, és több mint 10 000 aktív telepítésű pluginről beszélünk. A javítás már kint van: Demo Importer Plus 2.0.9.

Mi volt a gond röviden?

A hibát úgy érdemes fejben elhelyezni, mint egy klasszikus „nonce van, capability check nincs” helyzetet.

  • Érkezett egy AJAX endpoint, ami a plugin műveleteit kezelte.
  • Volt nonce ellenőrzés (ráadásul a gyakori wp_rest nonce), tehát első ránézésre „védettnek” tűnt.
  • Viszont a kritikus műveletnél nem volt rendes jogosultság-ellenőrzés (capability check).
  • Így egy bejelentkezett felhasználó (akár Subscriber szinten) olyan funkciót is meghívhatott, amihez csak adminnak lenne szabad hozzáférnie.

Mit tudott csinálni a támadó?

A legsúlyosabb rész a plugin „újratelepítés / reinstall” jellegű funkciója volt (a forrásban do-reinstall néven szerepel). Ezzel a támadó:

  1. El tudta indítani a teljes site resetet.
  2. A reset során a folyamat kidobálta az adatbázistáblákat (a leírás szerint mindent, kivéve users és usermeta).
  3. Ezután lefutott egy wp_install() jellegű újratelepítési lépés.
  4. A végén a támadó felhasználója Administrator szerepet kapott.
Miért ennyire para egy admin jogszerzés?
Ha valaki admin a WordPressben, onnantól gyakorlatilag mindent visz: plugin/theme feltöltés (akár backdooros ZIP), tartalmak módosítása, átirányítások, új adminok létrehozása, API kulcsok/integációk ellopása, stb.

A technikai lényeg: AJAX endpoint és hiányzó authorization

A plugin az admin-ajax.php-n keresztül regisztrált egy demo_importer_plus nevű AJAX actiont, és ami külön figyelemre méltó: nemcsak bejelentkezett, hanem nopriv (nem bejelentkezett) útvonalra is fel volt véve a handler. A handler egy központi handle_request() metódus volt, ami a demo_action paraméter alapján kapcsolgatott funkciók között.

/wp-content/plugins/demo-importer-plus/…/Ajax.php
add_action( 'wp_ajax_demo_importer_plus', array( KraftPluginsDemoImporterPlusAjax::class, 'handle_request' ) );
add_action( 'wp_ajax_nopriv_demo_importer_plus', array( KraftPluginsDemoImporterPlusAjax::class, 'handle_request' ) );

// ... később a handle_request() a demo_action alapján switch-el, és volt benne do-reinstall is.

A nonce ellenőrzés önmagában nem elég, ha a nonce könnyen megszerezhető alacsony jogosultságú felhasználóként is. Ráadásul itt a plugin a gyakran használt wp_rest nonce-t használta, ami sok helyen előkerül a frontendben is.

A „wp_rest nonce” csavar
A Wordfence megjegyzése szerint ha más plugin vagy téma valamilyen okból a wp_rest nonce-t kiteszi olyan helyre, ahol azt nem bejelentkezett látogató is meg tudja szerezni, akkor a sebezhetőség elméletben akár autentikáció nélkül is kihasználható lehetett – különösen azért, mert a wp_ajax_nopriv_... endpoint is regisztrálva volt.

Érintett verziók, CVE, súlyosság

  • Plugin: Demo Importer Plus (demo-importer-plus)
  • Érintett: 2.0.8 és korábbi
  • Javított: 2.0.9
  • CVE: CVE-2025-14364
  • Súlyosság: CVSS 8.8 (High)

Hogyan javították?

A fix a klasszikus és helyes irány: a kritikus do-reinstall ágnál bekerült egy capability check. Magyarul: hiába van nonce-od, attól még nem csinálhatsz admin műveletet, ha nincs hozzá jogod.

/wp-content/plugins/demo-importer-plus/…/Ajax.php
case 'do-reinstall':
    if ( ! current_user_can( 'manage_options' ) ) {
        $data = new WP_Error( 'permission_denied', 'You do not have permission to reset site.', 403 );
    } else {
        $data = static::do_reinstall( $request );
    }
    break;

A manage_options tipikusan admin capability, így ezzel a reinstall funkció gyakorlatilag adminhoz lett kötve, ami ennél a műveletnél teljesen indokolt.

Mit csinálj, ha van ilyen plugin az oldaladon? (gyors checklist)

  1. Frissítsd a Demo Importer Plus-t 2.0.9-re vagy újabbra.
  2. Ha nem használod aktívan demo importálásra: gondold át, kell-e egyáltalán éles oldalon. Sokszor telepítés után ott marad feleslegesen.
  3. Nézd át, van-e gyanús admin user vagy friss plugin/theme telepítés a közelmúltban.
  4. Ha van Wordfence-ed: ellenőrizd, hogy a firewall szabályok naprakészek (Premium/Care/Response korábban kapta meg, Free késleltetéssel).
  5. Általános higiénia: minimalizáld a Subscriber felhasználók számát, és ahol lehet, zárd le a regisztrációt, ha nincs rá szükség.

Idővonal (mi mikor történt)

  • 2025-11-27: bejelentés a Wordfence Bug Bounty Programon keresztül
  • 2025-12-09: validálás + részletek továbbítása a fejlesztőnek (Vulnerability Management Portalon)
  • 2025-12-10: Wordfence Premium/Care/Response kapott védelmi szabályt
  • 2025-12-16: megjelent a javított plugin verzió (2.0.9)
  • 2026-01-09: Wordfence Free is megkapta ugyanazt a firewall védelmet

Tanulság fejlesztői szemmel

WordPress plugin fejlesztésnél ez az eset tankönyvi példa arra, hogy:

  • A nonce nem authorization. A nonce maximum azt segíti, hogy „a kérés valahonnan a site-odról jött”, de nem azt, hogy „a user jogosult rá”.
  • Minden kritikus műveletnél legyen current_user_can() ellenőrzés (és lehetőleg a legszűkebb capability).
  • Ha van wp_ajax_nopriv_... regisztráció, akkor különösen szigorúan gondold át, hogy az adott action biztosan publikus-e.
  • Demo import / reset / reinstall funkciók éles oldalon különösen veszélyesek: ezeknél inkább legyen túl szigorú a védelem, mint „kényelmes”.

Összefoglaló

A Demo Importer Plus 2.0.8 és korábbi verzióiban egy hiányzó jogosultság-ellenőrzés miatt bejelentkezett (Subscriber+) támadó el tudott indítani egy olyan AJAX műveletet, ami lenullázta a site-ot, majd a támadót Administrator szerepbe emelte. A javítás a 2.0.9-es verzióban érkezett meg, érdemes azonnal frissíteni, és átnézni, nem maradt-e ott feleslegesen a plugin éles környezetben.

Csatlakozz a HelloWP közösséghez!

Beszélgess velünk WordPress-ről, webfejlesztésről és ossz meg tapasztalatokat más fejlesztőkkel.

- tag
- online
Csatlakozás