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
- 2026. július 24. – Bejelentették a hitelesítés nélküli, tetszőleges fájlfeltöltést lehetővé tevő hibát.
- 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.
- 2026. augusztus 2. – Az Elementor jelezte, hogy egy másik kutató is jelentette a hibát, és dolgoznak a javításon.
- 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
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