{"id":22778,"date":"2026-10-22T10:17:00","date_gmt":"2026-10-22T08:17:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=22778"},"modified":"2026-10-22T10:53:36","modified_gmt":"2026-10-22T08:53:36","slug":"php2shell-ochrona-aktualizacje-zagrozone-witryny","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/php2shell-ochrona-aktualizacje-zagrozone-witryny\/","title":{"rendered":"PHP2Shell: skuteczna ochrona i problem witryn bez aktualizacji"},"content":{"rendered":"<p><strong>Stan na 22 pa\u017adziernika 2026 r.<\/strong> PHP2Shell dotyczy \u015brodowiska wykonawczego stanowi\u0105cego podstaw\u0119 du\u017cej cz\u0119\u015bci internetu. Dwie krytyczne podatno\u015bci w odpowiednich warunkach umo\u017cliwiaj\u0105 zdalne wykonanie kodu bez uwierzytelnienia. Aktualizacje bezpiecze\u0144stwa s\u0105 dost\u0119pne od 21 pa\u017adziernika. Najwa\u017cniejsze pytanie dotyczy obecnie rzeczywistego stanu publicznie dost\u0119pnych instalacji. <a href=\"https:\/\/www.php.net\/archive\/2026.php#2026-10-21-5\">[1]<\/a> <a href=\"https:\/\/digital.nhs.uk\/cyber-alerts\/2026\/cc-4875\">[6]<\/a><\/p><h2>Nowe informacje: pr\u00f3by ataku przed publikacj\u0105<\/h2><p>AWS informuje o pr\u00f3bie wykorzystania PHP2Shell z 17 pa\u017adziernika 2026 r., wykrytej we w\u0142asnej telemetrii MadPot jeszcze przed publicznym ujawnieniem podatno\u015bci. W przypadku kolejnych obserwowanych pr\u00f3b skuteczno\u015b\u0107 wobec rzeczywistych system\u00f3w pozostawa\u0142a niepewna. To udokumentowany sygna\u0142 ostrzegawczy, a nie globalna liczba przej\u0119tych system\u00f3w. Analiza potencjalnie dotkni\u0119tych instalacji powinna zatem obejmowa\u0107 tak\u017ce okres sprzed publikacji. <a href=\"https:\/\/aws.amazon.com\/blogs\/security\/amazon-threat-intelligence-identifies-php2shell-exploitation-prior-to-public-disclosure-in-madpot\/\">AWS: w\u0142asne obserwacje i ograniczenia<\/a><\/p>\n<h2>Co kryje si\u0119 pod nazw\u0105 PHP2Shell?<\/h2>\n<p>Identyfikatory podatno\u015bci to <strong>CVE-2026-109618<\/strong> oraz <strong>CVE-2026-109619<\/strong>. Pierwszy b\u0142\u0105d dotyczy nieprawid\u0142owego stanu pami\u0119ci po wyst\u0105pieniu jej niedoboru. Drugi wynika z pozostawienia wewn\u0119trznych odwo\u0142a\u0144 do ju\u017c zwolnionej pami\u0119ci. Dalsze przetwarzanie takich stan\u00f3w mo\u017ce prowadzi\u0107 do naruszenia bezpiecze\u0144stwa. Oba problemy wyst\u0119puj\u0105 w samym PHP. <a href=\"https:\/\/github.com\/php\/php-src\/security\/advisories\/GHSA-w8hw-w9fx-j79w\">[3]<\/a> <a href=\"https:\/\/github.com\/php\/php-src\/security\/advisories\/GHSA-6wmf-4rv5-p3rp\">[4]<\/a><\/p>\n<p>Okre\u015blenie \u201ewszystkie wersje od PHP 5\u201d oddaje wyj\u0105tkowo szeroki zakres problemu, ale nie zast\u0119puje kontroli pakiet\u00f3w. Weryfikacji wymagaj\u0105 stare ga\u0142\u0119zie PHP 5 i 7 oraz PHP 8. Dokumentacja cPanel wymienia tak\u017ce starsze pakiety i konkretne poprawione rewizje dostawc\u00f3w. Przej\u015bcie z PHP 7 na dowolne PHP 8 nie stanowi wi\u0119c dowodu ochrony. <a href=\"https:\/\/support.cpanel.net\/hc\/en-us\/articles\/44397389677335-Critical-PHP-Security-Release-CVE-2026-109618-and-CVE-2026-109619\">[7]<\/a><\/p>\n<p>Szczeg\u00f3lnie powa\u017cny przypadek dotyczy Apache z mod_php: potwierdzona \u015bcie\u017cka ataku dzia\u0142a jeszcze przed uruchomieniem kodu aplikacji. PHP-FPM r\u00f3wnie\u017c nie stanowi bezpiecznego wyj\u0105tku; PHP Foundation informuje o potwierdzonym wykonaniu kodu przez \u015bcie\u017cki zale\u017cne od aplikacji. Logowanie do WordPressa nie zapewnia zatem skutecznej ochrony przed b\u0142\u0119dem ni\u017cszej warstwy. <a href=\"https:\/\/thephp.foundation\/blog\/2026\/10\/21\/todays-php-security-release-and-how-were-strengthening-php-security\/\">[2]<\/a><\/p>\n<h2>Kt\u00f3re aktualizacje zapewniaj\u0105 ochron\u0119?<\/h2>\n<p>Poprawione oficjalne wydania to <strong>8.2.35, 8.3.36, 8.4.27 i 8.5.12<\/strong>; w\u0142a\u015bciwe jest r\u00f3wnie\u017c p\u00f3\u017aniejsze poprawione wydanie odpowiedniej ga\u0142\u0119zi. PHP 8.1 i starsze nie otrzymuj\u0105 ju\u017c regularnych wyda\u0144 projektu PHP. Wyj\u0105tkowo udost\u0119pniono minimalne poprawki kodu \u017ar\u00f3d\u0142owego dla 7.4, 8.0 i 8.1. Dystrybucje oraz dostawcy LTS mog\u0105 oferowa\u0107 w\u0142asne poprawione pakiety. <a href=\"https:\/\/www.php.net\/archive\/2026.php#2026-10-21-5\">[1]<\/a><\/p>\n<p>Stary numer wersji bazowej nie dowodzi automatycznie braku poprawki. Liczy si\u0119 pe\u0142na rewizja pakietu i potwierdzenie usuni\u0119cia <em>obu<\/em> podatno\u015bci. Z kolei samo oznaczenie \u201ePHP 8\u201d nie potwierdza bezpiecze\u0144stwa. <a href=\"https:\/\/support.cpanel.net\/hc\/en-us\/articles\/44397389677335-Critical-PHP-Security-Release-CVE-2026-109618-and-CVE-2026-109619\">[7]<\/a><\/p>\n<figure class=\"lw-diagram\"><img decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/php2shell-2026-pl.png\" width=\"1120\" height=\"580\" loading=\"lazy\" alt=\"Cztery etapy: inwentaryzacja, poprawienie obu podatno\u015bci, wymiana dzia\u0142aj\u0105cych proces\u00f3w i kontrola obs\u0142ugi stron\"><figcaption>Poprawka musi trafi\u0107 do dzia\u0142aj\u0105cej us\u0142ugi WWW.<\/figcaption><\/figure>\n<h2>Od aktualizacji pakietu do ochrony us\u0142ugi<\/h2>\n<ol><li><strong>Inwentaryzacja:<\/strong> Zakres obejmuje domeny, pule PHP, kontenery, zapomniane instalacje testowe i wbudowane panele administracyjne.<\/li><li><strong>Potwierdzenie poprawki:<\/strong> Ka\u017cde \u015brodowisko wymaga udokumentowania \u017ar\u00f3d\u0142a pakietu, rewizji i usuni\u0119cia obu podatno\u015bci.<\/li><li><strong>Wymiana dzia\u0142aj\u0105cych instancji:<\/strong> Procesy PHP musz\u0105 za\u0142adowa\u0107 poprawiony kod. W\u0142asne kontenery wymagaj\u0105 poprawionego obrazu i ponownego wdro\u017cenia. Aktualizacja hosta nie zmienia istniej\u0105cego obrazu kontenera. <a href=\"https:\/\/cloud.google.com\/blog\/products\/identity-security\/responding-to-core-php-vulnerabilities-cve-2026-109618-cve-2026-109619\">[8]<\/a><\/li><li><strong>Kontrola obs\u0142ugi WWW:<\/strong> Wiersz polece\u0144 mo\u017ce korzysta\u0107 z innej instalacji PHP ni\u017c witryna. Weryfikacj\u0119 zamyka przypisanie domeny do faktycznie dzia\u0142aj\u0105cego \u015brodowiska i sprawdzenie podstawowych funkcji.<\/li><\/ol>\n<p>W przypadku braku mo\u017cliwo\u015bci natychmiastowej aktualizacji ENISA zaleca rozwa\u017cenie izolacji publicznie dost\u0119pnych aplikacji. Statyczna strona techniczna obs\u0142ugiwana przed PHP mo\u017ce zatrzyma\u0107 ruch do podatnego \u015brodowiska. Wtyczka trybu konserwacji dzia\u0142aj\u0105ca wewn\u0105trz tej samej aplikacji PHP nie zapewnia takiego oddzielenia w spos\u00f3b niezawodny. <a href=\"https:\/\/www.enisa.europa.eu\/news\/joint-statement-on-critical-php-vulnerabilities\">[5]<\/a><\/p>\n<p>Oficjalne \u015brodki konfiguracyjne jedynie tymczasowo ograniczaj\u0105 ekspozycj\u0119. Przyk\u0142adowo <code>session.upload_progress.enabled=0<\/code> blokuje okre\u015blone potwierdzone \u015bcie\u017cki zwi\u0105zane z sesj\u0105, lecz nie wszystkie warianty. Zmiana limit\u00f3w pami\u0119ci r\u00f3wnie\u017c nie jest uniwersaln\u0105 napraw\u0105. Nieograniczona pami\u0119\u0107 PHP mo\u017ce zwi\u0119kszy\u0107 ryzyko niedost\u0119pno\u015bci; limity poza PHP wymagaj\u0105 odpowiedniego skoordynowania. \u017badne z tych dzia\u0142a\u0144 nie zast\u0119puje aktualizacji. <a href=\"https:\/\/github.com\/php\/php-src\/security\/advisories\/GHSA-w8hw-w9fx-j79w\">[3]<\/a> <a href=\"https:\/\/github.com\/php\/php-src\/security\/advisories\/GHSA-6wmf-4rv5-p3rp\">[4]<\/a><\/p>\n<h2>Skutki braku aktualizacji<\/h2>\n<p>Punktem wyj\u015bcia jest wykonanie kodu z uprawnieniami procesu WWW, a nie automatyczne uzyskanie uprawnie\u0144 root. Zale\u017cnie od uprawnie\u0144 i dost\u0119pnych sekret\u00f3w mo\u017cliwe nast\u0119pstwa obejmuj\u0105 kradzie\u017c danych dost\u0119powych do bazy, ujawnienie danych klient\u00f3w, zmian\u0119 tre\u015bci, instalacj\u0119 z\u0142o\u015bliwego oprogramowania oraz nadu\u017cycie kluczy API. Dost\u0119pne us\u0142ugi wewn\u0119trzne mog\u0105 sta\u0107 si\u0119 kolejnym celem, je\u015bli pozwalaj\u0105 na to po\u0142\u0105czenia sieciowe i uprawnienia. <a href=\"https:\/\/github.com\/php\/php-src\/security\/advisories\/GHSA-w8hw-w9fx-j79w\">[3]<\/a><\/p>\n<p>W sklepie internetowym zmieniona strona p\u0142atno\u015bci mo\u017ce wyrz\u0105dzi\u0107 wi\u0119ksze szkody ni\u017c widoczna awaria. Dochodz\u0105 koszty analizy, odtwarzania, przestoju i utraty zaufania. P\u00f3\u017aniejsza aktualizacja nie usuwa wcze\u015bniej zainstalowanej furtki. Konkretne \u015blady w\u0142amania wymagaj\u0105 izolacji, zabezpieczenia dowod\u00f3w, kontroli danych dost\u0119powych i odtworzenia z zaufanego stanu.<\/p>\n<h2>Czy administratorzy rzeczywi\u015bcie zainstaluj\u0105 poprawki?<\/h2>\n<p><strong>Ocena:<\/strong> Szybki pocz\u0105tkowy spadek liczby zagro\u017conych instalacji jest prawdopodobny; pe\u0142ne zako\u0144czenie aktualizacji w ci\u0105gu kilku dni wydaje si\u0119 ma\u0142o realne. Centralnie utrzymywane platformy mog\u0105 poprawi\u0107 wiele witryn jednocze\u015bnie. W\u0142asne serwery zale\u017c\u0105 od odpowiedzialno\u015bci, dost\u0119pno\u015bci pakiet\u00f3w, zgodno\u015bci i kontrolowanych restart\u00f3w. Google Cloud wyra\u017anie rozr\u00f3\u017cnia \u015brodowiska aktualizowane automatycznie oraz us\u0142ugi wymagaj\u0105ce ponownego wdro\u017cenia. <a href=\"https:\/\/cloud.google.com\/blog\/products\/identity-security\/responding-to-core-php-vulnerabilities-cve-2026-109618-cve-2026-109619\">[8]<\/a><\/p>\n<p>Najtrudniejsza pozostanie zapewne grupa porzuconych projekt\u00f3w, starych wdro\u017ce\u0144 agencyjnych, kontener\u00f3w bez procesu utrzymania i aplikacji zale\u017cnych od niewspieranych ga\u0142\u0119zi. Op\u00f3\u017anienia nie oznaczaj\u0105 automatycznie zaniedbania administrator\u00f3w. Brak bud\u017cetu, niejasny podzia\u0142 odpowiedzialno\u015bci i niesprawdzone zale\u017cno\u015bci starszych aplikacji mog\u0105 organizacyjnie zablokowa\u0107 prost\u0105 technicznie poprawk\u0119. Konkretna globalna skuteczno\u015b\u0107 aktualizacji by\u0142aby obecnie spekulacj\u0105.<\/p>\n<h2>Ile witryn pozostanie zagro\u017conych?<\/h2>\n<p>Wed\u0142ug W3Techs z 22 pa\u017adziernika PHP wyst\u0119puje w <strong>69,3 proc. witryn o rozpoznanym j\u0119zyku programowania po stronie serwera<\/strong>. W\u015br\u00f3d rozpoznanych witryn PHP udzia\u0142 PHP 7 wynosi 26,9 proc., a PHP 5 \u2014 7,7 proc., \u0142\u0105cznie 34,6 proc. Te liczby opisuj\u0105 popularno\u015b\u0107 i starsze wersje, a nie zmierzon\u0105 liczb\u0119 instalacji bez poprawki. <a href=\"https:\/\/w3techs.com\/technologies\/details\/pl-php\">[9]<\/a><\/p>\n<p>Nie wynika z tego wiarygodna bezwzgl\u0119dna liczba nadal zagro\u017conych witryn. Poprawki dostawc\u00f3w, r\u00f3\u017cnice konfiguracji, ukryte numery wersji oraz wiele witryn na jednym serwerze uniemo\u017cliwiaj\u0105 proste przeliczenie. Pojedyncze podstrony, domeny i serwery s\u0105 ponadto r\u00f3\u017cnymi jednostkami zliczania.<\/p>\n<p>Wy\u0142\u0105cznie ilustracja rachunkowa: w grupie miliona faktycznie podatnych instalacji skuteczne uko\u0144czenie 95 proc. aktualizacji pozostawi\u0142oby 50 000 bez poprawki. To <strong>ani pomiar, ani prognoza<\/strong>. Obliczenie pokazuje jedynie, dlaczego nawet wysoki poziom uko\u0144czenia aktualizacji mo\u017ce pozostawi\u0107 znacz\u0105c\u0105 grup\u0119 zagro\u017conych system\u00f3w. Dla konkretnej witryny potwierdzony stan poprawki ma wi\u0119ksz\u0105 warto\u015b\u0107 ni\u017c globalny procent.<\/p>\n<h2>Linux w praktyce: inwentaryzacja faktycznie u\u017cywanego \u015brodowiska<\/h2>\n<p>Poni\u017csze przyk\u0142ady dotycz\u0105 system\u00f3w Debian\/Ubuntu z APT i ju\u017c skonfigurowanymi zaufanymi repozytoriami. Odpowiednia ga\u0142\u0105\u017a PHP musi by\u0107 wcze\u015bniej zainstalowana. Systemy RPM, panele hostingowe i w\u0142asne kontenery wymagaj\u0105 procedury w\u0142a\u015bciwego dostawcy. Dodanie przypadkowego zewn\u0119trznego repozytorium nie jest wiarygodn\u0105 strategi\u0105 naprawy.<\/p>\n<p>Przed zmian\u0105 potrzebne s\u0105 kopia umo\u017cliwiaj\u0105ca odtworzenie, przypisanie domen do pul PHP i kr\u00f3tki plan test\u00f3w funkcjonalnych. Instalacja pakiet\u00f3w mo\u017ce sama restartowa\u0107 us\u0142ugi, dlatego okno serwisowe rozpoczyna si\u0119 przed poleceniem instalacji. Inwentaryzacja pokazuje CLI i us\u0142ugi, ale jeszcze nie potwierdza sposobu obs\u0142ugi witryny:<\/p>\n\n<figure style=\"--cbb-digits:1\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"bash\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Shell<\/span><span class=\"cbb-title\">Linux: inwentaryzacja PHP<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-bash\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-function\">cat<\/span> \/etc\/os-release\n<\/span><span class=\"cbb-line\">command <span class=\"cbb-attr\">-v<\/span> <span class=\"cbb-function\">php<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">php<\/span> <span class=\"cbb-attr\">-v<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">php<\/span> <span class=\"cbb-attr\">--ini<\/span>\n<\/span><span class=\"cbb-line\">dpkg-query <span class=\"cbb-attr\">-W<\/span> <span class=\"cbb-attr\">-f<\/span>=<span class=\"cbb-string\">'${binary:Package}\\t${Version}\\n'<\/span> <span class=\"cbb-string\">'php*'<\/span> <span class=\"cbb-string\">'libapache2-mod-php*'<\/span> <span class=\"cbb-number\">2<\/span><span class=\"cbb-operator\">&gt;<\/span>\/dev\/null\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">systemctl<\/span> list-units <span class=\"cbb-attr\">--type<\/span>=<span class=\"cbb-function\">service<\/span> <span class=\"cbb-attr\">--all<\/span> <span class=\"cbb-operator\">|<\/span> <span class=\"cbb-function\">grep<\/span> <span class=\"cbb-attr\">-E<\/span> <span class=\"cbb-string\">'php.*fpm|apache2|nginx'<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">ps<\/span> <span class=\"cbb-attr\">-eo<\/span> pid,lstart,comm <span class=\"cbb-operator\">|<\/span> <span class=\"cbb-function\">grep<\/span> <span class=\"cbb-attr\">-E<\/span> <span class=\"cbb-string\">'php|apache2'<\/span><\/span><\/code><\/pre><\/figure>\n\n<p>Domena mo\u017ce korzysta\u0107 z PHP 8.4 przez FPM, podczas gdy polecenie <code>php<\/code> wskazuje na 8.5. Dodatkowe kopie mog\u0105 istnie\u0107 w kontenerach, katalogach hostingu i zapomnianych us\u0142ugach testowych. Potwierdzenie dla ka\u017cdej instalacji wymaga \u017ar\u00f3d\u0142a pakietu, pe\u0142nej rewizji, us\u0142ugi lub kontenera oraz przypisanych witryn.<\/p>\n<h2>Aktualizacja PHP 8.4 przez APT<\/h2>\n<p>Procedura aktualizuje wy\u0142\u0105cznie ju\u017c zainstalowane pakiety ga\u0142\u0119zi 8.4, w tym rozszerzenia i ewentualny modu\u0142 Apache. Symulacja nie zmienia pakiet\u00f3w. Kandydat musi zawiera\u0107 PHP 8.4.27 albo potwierdzon\u0105 przez dostawc\u0119 poprawk\u0119 obu CVE. Dla Debiana 13 jako poprawion\u0105 udokumentowano rewizj\u0119 <code>8.4.27-1~deb13u1<\/code>. <a href=\"https:\/\/manpages.debian.org\/bookworm\/apt\/apt-get.8.en.html\">Dokumentacja APT<\/a> \u00b7 <a href=\"https:\/\/security-tracker.debian.org\/tracker\/CVE-2026-109618\">Debian: CVE-2026-109618<\/a> \u00b7 <a href=\"https:\/\/security-tracker.debian.org\/tracker\/CVE-2026-109619\">Debian: CVE-2026-109619<\/a><\/p>\n\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"bash\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Shell<\/span><span class=\"cbb-title\">PHP 8.4: repozytorium i plan aktualizacji<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-bash\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-keyword\">set<\/span> <span class=\"cbb-attr\">-euo<\/span> pipefail\n<\/span><span class=\"cbb-line\">branch=<span class=\"cbb-number\">8.4<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">sudo<\/span> <span class=\"cbb-function\">apt-get<\/span> update\n<\/span><span class=\"cbb-line\">mapfile <span class=\"cbb-attr\">-t<\/span> php_packages &lt; &lt;(\n<\/span><span class=\"cbb-line\">  dpkg-query <span class=\"cbb-attr\">-W<\/span> <span class=\"cbb-attr\">-f<\/span>=<span class=\"cbb-string\">'${db:Status-Abbrev} ${binary:Package}\\n'<\/span> \\\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-string\">\"php<\/span><span class=\"cbb-variable\">${branch}<\/span><span class=\"cbb-string\">-*\"<\/span> <span class=\"cbb-string\">\"libapache2-mod-php<\/span><span class=\"cbb-variable\">${branch}<\/span><span class=\"cbb-string\">\"<\/span> <span class=\"cbb-number\">2<\/span><span class=\"cbb-operator\">&gt;<\/span>\/dev\/null <span class=\"cbb-operator\">|<\/span>\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-function\">awk<\/span> <span class=\"cbb-string\">'$1 == \"ii\" { print $2 }'<\/span>\n<\/span><span class=\"cbb-line\">)\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">test<\/span> <span class=\"cbb-string\">\"<\/span><span class=\"cbb-variable\">${#php_packages&#91;@&#93;}<\/span><span class=\"cbb-string\">\"<\/span> <span class=\"cbb-attr\">-gt<\/span> <span class=\"cbb-number\">0<\/span>\n<\/span><span class=\"cbb-line\">apt-cache policy <span class=\"cbb-string\">\"<\/span><span class=\"cbb-variable\">${php_packages&#91;@&#93;}<\/span><span class=\"cbb-string\">\"<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">sudo<\/span> <span class=\"cbb-function\">apt-get<\/span> <span class=\"cbb-attr\">-s<\/span> install <span class=\"cbb-attr\">--only-upgrade<\/span> <span class=\"cbb-string\">\"<\/span><span class=\"cbb-variable\">${php_packages&#91;@&#93;}<\/span><span class=\"cbb-string\">\"<\/span><\/span><\/code><\/pre><\/figure>\n\n<p>Instalacja nast\u0119puje dopiero po sprawdzeniu planu. Nieoczekiwane usuwanie pakiet\u00f3w, zmiana ga\u0142\u0119zi lub nadal podatny kandydat wymagaj\u0105 przerwania procedury. Kolejny blok nale\u017cy do tej samej sesji Bash i zak\u0142ada istniej\u0105c\u0105 us\u0142ug\u0119 FPM:<\/p>\n\n<figure style=\"--cbb-digits:1\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"bash\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Shell<\/span><span class=\"cbb-title\">PHP 8.4: instalacja i kontrola FPM<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-bash\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-function\">sudo<\/span> <span class=\"cbb-function\">apt-get<\/span> install <span class=\"cbb-attr\">--only-upgrade<\/span> <span class=\"cbb-string\">\"<\/span><span class=\"cbb-variable\">${php_packages&#91;@&#93;}<\/span><span class=\"cbb-string\">\"<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">sudo<\/span> \/usr\/sbin\/php-fpm8.4 <span class=\"cbb-attr\">-t<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">sudo<\/span> <span class=\"cbb-function\">systemctl<\/span> restart php8.4-fpm\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">systemctl<\/span> is-active php8.4-fpm\n<\/span><span class=\"cbb-line\">\/usr\/bin\/php8.4 <span class=\"cbb-attr\">-v<\/span>\n<\/span><span class=\"cbb-line\">\/usr\/sbin\/php-fpm8.4 <span class=\"cbb-attr\">-v<\/span><\/span><\/code><\/pre><\/figure>\n\n<h2>Aktualizacja PHP 8.5 przez APT<\/h2>\n<p>Dla istniej\u0105cej instalacji 8.5 obowi\u0105zuje analogiczny przebieg z poprawionym kandydatem od 8.5.12 albo potwierdzon\u0105 poprawk\u0105 dostawcy. Standardowe repozytorium Debiana 13 nie udost\u0119pnia PHP 8.5 tylko dlatego, \u017ce istnieje nowsza ga\u0142\u0105\u017a PHP. Brak odpowiedniego kandydata z ju\u017c zatwierdzonego \u017ar\u00f3d\u0142a ko\u0144czy procedur\u0119 przed instalacj\u0105.<\/p>\n\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"bash\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Shell<\/span><span class=\"cbb-title\">PHP 8.5: repozytorium i plan aktualizacji<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-bash\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-keyword\">set<\/span> <span class=\"cbb-attr\">-euo<\/span> pipefail\n<\/span><span class=\"cbb-line\">branch=<span class=\"cbb-number\">8.5<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">sudo<\/span> <span class=\"cbb-function\">apt-get<\/span> update\n<\/span><span class=\"cbb-line\">mapfile <span class=\"cbb-attr\">-t<\/span> php_packages &lt; &lt;(\n<\/span><span class=\"cbb-line\">  dpkg-query <span class=\"cbb-attr\">-W<\/span> <span class=\"cbb-attr\">-f<\/span>=<span class=\"cbb-string\">'${db:Status-Abbrev} ${binary:Package}\\n'<\/span> \\\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-string\">\"php<\/span><span class=\"cbb-variable\">${branch}<\/span><span class=\"cbb-string\">-*\"<\/span> <span class=\"cbb-string\">\"libapache2-mod-php<\/span><span class=\"cbb-variable\">${branch}<\/span><span class=\"cbb-string\">\"<\/span> <span class=\"cbb-number\">2<\/span><span class=\"cbb-operator\">&gt;<\/span>\/dev\/null <span class=\"cbb-operator\">|<\/span>\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-function\">awk<\/span> <span class=\"cbb-string\">'$1 == \"ii\" { print $2 }'<\/span>\n<\/span><span class=\"cbb-line\">)\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">test<\/span> <span class=\"cbb-string\">\"<\/span><span class=\"cbb-variable\">${#php_packages&#91;@&#93;}<\/span><span class=\"cbb-string\">\"<\/span> <span class=\"cbb-attr\">-gt<\/span> <span class=\"cbb-number\">0<\/span>\n<\/span><span class=\"cbb-line\">apt-cache policy <span class=\"cbb-string\">\"<\/span><span class=\"cbb-variable\">${php_packages&#91;@&#93;}<\/span><span class=\"cbb-string\">\"<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">sudo<\/span> <span class=\"cbb-function\">apt-get<\/span> <span class=\"cbb-attr\">-s<\/span> install <span class=\"cbb-attr\">--only-upgrade<\/span> <span class=\"cbb-string\">\"<\/span><span class=\"cbb-variable\">${php_packages&#91;@&#93;}<\/span><span class=\"cbb-string\">\"<\/span><\/span><\/code><\/pre><\/figure>\n\n<p>Kontynuacja r\u00f3wnie\u017c wymaga sprawdzonego planu, tej samej sesji Bash i istniej\u0105cej us\u0142ugi FPM.<\/p>\n\n<figure style=\"--cbb-digits:1\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"bash\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Shell<\/span><span class=\"cbb-title\">PHP 8.5: instalacja i kontrola FPM<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-bash\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-function\">sudo<\/span> <span class=\"cbb-function\">apt-get<\/span> install <span class=\"cbb-attr\">--only-upgrade<\/span> <span class=\"cbb-string\">\"<\/span><span class=\"cbb-variable\">${php_packages&#91;@&#93;}<\/span><span class=\"cbb-string\">\"<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">sudo<\/span> \/usr\/sbin\/php-fpm8.5 <span class=\"cbb-attr\">-t<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">sudo<\/span> <span class=\"cbb-function\">systemctl<\/span> restart php8.5-fpm\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">systemctl<\/span> is-active php8.5-fpm\n<\/span><span class=\"cbb-line\">\/usr\/bin\/php8.5 <span class=\"cbb-attr\">-v<\/span>\n<\/span><span class=\"cbb-line\">\/usr\/sbin\/php-fpm8.5 <span class=\"cbb-attr\">-v<\/span><\/span><\/code><\/pre><\/figure>\n\n<p>Apache z mod_php wymaga natomiast zaktualizowanego modu\u0142u Apache oraz kontrolowanego restartu po poprawnym te\u015bcie konfiguracji. W Debianie s\u0142u\u017cy do tego <code>sudo apache2ctl configtest<\/code>. Aktualizacja PHP w konfiguracji opartej wy\u0142\u0105cznie na FPM nie wymaga automatycznie restartu nginx. Oddzielne procesy nadrz\u0119dne FPM, stale dzia\u0142aj\u0105ce us\u0142ugi CLI i kontenery wymagaj\u0105 osobnej obs\u0142ugi. Restart mo\u017ce przerwa\u0107 aktywne \u017c\u0105dania; w \u015brodowisku redundantnym wdro\u017cenie powinno nast\u0119powa\u0107 etapami.<\/p>\n<h2>Aktualny pakiet nie potwierdza aktualnego procesu<\/h2>\n<p>Linux mo\u017ce utrzymywa\u0107 proces korzystaj\u0105cy ze starego pliku wykonywalnego mimo jego zast\u0105pienia. Nowe wywo\u0142anie <code>php -v<\/code> pokazuje wtedy poprawion\u0105 wersj\u0119, lecz istniej\u0105cy proces nadal u\u017cywa starego kodu. Poni\u017csza kontrola tylko odczytuje informacje i wykrywa procesy PHP korzystaj\u0105ce z usuni\u0119tego pliku:<\/p>\n\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"bash\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Shell<\/span><span class=\"cbb-title\">Wykrywanie starych plik\u00f3w proces\u00f3w PHP w Linuksie<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-bash\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-function\">sudo<\/span> bash &lt;&lt;<span class=\"cbb-string\">'BASH'<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">for<\/span> link <span class=\"cbb-keyword\">in<\/span> \/proc\/&#91;<span class=\"cbb-number\">0<\/span>-9&#93;*\/exe<span class=\"cbb-operator\">;<\/span> <span class=\"cbb-keyword\">do<\/span>\n<\/span><span class=\"cbb-line\">  target=<span class=\"cbb-variable\">$(<\/span>readlink <span class=\"cbb-string\">\"<\/span><span class=\"cbb-variable\">$link<\/span><span class=\"cbb-string\">\"<\/span> <span class=\"cbb-number\">2<\/span><span class=\"cbb-operator\">&gt;<\/span>\/dev\/null) <span class=\"cbb-operator\">||<\/span> <span class=\"cbb-keyword\">continue<\/span>\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">case<\/span> <span class=\"cbb-string\">\"<\/span><span class=\"cbb-variable\">$target<\/span><span class=\"cbb-string\">\"<\/span> <span class=\"cbb-keyword\">in<\/span>\n<\/span><span class=\"cbb-line\">    *<span class=\"cbb-function\">php<\/span>*<span class=\"cbb-string\">\"(deleted)\"<\/span>*)\n<\/span><span class=\"cbb-line\">      pid=<span class=\"cbb-variable\">${link#\/proc\/}<\/span>\n<\/span><span class=\"cbb-line\">      pid=<span class=\"cbb-variable\">${pid%\/exe}<\/span>\n<\/span><span class=\"cbb-line\">      <span class=\"cbb-function\">printf<\/span> <span class=\"cbb-string\">'PID %s: %s\\n'<\/span> <span class=\"cbb-string\">\"<\/span><span class=\"cbb-variable\">$pid<\/span><span class=\"cbb-string\">\"<\/span> <span class=\"cbb-string\">\"<\/span><span class=\"cbb-variable\">$target<\/span><span class=\"cbb-string\">\"<\/span>\n<\/span><span class=\"cbb-line\">      <span class=\"cbb-operator\">;<\/span><span class=\"cbb-operator\">;<\/span>\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">esac<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">done<\/span>\n<\/span><span class=\"cbb-line\">BASH<\/span><\/code><\/pre><\/figure>\n\n<p>Trafienie wymaga sprawdzenia wersji i us\u0142ugi, ale nie stanowi dowodu w\u0142amania. Pusty wynik r\u00f3wnie\u017c nie potwierdza pe\u0142nej ochrony: za\u0142adowane modu\u0142y Apache, biblioteki i oddzielnie osadzone \u015brodowiska wymagaj\u0105 w\u0142asnej kontroli. Licz\u0105 si\u0119 aktywne procesy, a nie wy\u0142\u0105cznie lista pakiet\u00f3w. Testy konkretnej aplikacji powinny obj\u0105\u0107 logowanie, wysy\u0142anie plik\u00f3w, formularze, kolejki i zadania cykliczne. Publiczne strony <code>phpinfo()<\/code> nie nadaj\u0105 si\u0119 do takiej kontroli; lepsza jest chroniona diagnostyka wewn\u0119trzna lub przypisanie aktywnego procesu.<\/p>\n<h2>PHP 7.4: poprawka bezpiecze\u0144stwa zamiast niezmienionego 7.4.33<\/h2>\n<p>PHP 7.4 pozostaje niewspierane. Preferowane rozwi\u0105zanie to migracja do wspieranej ga\u0142\u0119zi albo zweryfikowana poprawka LTS od dotychczasowego dostawcy. Na nieunikniony okres przej\u015bciowy projekt PHP opublikowa\u0142 minimaln\u0105 poprawk\u0119 kodu \u017ar\u00f3d\u0142owego obejmuj\u0105c\u0105 oba identyfikatory PHP2Shell. Nie przywraca to og\u00f3lnego wsparcia ani nie gwarantuje naprawy innych podatno\u015bci.<\/p>\n<p>Commit bezpiecze\u0144stwa zweryfikowany 22 pa\u017adziernika to <code>712e60f9edfd03f0960fc4fc3c2c375f42b90aa2<\/code>. Poni\u017csza procedura jednoznacznie wi\u0105\u017ce \u017ar\u00f3d\u0142a z t\u0105 rewizj\u0105. Ponowne zbudowanie niezmienionego wydania 7.4.33 nie zawiera tej poprawki. <a href=\"https:\/\/github.com\/php\/php-src\/commit\/712e60f9edfd03f0960fc4fc3c2c375f42b90aa2\">PHP: konkretny commit bezpiecze\u0144stwa<\/a><\/p>\n<p>Przyk\u0142ad tworzy minimalne CLI\/FPM w oddzielnym, zgodnym \u015brodowisku kompilacji Debian\/Ubuntu z dost\u0119pnymi Git i certyfikatami CA. Wszystkie bloki dzia\u0142aj\u0105 w tej samej sesji Bash. To <strong>nie jest instalacja wykonana ani w pe\u0142ni zatwierdzona na serwerze produkcyjnym na potrzeby artyku\u0142u<\/strong>. Stare \u017ar\u00f3d\u0142a PHP nie s\u0105 zgodne z dowolnymi aktualnymi bibliotekami systemowymi.<\/p>\n\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"bash\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Shell<\/span><span class=\"cbb-title\">PHP 7.4: wskazanie oficjalnego commitu bezpiecze\u0144stwa<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-bash\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-keyword\">set<\/span> <span class=\"cbb-attr\">-euo<\/span> pipefail\n<\/span><span class=\"cbb-line\">workdir=<span class=\"cbb-variable\">$(<\/span>mktemp <span class=\"cbb-attr\">-d<\/span> <span class=\"cbb-string\">\"<\/span><span class=\"cbb-variable\">$HOME<\/span><span class=\"cbb-string\">\/php74-php2shell.XXXXXX\"<\/span>)\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">cd<\/span> <span class=\"cbb-string\">\"<\/span><span class=\"cbb-variable\">$workdir<\/span><span class=\"cbb-string\">\"<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">git<\/span> init php-src\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">cd<\/span> php-src\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">git<\/span> remote add origin https:\/\/github.com\/<span class=\"cbb-function\">php<\/span>\/php-src.<span class=\"cbb-function\">git<\/span>\n<\/span><span class=\"cbb-line\">commit=712e60f9edfd03f0960fc4fc3c2c375f42b90aa2\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">git<\/span> fetch <span class=\"cbb-attr\">--depth<\/span>=<span class=\"cbb-number\">1<\/span> origin <span class=\"cbb-string\">\"<\/span><span class=\"cbb-variable\">$commit<\/span><span class=\"cbb-string\">\"<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">git<\/span> checkout <span class=\"cbb-attr\">--detach<\/span> FETCH_HEAD\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">test<\/span> <span class=\"cbb-string\">\"$(git rev-parse HEAD)\"<\/span> = <span class=\"cbb-string\">\"<\/span><span class=\"cbb-variable\">$commit<\/span><span class=\"cbb-string\">\"<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">git<\/span> show <span class=\"cbb-attr\">-s<\/span> <span class=\"cbb-attr\">--format<\/span>=<span class=\"cbb-string\">'%H%n%s%n%b'<\/span> HEAD<\/span><\/code><\/pre><\/figure>\n\n<p>Poni\u017cej znajduj\u0105 si\u0119 podstawowe narz\u0119dzia i oddzielny katalog instalacyjny. <code>--disable-all<\/code> ogranicza zakres przyk\u0142adu; wynik nie zawiera automatycznie wszystkich rozszerze\u0144 potrzebnych WordPressowi lub innej aplikacji. U\u017cytkownik i grupa <code>www-data<\/code> musz\u0105 istnie\u0107 w \u015brodowisku docelowym. <a href=\"https:\/\/www.php.net\/manual\/en\/install.unix.php\">PHP: instalacja w Uniksie<\/a> \u00b7 <a href=\"https:\/\/www.php.net\/manual\/en\/install.fpm.install.php\">PHP: opcje kompilacji FPM<\/a><\/p>\n\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"bash\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Shell<\/span><span class=\"cbb-title\">PHP 7.4: minimalna kompilacja i testy<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-bash\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-function\">sudo<\/span> <span class=\"cbb-function\">apt-get<\/span> update\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">sudo<\/span> <span class=\"cbb-function\">apt-get<\/span> install <span class=\"cbb-attr\">--no-install-recommends<\/span> \\\n<\/span><span class=\"cbb-line\">  build-essential autoconf bison re2c pkg-config \\\n<\/span><span class=\"cbb-line\">  libxml2-dev libsqlite3-dev\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\">.\/buildconf <span class=\"cbb-attr\">--force<\/span>\n<\/span><span class=\"cbb-line\">prefix=\/opt\/php74-php2shell-712e60f9\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">test<\/span> ! <span class=\"cbb-attr\">-e<\/span> <span class=\"cbb-string\">\"<\/span><span class=\"cbb-variable\">$prefix<\/span><span class=\"cbb-string\">\"<\/span>\n<\/span><span class=\"cbb-line\">.\/configure \\\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-attr\">--prefix<\/span>=<span class=\"cbb-string\">\"<\/span><span class=\"cbb-variable\">$prefix<\/span><span class=\"cbb-string\">\"<\/span> \\\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-attr\">--with-config-file-path<\/span>=<span class=\"cbb-string\">\"<\/span><span class=\"cbb-variable\">$prefix<\/span><span class=\"cbb-string\">\/etc\"<\/span> \\\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-attr\">--with-config-file-scan-dir<\/span>=<span class=\"cbb-string\">\"<\/span><span class=\"cbb-variable\">$prefix<\/span><span class=\"cbb-string\">\/etc\/conf.d\"<\/span> \\\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-attr\">--disable-all<\/span> <span class=\"cbb-attr\">--enable-cli<\/span> <span class=\"cbb-attr\">--enable-fpm<\/span> <span class=\"cbb-attr\">--enable-session<\/span> \\\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-attr\">--with-fpm-user<\/span>=www-data <span class=\"cbb-attr\">--with-fpm-group<\/span>=www-data \\\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-attr\">--without-pear<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">make<\/span> <span class=\"cbb-attr\">-j2<\/span>\n<\/span><span class=\"cbb-line\">NO_INTERACTION=<span class=\"cbb-number\">1<\/span> REPORT_EXIT_STATUS=<span class=\"cbb-number\">1<\/span> <span class=\"cbb-function\">make<\/span> <span class=\"cbb-function\">test<\/span><\/span><\/code><\/pre><\/figure>\n\n<p>Nieudane testy i niewyja\u015bnione pomini\u0119cia istotnych test\u00f3w wymagaj\u0105 analizy. Instalacja w nowym katalogu nast\u0119puje dopiero po zaakceptowanym przebiegu test\u00f3w; nie zast\u0119puje <code>\/usr\/bin\/php<\/code> ani pakiet\u00f3w dystrybucji:<\/p>\n\n<figure style=\"--cbb-digits:1\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"bash\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Shell<\/span><span class=\"cbb-title\">PHP 7.4: oddzielna instalacja i identyfikacja<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-bash\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-function\">sudo<\/span> <span class=\"cbb-function\">make<\/span> install\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">sudo<\/span> install <span class=\"cbb-attr\">-d<\/span> <span class=\"cbb-attr\">-m<\/span> <span class=\"cbb-number\">0755<\/span> <span class=\"cbb-string\">\"<\/span><span class=\"cbb-variable\">$prefix<\/span><span class=\"cbb-string\">\/etc\/conf.d\"<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">sudo<\/span> install <span class=\"cbb-attr\">-m<\/span> <span class=\"cbb-number\">0644<\/span> <span class=\"cbb-function\">php<\/span>.ini-production <span class=\"cbb-string\">\"<\/span><span class=\"cbb-variable\">$prefix<\/span><span class=\"cbb-string\">\/etc\/php.ini\"<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-string\">\"<\/span><span class=\"cbb-variable\">$prefix<\/span><span class=\"cbb-string\">\/bin\/php\"<\/span> <span class=\"cbb-attr\">-n<\/span> <span class=\"cbb-attr\">-v<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-string\">\"<\/span><span class=\"cbb-variable\">$prefix<\/span><span class=\"cbb-string\">\/bin\/php\"<\/span> <span class=\"cbb-attr\">--ini<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-string\">\"<\/span><span class=\"cbb-variable\">$prefix<\/span><span class=\"cbb-string\">\/sbin\/php-fpm\"<\/span> <span class=\"cbb-attr\">-v<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">git<\/span> rev-parse HEAD<\/span><\/code><\/pre><\/figure>\n\n<p>Wynik mo\u017ce nadal zawiera\u0107 numer wersji 7.4. Dowodem poprawki s\u0105 zweryfikowany commit \u017ar\u00f3d\u0142owy, protok\u00f3\u0142 kompilacji i faktycznie uruchomiony artefakt. U\u017cycie produkcyjne wymaga jeszcze potrzebnych rozszerze\u0144 i test\u00f3w, np. sterownik\u00f3w bazy danych, mbstring, XML, cURL lub ZIP. Biblioteki deweloperskie, ABI oraz phpize\/php-config musz\u0105 odpowiada\u0107 dok\u0142adnie temu buildowi.<\/p>\n<p>Nast\u0119pnie osobnej kontroli wymagaj\u0105 konfiguracja FPM, konta pul i uprawnienia plik\u00f3w. Dedykowane gniazdo i oddzielna us\u0142uga zapobiegaj\u0105 przypadkowemu mieszaniu z dotychczasowym \u015brodowiskiem. Dopiero po poprawnym te\u015bcie nowym <code>php-fpm -t -y \/sciezka\/do\/php-fpm.conf<\/code> nast\u0119puje prze\u0142\u0105czenie obs\u0142ugi WWW na t\u0119 pul\u0119. Poprawne wywo\u0142anie CLI nie zmienia \u017cadnej witryny. W przypadku nieudanego wdro\u017cenia powr\u00f3t nie powinien po cichu przywraca\u0107 publicznego dost\u0119pu do podatnego \u015brodowiska; rozwi\u0105zaniem przej\u015bciowym pozostaje izolacja.<\/p>\n<h2>\u015alady ataku: korelacja wielu sygna\u0142\u00f3w<\/h2>\n<p>Datadog odtworzy\u0142 b\u0142\u0119dy we w\u0142asnym laboratorium. Skuteczne wykonanie kodu nie musi powodowa\u0107 awarii procesu ani podejrzanego statusu HTTP. HTTP 200 nie jest zatem potwierdzeniem bezpiecze\u0144stwa. Podejrzane formularze, b\u0142\u0119dy pami\u0119ci i niespodziewane procesy potomne nabieraj\u0105 znaczenia w powi\u0105zaniu czasowym. Pojedynczy b\u0142\u0105d braku pami\u0119ci nie dowodzi ataku. <a href=\"https:\/\/securitylabs.datadoghq.com\/articles\/php2shell-critical-vulnerabilities-in-php\/\">Datadog Security Labs: w\u0142asna analiza<\/a><\/p>\n<p>Dochodzenie \u0142\u0105czy logi serwera WWW i proxy, b\u0142\u0119dy PHP, zdarzenia proces\u00f3w oraz nieoczekiwane zmiany plik\u00f3w. Istniej\u0105ce dowody wymagaj\u0105 zabezpieczenia przed czyszczeniem. Masowe zapisywanie pe\u0142nej tre\u015bci formularzy wprowadza\u0142oby has\u0142a i dane osobowe do log\u00f3w; lepsze s\u0105 metadane i kontrolowane zbieranie dowod\u00f3w. WAF mo\u017ce ogranicza\u0107 \u017c\u0105dania, ale nie naprawia PHP. Zako\u0144czenie wymaga dw\u00f3ch oddzielnych ustale\u0144: aktywnego poprawionego \u015brodowiska oraz zbadania mo\u017cliwo\u015bci wcze\u015bniejszego w\u0142amania.<\/p>\n<h2>Rozpoznawanie PHP2Shell w logach: podejrzenie to jeszcze nie dow\u00f3d<\/h2>\n<p>Nie istnieje uniwersalny wpis \u201ewykryto PHP2Shell\u201d. Analiza musi rozr\u00f3\u017cnia\u0107 nietypowe \u017c\u0105danie, b\u0142\u0105d techniczny i potwierdzone wykonanie obcego kodu. Przydatny ci\u0105g zdarze\u0144 \u0142\u0105czy nietypowe \u017c\u0105danie na proxy, b\u0142\u0105d lub zdarzenie procesu odpowiedniej puli PHP oraz p\u00f3\u017aniejsze dzia\u0142anie niewynikaj\u0105ce z normalnej pracy. Brak wpis\u00f3w mo\u017ce te\u017c oznacza\u0107 wy\u0142\u0105czone logowanie, rotacj\u0119 albo zbyt kr\u00f3tki okres przechowywania.<\/p>\n<table><thead><tr><th>Obserwacja<\/th><th>Interpretacja<\/th><th>Dalsza kontrola<\/th><\/tr><\/thead><tbody>\n<tr><td>Wiele \u017c\u0105da\u0144 POST lub du\u017ce pliki<\/td><td>R\u00f3wnie\u017c normalne podczas import\u00f3w i dozwolonego przesy\u0142ania<\/td><td>\u015acie\u017cka docelowa, czas i odst\u0119pstwo od zwyk\u0142ego obci\u0105\u017cenia<\/td><\/tr>\n<tr><td>Brak pami\u0119ci, zako\u0144czenie procesu lub segfault<\/td><td>Poszlaka, nie jednoznaczna sygnatura PHP2Shell<\/td><td>Powi\u0105zane \u017c\u0105dania, pula, PID i znane b\u0142\u0119dy oprogramowania<\/td><\/tr>\n<tr><td>Nieoczekiwana pow\u0142oka lub narz\u0119dzie pobierania jako proces potomny<\/td><td>Wy\u017cszy priorytet; cz\u0119\u015b\u0107 aplikacji legalnie uruchamia takie programy<\/td><td>Proces nadrz\u0119dny, rzeczywisty cel i powi\u0105zanie czasowe<\/td><\/tr>\n<tr><td>Niezatwierdzona zmiana kodu albo potwierdzone obce polecenie<\/td><td>Konkretny sygna\u0142 naruszenia<\/td><td>Izolacja, zabezpieczenie dowod\u00f3w i ustalenie zakresu<\/td><\/tr>\n<\/tbody><\/table>\n<h2>Pierwsze zapytania do log\u00f3w w Linuksie<\/h2>\n<p>Poni\u017csze polecenia odczytuj\u0105 istniej\u0105ce dane. Nazwy us\u0142ug, \u015bcie\u017cki i przedzia\u0142 czasu musz\u0105 odpowiada\u0107 instalacji. Podana godzina korzysta z lokalnej strefy systemu; korelacja mi\u0119dzy systemami wymaga uwzgl\u0119dnienia przesuni\u0119\u0107 i synchronizacji zegar\u00f3w. B\u0142\u0119dy PHP trafi\u0105 do dziennika tylko wtedy, gdy us\u0142uga rzeczywi\u015bcie wysy\u0142a tam takie komunikaty. <a href=\"https:\/\/www.freedesktop.org\/software\/systemd\/man\/latest\/journalctl.html\">systemd: journalctl<\/a><\/p>\n\n<figure style=\"--cbb-digits:1\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"bash\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Shell<\/span><span class=\"cbb-title\">Dziennik: b\u0142\u0119dy pami\u0119ci i zako\u0144czenia proces\u00f3w<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-bash\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-function\">sudo<\/span> <span class=\"cbb-function\">journalctl<\/span> <span class=\"cbb-attr\">--since<\/span> <span class=\"cbb-string\">'2026-10-17 00:00:00'<\/span> \\\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-attr\">-u<\/span> php8.4-fpm <span class=\"cbb-attr\">-u<\/span> php8.5-fpm <span class=\"cbb-attr\">-u<\/span> apache2 <span class=\"cbb-attr\">-u<\/span> <span class=\"cbb-function\">nginx<\/span> \\\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-attr\">--no-pager<\/span> <span class=\"cbb-attr\">-o<\/span> short-iso <span class=\"cbb-operator\">|<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">grep<\/span> <span class=\"cbb-attr\">-Ei<\/span> <span class=\"cbb-string\">'Allowed memory size.*exhausted|Out of memory|segfault|SIGSEGV|child .*exited on signal'<\/span><\/span><\/code><\/pre><\/figure>\n\n<p>Brak wyniku oznacza wy\u0142\u0105cznie \u201ebrak dopasowania w tych \u017ar\u00f3d\u0142ach dla tego wzorca\u201d. Oddzielne pliki b\u0142\u0119d\u00f3w FPM, logi kontener\u00f3w i protoko\u0142y konkretnych host\u00f3w wymagaj\u0105 dodatkowych zapyta\u0144. Analiza powinna obejmowa\u0107 tak\u017ce pliki po rotacji.<\/p>\n<p>Dla typowych log\u00f3w dost\u0119pu Apache\/nginx zapisuj\u0105cych \u017c\u0105danie HTTP poni\u017csze zapytanie zwraca ostatnie sto pasuj\u0105cych wierszy POST z odczytanych plik\u00f3w. To wst\u0119pna analiza, nie kompletny skaner; kolejno\u015b\u0107 plik\u00f3w nie gwarantuje sortowania chronologicznego:<\/p>\n\n<figure style=\"--cbb-digits:1\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"bash\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Shell<\/span><span class=\"cbb-title\">Logi dost\u0119pu: przegl\u0105d \u017c\u0105da\u0144 POST<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-bash\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-function\">sudo<\/span> zgrep <span class=\"cbb-attr\">-hE<\/span> <span class=\"cbb-string\">'\"POST &#91;^\"&#93;+ HTTP\/&#91;0-9.&#93;+\"'<\/span> \\\n<\/span><span class=\"cbb-line\">  \/var\/log\/<span class=\"cbb-function\">nginx<\/span>\/access.log* \/var\/log\/apache2\/access.log* <span class=\"cbb-operator\">|<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">tail<\/span> <span class=\"cbb-attr\">-n<\/span> <span class=\"cbb-number\">100<\/span><\/span><\/code><\/pre><\/figure>\n\n<p>Nieistniej\u0105ce \u015bcie\u017cki albo inny format wymagaj\u0105 dopasowania wyboru plik\u00f3w. Standardowe logi dost\u0119pu zwykle nie zawieraj\u0105 ca\u0142ego cia\u0142a \u017c\u0105dania. Cz\u0119sto zapisywana liczba bajt\u00f3w opisuje zazwyczaj odpowied\u017a, a nie przes\u0142any plik. Szukanie <code>PHP_SESSION_UPLOAD_PROGRESS<\/code> w zwyk\u0142ych logach dost\u0119pu mo\u017ce wi\u0119c niczego nie znale\u017a\u0107 mimo wys\u0142ania takiego pola formularza. Brakuj\u0105cych danych cia\u0142a \u017c\u0105dania nie da si\u0119 odtworzy\u0107 wstecz. <a href=\"https:\/\/httpd.apache.org\/docs\/2.4\/logs.html\">Apache: znaczenie i konfiguracja log\u00f3w<\/a><\/p>\n<p>Dodatkowego kontekstu mo\u017ce dostarczy\u0107 aktualny obraz relacji mi\u0119dzy procesami:<\/p>\n\n<figure style=\"--cbb-digits:1\" class=\"cbb cbb--wrap wp-block-code-beautifier-block-code\" data-lang=\"bash\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Shell<\/span><span class=\"cbb-title\">Aktualne procesy i procesy nadrz\u0119dne<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-bash\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-function\">ps<\/span> <span class=\"cbb-attr\">-eo<\/span> pid,ppid,lstart,user,comm <span class=\"cbb-attr\">--forest<\/span><\/span><\/code><\/pre><\/figure>\n\n<p>Lista pokazuje wy\u0142\u0105cznie procesy dzia\u0142aj\u0105ce w chwili odczytu. Zako\u0144czone polecenia b\u0119d\u0105 widoczne tylko we wcze\u015bniej uruchomionym monitorowaniu wykonania, np. w telemetrii audytowej lub EDR. Monitoring w\u0142\u0105czony dzisiaj nie dostarcza historii wykonania z przesz\u0142o\u015bci.<\/p>\n<h2>Lepsze logowanie bez gromadzenia tre\u015bci formularzy<\/h2>\n<p>Dodatkowy log nginx mo\u017ce zestawi\u0107 identyfikator \u017c\u0105dania, czas, metod\u0119, \u015bcie\u017ck\u0119, status, rozmiar \u017c\u0105dania i czas obs\u0142ugi. Poni\u017csza propozycja formatu nale\u017cy do kontekstu <code>http<\/code>. U\u0142atwia przysz\u0142\u0105 analiz\u0119; wcze\u015bniejsze braki danych pozostaj\u0105 brakami. <a href=\"https:\/\/nginx.org\/en\/docs\/http\/ngx_http_log_module.html\">nginx: log_format i access_log<\/a><\/p>\n\n<figure style=\"--cbb-digits:1\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"nginx\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">nginx<\/span><span class=\"cbb-title\">nginx: dodatkowy format metadanych<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-nginx\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-keyword\">log_format<\/span> php2shell escape=json\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-string\">'{\"time\":\"$time_iso8601\",\"request_id\":\"$request_id\",'<\/span>\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-string\">'\"client\":\"$remote_addr\",\"method\":\"$request_method\",\"uri\":\"$uri\",'<\/span>\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-string\">'\"status\":\"$status\",\"request_bytes\":\"$request_length\",'<\/span>\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-string\">'\"response_bytes\":\"$body_bytes_sent\",\"duration\":\"$request_time\",'<\/span>\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-string\">'\"upstream_status\":\"$upstream_status\"}'<\/span>;<\/span><\/code><\/pre><\/figure>\n\n<p>Nast\u0119pna dyrektywa w\u0142\u0105cza ten format w wybranym kontek\u015bcie <code>server<\/code>. Istniej\u0105ce logi i dziedziczenie wymagaj\u0105 sprawdzenia, aby nowa dyrektywa nie zast\u0105pi\u0142a niezauwa\u017cenie potrzebnego logowania.<\/p>\n\n<figure style=\"--cbb-digits:1\" class=\"cbb cbb--wrap wp-block-code-beautifier-block-code\" data-lang=\"nginx\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">nginx<\/span><span class=\"cbb-title\">nginx: w\u0142\u0105czenie formatu dla wybranego hosta<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-nginx\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-keyword\">access_log<\/span> \/var\/log\/nginx\/php2shell-access.log php2shell;<\/span><\/code><\/pre><\/figure>\n\n<p>Kontrolowane prze\u0142adowanie poprzedza poprawny test <code>nginx -t<\/code>. <code>request_bytes<\/code> obejmuje ca\u0142e odebrane \u017c\u0105danie wraz z nag\u0142\u00f3wkami, a nie sam rozmiar pliku czy wynikowe zu\u017cycie pami\u0119ci PHP. Format pomija parametry zapytania, ciasteczka, nag\u0142\u00f3wki autoryzacji i cia\u0142o \u017c\u0105dania. Adresy IP oraz \u015bcie\u017cki nadal mog\u0105 zawiera\u0107 dane osobowe; konfiguracja wymaga kontroli dost\u0119pu, retencji i rotacji. Za proxy adres klienta jest wiarygodny tylko przy poprawnie skonfigurowanym \u0142a\u0144cuchu zaufania. <a href=\"https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Logging_Cheat_Sheet.html\">OWASP: bezpieczne logowanie<\/a><\/p>\n<h2>Ochrona przed zako\u0144czeniem aktualizacji<\/h2>\n<p><strong>Priorytetem jest poprawione \u015brodowisko wykonawcze.<\/strong> Dodatkowe zabezpieczenia ograniczaj\u0105 ekspozycj\u0119 i mo\u017cliwe skutki, ale nie zast\u0119puj\u0105 poprawki. Dla publicznej aplikacji bez mo\u017cliwo\u015bci szybkiej aktualizacji najczytelniejszym rozwi\u0105zaniem przej\u015bciowym jest izolacja przed PHP: statyczna strona techniczna, VPN lub wcze\u015bniejsza kontrola dost\u0119pu. Bezpo\u015bredni dost\u0119p do serwera \u017ar\u00f3d\u0142owego musi podlega\u0107 tym samym ograniczeniom; chroniona \u015bcie\u017cka przez CDN przy otwartym backendzie nie wystarcza.<\/p>\n<ul><li><strong>Limity \u017c\u0105da\u0144:<\/strong> Limity rozmiaru, przesy\u0142ania i cz\u0119stotliwo\u015bci na reverse proxy powinny odpowiada\u0107 rzeczywistym potrzebom. Legalne importy i du\u017ce pliki wymagaj\u0105 sprawdzonych regu\u0142. Ma\u0142e \u017c\u0105danie mo\u017ce wewn\u0119trznie zu\u017cy\u0107 wi\u0119cej pami\u0119ci, wi\u0119c limit rozmiaru nie zapewnia pe\u0142nej ochrony.<\/li>\n<li><strong>WAF jako dodatkowa warstwa:<\/strong> Odpowiednie regu\u0142y dostawcy wymagaj\u0105 w\u0142\u0105czenia i kontroli egzekwowania. Tryb obserwacyjny niczego nie blokuje; HTTP 403 potwierdza jedynie odrzucenie danego \u017c\u0105dania.<\/li>\n<li><strong>Ograniczone uprawnienia:<\/strong> Oddzielne konta pul, minimalne prawa plik\u00f3w, ograniczone konta baz danych i dost\u0119p sieciowy zmniejszaj\u0105 mo\u017cliwe szkody. Przej\u0119ta aplikacja nadal mo\u017ce nadu\u017cy\u0107 wszystkich legalnie dost\u0119pnych sekret\u00f3w.<\/li>\n<li><strong>Oficjalne \u015brodki przej\u015bciowe:<\/strong> Wczesne wy\u0142\u0105czenie \u015bledzenia post\u0119pu przesy\u0142ania w sesji blokuje okre\u015blone \u015bcie\u017cki, lecz nie usuwa obu b\u0142\u0119d\u00f3w w ca\u0142o\u015bci. Powszechne zniesienie limitu pami\u0119ci PHP bez odpowiednich ogranicze\u0144 zewn\u0119trznych mo\u017ce spowodowa\u0107 dodatkowe awarie.<\/li><\/ul>\n<h2>Konkretne \u015blady w\u0142amania: oddzielna naprawa i obs\u0142uga incydentu<\/h2>\n<p>Usuni\u0119cie podejrzanego pliku i aktualizacja PHP nie wystarcz\u0105 do wiarygodnego zamkni\u0119cia sprawy. Najpierw potrzebna jest izolacja dotkni\u0119tej instancji przed dalszym dost\u0119pem. R\u00f3wnolegle zabezpieczenia wymagaj\u0105 odpowiednie logi, znaczniki czasu i dost\u0119pne dane proces\u00f3w. Nieprzemy\u015blane czyszczenie mo\u017ce zniszczy\u0107 przydatne dowody.<\/p>\n<p>Kolejne kroki obejmuj\u0105 ocen\u0119 dost\u0119pnych danych i s\u0105siednich system\u00f3w, wymian\u0119 potencjalnie ujawnionych danych dost\u0119powych z zaufanego \u015brodowiska oraz w razie potrzeby odbudow\u0119 ze zweryfikowanych \u017ar\u00f3de\u0142. Kopia zapasowa musi poprzedza\u0107 mo\u017cliwe naruszenie zar\u00f3wno czasowo, jak i pod wzgl\u0119dem zawarto\u015bci. Powr\u00f3t do publicznej obs\u0142ugi wymaga poprawionego aktywnego \u015brodowiska, sprawdzonej aplikacji i dalszej obserwacji. \u201ePoprawka zainstalowana\u201d oraz \u201eincydent zbadany\u201d pozostaj\u0105 oddzielnymi ustaleniami.<\/p>\n<div class=\"lw-faq\"><h2>Pytania i odpowiedzi<\/h2><h3>Czy aktualizacja WordPressa wystarczy?<\/h3><p>Nie. Aktualizacja WordPressa nie zast\u0119puje poprawionego \u015brodowiska PHP. Aplikacja i pakiety serwera wymagaj\u0105 oddzielnej kontroli.<\/p><h3>Czy dzia\u0142aj\u0105ca witryna potwierdza bezpiecze\u0144stwo?<\/h3><p>Nie. Zwyk\u0142e \u017c\u0105dania mog\u0105 dzia\u0142a\u0107 poprawnie mimo podatnego \u015brodowiska. Brak widocznych zmian nie wyklucza r\u00f3wnie\u017c wcze\u015bniejszego w\u0142amania.<\/p><p>Przydatne potwierdzenie \u0142\u0105czy rewizj\u0119 pakietu, informacj\u0119 dostawcy o usuni\u0119ciu obu podatno\u015bci i kontrol\u0119 aktywnych proces\u00f3w WWW. \u015alady naruszenia wymagaj\u0105 dodatkowego dochodzenia.<\/p><\/div><h2>\u0179r\u00f3d\u0142a<\/h2><ol><li><a href=\"https:\/\/www.php.net\/archive\/2026.php#2026-10-21-5\">PHP: Security advisory, 21 October 2026<\/a><\/li><li><a href=\"https:\/\/thephp.foundation\/blog\/2026\/10\/21\/todays-php-security-release-and-how-were-strengthening-php-security\/\">PHP Foundation: security release and background<\/a><\/li><li><a href=\"https:\/\/github.com\/php\/php-src\/security\/advisories\/GHSA-w8hw-w9fx-j79w\">PHP: CVE-2026-109618<\/a><\/li><li><a href=\"https:\/\/github.com\/php\/php-src\/security\/advisories\/GHSA-6wmf-4rv5-p3rp\">PHP: CVE-2026-109619<\/a><\/li><li><a href=\"https:\/\/www.enisa.europa.eu\/news\/joint-statement-on-critical-php-vulnerabilities\">ENISA: joint statement<\/a><\/li><li><a href=\"https:\/\/digital.nhs.uk\/cyber-alerts\/2026\/cc-4875\">NHS England: PHP2Shell<\/a><\/li><li><a href=\"https:\/\/support.cpanel.net\/hc\/en-us\/articles\/44397389677335-Critical-PHP-Security-Release-CVE-2026-109618-and-CVE-2026-109619\">cPanel: corrected package revisions<\/a><\/li><li><a href=\"https:\/\/cloud.google.com\/blog\/products\/identity-security\/responding-to-core-php-vulnerabilities-cve-2026-109618-cve-2026-109619\">Google Cloud: runtime updates and redeployment<\/a><\/li><li><a href=\"https:\/\/w3techs.com\/technologies\/details\/pl-php\">W3Techs: PHP usage, 22 October 2026<\/a><\/li><\/ol><h3>Dodatkowe \u017ar\u00f3d\u0142a pierwotne i dokumentacja<\/h3><ul><li><a href=\"https:\/\/github.com\/php\/php-src\/commit\/712e60f9edfd03f0960fc4fc3c2c375f42b90aa2\">PHP: pinned PHP 7.4 security backport<\/a><\/li><li><a href=\"https:\/\/www.php.net\/manual\/en\/install.unix.php\">PHP: Unix installation<\/a><\/li><li><a href=\"https:\/\/www.php.net\/manual\/en\/install.fpm.install.php\">PHP: FPM compilation options<\/a><\/li><li><a href=\"https:\/\/manpages.debian.org\/bookworm\/apt\/apt-get.8.en.html\">APT: apt-get options and simulation<\/a><\/li><li><a href=\"https:\/\/security-tracker.debian.org\/tracker\/CVE-2026-109618\">Debian: CVE-2026-109618<\/a><\/li><li><a href=\"https:\/\/security-tracker.debian.org\/tracker\/CVE-2026-109619\">Debian: CVE-2026-109619<\/a><\/li><li><a href=\"https:\/\/aws.amazon.com\/blogs\/security\/amazon-threat-intelligence-identifies-php2shell-exploitation-prior-to-public-disclosure-in-madpot\/\">AWS: MadPot observations before disclosure<\/a><\/li><li><a href=\"https:\/\/securitylabs.datadoghq.com\/articles\/php2shell-critical-vulnerabilities-in-php\/\">Datadog Security Labs: reproduction, detection and remediation<\/a><\/li><\/ul><h3>Dalsze analizy i doniesienia<\/h3><ul><li><a href=\"https:\/\/brandefense.io\/blog\/php2shell-php-rce-cve-2026-109618-109619\/\">Brandefense<\/a><\/li><li><a href=\"https:\/\/socradar.io\/blog\/php2shell-cve-2026-109618-cve-2026-109619\/\">SOCRadar<\/a><\/li><li><a href=\"https:\/\/www.abstract.security\/blog\/php2shell-critical-php-rce-vulnerabilities-cve-2026-109618-and-cve-2026-109619\">Abstract Security<\/a><\/li><li><a href=\"https:\/\/www.tanium.com\/blog\/php2shell-responding-to-cve-2026-109618-and-cve-2026-109619\">Tanium<\/a><\/li><li><a href=\"https:\/\/www.securityweek.com\/php2shell-mass-exploitation-looms-for-leaked-critical-php-flaws\/\">SecurityWeek<\/a><\/li><\/ul><p>Dodatkowo wskazany artyku\u0142 Prophet Security by\u0142 niedost\u0119pny podczas analizy i nie zosta\u0142 wykorzystany jako dow\u00f3d.<\/p><h3>Dokumentacja analizy log\u00f3w<\/h3><ul><li><a href=\"https:\/\/nginx.org\/en\/docs\/http\/ngx_http_log_module.html\">nginx<\/a><\/li><li><a href=\"https:\/\/httpd.apache.org\/docs\/2.4\/logs.html\">Apache HTTP Server<\/a><\/li><li><a href=\"https:\/\/www.freedesktop.org\/software\/systemd\/man\/latest\/journalctl.html\">systemd journalctl<\/a><\/li><li><a href=\"https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Logging_Cheat_Sheet.html\">OWASP Logging Cheat Sheet<\/a><\/li><\/ul>","protected":false},"excerpt":{"rendered":"<p>PHP2Shell dotyczy samego PHP. Potrzebne aktualizacje, skutki braku poprawek i powody, dla kt\u00f3rych udzia\u0142 rynkowy nie okre\u015bla liczby zagro\u017conych witryn.<\/p>\n","protected":false},"author":1,"featured_media":22790,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[152],"tags":[],"class_list":["post-22778","post","type-post","status-publish","format-standard","hentry","category-tworzenie-stron-internetowych"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>PHP2Shell: skuteczna ochrona i problem witryn bez aktualizacji | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"PHP2Shell dotyczy samego PHP. Potrzebne aktualizacje, skutki braku poprawek i powody, dla kt\u00f3rych udzia\u0142 rynkowy nie okre\u015bla liczby zagro\u017conych witryn.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/php2shell-ochrona-aktualizacje-zagrozone-witryny\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PHP2Shell: skuteczna ochrona i problem witryn bez aktualizacji | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"PHP2Shell dotyczy samego PHP. Potrzebne aktualizacje, skutki braku poprawek i powody, dla kt\u00f3rych udzia\u0142 rynkowy nie okre\u015bla liczby zagro\u017conych witryn.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/php2shell-ochrona-aktualizacje-zagrozone-witryny\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-22T08:17:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-22T08:53:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/php2shell-gemini-22778-pl-dunkel.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/php2shell-ochrona-aktualizacje-zagrozone-witryny\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/php2shell-ochrona-aktualizacje-zagrozone-witryny\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"PHP2Shell: skuteczna ochrona i problem witryn bez aktualizacji\",\"datePublished\":\"2026-10-22T08:17:00+00:00\",\"dateModified\":\"2026-10-22T08:53:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/php2shell-ochrona-aktualizacje-zagrozone-witryny\\\/\"},\"wordCount\":3197,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/php2shell-ochrona-aktualizacje-zagrozone-witryny\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/php2shell-gemini-22778-pl-dunkel.png\",\"articleSection\":[\"Tworzenie stron internetowych\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/php2shell-ochrona-aktualizacje-zagrozone-witryny\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/php2shell-ochrona-aktualizacje-zagrozone-witryny\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/php2shell-ochrona-aktualizacje-zagrozone-witryny\\\/\",\"name\":\"PHP2Shell: skuteczna ochrona i problem witryn bez aktualizacji | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/php2shell-ochrona-aktualizacje-zagrozone-witryny\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/php2shell-ochrona-aktualizacje-zagrozone-witryny\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/php2shell-gemini-22778-pl-dunkel.png\",\"datePublished\":\"2026-10-22T08:17:00+00:00\",\"dateModified\":\"2026-10-22T08:53:36+00:00\",\"description\":\"PHP2Shell dotyczy samego PHP. Potrzebne aktualizacje, skutki braku poprawek i powody, dla kt\u00f3rych udzia\u0142 rynkowy nie okre\u015bla liczby zagro\u017conych witryn.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/php2shell-ochrona-aktualizacje-zagrozone-witryny\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/php2shell-ochrona-aktualizacje-zagrozone-witryny\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/php2shell-ochrona-aktualizacje-zagrozone-witryny\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/php2shell-gemini-22778-pl-dunkel.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/php2shell-gemini-22778-pl-dunkel.png\",\"width\":1200,\"height\":630,\"caption\":\"PHP2Shell: skuteczna ochrona i problem witryn bez aktualizacji\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/php2shell-ochrona-aktualizacje-zagrozone-witryny\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PHP2Shell: skuteczna ochrona i problem witryn bez aktualizacji\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"PHP2Shell: skuteczna ochrona i problem witryn bez aktualizacji | Lukas Wojcik","description":"PHP2Shell dotyczy samego PHP. Potrzebne aktualizacje, skutki braku poprawek i powody, dla kt\u00f3rych udzia\u0142 rynkowy nie okre\u015bla liczby zagro\u017conych witryn.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/php2shell-ochrona-aktualizacje-zagrozone-witryny\/","og_locale":"en_US","og_type":"article","og_title":"PHP2Shell: skuteczna ochrona i problem witryn bez aktualizacji | Lukas Wojcik","og_description":"PHP2Shell dotyczy samego PHP. Potrzebne aktualizacje, skutki braku poprawek i powody, dla kt\u00f3rych udzia\u0142 rynkowy nie okre\u015bla liczby zagro\u017conych witryn.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/php2shell-ochrona-aktualizacje-zagrozone-witryny\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-10-22T08:17:00+00:00","article_modified_time":"2026-10-22T08:53:36+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/php2shell-gemini-22778-pl-dunkel.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"19 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/php2shell-ochrona-aktualizacje-zagrozone-witryny\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/php2shell-ochrona-aktualizacje-zagrozone-witryny\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"PHP2Shell: skuteczna ochrona i problem witryn bez aktualizacji","datePublished":"2026-10-22T08:17:00+00:00","dateModified":"2026-10-22T08:53:36+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/php2shell-ochrona-aktualizacje-zagrozone-witryny\/"},"wordCount":3197,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/php2shell-ochrona-aktualizacje-zagrozone-witryny\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/php2shell-gemini-22778-pl-dunkel.png","articleSection":["Tworzenie stron internetowych"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/php2shell-ochrona-aktualizacje-zagrozone-witryny\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/php2shell-ochrona-aktualizacje-zagrozone-witryny\/","url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/php2shell-ochrona-aktualizacje-zagrozone-witryny\/","name":"PHP2Shell: skuteczna ochrona i problem witryn bez aktualizacji | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/php2shell-ochrona-aktualizacje-zagrozone-witryny\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/php2shell-ochrona-aktualizacje-zagrozone-witryny\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/php2shell-gemini-22778-pl-dunkel.png","datePublished":"2026-10-22T08:17:00+00:00","dateModified":"2026-10-22T08:53:36+00:00","description":"PHP2Shell dotyczy samego PHP. Potrzebne aktualizacje, skutki braku poprawek i powody, dla kt\u00f3rych udzia\u0142 rynkowy nie okre\u015bla liczby zagro\u017conych witryn.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/php2shell-ochrona-aktualizacje-zagrozone-witryny\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/php2shell-ochrona-aktualizacje-zagrozone-witryny\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/php2shell-ochrona-aktualizacje-zagrozone-witryny\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/php2shell-gemini-22778-pl-dunkel.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/php2shell-gemini-22778-pl-dunkel.png","width":1200,"height":630,"caption":"PHP2Shell: skuteczna ochrona i problem witryn bez aktualizacji"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/php2shell-ochrona-aktualizacje-zagrozone-witryny\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"PHP2Shell: skuteczna ochrona i problem witryn bez aktualizacji"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/22778","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=22778"}],"version-history":[{"count":3,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/22778\/revisions"}],"predecessor-version":[{"id":22798,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/22778\/revisions\/22798"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/22790"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=22778"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=22778"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=22778"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}