{"id":22776,"date":"2026-10-22T09:21:00","date_gmt":"2026-10-22T07:21:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=22776"},"modified":"2026-10-22T10:53:36","modified_gmt":"2026-10-22T08:53:36","slug":"php2shell-schutz-updates-ungepatchte-websites","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/php2shell-schutz-updates-ungepatchte-websites\/","title":{"rendered":"PHP2Shell: Was jetzt sch\u00fctzt und warum ungepatchte Websites bleiben"},"content":{"rendered":"<p><strong>Stand: 22. Oktober 2026.<\/strong> PHP2Shell betrifft die technische Grundlage zahlreicher Websites: Zwei kritische Sicherheitsl\u00fccken k\u00f6nnen unter passenden Bedingungen die Ausf\u00fchrung fremden Codes ohne Anmeldung erm\u00f6glichen. Sicherheitsupdates liegen seit dem 21. Oktober vor. Die entscheidende Frage lautet deshalb inzwischen: Welche \u00f6ffentlich erreichbaren Installationen laufen tats\u00e4chlich mit korrigiertem PHP? <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>Neue Lage: Angriffsversuche schon vor der Ver\u00f6ffentlichung<\/h2><p>AWS berichtet aus der eigenen MadPot-Telemetrie von einem PHP2Shell-Angriffsversuch am 17. Oktober 2026, also vor der \u00f6ffentlichen Bekanntgabe. F\u00fcr weitere beobachtete Versuche blieb offen, ob ein Angriff auf reale Zielsysteme erfolgreich gewesen w\u00e4re. Das ist ein belegtes Warnsignal, aber keine weltweite Opferz\u00e4hlung. Die Untersuchung m\u00f6glicherweise betroffener Systeme sollte deshalb nicht erst am Ver\u00f6ffentlichungstag beginnen. <a href=\"https:\/\/aws.amazon.com\/blogs\/security\/amazon-threat-intelligence-identifies-php2shell-exploitation-prior-to-public-disclosure-in-madpot\/\">AWS: eigene Beobachtungen und Grenzen<\/a><\/p>\n<h2>Was hinter PHP2Shell steckt<\/h2>\n<p>Die Kennungen lauten <strong>CVE-2026-109618<\/strong> und <strong>CVE-2026-109619<\/strong>. Beim ersten Fehler ger\u00e4t die Speicherverwaltung nach Speichermangel in einen ung\u00fcltigen Zustand. Beim zweiten bleiben interne Verweise auf bereits freigegebenen Speicher bestehen. Sp\u00e4tere Verarbeitung kann solche Zust\u00e4nde gef\u00e4hrlich weiterverwenden. Beide Probleme sitzen in PHP selbst. <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>\u201eAlle Versionen ab PHP 5\u201c beschreibt die au\u00dfergew\u00f6hnliche Reichweite, ersetzt aber keine Paketpr\u00fcfung. Alte 5er- und 7er-Zweige geh\u00f6ren ebenso zur Pr\u00fcfung wie PHP 8. cPanel f\u00fchrt auch \u00e4ltere PHP-Pakete und konkrete korrigierte Anbieterrevisionen auf. Der Wechsel von PHP 7 auf irgendeine PHP-8-Version w\u00e4re daher kein ausreichender Nachweis. <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>Besonders kritisch ist Apache mit mod_php: Ein best\u00e4tigter Angriffsweg greift bereits vor dem Anwendungscode. Auch PHP-FPM darf nicht als sicher gelten; die PHP Foundation berichtet dort ebenfalls best\u00e4tigte Codeausf\u00fchrung \u00fcber anwendungsabh\u00e4ngige Wege. Ein WordPress-Login sch\u00fctzt folglich nicht zuverl\u00e4ssig vor einem Fehler in der darunterliegenden Laufzeit. <a href=\"https:\/\/thephp.foundation\/blog\/2026\/10\/21\/todays-php-security-release-and-how-were-strengthening-php-security\/\">[2]<\/a><\/p>\n<h2>Welche Updates sch\u00fctzen?<\/h2>\n<p>Die korrigierten offiziellen Ver\u00f6ffentlichungen sind <strong>8.2.35, 8.3.36, 8.4.27 und 8.5.12<\/strong>. F\u00fcr die jeweilige Reihe gilt dieser oder ein neuerer korrigierter Stand. PHP 8.1 und \u00e4ltere Reihen erhalten keine regul\u00e4ren Ver\u00f6ffentlichungen mehr vom PHP-Projekt. F\u00fcr 7.4, 8.0 und 8.1 gibt es ausnahmsweise minimale Quellcode-Backports; Distributoren und LTS-Anbieter k\u00f6nnen eigene korrigierte Pakete liefern. <a href=\"https:\/\/www.php.net\/archive\/2026.php#2026-10-21-5\">[1]<\/a><\/p>\n<p>Eine alte Basisversionsnummer beweist deshalb nicht automatisch einen fehlenden Patch. Entscheidend sind die vollst\u00e4ndige Paketrevision und die Best\u00e4tigung f\u00fcr <em>beide<\/em> CVEs. Umgekehrt beweist \u201ePHP 8\u201c keinen Schutz. <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-de.png\" width=\"1120\" height=\"580\" loading=\"lazy\" alt=\"Vier Pr\u00fcfschritte: Bestand erfassen, beide L\u00fccken patchen, laufende Prozesse erneuern und den Webbetrieb pr\u00fcfen\"><figcaption>Ein Update ist erst im laufenden Webbetrieb wirksam.<\/figcaption><\/figure>\n<h2>Vom Paketupdate zum gesch\u00fctzten Betrieb<\/h2>\n<ol><li><strong>Bestand erfassen:<\/strong> Domains, PHP-Pools, Container, alte Testinstallationen und eingebettete Verwaltungsoberfl\u00e4chen geh\u00f6ren zur Inventur.<\/li><li><strong>Korrektur belegen:<\/strong> F\u00fcr jede Laufzeit sind Paketquelle, Revision und Behebung beider CVEs zu dokumentieren.<\/li><li><strong>Laufende Instanzen erneuern:<\/strong> PHP-Worker m\u00fcssen den neuen Stand laden. Eigene Container ben\u00f6tigen ein korrigiertes Image und ein erneutes Deployment. Ein Update des Hosts ver\u00e4ndert kein bereits gebautes Containerimage. <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>Webbetrieb kontrollieren:<\/strong> Die Kommandozeile kann eine andere PHP-Installation verwenden als die Website. Erst die Zuordnung der Domain zur tats\u00e4chlich laufenden Version samt Funktionspr\u00fcfung schlie\u00dft die Kontrolle ab.<\/li><\/ol>\n<p>Falls ein Patch kurzfristig unm\u00f6glich bleibt, empfiehlt ENISA die Pr\u00fcfung einer Isolation \u00f6ffentlich erreichbarer Anwendungen. Eine statische Wartungsseite vor PHP kann dabei den Betrieb sichtbar unterbrechen, ohne weitere Anfragen an die gef\u00e4hrdete Laufzeit weiterzugeben. Ein Wartungsplugin innerhalb derselben PHP-Anwendung erreicht dieses Ziel nicht zuverl\u00e4ssig. <a href=\"https:\/\/www.enisa.europa.eu\/news\/joint-statement-on-critical-php-vulnerabilities\">[5]<\/a><\/p>\n<p>Die offiziellen Konfigurationsma\u00dfnahmen sind lediglich \u00dcbergangshilfen. Beispielsweise blockiert <code>session.upload_progress.enabled=0<\/code> bestimmte best\u00e4tigte Session-Angriffswege, aber keine vollst\u00e4ndige Klasse m\u00f6glicher Varianten. Auch \u00c4nderungen an Speichergrenzen sind kein pauschaler Reparaturschalter. Unbegrenzter PHP-Speicher kann zus\u00e4tzliche Verf\u00fcgbarkeitsrisiken schaffen. Solche Eingriffe ben\u00f6tigen eine abgestimmte Begrenzung au\u00dferhalb von PHP und ersetzen den Patch nicht. <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>Was ohne Update passieren kann<\/h2>\n<p>Der Ausgangspunkt ist Codeausf\u00fchrung mit den Rechten des Webprozesses, nicht automatisch ein Root-Zugang. Daraus ergeben sich abh\u00e4ngig von Berechtigungen und erreichbaren Geheimnissen erhebliche Folgerisiken: ausgelesene Datenbankzug\u00e4nge, gestohlene Kundendaten, ver\u00e4nderte Inhalte, eingeschleuste Schadsoftware oder missbrauchte Schnittstellenschl\u00fcssel. Weitere Angriffe auf interne Dienste sind m\u00f6glich, sofern Netzwege und Rechte solche Zugriffe zulassen. <a href=\"https:\/\/github.com\/php\/php-src\/security\/advisories\/GHSA-w8hw-w9fx-j79w\">[3]<\/a><\/p>\n<p>F\u00fcr einen Shop kann bereits eine ver\u00e4nderte Zahlungsseite schwerer wiegen als ein sichtbarer Ausfall. Dazu kommen Untersuchung, Wiederherstellung, Ausfallzeiten und Vertrauensverlust. Ein sp\u00e4terer Patch entfernt keine bereits eingerichtete Hintert\u00fcr. Bei konkreten Einbruchsspuren geh\u00f6ren Isolation, Beweissicherung, Pr\u00fcfung der Zug\u00e4nge und Wiederherstellung aus einem vertrauensw\u00fcrdigen Stand zur Reaktion.<\/p>\n<h2>Werden die Updates wirklich \u00fcberall installiert?<\/h2>\n<p><strong>Einsch\u00e4tzung:<\/strong> Ein schneller erster R\u00fcckgang der gef\u00e4hrdeten Installationen ist plausibel, ein vollst\u00e4ndiger Abschluss innerhalb weniger Tage kaum. Zentral betreute Plattformen k\u00f6nnen viele Websites gleichzeitig korrigieren. Bei individuellen Servern h\u00e4ngt das Ergebnis an Zust\u00e4ndigkeiten, Paketverf\u00fcgbarkeit, Kompatibilit\u00e4t und kontrollierten Neustarts. Google Cloud unterscheidet ausdr\u00fccklich zwischen automatisch aktualisierten Laufzeiten und Diensten mit notwendigem Redeployment. <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>Besonders hartn\u00e4ckig d\u00fcrfte der Restbestand werden: aufgegebene Projekte, alte Agenturinstallationen, Container ohne Wartungsprozess und Anwendungen mit Abh\u00e4ngigkeit von abgek\u00fcndigten PHP-Reihen. Verz\u00f6gerungen sind dabei nicht automatisch Nachl\u00e4ssigkeit einzelner Administratoren. Fehlende Budgets, unklare Verantwortung und ungepr\u00fcfte Altsoftware k\u00f6nnen einen technisch einfachen Patch organisatorisch blockieren. Eine konkrete weltweite Updatequote w\u00e4re derzeit Spekulation.<\/p>\n<h2>Wie viele Websites bleiben bedroht?<\/h2>\n<p>W3Techs meldet am 22. Oktober PHP bei <strong>69,3 Prozent der Websites mit bekannter serverseitiger Programmiersprache<\/strong>. Innerhalb des erkannten PHP-Bestands entfallen 26,9 Prozent auf PHP 7 und 7,7 Prozent auf PHP 5: zusammen 34,6 Prozent. Das beschreibt Verbreitung und Altbestand, keine gemessene Zahl ungepatchter Websites. <a href=\"https:\/\/w3techs.com\/technologies\/details\/pl-php\">[9]<\/a><\/p>\n<p>Eine belastbare absolute Restzahl l\u00e4sst sich daraus nicht berechnen. Anbieter-Backports, unterschiedliche Konfigurationen, verdeckte Versionsangaben und mehrere Websites pro Server verhindern die direkte Gleichsetzung. Auch einzelne Webseiten, Domains und Server sind unterschiedliche Z\u00e4hleinheiten.<\/p>\n<p>Als reine Rechenillustration: Von einer Million tats\u00e4chlich betroffener Installationen blieben bei 95 Prozent erfolgreich abgeschlossenen Updates noch 50.000 ungepatcht. Das ist <strong>keine Messung und keine Prognose<\/strong>. Die Rechnung zeigt lediglich, warum selbst eine hohe Updatequote bei gro\u00dfer Verbreitung einen erheblichen Restbestand zul\u00e4sst. F\u00fcr die konkrete Website z\u00e4hlt der nachgewiesene Patchstand wesentlich mehr als jede globale Prozentzahl.<\/p>\n<h2>Linux-Praxis: zuerst die tats\u00e4chlich verwendete Installation erfassen<\/h2>\n<p>Die folgenden Paketbeispiele gelten f\u00fcr Debian-\/Ubuntu-Systeme mit APT und bereits eingerichteten, vertrauensw\u00fcrdigen Paketquellen. Die jeweilige PHP-Reihe muss dort schon installiert sein. RPM-Systeme, Hosting-Panels und selbst gebaute Container ben\u00f6tigen den passenden Anbieterablauf. Eine willk\u00fcrlich erg\u00e4nzte Fremdquelle w\u00e4re keine belastbare Reparaturstrategie.<\/p>\n<p>Vor dem Eingriff geh\u00f6ren eine wiederherstellbare Sicherung, die Zuordnung von Domains zu PHP-Pools und ein kurzer Funktionstestplan zum Ablauf. Paketinstallationen k\u00f6nnen Dienste bereits w\u00e4hrend der Installation neu starten. Ein Wartungsfenster muss daher vor dem Installationsbefehl beginnen. Die Bestandsaufnahme zeigt CLI und Dienste, ersetzt aber noch nicht die Kontrolle des Webhandlers:<\/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: PHP-Bestand erfassen<\/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>Eine Domain kann PHP 8.4 \u00fcber FPM verwenden, w\u00e4hrend <code>php<\/code> in der Shell auf 8.5 zeigt. Weitere Kopien k\u00f6nnen in Containern, Hosting-Verzeichnissen und alten Testdiensten liegen. Ein Pr\u00fcfnachweis ben\u00f6tigt pro Installation Paketquelle, vollst\u00e4ndige Revision, Dienst beziehungsweise Container und die zugeh\u00f6rigen Websites.<\/p>\n<h2>PHP 8.4 \u00fcber APT aktualisieren<\/h2>\n<p>Dieser Ablauf aktualisiert ausschlie\u00dflich bereits installierte Pakete der Reihe 8.4 einschlie\u00dflich vorhandener Erweiterungen und eines eventuell installierten Apache-Moduls. Die Simulation ver\u00e4ndert keine Pakete. Der Kandidat muss mindestens PHP 8.4.27 oder einen vom Anbieter f\u00fcr beide CVEs best\u00e4tigten Backport enthalten. F\u00fcr Debian 13 ist <code>8.4.27-1~deb13u1<\/code> als korrigiert dokumentiert. <a href=\"https:\/\/manpages.debian.org\/bookworm\/apt\/apt-get.8.en.html\">APT-Dokumentation<\/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: Paketquelle und Upgradeplan<\/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>Erst nach Pr\u00fcfung des Plans folgt die Installation. Unerwartete Entfernungen, Reihenwechsel oder weiterhin verwundbare Kandidaten sind Abbruchgr\u00fcnde. Der folgende Block geh\u00f6rt in dieselbe Bash-Sitzung wie der vorangehende und setzt einen vorhandenen FPM-Dienst voraus:<\/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: Installation und FPM-Pr\u00fcfung<\/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>PHP 8.5 \u00fcber APT aktualisieren<\/h2>\n<p>F\u00fcr eine bestehende 8.5-Installation gilt derselbe Ablauf mit einem korrigierten Kandidaten ab 8.5.12 oder best\u00e4tigtem Anbieter-Backport. Ein Debian-13-Standardrepository stellt nicht allein deshalb PHP 8.5 bereit, weil eine neuere PHP-Reihe existiert. Falls kein passender Kandidat aus der bereits freigegebenen Quelle verf\u00fcgbar ist, endet dieser Ablauf vor der Installation.<\/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: Paketquelle und Upgradeplan<\/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>Auch hier gilt: Fortsetzung erst nach Pr\u00fcfung, in derselben Bash-Sitzung und ausschlie\u00dflich f\u00fcr einen vorhandenen FPM-Dienst.<\/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: Installation und FPM-Pr\u00fcfung<\/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>Bei Apache mit mod_php muss stattdessen das Apache-Modul tats\u00e4chlich aktualisiert und Apache nach erfolgreicher Konfigurationspr\u00fcfung geordnet neu gestartet werden. F\u00fcr Debian lautet die Pr\u00fcfung <code>sudo apache2ctl configtest<\/code>. Ein reines FPM-Setup ben\u00f6tigt wegen eines PHP-Paketupdates keinen pauschalen nginx-Neustart. Eigene FPM-Master, dauerhaft laufende CLI-Dienste und Container m\u00fcssen gesondert ber\u00fccksichtigt werden. Ein Neustart kann laufende Anfragen unterbrechen; in redundanten Umgebungen erfolgt die Umstellung nacheinander.<\/p>\n<h2>Warum \u201ePHP aktualisiert\u201c noch nicht \u201ePHP aktiv korrigiert\u201c bedeutet<\/h2>\n<p>Linux kann einen laufenden Prozess weiter mit einer alten, bereits ersetzten Programmdatei bedienen. Ein neu gestartetes <code>php -v<\/code> meldet dann den korrigierten Stand, w\u00e4hrend ein alter Worker unver\u00e4ndert weiterl\u00e4uft. Die folgende rein lesende Kontrolle findet PHP-Prozesse mit gel\u00f6schter ausf\u00fchrbarer Datei:<\/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\">Alte PHP-Prozessdateien unter Linux finden<\/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>Ein Treffer ist ein Anlass zur Versions- und Dienstpr\u00fcfung, kein Einbruchsnachweis. Umgekehrt beweist eine leere Ausgabe noch keine vollst\u00e4ndige Absicherung: geladene Apache-Module, Bibliotheken und separat eingebaute Laufzeiten ben\u00f6tigen eigene Kontrollen. Entscheidend sind die aktiven Worker, nicht nur Paketlisten. Abschlie\u00dfend geh\u00f6ren Login, Upload, Formular, Queue und zeitgesteuerte Aufgaben in eine anwendungsspezifische Funktionsprobe. \u00d6ffentliche <code>phpinfo()<\/code>-Seiten sind daf\u00fcr ungeeignet; eine gesch\u00fctzte interne Diagnose oder die Zuordnung des aktiven Prozesses gen\u00fcgt.<\/p>\n<h2>PHP 7.4: ein Sicherheits-Backport statt unver\u00e4nderter 7.4.33<\/h2>\n<p>PHP 7.4 bleibt abgek\u00fcndigt. Der bevorzugte Weg ist die Migration auf eine unterst\u00fctzte Reihe oder ein belegter LTS-Patch des bisherigen Anbieters. F\u00fcr eine unvermeidbare \u00dcbergangsphase hat das PHP-Projekt einen minimalen Quellcode-Backport f\u00fcr beide PHP2Shell-Kennungen ver\u00f6ffentlicht. Das ist keine Wiederaufnahme des allgemeinen Supports und keine Zusage zur Behebung anderer L\u00fccken.<\/p>\n<p>Der am 22. Oktober gepr\u00fcfte Sicherheits-Commit lautet <code>712e60f9edfd03f0960fc4fc3c2c375f42b90aa2<\/code>. Der folgende Ablauf bindet den Quellstand ausdr\u00fccklich an diesen Commit. Ein blo\u00dfer Neubau des unver\u00e4nderten Releases 7.4.33 enth\u00e4lt diese \u00c4nderung nicht. <a href=\"https:\/\/github.com\/php\/php-src\/commit\/712e60f9edfd03f0960fc4fc3c2c375f42b90aa2\">PHP: konkreter Sicherheits-Commit<\/a><\/p>\n<p>Das Beispiel ist ein minimales CLI-\/FPM-Build in einer separaten, kompatiblen Debian-\/Ubuntu-Buildumgebung mit vorhandenem Git und CA-Zertifikaten. Alle Bl\u00f6cke werden in derselben Bash-Sitzung ausgef\u00fchrt. Der Build ist <strong>keine hier auf einem Produktionsserver durchgef\u00fchrte oder vollst\u00e4ndig abgenommene Installation<\/strong>. Alte PHP-Quellen und aktuelle Systembibliotheken sind nicht beliebig kombinierbar.<\/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: offiziellen Sicherheits-Commit festlegen<\/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>Die Mindestwerkzeuge und das isolierte Installationsziel folgen unten. <code>--disable-all<\/code> h\u00e4lt den Beispielumfang klein; das Ergebnis enth\u00e4lt insbesondere nicht automatisch alle f\u00fcr WordPress oder andere Anwendungen n\u00f6tigen Erweiterungen. Die vorgesehenen Benutzer- und Gruppennamen <code>www-data<\/code> m\u00fcssen in der Zielumgebung existieren. <a href=\"https:\/\/www.php.net\/manual\/en\/install.unix.php\">PHP: Unix-Installation<\/a> \u00b7 <a href=\"https:\/\/www.php.net\/manual\/en\/install.fpm.install.php\">PHP: FPM-Buildoptionen<\/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: minimales Build und Tests<\/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>Fehlgeschlagene oder unerkl\u00e4rlich \u00fcbersprungene relevante Tests ben\u00f6tigen eine Untersuchung. Erst nach akzeptiertem Testlauf folgt die Installation in den neuen Prefix; <code>\/usr\/bin\/php<\/code> und bestehende Distributionspakete werden dabei nicht ersetzt:<\/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: isoliert installieren und identifizieren<\/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>Die Ausgabe kann weiterhin eine 7.4-Versionsnummer tragen. Der Sicherheitsnachweis besteht hier aus dem gepr\u00fcften Quellcommit, Buildprotokoll und dem tats\u00e4chlich verwendeten Artefakt. F\u00fcr den Produktivbetrieb fehlen noch die ben\u00f6tigten Erweiterungen und deren Tests: beispielsweise Datenbanktreiber, mbstring, XML, cURL oder ZIP. Passende Entwicklungsbibliotheken, ABI und phpize\/php-config m\u00fcssen zu genau diesem Build geh\u00f6ren.<\/p>\n<p>Danach ben\u00f6tigen FPM-Konfiguration, Poolbenutzer und Dateirechte eine eigene Pr\u00fcfung. Ein separater Socket und ein eigener Dienst verhindern eine versehentliche Vermischung mit der bisherigen Laufzeit. Erst nach erfolgreichem Konfigurationstest mit dem neuen <code>php-fpm -t -y \/pfad\/zur\/php-fpm.conf<\/code> folgt die gezielte Umstellung des Webhandlers auf diesen Pool. Ein erfolgreicher CLI-Aufruf allein ver\u00e4ndert keine Website. Bei gescheitertem Rollout darf der R\u00fcckweg nicht kommentarlos wieder auf die \u00f6ffentlich erreichbare verwundbare Laufzeit f\u00fchren; Isolation bleibt dann die Zwischenl\u00f6sung.<\/p>\n<h2>Angriffsspuren: mehrere Signale zusammen betrachten<\/h2>\n<p>Datadog hat die Fehler im Labor reproduziert. Erfolgreiche Codeausf\u00fchrung muss weder einen Worker-Absturz noch einen auff\u00e4lligen HTTP-Status erzeugen. Ein HTTP 200 ist daher kein Entwarnungssignal. Verd\u00e4chtige Formularanfragen, Speicherfehler und unerwartete Kindprozesse gewinnen erst im zeitlichen Zusammenhang Aussagekraft. Ein einzelner Speichermangelfehler beweist noch keinen Angriff. <a href=\"https:\/\/securitylabs.datadoghq.com\/articles\/php2shell-critical-vulnerabilities-in-php\/\">Datadog Security Labs: eigene Analyse<\/a><\/p>\n<p>F\u00fcr eine Untersuchung sind Webserver-\/Proxylogs, PHP-Fehler, Prozessereignisse und unerwartete Datei\u00e4nderungen zusammenzuf\u00fchren. Vorhandene Belege sollten vor Bereinigung gesichert werden. Pauschales Mitschneiden vollst\u00e4ndiger Formularinhalte w\u00fcrde zus\u00e4tzliche Passw\u00f6rter und personenbezogene Daten in Logs bringen; Metadaten und kontrollierte Forensik sind vorzuziehen. Eine WAF kann Anfragen begrenzen, behebt aber den PHP-Fehler nicht. Der Abschluss braucht zwei getrennte Aussagen: korrigierte Laufzeit aktiv und m\u00f6glicher fr\u00fcherer Zugriff untersucht.<\/p>\n<h2>PHP2Shell in den Logs erkennen: Verdacht ist noch kein Nachweis<\/h2>\n<p>Ein universeller Logeintrag \u201ePHP2Shell erkannt\u201c existiert nicht. Die Auswertung muss zwischen auff\u00e4lliger Anfrage, technischem Fehler und best\u00e4tigter fremder Codeausf\u00fchrung unterscheiden. Aussagekr\u00e4ftig ist eine zeitlich passende Kette: ungew\u00f6hnliche Anfrage am Proxy, Fehler oder Prozessereignis beim zust\u00e4ndigen PHP-Worker und eine nicht durch den normalen Betrieb erkl\u00e4rte Folgehandlung. Fehlende Eintr\u00e4ge k\u00f6nnen ebenso durch ausgeschaltetes Logging, Rotation oder eine zu kurze Aufbewahrung entstehen.<\/p>\n<table><thead><tr><th>Beobachtung<\/th><th>Einordnung<\/th><th>N\u00e4chste Pr\u00fcfung<\/th><\/tr><\/thead><tbody>\n<tr><td>Viele POST-Anfragen oder gro\u00dfe Uploads<\/td><td>Auch bei Importen und regul\u00e4ren Uploads \u00fcblich<\/td><td>Zielroute, Uhrzeit und Abweichung vom \u00fcblichen Betrieb<\/td><\/tr>\n<tr><td>Speichermangel, Worker-Abbruch oder Segfault<\/td><td>Verdachtsmoment, keine eindeutige PHP2Shell-Signatur<\/td><td>Zugeh\u00f6rige Requests, Pool, PID und bekannte Softwarefehler<\/td><\/tr>\n<tr><td>Unerwartete Shell oder Downloadwerkzeuge als Kindprozess<\/td><td>Erh\u00f6hte Priorit\u00e4t; manche Anwendungen starten solche Programme legitim<\/td><td>Elternprozess, tats\u00e4chlicher Zweck und zeitlicher Zusammenhang<\/td><\/tr>\n<tr><td>Nicht freigegebene Code\u00e4nderung oder belegter fremder Befehl<\/td><td>Konkreter Hinweis auf eine Kompromittierung<\/td><td>Isolation, Beweissicherung und Pr\u00fcfung des Umfangs<\/td><\/tr>\n<\/tbody><\/table>\n<h2>Erste Log-Abfragen unter Linux<\/h2>\n<p>Die folgenden Befehle lesen vorhandene Daten. Dienstnamen, Dateipfade und Zeitraum m\u00fcssen zur Installation passen. Die Zeitangabe gilt in der lokalen Systemzeitzone; f\u00fcr den Abgleich mit anderen Systemen sind Zeitversatz und synchronisierte Uhren zu ber\u00fccksichtigen. Das Journal enth\u00e4lt PHP-Fehler nur, wenn der jeweilige Dienst solche Meldungen tats\u00e4chlich dorthin schreibt. <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\">Journal: Speicherfehler und Worker-Abbr\u00fcche<\/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>Eine fehlende Ausgabe bedeutet lediglich \u201ekein Treffer in diesen Quellen mit diesem Suchmuster\u201c. Separate FPM-Fehlerdateien, Containerlogs und virtuelle Hosts mit eigenen Protokollen ben\u00f6tigen zus\u00e4tzliche Abfragen. Auch bereits rotierte Dateien geh\u00f6ren zum Untersuchungszeitraum.<\/p>\n<p>F\u00fcr \u00fcbliche Apache-\/nginx-Access-Logs mit einer protokollierten HTTP-Anfrage liefert die folgende Abfrage die letzten hundert passenden POST-Zeilen der eingelesenen Dateien. Das ist eine erste Sichtung, kein vollst\u00e4ndiger Scanner und wegen der Dateireihenfolge keine garantierte zeitliche Sortierung:<\/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\">Access-Logs: POST-Anfragen sichten<\/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>Falls ein genannter Logpfad nicht existiert oder ein anderes Format verwendet wird, ist die Dateiauswahl anzupassen. Standard-Access-Logs enthalten normalerweise keinen vollst\u00e4ndigen Request-Body. Die h\u00e4ufig vorhandene Bytezahl beschreibt zudem meist die Antwortgr\u00f6\u00dfe, nicht die Gr\u00f6\u00dfe des Uploads. Ein Suchlauf nach <code>PHP_SESSION_UPLOAD_PROGRESS<\/code> in gew\u00f6hnlichen Access-Logs kann deshalb leer bleiben, obwohl ein entsprechendes Formularfeld gesendet wurde. Fehlende Bodydaten lassen sich nachtr\u00e4glich nicht rekonstruieren. <a href=\"https:\/\/httpd.apache.org\/docs\/2.4\/logs.html\">Apache: Bedeutung und Konfiguration der Logs<\/a><\/p>\n<p>Eine Momentaufnahme der Prozessbeziehungen kann erg\u00e4nzend helfen:<\/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\">Aktuelle Prozesse und Elternprozesse<\/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>Diese Liste zeigt ausschlie\u00dflich aktuell laufende Prozesse. Bereits beendete Befehle erscheinen nur in zuvor aktivierter Prozess\u00fcberwachung, etwa Audit- oder EDR-Telemetrie. Ein heute eingeschaltetes Monitoring liefert keine r\u00fcckwirkende Ausf\u00fchrungshistorie.<\/p>\n<h2>Logging gezielt verbessern, ohne Formularinhalte zu sammeln<\/h2>\n<p>Ein zus\u00e4tzliches nginx-Protokoll kann Request-ID, Zeitpunkt, Methode, Pfad, Status, Anfragegr\u00f6\u00dfe und Laufzeit zusammenf\u00fchren. Der folgende Vorschlag geh\u00f6rt in den <code>http<\/code>-Kontext. Das Format erg\u00e4nzt die Untersuchung k\u00fcnftig; bereits fehlende Daten bleiben fehlend. <a href=\"https:\/\/nginx.org\/en\/docs\/http\/ngx_http_log_module.html\">nginx: log_format und 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: zus\u00e4tzliches Metadatenformat<\/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>Im ausgew\u00e4hlten <code>server<\/code>-Kontext aktiviert die n\u00e4chste Direktive dieses Format. Bestehende Logs und ihre Vererbung sind dabei zu pr\u00fcfen; die neue Direktive darf die bisher ben\u00f6tigte Protokollierung nicht unbemerkt verdr\u00e4ngen.<\/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: Format f\u00fcr den gew\u00fcnschten Host aktivieren<\/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>Vor einem geordneten Reload steht ein erfolgreicher <code>nginx -t<\/code>-Test. <code>request_bytes<\/code> enth\u00e4lt die gesamte empfangene Anfrage einschlie\u00dflich Headern und ist weder allein die Dateigr\u00f6\u00dfe noch der daraus entstehende PHP-Speicherbedarf. Das Format protokolliert keinen Querystring, keine Cookies, keinen Authorization-Header und keinen Body. IP-Adressen und Pfade k\u00f6nnen trotzdem personenbezogen sein; Zugriff, Aufbewahrung und Rotation geh\u00f6ren zur Einrichtung. Hinter einem Proxy ist die Clientadresse nur bei korrekt konfigurierter Vertrauenskette verl\u00e4sslich. <a href=\"https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Logging_Cheat_Sheet.html\">OWASP: sichere Protokollierung<\/a><\/p>\n<h2>Schutz w\u00e4hrend eines noch offenen Updates<\/h2>\n<p><strong>Priorit\u00e4t hat die korrigierte Laufzeit.<\/strong> Zus\u00e4tzliche Kontrollen begrenzen die Erreichbarkeit und m\u00f6gliche Folgen, ersetzen aber keinen Patch. Bei einer exponierten, kurzfristig nicht aktualisierbaren Anwendung ist eine Isolation vor PHP die klarste Zwischenl\u00f6sung: statische Wartungsseite, VPN oder vorgeschaltete Zugriffsbeschr\u00e4nkung. Der direkte Origin-Zugriff muss dieselben Grenzen einhalten; ein gesch\u00fctzter CDN-Weg bei offen erreichbarem Backend reicht nicht.<\/p>\n<ul><li><strong>Anfragen begrenzen:<\/strong> Gr\u00f6\u00dfen-, Upload- und Ratenlimits am Reverse Proxy an den tats\u00e4chlichen Bedarf anpassen. Auch legitime Importe und gro\u00dfe Dateien ben\u00f6tigen eine gepr\u00fcfte Regel. Eine kleine Anfrage kann intern mehr Speicher beanspruchen; ein Gr\u00f6\u00dfenlimit ist deshalb kein vollst\u00e4ndiger Schutz.<\/li>\n<li><strong>WAF als Zusatzschicht:<\/strong> Passende Herstellerregeln aktivieren und ihre tats\u00e4chliche Durchsetzung pr\u00fcfen. Regeln im Beobachtungsmodus blockieren nichts; ein HTTP 403 belegt nur die Ablehnung dieser Anfrage.<\/li>\n<li><strong>Rechte begrenzen:<\/strong> Eigene Poolkonten, minimale Dateirechte, eingeschr\u00e4nkte Datenbankkonten und begrenzte Netzwerkzugriffe verkleinern m\u00f6gliche Folgesch\u00e4den. Eine \u00fcbernommene Anwendung kann weiterhin alle legitim verf\u00fcgbaren Geheimnisse missbrauchen.<\/li>\n<li><strong>Offizielle \u00dcbergangsma\u00dfnahmen:<\/strong> Fr\u00fches Abschalten des Session-Upload-Fortschritts blockiert bestimmte Pfade, aber nicht beide Fehler vollst\u00e4ndig. Eine pauschale Umstellung auf unbegrenzten PHP-Speicher ohne passende \u00e4u\u00dfere Begrenzung kann zus\u00e4tzliche Ausf\u00e4lle verursachen.<\/li><\/ul>\n<h2>Bei konkreten Einbruchsspuren: Patch und Vorfall getrennt behandeln<\/h2>\n<p>Eine verd\u00e4chtige Datei einfach zu l\u00f6schen und anschlie\u00dfend PHP zu aktualisieren reicht nicht f\u00fcr einen belastbaren Abschluss. Zuerst ist die betroffene Instanz so zu isolieren, dass weitere Zugriffe verhindert werden. Parallel geh\u00f6ren relevante Logs, Zeitangaben und verf\u00fcgbare Prozessdaten gesichert. Eine un\u00fcberlegte Bereinigung kann wertvolle Belege vernichten.<\/p>\n<p>Anschlie\u00dfend folgen die Pr\u00fcfung erreichbarer Daten und Nachbarsysteme, die Erneuerung m\u00f6glicherweise offengelegter Zugangsdaten aus einer vertrauensw\u00fcrdigen Umgebung und gegebenenfalls der Neuaufbau aus gepr\u00fcften Quellen. Ein Backup muss zeitlich und inhaltlich vor einer m\u00f6glichen Kompromittierung liegen. Die R\u00fcckkehr in den \u00f6ffentlichen Betrieb setzt eine korrigierte aktive Laufzeit, gepr\u00fcfte Anwendung und fortgesetzte Beobachtung voraus. \u201ePatch installiert\u201c und \u201eVorfall aufgekl\u00e4rt\u201c bleiben zwei unterschiedliche Nachweise.<\/p>\n<div class=\"lw-faq\"><h2>Fragen und Antworten<\/h2><h3>Reicht ein WordPress-Update?<\/h3><p>Nein. Ein WordPress-Update ersetzt keine korrigierte PHP-Laufzeit. Anwendung und Serverpakete ben\u00f6tigen getrennte Pr\u00fcfungen.<\/p><h3>Beweist eine funktionierende Website einen sicheren Zustand?<\/h3><p>Nein. Regul\u00e4re Seitenaufrufe k\u00f6nnen trotz verwundbarer Laufzeit fehlerfrei funktionieren. Auch fehlende sichtbare Ver\u00e4nderungen schlie\u00dfen einen fr\u00fcheren Zugriff nicht aus.<\/p><p>Ein sinnvoller Nachweis verbindet Paketrevision, Herstellerbest\u00e4tigung f\u00fcr beide CVEs und Kontrolle der aktiven Webprozesse. Bei Einbruchsspuren kommt eine gesonderte Untersuchung hinzu.<\/p><\/div><h2>Quellen<\/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>Zus\u00e4tzliche Prim\u00e4rquellen und Dokumentation<\/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>Weiterf\u00fchrende Analysen und Berichterstattung<\/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>Der zus\u00e4tzlich genannte Beitrag von Prophet Security war bei der Recherche nicht abrufbar und wurde nicht als Beleg verwendet.<\/p><h3>Dokumentation zur Log-Auswertung<\/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 trifft PHP selbst. Welche Updates sch\u00fctzen, welche Folgen fehlende Patches haben und weshalb die Zahl bedrohter Websites nicht aus dem Marktanteil folgt.<\/p>\n","protected":false},"author":1,"featured_media":22788,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[150],"tags":[],"class_list":["post-22776","post","type-post","status-publish","format-standard","hentry","category-web-entwicklung"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>PHP2Shell: Was jetzt sch\u00fctzt und warum ungepatchte Websites bleiben | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"PHP2Shell trifft PHP selbst. Welche Updates sch\u00fctzen, welche Folgen fehlende Patches haben und weshalb die Zahl bedrohter Websites nicht aus dem Marktanteil folgt.\" \/>\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\/de\/web-entwicklung\/php2shell-schutz-updates-ungepatchte-websites\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PHP2Shell: Was jetzt sch\u00fctzt und warum ungepatchte Websites bleiben | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"PHP2Shell trifft PHP selbst. Welche Updates sch\u00fctzen, welche Folgen fehlende Patches haben und weshalb die Zahl bedrohter Websites nicht aus dem Marktanteil folgt.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/php2shell-schutz-updates-ungepatchte-websites\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-22T07:21: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-22776-de-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=\"18 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/php2shell-schutz-updates-ungepatchte-websites\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/php2shell-schutz-updates-ungepatchte-websites\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"PHP2Shell: Was jetzt sch\u00fctzt und warum ungepatchte Websites bleiben\",\"datePublished\":\"2026-10-22T07:21:00+00:00\",\"dateModified\":\"2026-10-22T08:53:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/php2shell-schutz-updates-ungepatchte-websites\\\/\"},\"wordCount\":3040,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/php2shell-schutz-updates-ungepatchte-websites\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/php2shell-gemini-22776-de-dunkel.png\",\"articleSection\":[\"Web Entwicklung\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/php2shell-schutz-updates-ungepatchte-websites\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/php2shell-schutz-updates-ungepatchte-websites\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/php2shell-schutz-updates-ungepatchte-websites\\\/\",\"name\":\"PHP2Shell: Was jetzt sch\u00fctzt und warum ungepatchte Websites bleiben | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/php2shell-schutz-updates-ungepatchte-websites\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/php2shell-schutz-updates-ungepatchte-websites\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/php2shell-gemini-22776-de-dunkel.png\",\"datePublished\":\"2026-10-22T07:21:00+00:00\",\"dateModified\":\"2026-10-22T08:53:36+00:00\",\"description\":\"PHP2Shell trifft PHP selbst. Welche Updates sch\u00fctzen, welche Folgen fehlende Patches haben und weshalb die Zahl bedrohter Websites nicht aus dem Marktanteil folgt.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/php2shell-schutz-updates-ungepatchte-websites\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/php2shell-schutz-updates-ungepatchte-websites\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/php2shell-schutz-updates-ungepatchte-websites\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/php2shell-gemini-22776-de-dunkel.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/php2shell-gemini-22776-de-dunkel.png\",\"width\":1200,\"height\":630,\"caption\":\"PHP2Shell: Was jetzt sch\u00fctzt und warum ungepatchte Websites bleiben\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/php2shell-schutz-updates-ungepatchte-websites\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PHP2Shell: Was jetzt sch\u00fctzt und warum ungepatchte Websites bleiben\"}]},{\"@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: Was jetzt sch\u00fctzt und warum ungepatchte Websites bleiben | Lukas Wojcik","description":"PHP2Shell trifft PHP selbst. Welche Updates sch\u00fctzen, welche Folgen fehlende Patches haben und weshalb die Zahl bedrohter Websites nicht aus dem Marktanteil folgt.","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\/de\/web-entwicklung\/php2shell-schutz-updates-ungepatchte-websites\/","og_locale":"en_US","og_type":"article","og_title":"PHP2Shell: Was jetzt sch\u00fctzt und warum ungepatchte Websites bleiben | Lukas Wojcik","og_description":"PHP2Shell trifft PHP selbst. Welche Updates sch\u00fctzen, welche Folgen fehlende Patches haben und weshalb die Zahl bedrohter Websites nicht aus dem Marktanteil folgt.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/php2shell-schutz-updates-ungepatchte-websites\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-10-22T07:21: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-22776-de-dunkel.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"18 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/php2shell-schutz-updates-ungepatchte-websites\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/php2shell-schutz-updates-ungepatchte-websites\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"PHP2Shell: Was jetzt sch\u00fctzt und warum ungepatchte Websites bleiben","datePublished":"2026-10-22T07:21:00+00:00","dateModified":"2026-10-22T08:53:36+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/php2shell-schutz-updates-ungepatchte-websites\/"},"wordCount":3040,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/php2shell-schutz-updates-ungepatchte-websites\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/php2shell-gemini-22776-de-dunkel.png","articleSection":["Web Entwicklung"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/php2shell-schutz-updates-ungepatchte-websites\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/php2shell-schutz-updates-ungepatchte-websites\/","url":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/php2shell-schutz-updates-ungepatchte-websites\/","name":"PHP2Shell: Was jetzt sch\u00fctzt und warum ungepatchte Websites bleiben | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/php2shell-schutz-updates-ungepatchte-websites\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/php2shell-schutz-updates-ungepatchte-websites\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/php2shell-gemini-22776-de-dunkel.png","datePublished":"2026-10-22T07:21:00+00:00","dateModified":"2026-10-22T08:53:36+00:00","description":"PHP2Shell trifft PHP selbst. Welche Updates sch\u00fctzen, welche Folgen fehlende Patches haben und weshalb die Zahl bedrohter Websites nicht aus dem Marktanteil folgt.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/php2shell-schutz-updates-ungepatchte-websites\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/php2shell-schutz-updates-ungepatchte-websites\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/php2shell-schutz-updates-ungepatchte-websites\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/php2shell-gemini-22776-de-dunkel.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/php2shell-gemini-22776-de-dunkel.png","width":1200,"height":630,"caption":"PHP2Shell: Was jetzt sch\u00fctzt und warum ungepatchte Websites bleiben"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/php2shell-schutz-updates-ungepatchte-websites\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"PHP2Shell: Was jetzt sch\u00fctzt und warum ungepatchte Websites bleiben"}]},{"@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\/22776","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=22776"}],"version-history":[{"count":3,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/22776\/revisions"}],"predecessor-version":[{"id":22797,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/22776\/revisions\/22797"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/22788"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=22776"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=22776"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=22776"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}