← Terug naar overzicht

PHP2Shell ontplofte: CVSS 9.2, de dag voor de opening, en de twee gaten waren in code voor 10 jaar.

itadol5j

Ten eerste luidt de conclusie:PHP produceerde een ongeautoriseerde externe code voor CVSS 9.2, nummers CVE-2026-109618 en CVE-2026-109619, met een bijnaam PHP2Shell. Op 20 oktober werd het openbaar gemaakt en op 21 oktober werden op 1400 UTC patches vrijgegeven, terwijl de honingbussen van Amazon vier dagen voor de opening werden opgenomen.

Wat erger is dan dat is het andere ding: deze twee gaten zijn de eerste die PHP 5.4 bereiken, wat betekent...Ze zitten al meer dan tien jaar in code.Ik weet het niet. En in 2024, toen de PHP core developer audit OOM's pad ontdekte, kwam het team samen om te bespreken hoe het te repareren.We waren het niet eens en dan hebben we het niet opgelost.Ik weet het niet. De reden is dat niemand dacht dat het echt gebruikt kon worden.

Deze zin ziet er nu bijzonder ironisch uit. De reden hiervoor is niet dat het gat onbelangrijk is, maar dat de keten te complex is om verder te gaan dan de fysieke capaciteit van menselijke onderzoekers. Toen kwam Al en schreef het uit.

PHP2Shell Hole Cover: Impact Scope en Exposure Host

Ten eerste, laat het woord "multinationale noodhulp" uit de weg gaan. Kijk.

Het favoriete woord van het titelfeest is "wereldwijd alarm." Het is geen overdrijven deze keer, maar het is een duidelijke score.

  • PHP Official: Op 20 oktober werd een voorafgaande kennisgeving gedaan waarin werd verklaard dat op 21 oktober om 14:00 UTC zou worden vrijgegeven in een beveiligde versie als de details werden gelekt of geveld. Als gevolg daarvan werd het CVE nummer gestoken naar Hacker News dezelfde dag, en de release gepland voor 22 oktober werd gedwongen om een dag eerder.
  • CERT-EU: release advisory 2026-018 en omvatten beide CVE's.
  • WolkvlokkenOp 21 oktober zei CTO Dane Knecht direct "de vroege aanval is gezien te ontstaan" en de WAF-regels werden volledig vrijgegeven, inclusief gratis gebruikers. Maar hij benadrukte zichzelf dat het gewoon stopgap was, en de echte oplossing was lappen.
  • Amazon: MadPot honingblikjes werden betrapt op het proberen op 17 oktober, en een andere partij werd gevangen op 21 oktober, en de lading en infrastructuur wees naar een aantal verschillende aanvallers. php2shell "is al veel gebruikt."
  • Towr bekijken: Beide gaten worden opnieuw ontstaan, terwijl pogingen om beide te exploiteren worden waargenomen.

Dus "de aanval is gevonden" is geen weergave, maar een feit. En de Multinational Emergency Response is geen klap -- het is gewoon dat de belangrijkste onderwerpen van de respons zijn fabrikanten, CDN's en noodorganisaties, geen regering in het land.

Twee, twee gaten, twee verschillende manieren om te sterven.

Veel mensen denken dat het een gat is met twee getallen, nee. Dit zijn twee verschillende aanvalsroutes, elke CVSS 9.2.

Vergelijking van technische paden voor twee gaten

CVE-2026-109618: Bom wanneer het geheugen leeg is

De verwerking van een verzoek wordt onderbroken wanneer de PHP-geheugendistributie mislukt. Het probleem is:Op dit moment, de interne aanvraag gegevens kunnen slechts half-geïnitialiseerd, en de daaropvolgende opruiming logica zou dit niet opgenomen stuk slechte gegevens als geldige gegevens hebben gebruikt.

