Kritična ranjivost u Elementor Prou omogućuje prijenos PHP datoteka
Elementor Pro do verzije 4.2.1 sadrži kritičnu ranjivost koja napadaču bez korisničkog računa omogućuje prijenos proizvoljnih datoteka. Napadač može prenijeti izvršnu PHP datoteku, pokrenuti je pozivom preko preglednika te preuzeti potpunu kontrolu nad WordPress stranicom. Ranjivost nosi oznaku CVE-2026-32475 i ocjenu 9,8 od 10 prema sustavu Common Vulnerability Scoring System (CVSS).
Ažurirajte Elementor Pro
Ranjivost zahvaća sve verzije Elementor Proa do uključivo 4.2.1. Verzija 4.2.2 uklanja problem, pa provjerite verziju dodatka i ažurirajte ga što prije.
Koje su stranice izložene
Problem se aktivira samo pod određenim uvjetima, ali su oni česti na produkcijskim stranicama. Izložena je stranica koja ima javno objavljenu stranicu s widgetom Elementor Pro Form i barem jednim poljem File Upload koje nije označeno kao obavezno. Elementor Pro ima procijenjenih šest milijuna aktivnih instalacija, zato provjerite sve javne obrasce koji prihvaćaju datoteke.
Za napad nije potrebna prijava u WordPress niti druga prethodna ovlast. Dovoljno je da napadač može poslati obrazac s pogođenim poljem za prijenos datoteka.
Kako zaobilazi provjeru datoteka
Elementor Pro obrađuje slanje obrasca metodom ajax_send_form() iz klase Ajax_Handler, kojoj mogu pristupiti i neprijavljeni posjetitelji. Dodatak zatim podatke obrasca, uključujući prenesene datoteke, smješta u objekt Form_Record i prosljeđuje ih metodama validation() i process_field() klase ElementorProModulesFormsFieldsUpload.
Greška se nalazi u petlji za provjeru unosa u Upload::validation(). Kad polje nije obavezno, a prvi element polja sadrži PHP-ovu pogrešku UPLOAD_ERR_NO_FILE, metoda poziva return. Time prekida cijelu provjeru preostalih datoteka u istom polju, umjesto da preskoči samo prazni unos.
foreach ( $files[ $id ] as $index => $file ) {
// Polje nije obavezno, a prvi unos nema datoteku.
if ( ! $field['required'] && UPLOAD_ERR_NO_FILE === $file['error'] ) {
return;
}
if ( ! $this->is_file_type_valid( $field, $file ) ) {
$ajax_handler->add_error( $id, 'This file type is not allowed.' );
}
if ( ! $this->is_file_size_valid( $field, $file ) ) {
$ajax_handler->add_error( $id, 'This file exceeds the maximum allowed size.' );
}
}Ispravno bi ponašanje na praznom mjestu bilo continue: ono bi preskočilo taj element i nastavilo provjeravati sljedeći. Zbog return poziva dodatak ne provjerava nastavak ni veličinu nijedne datoteke koja slijedi nakon praznog prvog elementa.
Tijek napada i posljedica
Napadač polje za prijenos šalje kao polje s dva elementa. Prvi ostavlja praznim kako bi izazvao UPLOAD_ERR_NO_FILE i prekinuo provjeru, a u drugi stavlja PHP sadržaj s nastavkom datoteke koji sam odabere. Provjera tako ne primjenjuje is_file_type_valid() niti ograničenje veličine na drugu datoteku.
Metoda process_field() prazni prvi element ipak samo preskače s continue, pa nastavlja obrađivati drugu datoteku koju prethodna metoda nije provjerila. Nastavak čita iz naziva datoteke koji šalje klijent, stvara jedinstveni naziv te datoteku zapisuje na disk.
foreach ( $files[ $id ] as $index => $file ) {
if ( UPLOAD_ERR_NO_FILE === $file['error'] ) {
continue;
}
$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;
$move_new_file = Plugin::instance()->php_api->move_uploaded_file(
$file['tmp_name'],
$new_file
);
}Zbog očuvanog nastavka datoteka s nastavkom .php završava u direktoriju /wp-content/uploads/elementor/forms/. Napadač zatim može zatražiti tu datoteku i pokrenuti preneseni PHP kod na poslužitelju. Takav proizvoljni prijenos datoteka može dovesti do udaljenog izvršavanja koda, postavljanja webshella i potpunog kompromitiranja stranice.
Što trebate učiniti
- U administraciji WordPressa otvorite popis dodataka i provjerite verziju Elementor Proa.
- Ako koristite verziju 4.2.1 ili stariju, odmah instalirajte Elementor Pro 4.2.2 ili noviju dostupnu verziju.
- Pregledajte javno dostupne stranice s Elementor Pro Form widgetom, posebno obrasce koji imaju neobavezno polje File Upload.
- Nakon ažuriranja provjerite radi li slanje obrazaca i prijenos legitimnih datoteka kako očekujete.
Vremenska crta
- 24. srpnja 2026. istraživač je prijavio ranjivost kroz program Wordfencea.
- 27. srpnja 2026. potvrđen je dokaz koncepta i Elementor je dobio prijavu.
- 2. kolovoza 2026. Elementor je potvrdio da je ranjivost prijavio i drugi istraživač te da radi na zakrpi.
- 19. kolovoza 2026. objavljen je Elementor Pro 4.2.2 s potpunom zakrpom.
Nemojte se osloniti na to da obrazac rijetko prima datoteke: uvjet za napad je javno dostupan obrazac s neobaveznim poljem, a ne interakcija administratora. Nadogradite Elementor Pro na 4.2.2 ili noviju verziju i odmah uklonite izloženost ove ranjivosti.
Marko Kovačić
SaaS programer i stručnjak za pretplatničke modele. Zanimaju me Stripe i sustavi za ponavljajuća plaćanja. Održivi poslovni model je ključ.
Svi članci