{"id":243,"date":"2026-08-20T17:39:19","date_gmt":"2026-08-20T15:39:19","guid":{"rendered":"https:\/\/helloblog.io\/fi\/elementor-pro-4-2-2-kriittinen-tiedostolataushaavoittuvuus\/"},"modified":"2026-08-20T17:39:19","modified_gmt":"2026-08-20T15:39:19","slug":"elementor-pro-4-2-2-kriittinen-tiedostolataushaavoittuvuus","status":"publish","type":"post","link":"https:\/\/helloblog.io\/fi\/elementor-pro-4-2-2-kriittinen-tiedostolataushaavoittuvuus\/","title":{"rendered":"Elementor Pro 4.2.2 korjaa kriittisen tiedostolataushaavoittuvuuden"},"content":{"rendered":"\n<p>Elementor Prossa on korjattu kriittinen haavoittuvuus, joka koskee kaikkia versioita 4.2.1:een asti. Haavoittuva sivusto voi hyv\u00e4ksy\u00e4 kirjautumattoman hy\u00f6kk\u00e4\u00e4j\u00e4n l\u00e4hett\u00e4m\u00e4n mielivaltaisen tiedoston, my\u00f6s suoritettavan PHP-tiedoston. Se voi johtaa et\u00e4koodin suoritukseen palvelimella ja koko WordPress-sivuston haltuunottoon.<\/p>\n\n\n\n<div class=\"wp-block-group callout callout-danger is-style-danger is-layout-flow wp-block-group-is-layout-flow\" style=\"border-width:1px;border-radius:8px;padding-top:1rem;padding-right:1.5rem;padding-bottom:1rem;padding-left:1.5rem\">\n\n<h4 class=\"wp-block-heading callout-title\">P\u00e4ivit\u00e4 Elementor Pro heti<\/h4>\n\n\n<p>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.<\/p>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Ket\u00e4 haavoittuvuus koskee<\/h2>\n\n\n\n<p>Haavoittuvuus koskee <a href=\"https:\/\/elementor.com\/pro\/\">Elementor Prota<\/a>, jolla on arviolta 6 000 000 aktiivista asennusta. Sen CVE-tunnus on <a href=\"https:\/\/www.cve.org\/CVERecord?id=CVE-2026-32475\">CVE-2026-32475<\/a>, ja haavoittuvuuden CVSS-pistem\u00e4\u00e4r\u00e4 on 9,8\/10 eli kriittinen.<\/p>\n\n\n\n<p>Hy\u00f6kk\u00e4ys onnistuu vain, jos sivustolla on julkaistu sivu, jossa Elementor Pron Form-widget sis\u00e4lt\u00e4\u00e4 v\u00e4hint\u00e4\u00e4n yhden File Upload -kent\u00e4n. Kentt\u00e4\u00e4 ei my\u00f6sk\u00e4\u00e4n saa olla merkitty pakolliseksi. Hy\u00f6kk\u00e4\u00e4j\u00e4 ei tarvitse WordPress-tunnusta eik\u00e4 muuta autentikointia.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Virhe syntyy tiedostotaulukon validoinnissa<\/h2>\n\n\n\n<p>Form-widget k\u00e4sittelee lomakkeen l\u00e4hetyksen <code>Ajax_Handler<\/code>-luokan <code>ajax_send_form()<\/code>-funktion kautta, johon my\u00f6s kirjautumaton k\u00e4vij\u00e4 p\u00e4\u00e4see k\u00e4siksi. Lis\u00e4osa pakkaa hy\u00f6kk\u00e4\u00e4j\u00e4n l\u00e4hett\u00e4m\u00e4n datan ja ladatut tiedostot <code>Form_Record<\/code>-objektiin, mink\u00e4 j\u00e4lkeen <code>ElementorProModulesFormsFieldsUpload<\/code>-luokka validoi ja k\u00e4sittelee File Upload -kent\u00e4t funktioilla <code>validation()<\/code> ja <code>process_field()<\/code>.<\/p>\n\n\n\n<p>Virhe on <code>Upload::validation()<\/code>-funktion silmukassa. Kun valinnainen tiedostokentt\u00e4 kohtaa ensimm\u00e4isen\u00e4 tyhj\u00e4n latauspaikan, PHP asettaa sille virhekoodin <code>UPLOAD_ERR_NO_FILE<\/code>. Koodin pit\u00e4isi ohittaa t\u00e4m\u00e4 yksitt\u00e4inen kohta <code>continue<\/code>-lauseella, mutta se k\u00e4ytt\u00e4\u00e4 <code>return<\/code>-lausetta ja lopettaa siten koko kent\u00e4n kaikkien j\u00e4ljell\u00e4 olevien tiedostojen validoinnin.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>foreach ( $files[ $id ] as $index =&gt; $file ) {\n    \/\/ Valinnaisen kent\u00e4n tyhj\u00e4 ensimm\u00e4inen latauspaikka lopettaa validoinnin.\n    if ( ! $field['required'] &amp;&amp; UPLOAD_ERR_NO_FILE === $file['error'] ) {\n        return;\n    }\n\n    if ( ! $this-&gt;is_file_type_valid( $field, $file ) ) {\n        $ajax_handler-&gt;add_error(\n            $id,\n            esc_html__( 'This file type is not allowed.', 'elementor-pro' )\n        );\n    }\n\n    if ( ! $this-&gt;is_file_size_valid( $field, $file ) ) {\n        $ajax_handler-&gt;add_error(\n            $id,\n            esc_html__( 'This file exceeds the maximum allowed size.', 'elementor-pro' )\n        );\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#F97583\">foreach<\/span><span style=\"color:#E1E4E8\"> ( $files[ $id ] <\/span><span style=\"color:#F97583\">as<\/span><span style=\"color:#E1E4E8\"> $index <\/span><span style=\"color:#F97583\">=><\/span><span style=\"color:#E1E4E8\"> $file ) {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\">    \/\/ Valinnaisen kent\u00e4n tyhj\u00e4 ensimm\u00e4inen latauspaikka lopettaa validoinnin.<\/span><\/span>\n<span class=\"line\"><span style=\"color:#F97583\">    if<\/span><span style=\"color:#E1E4E8\"> ( <\/span><span style=\"color:#F97583\">!<\/span><span style=\"color:#E1E4E8\"> $field[<\/span><span style=\"color:#9ECBFF\">'required'<\/span><span style=\"color:#E1E4E8\">] <\/span><span style=\"color:#F97583\">&#x26;&#x26;<\/span><span style=\"color:#79B8FF\"> UPLOAD_ERR_NO_FILE<\/span><span style=\"color:#F97583\"> ===<\/span><span style=\"color:#E1E4E8\"> $file[<\/span><span style=\"color:#9ECBFF\">'error'<\/span><span style=\"color:#E1E4E8\">] ) {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#F97583\">        return<\/span><span style=\"color:#E1E4E8\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color:#F97583\">    if<\/span><span style=\"color:#E1E4E8\"> ( <\/span><span style=\"color:#F97583\">!<\/span><span style=\"color:#79B8FF\"> $this<\/span><span style=\"color:#F97583\">-><\/span><span style=\"color:#B392F0\">is_file_type_valid<\/span><span style=\"color:#E1E4E8\">( $field, $file ) ) {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">        $ajax_handler<\/span><span style=\"color:#F97583\">-><\/span><span style=\"color:#B392F0\">add_error<\/span><span style=\"color:#E1E4E8\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">            $id,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">            esc_html__<\/span><span style=\"color:#E1E4E8\">( <\/span><span style=\"color:#9ECBFF\">'This file type is not allowed.'<\/span><span style=\"color:#E1E4E8\">, <\/span><span style=\"color:#9ECBFF\">'elementor-pro'<\/span><span style=\"color:#E1E4E8\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">        );<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color:#F97583\">    if<\/span><span style=\"color:#E1E4E8\"> ( <\/span><span style=\"color:#F97583\">!<\/span><span style=\"color:#79B8FF\"> $this<\/span><span style=\"color:#F97583\">-><\/span><span style=\"color:#B392F0\">is_file_size_valid<\/span><span style=\"color:#E1E4E8\">( $field, $file ) ) {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">        $ajax_handler<\/span><span style=\"color:#F97583\">-><\/span><span style=\"color:#B392F0\">add_error<\/span><span style=\"color:#E1E4E8\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">            $id,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">            esc_html__<\/span><span style=\"color:#E1E4E8\">( <\/span><span style=\"color:#9ECBFF\">'This file exceeds the maximum allowed size.'<\/span><span style=\"color:#E1E4E8\">, <\/span><span style=\"color:#9ECBFF\">'elementor-pro'<\/span><span style=\"color:#E1E4E8\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">        );<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>T\u00e4m\u00e4n ennenaikaisen paluun vuoksi lis\u00e4osa ei tarkista kent\u00e4n my\u00f6hempien tiedostojen tiedostop\u00e4\u00e4tett\u00e4 eik\u00e4 kokoa. Hy\u00f6kk\u00e4\u00e4j\u00e4 voi l\u00e4hett\u00e4\u00e4 kent\u00e4n taulukkona, jossa ensimm\u00e4inen osa on tyhj\u00e4 ja toinen sis\u00e4lt\u00e4\u00e4 PHP-payloadin hy\u00f6kk\u00e4\u00e4j\u00e4n valitsemalla tiedostop\u00e4\u00e4tteell\u00e4. Tyhj\u00e4 ensimm\u00e4inen osa ohittaa koko validoinnin.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">K\u00e4sittely tallentaa validoimattoman PHP-tiedoston<\/h2>\n\n\n\n<p>Vaikka <code>validation()<\/code> lopettaa ty\u00f6ns\u00e4 liian aikaisin, <code>process_field()<\/code> k\u00e4ytt\u00e4\u00e4 tyhj\u00e4lle latauspaikalle oikein <code>continue<\/code>-lausetta. Se siis ohittaa tyhj\u00e4n ensimm\u00e4isen osan, mutta k\u00e4sittelee silti toisen, validoimatta j\u00e4\u00e4neen tiedoston. Funktio ottaa tiedostop\u00e4\u00e4tteen suoraan asiakkaan toimittamasta tiedostonimest\u00e4, muodostaa yksil\u00f6llisen nimen ja kirjoittaa tiedoston levylle.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>foreach ( $files[ $id ] as $index =&gt; $file ) {\n    if ( UPLOAD_ERR_NO_FILE === $file['error'] ) {\n        continue;\n    }\n\n    $uploads_dir = $this-&gt;get_ensure_upload_dir();\n    $file_extension = pathinfo( $file['name'], PATHINFO_EXTENSION );\n    $filename = uniqid() . '.' . $file_extension;\n    $filename = wp_unique_filename( $uploads_dir, $filename );\n    $new_file = trailingslashit( $uploads_dir ) . $filename;\n\n    $move_new_file = Plugin::instance()-&gt;php_api-&gt;move_uploaded_file(\n        $file['tmp_name'],\n        $new_file\n    );\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#F97583\">foreach<\/span><span style=\"color:#E1E4E8\"> ( $files[ $id ] <\/span><span style=\"color:#F97583\">as<\/span><span style=\"color:#E1E4E8\"> $index <\/span><span style=\"color:#F97583\">=><\/span><span style=\"color:#E1E4E8\"> $file ) {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#F97583\">    if<\/span><span style=\"color:#E1E4E8\"> ( <\/span><span style=\"color:#79B8FF\">UPLOAD_ERR_NO_FILE<\/span><span style=\"color:#F97583\"> ===<\/span><span style=\"color:#E1E4E8\"> $file[<\/span><span style=\"color:#9ECBFF\">'error'<\/span><span style=\"color:#E1E4E8\">] ) {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#F97583\">        continue<\/span><span style=\"color:#E1E4E8\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    $uploads_dir <\/span><span style=\"color:#F97583\">=<\/span><span style=\"color:#79B8FF\"> $this<\/span><span style=\"color:#F97583\">-><\/span><span style=\"color:#B392F0\">get_ensure_upload_dir<\/span><span style=\"color:#E1E4E8\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    $file_extension <\/span><span style=\"color:#F97583\">=<\/span><span style=\"color:#79B8FF\"> pathinfo<\/span><span style=\"color:#E1E4E8\">( $file[<\/span><span style=\"color:#9ECBFF\">'name'<\/span><span style=\"color:#E1E4E8\">], <\/span><span style=\"color:#79B8FF\">PATHINFO_EXTENSION<\/span><span style=\"color:#E1E4E8\"> );<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    $filename <\/span><span style=\"color:#F97583\">=<\/span><span style=\"color:#79B8FF\"> uniqid<\/span><span style=\"color:#E1E4E8\">() <\/span><span style=\"color:#F97583\">.<\/span><span style=\"color:#9ECBFF\"> '.'<\/span><span style=\"color:#F97583\"> .<\/span><span style=\"color:#E1E4E8\"> $file_extension;<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    $filename <\/span><span style=\"color:#F97583\">=<\/span><span style=\"color:#B392F0\"> wp_unique_filename<\/span><span style=\"color:#E1E4E8\">( $uploads_dir, $filename );<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    $new_file <\/span><span style=\"color:#F97583\">=<\/span><span style=\"color:#B392F0\"> trailingslashit<\/span><span style=\"color:#E1E4E8\">( $uploads_dir ) <\/span><span style=\"color:#F97583\">.<\/span><span style=\"color:#E1E4E8\"> $filename;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    $move_new_file <\/span><span style=\"color:#F97583\">=<\/span><span style=\"color:#79B8FF\"> Plugin<\/span><span style=\"color:#F97583\">::<\/span><span style=\"color:#B392F0\">instance<\/span><span style=\"color:#E1E4E8\">()<\/span><span style=\"color:#F97583\">-><\/span><span style=\"color:#E1E4E8\">php_api<\/span><span style=\"color:#F97583\">-><\/span><span style=\"color:#B392F0\">move_uploaded_file<\/span><span style=\"color:#E1E4E8\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">        $file[<\/span><span style=\"color:#9ECBFF\">'tmp_name'<\/span><span style=\"color:#E1E4E8\">],<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">        $new_file<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    );<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>N\u00e4in esimerkiksi <code>.php<\/code>-p\u00e4\u00e4tteinen tiedosto p\u00e4\u00e4tyy <code>\/wp-content\/uploads\/elementor\/forms\/<\/code>-hakemistoon. Hy\u00f6kk\u00e4\u00e4j\u00e4 voi t\u00e4m\u00e4n j\u00e4lkeen pyyt\u00e4\u00e4 ladatun tiedoston URL-osoitetta ja suorittaa sen sis\u00e4lt\u00e4m\u00e4n PHP-koodin palvelimella. Mielivaltainen tiedostolataus voi mahdollistaa esimerkiksi webshellin asentamisen ja sivuston t\u00e4ydellisen kompromettoinnin.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Toimi n\u00e4in<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>Tarkista, onko sivustollasi Elementor Pro k\u00e4yt\u00f6ss\u00e4.<\/li>\n\n\n<li>P\u00e4ivit\u00e4 lis\u00e4osa v\u00e4litt\u00f6m\u00e4sti versioon 4.2.2 tai sit\u00e4 uudempaan versioon.<\/li>\n\n\n<li>Varmista p\u00e4ivityksen j\u00e4lkeen, ettei k\u00e4yt\u00f6ss\u00e4 ole versio 4.2.1 tai sit\u00e4 vanhempi julkaisu.<\/li>\n\n\n<li>Kiinnit\u00e4 erityist\u00e4 huomiota julkaistuihin sivuihin, joiden Form-widgetiss\u00e4 on valinnainen File Upload -kentt\u00e4, sill\u00e4 t\u00e4m\u00e4 kokoonpano altistaa sivuston hy\u00f6kk\u00e4ykselle ennen p\u00e4ivityst\u00e4.<\/li>\n\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Korjauksen aikajana<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>24.7.2026: Haavoittuvuudesta toimitettiin ilmoitus Wordfencelle sen bug bounty -ohjelman kautta.<\/li>\n\n\n<li>27.7.2026: Ilmoitus ja proof of concept -hy\u00f6kk\u00e4ys vahvistettiin, mink\u00e4 j\u00e4lkeen haavoittuvuudesta ilmoitettiin Elementorille.<\/li>\n\n\n<li>2.8.2026: Elementor kertoi, ett\u00e4 my\u00f6s toinen tutkija oli ilmoittanut samasta haavoittuvuudesta ja ett\u00e4 korjausta valmistellaan.<\/li>\n\n\n<li>19.8.2026: Elementor Pro 4.2.2 julkaistiin t\u00e4ysin korjattuna versiona.<\/li>\n\n<\/ul>\n\n\n\n<p>Alun perin t\u00e4lle l\u00f6yd\u00f6kselle varattu CVE-tunnus hyl\u00e4ttiin, koska toinen taho oli ilmoittanut samasta virheest\u00e4 Elementorille. K\u00e4ytt\u00f6\u00f6n otettiin t\u00e4m\u00e4n toisen ilmoituksen CVE-tunnus CVE-2026-32475. Jos yll\u00e4pid\u00e4t Elementor Pro -sivustoa, varmista nyt lis\u00e4osan versio ja p\u00e4ivit\u00e4 se korjattuun julkaisuun.<\/p>\n\n\n<div class=\"references-section\">\n                <h2>Viitteet \/ L\u00e4hteet<\/h2>\n                <ul class=\"references-list\"><li><a href=\"https:\/\/www.wordfence.com\/blog\/2026\/08\/critical-arbitrary-file-upload-vulnerability-patched-in-elementor-pro-wordpress-plugin\/\" target=\"_blank\" rel=\"noopener noreferrer\">Critical Arbitrary File Upload Vulnerability Patched in Elementor Pro WordPress Plugin<\/a><\/li><\/ul>\n            <\/div>","protected":false},"excerpt":{"rendered":"<p>Elementor Pron valinnainen tiedostokentt\u00e4 voi p\u00e4\u00e4st\u00e4\u00e4 hy\u00f6kk\u00e4\u00e4j\u00e4n palvelimelle PHP-tiedoston ilman kirjautumista. P\u00e4ivit\u00e4 lis\u00e4osa heti versioon 4.2.2 tai uudempaan.<\/p>\n","protected":false},"author":58,"featured_media":242,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[152,77,24,153,10],"class_list":["post-243","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tietoturva","tag-elementor-pro","tag-haavoittuvuus","tag-php","tag-tiedostolataus","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/posts\/243","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/users\/58"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/comments?post=243"}],"version-history":[{"count":0,"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/posts\/243\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/media\/242"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/media?parent=243"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/categories?post=243"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/tags?post=243"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}