De trigger methode is eenvoudig: bouw een multipart verzoek om het geheugen te imploderen. Het rare is,De grootte van het verzoek lijkt overeen te komen met uw plafond.Het is niet de post maximale grootte die je hebt ingesteld, het is de decodering en het verbruik van interne verwerking.

Het ergste is mod php. Mod php voor Apache bij het aanvragen van opstarten is misluktHet gaat nog steeds opruimen., zodat deze keten kan worden voltooid voordat een toepasselijke code loopt. Je PHP-code is zo schoon, er is geen maas, er is geen stop.

PHP-FPM zal de werknemer doden wanneer het niet start, alleen om de keten te snijden, dus officieel, mod php is het hoogste risico. Maar let op -- dit betekent niet dat de FPM veilig is.Na een succesvolle startupEr is nog een mogelijkheid van uitbuiting.

CVE-2026-109619: Vuile toestand tussen verzoeken

Deze is erger. PHP zal het werkproces hergebruiken om meerdere verzoeken te verwerken. Het laatste verzoek om het geheugen vrij te geven, de aanwijzer blijft in de interne staat; het volgende verzoek komt binnen,Lees het lege adres voor normale initialisatie.Ik weet het niet.

Fatale fouten (afbreken van geheugen, performance timeout) onderbreken toestand opruimen. Nog erger, een niet-dodelijke diagnose tijdens de sluiting zou de verkeerde staat hebben vervangen.Doe het opnieuw.Ik weet het niet.

Officieel bevestigde routes omvatten: RCE's met fatale fout wanneer PHP 8.5 ingeschakeld Fatale fout backtraces (standaard openen), en de sessie levenscyclus RCE's op motor php en FPM.session.upload_progress Standaard kunt u optreden als een vroege consument in een staat van vuiligheid.En het is niet nodig om call(s toe te passen)Ik weet het niet.

Dit gat zit nog steeds vast.GeheugenlekIk weet het niet. Wat lekte er? is het wachtwoord, token, API-sleutel, certificaat voor andere verzoeken in het procesgeheugen. Wiz direct vergeleken met Heartbled, wat niet te veel is.

Tijdlijn, meer dan titel.

PHP2Shell Event Tijdlijn: gereserveerd van 2024 tot 10-17 veldgebruik
TijdWat is er gebeurd?
Jaar 2024PHP core developer audit vond OOM, dat bug, het team had geen consensus over de wet, zet het in de wacht.
2026-08Ryan Austin van Calif identificeert mazen met OpenAI GPT-5.6 Sol; Wiz Onafhankelijke ontdekking
2026-10-17Amazon MadPot, de honing kan een poging opnemen, vier dagen voor de opening.
2026-10-20CVE-nummer gelekt in Hacker News en Social Media, PHP
2026-10-2114:00 UTC Publicatie 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35

17 Oktober moet uitgeklapt worden.De publieke dag was de twintigste, maar de aanval vond plaats op de 17e.Het voorstel van Amazon is eenvoudig: het startpunt moet niet op de datum van bekendmaking zijn, maar op zijn minst op 17 oktober.

Wat betreft hoe de aanvallers van tevoren de informatie kregen, de Amazone zei "niet duidelijk." Ik kan hier niet op ingaan, maar je moet een realiteit accepteren.De dag van de onthulling was nooit de dag van de aanval, maar de dag dat je het eindelijk wist.

Vier, deze keer is het echt AI.

Deze onderliggende gebreken bestaan al decennia, maar om te bewijzen dat ze kunnen worden gebruikt, hebben ze een uitzonderlijk complexe keten van stappen nodig, op de marges van de werkelijke capaciteiten van menselijke onderzoekers.Frontline AI-model verlaagt deze drempel aanzienlijk.Ik weet het niet.

