Ugrás a tartalomra
Kritikus, hitelesítés nélküli fájlfeltöltési hibát javított az Elementor Pro
Nagy Eszter
Nagy Eszter 2026. augusztus 20. · 7 perc olvasás

Kritikus, hitelesítés nélküli fájlfeltöltési hibát javított az Elementor Pro

Kritikus sérülékenységet javítottak az Elementor Pro WordPress-bővítményben. A hiba lehetővé tette, hogy egy hitelesítés nélküli támadó tetszőleges fájlt – akár futtatható PHP-kódot – töltsön fel egy érintett oldalra, majd azt a szerveren lefuttassa.

Azonnali teendő

Frissítsd az Elementor Pro-t legalább a 4.2.2-es verzióra. Minden 4.2.1-es vagy korábbi kiadás érintett.

A hiba CVSS-pontszáma 9,8/10, azonosítója CVE-2026-32475. A Wordfence Bug Bounty Programján keresztül jelentett sérülékenység a becslések szerint mintegy hatmillió aktív telepítést használó Elementor Pro-t érinti.

Mikor támadható az oldal?

A sikeres kihasználáshoz nem kell WordPress-fiók vagy más hitelesítés. A támadónak csak egy olyan publikus oldalra van szüksége, amelyen Elementor Pro Form widget működik, és abban legalább egy olyan File Upload mező található, amelyet nem jelöltek kötelezőként.

Ez a feltétel fontos: önmagában az Elementor Pro telepítése nem nyitja meg automatikusan a támadási felületet. Ha azonban a látogatók számára elérhető űrlapon opcionális fájlfeltöltés van, a javítás előtti verziókban a feltöltött fájl típusának és kiterjesztésének ellenőrzése megkerülhető volt.

A hiba oka: egy korai return leállította az ellenőrzést

Az Elementor Pro a vendégek által is elérhető Ajax_Handler osztály ajax_send_form() függvényével dolgozza fel az űrlapbeküldéseket. A beküldött adatokat és feltöltött fájlokat egy Form_Record objektumba csomagolja, majd a File Upload mezőknél az ElementorProModulesFormsFieldsUpload osztály validation() és process_field() metódusait hívja.

A validation() először a megengedett fájldarabszámot ellenőrzi, majd végigmegy a feltöltési mező fájljain. Opcionális mezőnél azonban az üres feltöltési helyet jelző UPLOAD_ERR_NO_FILE hibára return utasítással reagált. Emiatt nemcsak az üres elemet ugrotta át, hanem az adott mező összes további fájljának ellenőrzését is leállította.

foreach ( $files[ $id ] as $index => $file ) {
    // Nem kötelező mezőnél nincs feltöltött fájl.
    if ( ! $field['required'] && UPLOAD_ERR_NO_FILE === $file['error'] ) {
        return; // Hibás: az egész validációból kilép.
    }

    if ( $field['required'] && UPLOAD_ERR_NO_FILE === $file['error'] ) {
        $ajax_handler->add_error( $id, $upload_errors[ $file['error'] ] );
        return;
    }

    if ( $file['error'] > UPLOAD_ERR_OK ) {
        $ajax_handler->add_error( $id, $upload_errors[ $file['error'] ] );
        return;
    }

    if ( ! $this->is_file_type_valid( $field, $file ) ) {
        $ajax_handler->add_error( $id, esc_html__( 'This file type is not allowed.', 'elementor-pro' ) );
    }

    if ( ! $this->is_file_size_valid( $field, $file ) ) {
        $ajax_handler->add_error( $id, esc_html__( 'This file exceeds the maximum allowed size.', 'elementor-pro' ) );
    }
}

A helyes működéshez itt continue kellett volna: az csak az aktuális, üres tömbbejegyzést hagyja ki, és tovább lép a következőre. A hibás return miatt viszont az is_file_type_valid() kiterjesztés- és fájltípus-ellenőrzése, valamint a méretkorlát vizsgálata már nem futott le a mezőben szereplő további fájlokra.

Így jutott át a rosszindulatú fájl

A támadó két elemként küldhette a feltöltési mezőt. Az első elem üres volt, ezért UPLOAD_ERR_NO_FILE állapotot kapott és kiváltotta a korai kilépést. A második elem tartalmazhatta a rosszindulatú fájlt tetszőlegesen választott kiterjesztéssel, amely így kimaradt az ellenőrzésekből.

