Pereiti prie turinio
Elementor Pro pašalino kritinę PHP failų įkėlimo spragą
Hannah Turing
Hannah Turing 2026 m. August 20 d. · 5 min. skaitymo

Elementor Pro pašalino kritinę PHP failų įkėlimo spragą

Elementor Pro įskiepyje aptikta kritinė saugumo spraga CVE-2026-32475, kuri paveikia visas versijas iki 4.2.1 imtinai. Neautentifikuotas užpuolikas gali įkelti savavališką failą, įskaitant vykdomą PHP failą, o tai gali baigtis nuotoliniu kodo vykdymu ir visišku WordPress svetainės perėmimu.

Spraga aktuali svetainei, kurioje paskelbtame puslapyje naudojamas Elementor Pro Form valdiklis ir jame yra bent vienas neprivalomas File Upload laukas. Elementor Pro turi apie 6 mln. aktyvių diegimų, todėl patikrinkite įskiepio versiją kuo greičiau.

Ką daryti dabar

Atnaujinkite Elementor Pro į 4.2.2 arba naujesnę pataisytą versiją. Versija 4.2.2, išleista 2026 m. rugpjūčio 19 d., išsprendžia CVE-2026-32475.

Kam ir kokiomis sąlygomis kyla rizika

Problema yra neribojamas failo tipo įkėlimas per ElementorProModulesFormsFieldsUpload klasės process_field() funkciją. Užpuolikui nereikia WordPress paskyros, tačiau jis turi rasti viešai paskelbtą formą su neprivalomu failo įkėlimo lauku.

Pažeidžiama forma turi priimti daugiau nei vieną įkėlimo masyvo elementą. Užpuolikas pirmą elementą pateikia tuščią, o antrajame įkelia failą su pasirinktu plėtiniu. Taip išvengiamas likusių failų plėtinio ir dydžio tikrinimas.

  1. WordPress administravimo skydelyje atidarykite Elementor Pro įskiepių sąrašą ir patikrinkite versiją.
  2. Jei naudojate 4.2.1 ar senesnę versiją, nedelsdami įdiekite 4.2.2 arba naujesnį atnaujinimą.
  3. Peržiūrėkite viešus puslapius su Elementor Pro Form valdikliais, ypač formas, kuriose File Upload laukas nėra pažymėtas kaip privalomas.
  4. Kol atnaujinimas neįdiegtas, ribokite prieigą prie tokių formų arba laikinai pašalinkite neprivalomus failų įkėlimo laukus.

Kaip apeinamas tikrinimas

Formų pateikimą neautentifikuoti lankytojai pasiekia per Ajax_Handler klasės ajax_send_form() funkciją. Įskiepis vartotojo pateiktus formos duomenis ir įkeltus failus sudeda į Form_Record objektą, tada File Upload laukus perduoda Upload klasės validation() ir process_field() funkcijoms.

Klaida slypi validation() cikle. Kai File Upload laukas neprivalomas ir pirmojo masyvo elemento klaida yra UPLOAD_ERR_NO_FILE, kodas vykdo return. Ši komanda nutraukia visos funkcijos darbą, todėl įskiepis nebetikrina likusių to paties lauko failų.

