Preskoči na sadržaj
Kritična ranjivost u Elementor Prou omogućuje prijenos PHP datoteka
Marko Kovačić
Marko Kovačić 20. August 2026. · 5 min čitanja

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

  1. U administraciji WordPressa otvorite popis dodataka i provjerite verziju Elementor Proa.
  2. Ako koristite verziju 4.2.1 ili stariju, odmah instalirajte Elementor Pro 4.2.2 ili noviju dostupnu verziju.
  3. Pregledajte javno dostupne stranice s Elementor Pro Form widgetom, posebno obrasce koji imaju neobavezno polje File Upload.
  4. 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.

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.