{"id":248,"date":"2026-08-20T17:39:42","date_gmt":"2026-08-20T15:39:42","guid":{"rendered":"https:\/\/helloblog.io\/pl\/krytyczna-luka-elementor-pro-dowolny-upload-pliku\/"},"modified":"2026-08-20T17:39:42","modified_gmt":"2026-08-20T15:39:42","slug":"krytyczna-luka-elementor-pro-dowolny-upload-pliku","status":"publish","type":"post","link":"https:\/\/helloblog.io\/pl\/krytyczna-luka-elementor-pro-dowolny-upload-pliku\/","title":{"rendered":"Krytyczna luka w Elementor Pro pozwala\u0142a wgra\u0107 dowolny plik bez logowania"},"content":{"rendered":"\n<p>W Elementor Pro wykryto krytyczn\u0105 podatno\u015b\u0107 CVE-2026-32475, kt\u00f3ra dotyczy wszystkich wersji do 4.2.1 w\u0142\u0105cznie. Niezalogowany atakuj\u0105cy m\u00f3g\u0142 wgra\u0107 na serwer dowolny plik, tak\u017ce wykonywalny plik PHP, a nast\u0119pnie uruchomi\u0107 go zdalnie i przej\u0105\u0107 witryn\u0119.<\/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\">Zaktualizuj Elementor Pro<\/h4>\n\n\n<p>Zainstaluj Elementor Pro 4.2.2 lub nowszy jak najszybciej. Wersja 4.2.2, wydana 19 sierpnia 2026 roku, usuwa opisan\u0105 luk\u0119.<\/p>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Kogo dotyczy problem<\/h2>\n\n\n\n<p>Podatno\u015b\u0107 wyst\u0119puje w Elementor Website Builder Pro, czyli Elementor Pro, kt\u00f3ry ma szacunkowo 6 mln aktywnych instalacji. Warunek wykorzystania luki jest konkretny: witryna musi publikowa\u0107 stron\u0119 z wid\u017cetem Form z co najmniej jednym polem File Upload, kt\u00f3rego nie oznaczono jako wymaganego.<\/p>\n\n\n\n<p>Ocena CVSS wynosi 9,8 na 10, czyli poziom krytyczny. Problem odkryto i odpowiedzialnie zg\u0142oszono 24 lipca 2026 roku w programie bug bounty; za zg\u0142oszenie wyp\u0142acono nagrod\u0119 15 600 USD.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Na czym polega b\u0142\u0105d walidacji<\/h2>\n\n\n\n<p>Formularze obs\u0142uguje dost\u0119pna dla niezalogowanych odwiedzaj\u0105cych metoda <code>ajax_send_form()<\/code> z klasy <code>Ajax_Handler<\/code>. Dane przes\u0142ane przez formularz, wraz z plikami, trafiaj\u0105 do obiektu <code>Form_Record<\/code>, a pola uploadu przechodz\u0105 przez metody <code>validation()<\/code> i <code>process_field()<\/code> klasy <code>ElementorProModulesFormsFieldsUpload<\/code>.<\/p>\n\n\n\n<p>B\u0142\u0105d znajduje si\u0119 w p\u0119tli waliduj\u0105cej metod\u0119 <code>Upload::validation()<\/code>. Gdy pierwsza pozycja tablicy plik\u00f3w ma b\u0142\u0105d <code>UPLOAD_ERR_NO_FILE<\/code>, a pole nie jest wymagane, kod wywo\u0142uje <code>return<\/code>. Przerywa to ca\u0142\u0105 walidacj\u0119 pozosta\u0142ych plik\u00f3w w tym samym polu, zamiast pomin\u0105\u0107 pust\u0105 pozycj\u0119 i przej\u015b\u0107 dalej.<\/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 $file ) {\n    \/\/ Puste pole w opcjonalnym uploadzie.\n    if ( ! $field['required'] &amp;&amp; UPLOAD_ERR_NO_FILE === $file['error'] ) {\n        return; \/\/ B\u0142\u0105d: ko\u0144czy walidacj\u0119 ca\u0142ego pola.\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\"> $file ) {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\">    \/\/ Puste pole w opcjonalnym uploadzie.<\/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 style=\"color:#6A737D\">\/\/ B\u0142\u0105d: ko\u0144czy walidacj\u0119 ca\u0142ego pola.<\/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>Zamierzonym zachowaniem by\u0142o u\u017cycie <code>continue<\/code>, kt\u00f3re pomija tylko pusty element tablicy. Przez <code>return<\/code> nie uruchamiaj\u0105 si\u0119 kontrole rozszerzenia i typu pliku przez <code>is_file_type_valid()<\/code> ani kontrola jego rozmiaru dla kolejnych pozycji.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Dlaczego umo\u017cliwia to wykonanie kodu PHP<\/h2>\n\n\n\n<p>Atak wykorzystuje pole uploadu przes\u0142ane jako tablic\u0119 z dwiema cz\u0119\u015bciami. Pierwsza jest pusta, wi\u0119c otrzymuje <code>UPLOAD_ERR_NO_FILE<\/code> i przedwcze\u015bnie ko\u0144czy walidacj\u0119. Druga zawiera plik z wybranym przez atakuj\u0105cego rozszerzeniem, kt\u00f3rego mechanizm walidacji ju\u017c nie sprawdza.<\/p>\n\n\n\n<p>Metoda <code>process_field()<\/code> zachowuje si\u0119 inaczej: dla pustej pierwszej pozycji u\u017cywa poprawnie <code>continue<\/code>, wi\u0119c przetwarza drugi, niewalidowany plik. Pobiera rozszerzenie bezpo\u015brednio z nazwy przes\u0142anej przez klienta, tworzy unikaln\u0105 nazw\u0119, zapisuje plik w katalogu upload\u00f3w, ustawia uprawnienia <code>0644<\/code> i dodaje jego \u015bcie\u017ck\u0119 oraz URL do rekordu formularza.<\/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 = wp_unique_filename( $uploads_dir, uniqid() . '.' . $file_extension );\n    $new_file = trailingslashit( $uploads_dir ) . $filename;\n\n    Plugin::instance()-&gt;php_api-&gt;move_uploaded_file( $file['tmp_name'], $new_file );\n    @chmod( $new_file, 0644 );\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:#B392F0\"> wp_unique_filename<\/span><span style=\"color:#E1E4E8\">( $uploads_dir, <\/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\">    $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\">( $file[<\/span><span style=\"color:#9ECBFF\">'tmp_name'<\/span><span style=\"color:#E1E4E8\">], $new_file );<\/span><\/span>\n<span class=\"line\"><span style=\"color:#F97583\">    @<\/span><span style=\"color:#79B8FF\">chmod<\/span><span style=\"color:#E1E4E8\">( $new_file, <\/span><span style=\"color:#79B8FF\">0644<\/span><span style=\"color:#E1E4E8\"> );<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>W efekcie plik z rozszerzeniem <code>.php<\/code> m\u00f3g\u0142 trafi\u0107 bezpo\u015brednio do <code>\/wp-content\/uploads\/elementor\/forms\/<\/code>. Atakuj\u0105cy m\u00f3g\u0142 nast\u0119pnie odwo\u0142a\u0107 si\u0119 do zapisanego pliku, aby uruchomi\u0107 kod PHP na serwerze. Tego typu luki w uploadzie dowolnych plik\u00f3w mog\u0105 prowadzi\u0107 do pe\u0142nego przej\u0119cia witryny, mi\u0119dzy innymi z u\u017cyciem webshelli.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Chronologia ujawnienia<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>24 lipca 2026 roku zg\u0142oszono podatno\u015b\u0107 polegaj\u0105c\u0105 na uploadzie dowolnego pliku bez uwierzytelnienia.<\/li>\n\n\n<li>27 lipca 2026 roku potwierdzono zg\u0142oszenie i proof of concept, a nast\u0119pnie przekazano informacj\u0119 tw\u00f3rcom Elementor Pro.<\/li>\n\n\n<li>2 sierpnia 2026 roku tw\u00f3rcy poinformowali, \u017ce t\u0119 sam\u0105 podatno\u015b\u0107 zg\u0142osi\u0142a r\u00f3wnie\u017c inna osoba i pracuj\u0105 nad poprawk\u0105.<\/li>\n\n\n<li>19 sierpnia 2026 roku wydano Elementor Pro 4.2.2 z kompletn\u0105 poprawk\u0105.<\/li>\n\n<\/ol>\n\n\n\n<p>Pierwotnie przypisany identyfikator CVE odrzucono, poniewa\u017c podatno\u015b\u0107 zg\u0142osi\u0142a tak\u017ce strona trzecia. Obowi\u0105zuj\u0105cym identyfikatorem jest CVE-2026-32475.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Co zrobi\u0107 teraz<\/h2>\n\n\n\n<p>Sprawd\u017a wersj\u0119 Elementor Pro na ka\u017cdej utrzymywanej witrynie i zaktualizuj wtyczk\u0119 co najmniej do 4.2.2. Szczeg\u00f3lnie pilnie potraktuj strony, na kt\u00f3rych opublikowano formularze Elementor Pro z opcjonalnym polem File Upload, poniewa\u017c to one spe\u0142niaj\u0105 warunek wykorzystania podatno\u015bci.<\/p>\n\n\n\n<p>Po aktualizacji przejrzyj katalog <code>\/wp-content\/uploads\/elementor\/forms\/<\/code> pod k\u0105tem nieoczekiwanych plik\u00f3w, zw\u0142aszcza z rozszerzeniem <code>.php<\/code>. Je\u015bli znajdziesz podejrzane artefakty, potraktuj witryn\u0119 jako potencjalnie przej\u0119t\u0105 i rozpocznij procedur\u0119 obs\u0142ugi incydentu.<\/p>\n\n\n<div class=\"references-section\">\n                <h2>Odniesienia \/ \u0179r\u00f3d\u0142a<\/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>Jedno opcjonalne pole uploadu w formularzu Elementor Pro mog\u0142o otworzy\u0107 drog\u0119 do przej\u0119cia ca\u0142ej witryny. Zaktualizuj wtyczk\u0119 do wersji 4.2.2 lub nowszej.<\/p>\n","protected":false},"author":26,"featured_media":247,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[35,148,147,29,10],"class_list":["post-248","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bezpieczenstwo","tag-bezpieczenstwo","tag-cve-2026-32475","tag-elementor-pro","tag-php","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/posts\/248","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/users\/26"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/comments?post=248"}],"version-history":[{"count":0,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/posts\/248\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/media\/247"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/media?parent=248"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/categories?post=248"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/tags?post=248"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}