Siirry sisältöön
Elementor Pro 4.2.2 korjaa kriittisen tiedostolataushaavoittuvuuden
Mikko Virtanen
Mikko Virtanen 20. August 2026 · 5 min lukuaika

Elementor Pro 4.2.2 korjaa kriittisen tiedostolataushaavoittuvuuden

Elementor Prossa on korjattu kriittinen haavoittuvuus, joka koskee kaikkia versioita 4.2.1:een asti. Haavoittuva sivusto voi hyväksyä kirjautumattoman hyökkääjän lähettämän mielivaltaisen tiedoston, myös suoritettavan PHP-tiedoston. Se voi johtaa etäkoodin suoritukseen palvelimella ja koko WordPress-sivuston haltuunottoon.

Päivitä Elementor Pro heti

Asenna Elementor Pro 4.2.2 tai uudempi versio. Haavoittuvuus on korjattu versiossa 4.2.2, kun taas kaikki versiot 4.2.1:een asti ovat alttiita.

Ketä haavoittuvuus koskee

Haavoittuvuus koskee Elementor Prota, jolla on arviolta 6 000 000 aktiivista asennusta. Sen CVE-tunnus on CVE-2026-32475, ja haavoittuvuuden CVSS-pistemäärä on 9,8/10 eli kriittinen.

Hyökkäys onnistuu vain, jos sivustolla on julkaistu sivu, jossa Elementor Pron Form-widget sisältää vähintään yhden File Upload -kentän. Kenttää ei myöskään saa olla merkitty pakolliseksi. Hyökkääjä ei tarvitse WordPress-tunnusta eikä muuta autentikointia.

Virhe syntyy tiedostotaulukon validoinnissa

Form-widget käsittelee lomakkeen lähetyksen Ajax_Handler-luokan ajax_send_form()-funktion kautta, johon myös kirjautumaton kävijä pääsee käsiksi. Lisäosa pakkaa hyökkääjän lähettämän datan ja ladatut tiedostot Form_Record-objektiin, minkä jälkeen ElementorProModulesFormsFieldsUpload-luokka validoi ja käsittelee File Upload -kentät funktioilla validation() ja process_field().

Virhe on Upload::validation()-funktion silmukassa. Kun valinnainen tiedostokenttä kohtaa ensimmäisenä tyhjän latauspaikan, PHP asettaa sille virhekoodin UPLOAD_ERR_NO_FILE. Koodin pitäisi ohittaa tämä yksittäinen kohta continue-lauseella, mutta se käyttää return-lausetta ja lopettaa siten koko kentän kaikkien jäljellä olevien tiedostojen validoinnin.

foreach ( $files[ $id ] as $index => $file ) {
    // Valinnaisen kentän tyhjä ensimmäinen latauspaikka lopettaa validoinnin.
    if ( ! $field['required'] && UPLOAD_ERR_NO_FILE === $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' )
        );
    }
}

Tämän ennenaikaisen paluun vuoksi lisäosa ei tarkista kentän myöhempien tiedostojen tiedostopäätettä eikä kokoa. Hyökkääjä voi lähettää kentän taulukkona, jossa ensimmäinen osa on tyhjä ja toinen sisältää PHP-payloadin hyökkääjän valitsemalla tiedostopäätteellä. Tyhjä ensimmäinen osa ohittaa koko validoinnin.

Käsittely tallentaa validoimattoman PHP-tiedoston

Vaikka validation() lopettaa työnsä liian aikaisin, process_field() käyttää tyhjälle latauspaikalle oikein continue-lausetta. Se siis ohittaa tyhjän ensimmäisen osan, mutta käsittelee silti toisen, validoimatta jääneen tiedoston. Funktio ottaa tiedostopäätteen suoraan asiakkaan toimittamasta tiedostonimestä, muodostaa yksilöllisen nimen ja kirjoittaa tiedoston levylle.

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
    );
}

Näin esimerkiksi .php-päätteinen tiedosto päätyy /wp-content/uploads/elementor/forms/-hakemistoon. Hyökkääjä voi tämän jälkeen pyytää ladatun tiedoston URL-osoitetta ja suorittaa sen sisältämän PHP-koodin palvelimella. Mielivaltainen tiedostolataus voi mahdollistaa esimerkiksi webshellin asentamisen ja sivuston täydellisen kompromettoinnin.

Toimi näin

  1. Tarkista, onko sivustollasi Elementor Pro käytössä.
  2. Päivitä lisäosa välittömästi versioon 4.2.2 tai sitä uudempaan versioon.
  3. Varmista päivityksen jälkeen, ettei käytössä ole versio 4.2.1 tai sitä vanhempi julkaisu.
  4. Kiinnitä erityistä huomiota julkaistuihin sivuihin, joiden Form-widgetissä on valinnainen File Upload -kenttä, sillä tämä kokoonpano altistaa sivuston hyökkäykselle ennen päivitystä.

Korjauksen aikajana

  • 24.7.2026: Haavoittuvuudesta toimitettiin ilmoitus Wordfencelle sen bug bounty -ohjelman kautta.
  • 27.7.2026: Ilmoitus ja proof of concept -hyökkäys vahvistettiin, minkä jälkeen haavoittuvuudesta ilmoitettiin Elementorille.
  • 2.8.2026: Elementor kertoi, että myös toinen tutkija oli ilmoittanut samasta haavoittuvuudesta ja että korjausta valmistellaan.
  • 19.8.2026: Elementor Pro 4.2.2 julkaistiin täysin korjattuna versiona.

Alun perin tälle löydökselle varattu CVE-tunnus hylättiin, koska toinen taho oli ilmoittanut samasta virheestä Elementorille. Käyttöön otettiin tämän toisen ilmoituksen CVE-tunnus CVE-2026-32475. Jos ylläpidät Elementor Pro -sivustoa, varmista nyt lisäosan versio ja päivitä se korjattuun julkaisuun.

Mikko Virtanen

Mikko Virtanen

Avoimen lähdekoodin ylläpitäjä ja Linux-ytimen kontribuuttori. Avoin lähdekoodi ja yhteisöllinen kehitys ovat intohimoni. Koodin tulee olla vapaata!

Kaikki julkaisut

Liity HelloWP-yhteisöön!

Keskustele kanssamme WordPressistä ja web-kehityksestä sekä jaa kokemuksia muiden kehittäjien kanssa.

- jäsentä
- paikalla
Liity

Käytämme evästeitä parantaaksemme käyttökokemustasi. Jatkamalla hyväksyt Evästekäytäntömme.