Specifiek: Ryan Austin, een onderzoeker in Calif, werd gevonden in het OpenAI project "Patch the Planet" met GPT-5.6 Sol. Wiz vond hetzelfde probleem onafhankelijk. Om er gebruik van te maken, hebben we een keten van fouten nodig en richten we elk doel.Geheugenindeling herhaaldelijk gekalibreerdWiz zegt dat het front-line model hen toelaat om binnen enkele uren bruikbare toepassingen te ontwikkelen voor verschillende toepassingen.

Dat betekent niet dat Ali weer gewonnen heeft.Het punt is dat de gracht van "complex" faalt.

Veel oude mazen zijn niet verslagen in de afgelopen twee decennia, niet omdat ze niet ernstig zijn, maar omdat de drempel van gebruik is te hoog een paar weken van investeringen door toponderzoekers en een beetje geluk. Dus je stopt ze in de "theoretisch riskante" kolom. Nu is dit hek weg.

Die tien jaar oude gaten die in je systeem liggen en worden beoordeeld als "moeilijk en onbewerkt" moeten opnieuw worden gewaardeerd.

Vijf, naar welke moet je gaan?

Vergelijking van PHP herstelde versies
BranchBetrokken versieVerwijdering
PHP 8.5< 8.5.12Verhoog tot 8.5.12.
PHP 8.4< 8.4.27Verhoog naar 8.4.27.
PHP 8.3< 8.3.36Verhoog naar 8.3.36.
PHP 8.2< 8.2.35Verhoog naar 8.2.35.
PHP 7.4 / 8.0 / 8.1AllesOfficieel niet gepubliceerd, alleen bronniveau
PHP 5.4AllesDe regering lost het niet op. Zaken

Verschillende echte herinneringen:

  • Linux Release en LTS leverancierIk heb een pleister van tevoren.Controleer het advies van uw fabrikant met een distributiepakket. Versnel de broncode niet.
  • Gebruik rpms.remirepo.net Opmerking: PHP heeft de bron officieel vermeld op 21 oktober.Geen updateDus je kunt overschakelen naar een distributiepakket of het maken van de broncode.
  • De Windows binaire van PHP 8.5 is ook op de officiële download pagina.
  • Denk niet dat het goed is om in de container te draaien -- de PHP-versie van de containerspiegel moet gecontroleerd worden.

Zes, als je geen pleister kunt krijgen, maak deze dan eerst.

Eerste staat:Geen van deze hieronder zal je veilig maken.De officiële PHP zin is "verminder blootstelling aan specifieke aanvalspaden, maar maak installaties niet veiliger." Hun waarde is om je tijd te geven om patches te krijgen.

Vier tijdelijke mitigatiemaatregelen en hun beperkingen

Geheugenlimiet instellen op -1

Doel: Om de voorspelbare PHP-geheugenkap uit te schakelen is mislukt, d.w.z. CVE-2026-109618 heeft de triggerconditie bevestigd waarvan het afhankelijk is.

Het punt is,Hoe?: in te stellen op plaatsen waar de toepassing ongewijzigd is, zoals de FPM-pool php_admin_value of Apache configuratie. U moet controleren of er geen pops, mappen, toepassingsinstellingen zijn om de limiet terug toe te voegen.Herstart dan elke werknemer.

De prijs is duidelijk: je bent van de PHP's eigen geheugen hek, en de bodem distributie storing kan nog steeds op dat gevaarlijke pad. Dus het moet een container of een cgroup zijn om de dekking te beperken -- maar het is slechts een strategie om "getroffen mensen te doden."Gebruik nooit RLIMIT ALS of RLIMIT DATADie twee zijn precies het soort distributiefouten die de mazen creëren.

Maximale postgrootte verkleinen

Sites zonder bestand 8M naar bestand 32M en gegarandeerd upload_max_filesize Minder dan het. Tegelijkertijd worden limieten toegevoegd aan de webserver of proxylaag - het volume van de verzoeken gedecodeerd, het aantal velden, het aantal delen met meerdere delen, het aantal koppen, de diepte van nesten.Deze beperkingen moeten betrekking hebben op verzoeken die niet geldig zijn Inhoud-LengteOf we gaan er omheen.

