Preskoči na vsebino
Kritična ranljivost v Elementor Pro omogoča neoverjen nalaganje PHP datotek
Luka Horvat
Luka Horvat 20. August 2026 · 5 min branja

Kritična ranljivost v Elementor Pro omogoča neoverjen nalaganje PHP datotek

V Elementor Pro so odkrili kritično ranljivost, ki neoverjenemu napadalcu omogoča nalaganje poljubnih datotek, tudi izvršljivih datotek PHP. Uspešen napad lahko privede do oddaljenega izvajanja kode in popolnega prevzema spletnega mesta. Prizadete so vse različice Elementor Pro do vključno 4.2.1, popravek pa prinaša različica 4.2.2.

Takoj posodobi Elementor Pro

Ranljivost nosi oznako CVE-2026-32475 in oceno CVSS 9,8 od 10. Napadalec ne potrebuje uporabniškega računa, vendar mora spletno mesto objavljati obrazec Elementor Pro z vsaj enim neobveznim poljem File Upload.

Koga ranljivost zadeva

Elementor Pro je premium vtičnik za WordPress, ki med drugim razširi gradnik obrazcev Form in omogoča polja za nalaganje datotek. Ocenjeno število aktivnih namestitev dosega 6.000.000. Težava vpliva na Elementor Website Builder Pro v različicah do 4.2.1.

  • CVE: CVE-2026-32475
  • Ocena CVSS: 9,8, kritično
  • Prizadete različice: Elementor Pro 4.2.1 in starejše
  • Popravljena različica: Elementor Pro 4.2.2
  • Pogoj za napad: javno objavljena stran z gradnikom Elementor Pro Form, ki vsebuje vsaj eno polje File Upload brez oznake required
  • Potrebne pravice napadalca: nobene; napad lahko izvede neoverjen obiskovalec

Kaj gre narobe pri preverjanju datotek

Obrazec sprejme podatke prek funkcije ajax_send_form() v razredu Ajax_Handler, do katere lahko dostopajo tudi neoverjeni obiskovalci. Vtičnik podatke obrazca in naložene datoteke zapakira v objekt Form_Record, nato pa za polja File Upload pokliče metodi validation() in process_field() iz razreda ElementorProModulesFormsFieldsUpload.

Napaka je v validacijski zanki metode validation(). Ko polje ni obvezno in prva postavka v polju predstavlja prazno režo za datoteko z napako UPLOAD_ERR_NO_FILE, koda uporabi return. S tem zapusti celotno metodo in ne preveri nobene naslednje datoteke istega polja.

foreach ( $files[ $id ] as $index => $file ) {
    // Pri neobveznem polju prazna prva reža prekine celo validacijo.
    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.' );
    }
}

Pravilna logika bi na prazni reži uporabila continue, ki bi preskočil le prazni element in nadaljeval preverjanje naslednjega. return pa prepreči preverjanje končnice z is_file_type_valid() in preverjanje velikosti z is_file_size_valid() za vse preostale datoteke v istem polju.

Kako obid pripelje do izvajanja kode

Napadalec lahko polje za nalaganje pošlje kot polje z dvema elementoma. Prvi element ostane prazen in sproži UPLOAD_ERR_NO_FILE, drugi pa vsebuje datoteko z napadalčevo vsebino in izbrano končnico. Ker se validacija konča pri prvem elementu, vtičnik druge datoteke ne preveri.

Metoda process_field() prazni element pravilno preskoči z continue, zato nato obdela drugi element, ki ni prestal preverjanja. Končnico prebere neposredno iz imena datoteke, ki ga pošlje odjemalec, ustvari enolično ime, datoteko premakne v imenik za nalaganje in ji nastavi dovoljenja 0644.

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 = wp_unique_filename( $uploads_dir, uniqid() . '.' . $file_extension );
    $new_file = trailingslashit( $uploads_dir ) . $filename;

    Plugin::instance()->php_api->move_uploaded_file( $file['tmp_name'], $new_file );
    chmod( $new_file, 0644 );
}

V ranljivih različicah se lahko zato datoteka s končnico .php zapiše neposredno v /wp-content/uploads/elementor/forms/. Če strežnik takšno datoteko na zahtevo izvede, napadalec zažene svojo PHP kodo. Poljubno nalaganje datotek lahko napadalci zlorabijo tudi z webshelli in drugimi tehnikami za popoln prevzem spletnega mesta.

Časovnica popravka

  1. 24. julija 2026: prek programa za nagrajevanje ranljivosti so prejeli prijavo neoverjenega nalaganja poljubnih datotek v Elementor Pro.
  2. 27. julija 2026: potrdili so prijavo in proof of concept ter o težavi obvestili razvijalce Elementorja.
  3. 2. avgusta 2026: razvijalci so sporočili, da je isto ranljivost prijavil tudi drug raziskovalec in da pripravljajo popravek.
  4. 19. avgusta 2026: izšla je Elementor Pro 4.2.2, ki ranljivost v celoti odpravi.

Ranljivost je odgovorno prijavil varnostni raziskovalec prek programa Wordfence. Ker je Elementor za isto težavo že prejel neodvisno prijavo, uporablja CVE-2026-32475 oznako CVE, dodeljeno za tisto prijavo.

Kaj naredi zdaj

V nadzorni plošči WordPressa takoj preveri različico Elementor Pro in ga posodobi vsaj na 4.2.2 oziroma na najnovejšo razpoložljivo popravljeno različico. Posebno prednost daj spletnim mestom z javnimi obrazci, kjer uporabniki nalagajo priloge, predvsem kadar polje File Upload ni obvezno.

Po posodobitvi preglej obrazce Elementor Pro, ki sprejemajo datoteke, in preveri, ali so na javnih straneh res potrebni. Nato preglej imenik /wp-content/uploads/elementor/forms/ za nepričakovane datoteke, zlasti datoteke PHP, saj lahko njihova prisotnost kaže na prejšnji poskus zlorabe.

Luka Horvat

Luka Horvat

Razvijalec progresivnih spletnih aplikacij in offline-first pristopa. Service workerji in strategije predpomnjenja so moja specialnost. Splet naj deluje povsod!

Vse objave

Pridružite se skupnosti HelloWP!

Klepetajte z nami o WordPressu, spletnem razvoju in delite izkušnje z drugimi razvijalci.

- člani
- na spletu
Pridruži se

Piškotke uporabljamo za izboljšanje vaše izkušnje. Z nadaljevanjem se strinjate z našo Politiko piškotkov.