{"id":292,"date":"2026-08-20T17:39:02","date_gmt":"2026-08-20T15:39:02","guid":{"rendered":"https:\/\/helloblog.io\/pt\/falha-critica-elementor-pro-carregamento-ficheiros-php\/"},"modified":"2026-08-20T17:39:02","modified_gmt":"2026-08-20T15:39:02","slug":"falha-critica-elementor-pro-carregamento-ficheiros-php","status":"publish","type":"post","link":"https:\/\/helloblog.io\/pt\/falha-critica-elementor-pro-carregamento-ficheiros-php\/","title":{"rendered":"Falha cr\u00edtica no Elementor Pro permite carregar ficheiros PHP sem autentica\u00e7\u00e3o"},"content":{"rendered":"\n<p>O Elementor Pro corrigiu uma vulnerabilidade cr\u00edtica de carregamento arbitr\u00e1rio de ficheiros que afeta todas as vers\u00f5es at\u00e9 \u00e0 4.2.1, inclusive. A falha pode permitir a um atacante sem sess\u00e3o iniciada enviar um ficheiro PHP execut\u00e1vel para o servidor, executar c\u00f3digo remotamente e, em \u00faltima inst\u00e2ncia, assumir o controlo completo do site.<\/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\">Atualiza o Elementor Pro para a vers\u00e3o 4.2.2<\/h4>\n\n\n<p>A vers\u00e3o 4.2.2 corrige esta vulnerabilidade. Os sites com Elementor Pro 4.2.1 ou anterior devem atualizar o plugin com urg\u00eancia.<\/p>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Quem est\u00e1 exposto \u00e0 vulnerabilidade<\/h2>\n\n\n\n<p>A falha, identificada como <a href=\"https:\/\/www.cve.org\/CVERecord?id=CVE-2026-32475\">CVE-2026-32475<\/a>, recebeu uma classifica\u00e7\u00e3o CVSS de 9,8 em 10. Afeta o Elementor Website Builder Pro, um plugin premium do WordPress com uma estimativa de 6 000 000 de instala\u00e7\u00f5es ativas.<\/p>\n\n\n\n<p>A explora\u00e7\u00e3o exige uma condi\u00e7\u00e3o concreta: o site tem de publicar uma p\u00e1gina com o widget Form do Elementor Pro e esse formul\u00e1rio tem de incluir pelo menos um campo File Upload que n\u00e3o esteja marcado como obrigat\u00f3rio. Um visitante n\u00e3o autenticado consegue ent\u00e3o submeter o formul\u00e1rio especialmente preparado.<\/p>\n\n\n\n<p>A vulnerabilidade foi comunicada atrav\u00e9s do programa de recompensa de bugs da Wordfence em 24 de julho de 2026. A corre\u00e7\u00e3o completa chegou com o lan\u00e7amento do Elementor Pro 4.2.2, em 19 de agosto de 2026.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Como o contorno da valida\u00e7\u00e3o funciona<\/h2>\n\n\n\n<p>O widget Form aceita campos para carregar ficheiros e processa os pedidos atrav\u00e9s da fun\u00e7\u00e3o <code>ajax_send_form()<\/code> da classe <code>Ajax_Handler<\/code>. Visitantes sem autentica\u00e7\u00e3o conseguem alcan\u00e7ar esta fun\u00e7\u00e3o; os dados submetidos, incluindo os ficheiros, seguem para um objeto <code>Form_Record<\/code> e s\u00e3o depois validados e processados pela classe <code>ElementorProModulesFormsFieldsUpload<\/code>.<\/p>\n\n\n\n<p>O problema est\u00e1 na fun\u00e7\u00e3o <code>validation()<\/code>. Quando o campo n\u00e3o \u00e9 obrigat\u00f3rio e o primeiro elemento do array de ficheiros indica <code>UPLOAD_ERR_NO_FILE<\/code> &#8211; isto \u00e9, n\u00e3o foi enviado nenhum ficheiro nessa posi\u00e7\u00e3o &#8211; a fun\u00e7\u00e3o usa <code>return<\/code>. Essa instru\u00e7\u00e3o termina a valida\u00e7\u00e3o de todos os elementos seguintes do mesmo campo, em vez de ignorar apenas a posi\u00e7\u00e3o vazia.<\/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    \/\/ Num campo opcional, um primeiro elemento vazio termina a valida\u00e7\u00e3o.\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( $id, 'This file type is not allowed.' );\n    }\n\n    if ( ! $this-&gt;is_file_size_valid( $field, $file ) ) {\n        $ajax_handler-&gt;add_error( $id, 'This file exceeds the maximum allowed size.' );\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\">    \/\/ Num campo opcional, um primeiro elemento vazio termina a valida\u00e7\u00e3o.<\/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\">( $id, <\/span><span style=\"color:#9ECBFF\">'This file type is not allowed.'<\/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_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\">( $id, <\/span><span style=\"color:#9ECBFF\">'This file exceeds the maximum allowed size.'<\/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><\/code><\/pre><\/div>\n\n\n\n<p>O comportamento esperado seria usar <code>continue<\/code>. Assim, o c\u00f3digo ignoraria o elemento vazio e avan\u00e7aria para validar o ficheiro seguinte. Com <code>return<\/code>, as verifica\u00e7\u00f5es de extens\u00e3o em <code>is_file_type_valid()<\/code> e de tamanho em <code>is_file_size_valid()<\/code> deixam de ser executadas para todos os ficheiros posteriores.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Da valida\u00e7\u00e3o ignorada \u00e0 execu\u00e7\u00e3o de c\u00f3digo<\/h2>\n\n\n\n<p>Para explorar a falha, um atacante submete o campo de carregamento como um array com duas partes. A primeira fica vazia e produz o erro <code>UPLOAD_ERR_NO_FILE<\/code>, que interrompe a valida\u00e7\u00e3o. A segunda cont\u00e9m uma payload PHP e um nome de ficheiro com a extens\u00e3o escolhida pelo atacante, sem que a extens\u00e3o ou o tamanho sejam verificados.<\/p>\n\n\n\n<p>Apesar de a valida\u00e7\u00e3o terminar cedo, <code>process_field()<\/code> usa corretamente <code>continue<\/code> ao encontrar o primeiro elemento vazio. Por isso, ignora essa entrada mas continua a processar a segunda, que j\u00e1 n\u00e3o passou pelas verifica\u00e7\u00f5es necess\u00e1rias.<\/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    \/\/ A extens\u00e3o vem diretamente do nome enviado pelo cliente.\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    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:#6A737D\">    \/\/ A extens\u00e3o vem diretamente do nome enviado pelo cliente.<\/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:#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>O processamento preserva a extens\u00e3o extra\u00edda do nome fornecido pelo cliente e grava o ficheiro no disco. Um ficheiro com extens\u00e3o <code>.php<\/code> pode acabar em <code>\/wp-content\/uploads\/elementor\/forms\/<\/code>; se o servidor o executar, basta pedir o URL desse ficheiro para correr a payload PHP.<\/p>\n\n\n\n<p>Este tipo de carregamento arbitr\u00e1rio pode conduzir ao comprometimento integral do site, incluindo atrav\u00e9s de webshells e de outras t\u00e9cnicas de execu\u00e7\u00e3o remota de c\u00f3digo. A corre\u00e7\u00e3o elimina o cen\u00e1rio que permitia contornar a valida\u00e7\u00e3o do tipo e do tamanho dos ficheiros.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Cronologia da corre\u00e7\u00e3o<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li><strong>24 de julho de 2026:<\/strong> foi recebida uma comunica\u00e7\u00e3o sobre a vulnerabilidade de carregamento arbitr\u00e1rio de ficheiros sem autentica\u00e7\u00e3o.<\/li>\n\n\n<li><strong>27 de julho de 2026:<\/strong> a falha e a prova de conceito foram validadas, tendo o problema sido comunicado \u00e0 equipa do Elementor.<\/li>\n\n\n<li><strong>2 de agosto de 2026:<\/strong> a equipa do Elementor informou que outra pessoa tamb\u00e9m tinha reportado a vulnerabilidade e que estava a preparar uma corre\u00e7\u00e3o.<\/li>\n\n\n<li><strong>19 de agosto de 2026:<\/strong> foi lan\u00e7ada a vers\u00e3o 4.2.2 do Elementor Pro com a corre\u00e7\u00e3o completa.<\/li>\n\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">O que deves fazer agora<\/h2>\n\n\n\n<p>Confirma a vers\u00e3o do Elementor Pro em todos os sites que administras e atualiza imediatamente qualquer instala\u00e7\u00e3o na vers\u00e3o 4.2.1 ou anterior para a 4.2.2 ou uma vers\u00e3o mais recente. D\u00e1 prioridade aos sites que publiquem formul\u00e1rios do Elementor Pro com campos File Upload opcionais, pois s\u00e3o os que re\u00fanem a condi\u00e7\u00e3o necess\u00e1ria para explorar a falha.<\/p>\n\n\n\n<p>Depois de atualizar, rev\u00ea os ficheiros presentes em <code>\/wp-content\/uploads\/elementor\/forms\/<\/code>, sobretudo ficheiros PHP inesperados. Se encontrares ind\u00edcios de carregamentos suspeitos, trata o site como potencialmente comprometido e investiga a execu\u00e7\u00e3o de c\u00f3digo n\u00e3o autorizado no servidor.<\/p>\n\n\n<div class=\"references-section\">\n                <h2>Refer\u00eancias \/ Fontes<\/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><li><a href=\"https:\/\/www.wordfence.com\/threat-intel\/vulnerabilities\/id\/0a32b02f-db40-42fe-b46c-4a5f2bc9ba09\" target=\"_blank\" rel=\"noopener noreferrer\">Elementor Pro &lt;= 4.2.1 &#8211; Unauthenticated Arbitrary File Upload via Upload Field Array Validation Bypass<\/a><\/li><li><a href=\"https:\/\/www.cve.org\/CVERecord?id=CVE-2026-32475\" target=\"_blank\" rel=\"noopener noreferrer\">CVE-2026-32475<\/a><\/li><\/ul>\n            <\/div>","protected":false},"excerpt":{"rendered":"<p>O Elementor Pro corrigiu uma falha cr\u00edtica que pode permitir a qualquer visitante carregar ficheiros PHP e executar c\u00f3digo no servidor. Se tens uma vers\u00e3o at\u00e9 \u00e0 4.2.1, atualiza para a 4.2.2 imediatamente.<\/p>\n","protected":false},"author":27,"featured_media":291,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[136,79,11,52,10],"class_list":["post-292","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-seguranca","tag-elementor-pro","tag-php","tag-seguranca","tag-vulnerabilidades","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/posts\/292","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/users\/27"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/comments?post=292"}],"version-history":[{"count":0,"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/posts\/292\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/media\/291"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/media?parent=292"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/categories?post=292"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/tags?post=292"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}