3. Het uitschakelen van sessie.upload proces

session.upload_progress.enabled = 0

Het is geschreven in php.ini, FPM tool of server configuratie.Het moet vóór het verzoek effectief zijn.Ik weet het niet. Gebruik ini_set() Of FPM. .user.ini Het was te laat -- het was vies. Verandering is ook om alle werker opnieuw te starten.

PHP 8.5 Nog één enkele

fatal_error_backtraces = 0

Dit blok bevestigde alleen fatale fout backtracks, zonder andere varianten. Ook administrator niveau instellingen + herstart werker.

Bovendien zal de officiële vermelding dat velen zullen negeren:Repareer de fatale fouten die de aanvallers kunnen activeren en uitvoeren time out., met inbegrip van back-up, upload, import verwerking, opruimfouten. En ...Verwijder verouderde of illegale configuraties die per verzoek worden opgelegd- Ze spuugden diagnostische informatie uit voordat het wordt geïnitialiseerd en voeden het lek.

Deze laatste zin wordt het gemakkelijkst verkeerd begrepen:Het werkt niet om de diagnose te verbergen met foutmelding, weergavefouten of @.Het gaat niet gebeuren.

VII. EINDE LESSIES

Ik wil niet eindigen door te schrijven "Sluit de patch." Natuurlijk is het een patch. Het is vandaag. Maar sommige oordelen moeten veranderen.

  1. De term "moeilijk te gebruiken" is niet langer hetzelfde als "voorgeschreven."PHP de toegangsketen van dit gat is ingewikkeld genoeg om de hulp van AI, die al heeft geholpen nodig. De oude gaten in je lijst met activa die "theorierisico" markeren, moeten opnieuw gewaardeerd worden.
  2. Taal loopt op één punt.WordPress, Drupal, Joomla, Magento, MediaWiki draaien allemaal op PHP, uw applicatiecode audit is schoon, en de PHP kern is in de problemen. Compenserend ritme van de infrastructuur lagen, met toepassing lagen gescheiden.
  3. "De toepassingscode is gebroken zonder te draaien." WAF kan alleen maar vertragen.Cloudflare zelf zei dat het stopgap was. WAF als een oplossing zetten is het geven van leven aan regeren dekking.
  4. Er zijn veel oude sites in het land met behulp van PHP.De stations die draaien op PHP 5.6/7.0, die lang geleden onbeheerd en opgehangen waren aan een cloud mainframe, zijn in deze blootstelling van 1,3 tot 1,9 miljoen. Ze zullen geen bericht ontvangen.

Datakalibraties worden geregistreerd: W3Techs zegt dat PHP's goed zijn voor 69,3 procent van de talen die bekend zijn bij de dienst, en Wiz 70 procent; blootstelling hosts, de beveiligingsonderzoeker Silas Cutler schatting meer dan 1,3 miljoen, en Henk Poley ' s Shodan zoeken is meer dan 1,9 miljoen. Deze getallen zijn van verschillende kalibers en gebruiken ze niet als exacte waarden, maar de schaal is dezelfde -Miljoenen, wereldwijd.

Nog een detail is het waard om te onthouden: toen het CVE nummer werd gelekt, de CVSS punten die uitkwamen waren 10.0, PHP werd officieel bevestigd.Die score was verkeerd.Het is eigenlijk 9.2. Niemand zou iets over dit detail weten, maar het zal altijd in omloop zijn. Met 10.0, weet je welke golf het is.

Een gat van 10 jaar, twee maanden AI-ondersteund onderzoek, vier dagen vroeg gebruik, een dag patch venster. Dit tijdschema is de normale van alle basissoftware die volgt.

Controleer nu de versie.php -vOf kijk naar je container spiegels op tag. Wacht niet tot morgen.