foreach ( $files[ $id ] as $index => $file ) {
    // Neprivalomame lauke pirmasis elementas nebuvo pateiktas.
    if ( ! $field['required'] && UPLOAD_ERR_NO_FILE === $file['error'] ) {
        return; // Nutraukia visų vėlesnių failų tikrinimą.
    }

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

Tuščią įkėlimo vietą reikėjo praleisti su continue, nes ši komanda pereina prie kito ciklo elemento. Vietoj to panaudotas return nutraukia tikrinimą dar prieš iškviečiant is_file_type_valid() ir is_file_size_valid() funkcijas kitiems failams.

Kodėl tai leidžia vykdyti PHP kodą

Ataka naudoja du to paties įkėlimo lauko masyvo elementus. Pirmasis yra tuščias ir nustato UPLOAD_ERR_NO_FILE, todėl validation() funkcija iškart baigia darbą. Antrajame elemente užpuolikas pateikia PHP failą su savo parinktu plėtiniu; jo tipas ir dydis nebetikrinami.

Nors validavimas nutrūksta per anksti, process_field() tuščią pirmą elementą praleidžia teisingai, naudodama continue. Todėl ji apdoroja antrą, nepatikrintą failą, plėtinį paima tiesiai iš kliento pateikto failo vardo ir įrašo failą į serverio diską.

foreach ( $files[ $id ] as $index => $file ) {
    if ( UPLOAD_ERR_NO_FILE === $file['error'] ) {
        continue; // Tuščias elementas praleidžiamas.
    }

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

Kadangi išsaugomas užpuoliko nurodytas plėtinys, failas su .php plėtiniu patenka tiesiai į /wp-content/uploads/elementor/forms/ katalogą. Užpuolikas gali kreiptis į tokį failą per naršyklę ir serveryje įvykdyti jo PHP kodą. Savavališko failų įkėlimo spragos dažnai leidžia perimti visą svetainę naudojant webshell ar kitus metodus.

Paveiktos versijos ir spragos įvertinimas

  • Paveiktas įskiepis: Elementor Website Builder Pro (elementor-pro).
  • Paveiktos versijos: iki 4.2.1 imtinai.
  • Pataisyta versija: 4.2.2.
  • CVE identifikatorius: CVE-2026-32475.
  • CVSS įvertinimas: 9,8 iš 10, kritinis.
  • Spragos tipas: neautentifikuotas savavališko failo įkėlimas, apeinant įkėlimo lauko masyvo validavimą.

Atskleidimo eiga

  1. 2026 m. liepos 24 d. buvo gautas pranešimas apie neautentifikuotą savavališko failo įkėlimo spragą Elementor Pro.
  2. 2026 m. liepos 27 d. pranešimas patvirtintas kartu su koncepcijos įrodymo ataka, o apie spragą informuotas Elementor kūrėjas.
  3. 2026 m. rugpjūčio 2 d. kūrėjas nurodė, kad apie tą pačią spragą pranešė ir kitas saugumo tyrėjas bei kad rengiamas pataisymas.
  4. 2026 m. rugpjūčio 19 d. išleista visiškai pataisyta Elementor Pro 4.2.2 versija.

Iš pradžių šiai spragai buvo priskirtas kitas CVE identifikatorius, tačiau jis atmestas, nes kūrėjas jau naudojo identifikatorių, priskirtą po kito pranešimo. Galutinis spragos identifikatorius yra CVE-2026-32475.

Atnaujinimas yra būtinas

Ši spraga nereikalauja prisijungimo ir gali leisti vykdyti kodą serveryje, todėl vien formų konfigūracijos patikrinimo nepakanka. Įdiekite Elementor Pro 4.2.2 arba naujesnę versiją visuose projektuose, kuriuose naudojate šį įskiepį, ir tik tada grąžinkite laikinai apribotas failų įkėlimo formas.

Hannah Turing

Hannah Turing

WordPress kūrėja ir techninė rašytoja HelloWP. Padedu kūrėjams kurti geresnes svetaines naudojant šiuolaikinius įrankius, tokius kaip Laravel, Tailwind CSS ir WordPress ekosistema. Aistringai vertinu švarų kodą ir kūrėjo patirtį.

Visi įrašai

Prisijunkite prie HelloWP bendruomenės!

Bendraukite su mumis apie WordPress, žiniatinklio kūrimą ir dalinkitės patirtimi su kitais kūrėjais.

- nariai
- prisijungę
Prisijungti

Mes naudojame slapukus, kad pagerintume jūsų patirtį. Tęsdami sutinkate su mūsų Slapukų politika.