Elementor Pro novērš kritisku failu augšupielādes ievainojamību
Elementor Pro ir novērsis kritisku ievainojamību CVE-2026-32475, kas skar visas spraudņa versijas līdz 4.2.1 ieskaitot. Tā ļauj neautentificētam uzbrucējam augšupielādēt patvaļīgu failu, arī izpildāmu PHP failu, un rezultātā attālināti palaist kodu serverī vai pārņemt visu vietni.
Risks attiecas uz publicētām lapām, kurās ir Elementor Pro Form logrīks ar vismaz vienu File Upload lauku, kas nav atzīmēts kā obligāts. Elementor Pro ir aptuveni 6 miljoni aktīvu instalāciju, tāpēc pārbaudi atjauninājumu nekavējoties.
Nepieciešama tūlītēja rīcība
Atjaunini Elementor Pro uz versiju 4.2.2 vai jaunāku. Versija 4.2.2 pilnībā novērš CVE-2026-32475.
Ko ievainojamība ļauj izdarīt
Ievainojamība saņēmusi CVSS novērtējumu 9,8 no 10 jeb kritisku pakāpi. Tā ir neierobežota failu tipu augšupielāde: uzbrucējam nav vajadzīgs WordPress lietotāja konts, ja vien viņš atrod ievainojamajam nosacījumam atbilstošu publisku formu.
Uzbrukumam vajag File Upload lauku, kas nav obligāts. Uzbrucējs iesniedz lauku kā masīvu ar diviem elementiem: pirmais ir tukšs, bet otrajā atrodas fails ar paša izvēlētu paplašinājumu. Šis paņēmiens apiet faila paplašinājuma un izmēra pārbaudi.
Ja serveris pēc augšupielādes izpilda PHP failus augšupielāžu direktorijā, uzbrucējs var pieprasīt augšupielādēto failu un palaist tajā ievietoto PHP kodu. Šādas patvaļīgas failu augšupielādes ievainojamības bieži ļauj izvietot webshell un pilnībā kompromitēt vietni.
Kļūda validācijas ciklā
Elementor Pro Form logrīks apstrādā formu iesniegumus ar Ajax_Handler klases funkciju ajax_send_form(), kuru var sasniegt arī neautentificēts apmeklētājs. Spraudnis iesniegtos laukus un failus ievieto Form_Record objektā, pēc tam File Upload laukus nodod ElementorProModulesFormsFieldsUpload klases funkcijām validation() un process_field().
Problēma bija validation() ciklā. Ja neobligātā laukā pirmais masīva elements nebija augšupielādēts un tam bija PHP kļūdas kods UPLOAD_ERR_NO_FILE, kods izsauca return, nevis pārgāja pie nākamā elementa ar continue.
foreach ( $files[ $id ] as $index => $file ) {
// Neobligātam laukam pirmais tukšais elements pārtrauc visu validāciju.
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.' );
}
}return pārtrauca visas funkcijas darbu, tādēļ spraudnis vairs nepārbaudīja pārējos tā paša lauka failus. Pareizai rīcībai vajadzēja izmantot continue: tas izlaistu tikai tukšo ierakstu un turpinātu validēt nākamo failu.
Tādējādi otrajam masīva elementam nepiemēroja is_file_type_valid() faila tipa pārbaudi un faila izmēra pārbaudi. Uzbrucējs varēja ievietot otrajā elementā PHP failu ar izvēlētu paplašinājumu, kam validācija vispār netika izpildīta.
Kāpēc fails tomēr nonāk serverī
Lai gan validation() darbu pārtrauca pārāk agri, process_field() tukšo pirmo elementu apstrādāja korekti: tā izmantoja continue un turpināja ar nākamo failu. Tāpēc spraudnis apstrādāja otro, jau nevalidēto elementu.
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;
Plugin::instance()->php_api->move_uploaded_file(
$file['tmp_name'],
$new_file
);
}Funkcija paņēma paplašinājumu tieši no klienta iesniegtā faila nosaukuma, izveidoja unikālu faila nosaukumu un saglabāja failu diskā. Līdz ar to fails ar .php paplašinājumu varēja nonākt direktorijā /wp-content/uploads/elementor/forms/, no kurienes uzbrucējs to varēja pieprasīt un izpildīt serverī.
Kuras versijas skar problēma
- Ievainojamā programmatūra: Elementor Website Builder Pro (
elementor-pro). - Ievainojamās versijas: 4.2.1 un visas vecākas versijas.
- Labotā versija: 4.2.2.
- CVE identifikators: CVE-2026-32475.
- CVSS vērtējums: 9,8 – kritisks.
- Atlīdzība par ievainojamības atklāšanu bija 15 600 ASV dolāru.
Notikumu laika līnija
- 2026. gada 24. jūlijā tika saņemts ziņojums par neautentificētu patvaļīgu failu augšupielādi Elementor Pro.
- 2026. gada 27. jūlijā pētnieki apstiprināja ziņojumu un proof-of-concept uzbrukumu, pēc tam par problēmu informēja Elementor izstrādātājus.
- 2026. gada 2. augustā Elementor paziņoja, ka par šo ievainojamību ziņojis arī cits pētnieks un tiek gatavots labojums.
- 2026. gada 19. augustā izlaida Elementor Pro 4.2.2 ar pilnu labojumu.
Ko pārbaudīt tagad
Vispirms pārbaudi Elementor Pro versiju katrā WordPress vietnē un atjaunini to līdz 4.2.2 vai jaunākai versijai. Īpaši steidzami rīkojies, ja publiskās lapās izmanto Form logrīka neobligātos File Upload laukus.
Pēc atjaunināšanas pārskati šādu formu konfigurāciju un pārbaudi direktoriju /wp-content/uploads/elementor/forms/ attiecībā uz negaidītiem failiem, sevišķi ar .php paplašinājumu. Ja atrodi aizdomīgus failus vai pazīmes, ka tie tikuši pieprasīti, uzskati vietni par iespējami kompromitētu un sāc incidenta novēršanu.
Līga Bērziņa
Latvijas komandas galvenā redaktore, IT projektu vadītāja un digitālās transformācijas konsultante. Agile pāreja un digitālā stratēģija ir mana specialitāte.
Visas publikācijas