A feldolgozó process_field() metódus ezzel szemben helyesen continue utasítást használ az üres első elemnél. Ezért átugorja azt, de a második, már validálatlan fájlt továbbra is feldolgozza. A fájlnév kiterjesztését közvetlenül a kliens által küldött névből olvassa ki, majd egy egyedi névhez fűzve menti el.

foreach ( $files[ $id ] as $index => $file ) {
    if ( UPLOAD_ERR_NO_FILE === $file['error'] ) {
        continue; // Az üres elem kimarad, a következő feldolgozódik.
    }

    $uploads_dir = $this->get_ensure_upload_dir();
    $file_extension = pathinfo( $file['name'], PATHINFO_EXTENSION );
    $filename = uniqid() . '.' . $file_extension;
    $filename = wp_unique_filename( $uploads_dir, $filename );
    $new_file = trailingslashit( $uploads_dir ) . $filename;

    if ( is_dir( $uploads_dir ) && is_writable( $uploads_dir ) ) {
        $move_new_file = Plugin::instance()->php_api->move_uploaded_file(
            $file['tmp_name'],
            $new_file
        );

        if ( false !== $move_new_file ) {
            @chmod( $new_file, 0644 );
        }
    }
}

Mivel a kód megőrzi a támadó által megadott kiterjesztést, egy .php fájl közvetlenül a /wp-content/uploads/elementor/forms/ könyvtárba kerülhetett. A támadó ezt követően HTTP-n kérhette le a fájlt, ami a PHP-payload futtatását, távoli kódfuttatást és végső soron a teljes webhely átvételét tehette lehetővé. Tetszőleges fájlfeltöltési hibáknál webshell és más technikák is vezethetnek teljes kompromittálódáshoz.

Érintett és javított verziók

  • Érintett bővítmény: Elementor Website Builder Pro (elementor-pro)
  • Érintett verziók: 4.2.1 és minden korábbi verzió
  • Javított verzió: 4.2.2
  • Sérülékenység: hitelesítés nélküli, korlátozatlan fájltípus-feltöltés
  • Feltétel: publikus Elementor Pro Form widget legalább egy nem kötelező File Upload mezővel
  • Kockázat: távoli kódfuttatás és teljes webhelyátvétel

A javítás idővonala

  1. 2026. július 24. – Bejelentették a hitelesítés nélküli, tetszőleges fájlfeltöltést lehetővé tevő hibát.
  2. 2026. július 27. – Ellenőrizték a bejelentést, megerősítették a proof-of-concept működését, és értesítették az Elementort.
  3. 2026. augusztus 2. – Az Elementor jelezte, hogy egy másik kutató is jelentette a hibát, és dolgoznak a javításon.
  4. 2026. augusztus 19. – Megjelent a teljes javítást tartalmazó Elementor Pro 4.2.2.

Mit ellenőrizz most?

Nézd meg minden WordPress-oldalon az Elementor Pro aktuális verzióját, és telepítsd legalább a 4.2.2-es kiadást. Különösen sürgős a frissítés, ha publikus kapcsolatfelvételi, jelentkezési vagy ügyfélbeküldő űrlapokon opcionális fájlfeltöltést használsz.

A frissítés után mérd fel az Elementor űrlapok feltöltési mezőit és a /wp-content/uploads/elementor/forms/ könyvtár tartalmát is. Ha gyanús vagy indokolatlan PHP-fájlt találsz, kezeld azt lehetséges kompromittálódás jeleként, és vizsgáld át a teljes oldalt.

Nagy Eszter

Nagy Eszter

Frontend fejlesztő, a CSS és a reszponzív design megszállottja. Hiszek abban, hogy a szép kód szép weboldalakat eredményez. Tailwind CSS evangelista.

Összes bejegyzés

Csatlakozz a HelloWP közösséghez!

Beszélgess velünk a WordPressről, a webfejlesztésről, és oszd meg a tapasztalataidat más fejlesztőkkel.

- tag
- online
Csatlakozás

Sütiket használunk az élményed javítása érdekében. A folytatással elfogadod a Sütikre vonatkozó irányelveinket.