Onderzoekers van Dream hebben een geavanceerde cybercampagne ontdekt, waarschijnlijk van Chinese oorsprong, waarbij een keten van twee kwetsbaarheden werd gebruikt om root-toegang te verkrijgen op firewalls.
De aanvalsmethode: De aanvallers combineerden een aangepaste PHP2Shell-exploit (voor Remote Code Execution als gebruiker nobody) met de Fragnesia kernel privilege escalation (voor root-toegang). Dit proces werd in één enkel HTTP-verzoek uitgevoerd, waardoor de aanval zeer efficiënt was.
Het proces van exploitatie:
- Ontdekking: Via de Chinese zoekmachine FOFA werden 19.000 potentiële doelen geïdentificeerd.
- Filtering: De lijst werd verkleind tot 240 strategische doelen in de VS, Japan, Taiwan en Zuid-Korea.
- Exploitatie: 24 servers werden succesvol geroot, waarvan er 22 werden 'geparkeerd'.
- Pivot: Twee servers van de Amerikaanse overheid werden prioritair behandeld. De aanvallers bouwden een persistente tunnel naar het interne netwerk en startten een aanval op de Active Directory-infrastructuur.
Rol van AI en Attributie: Er zijn sterke aanwijzingen dat AI-tools zoals Claude Code en Chinese LLM's (DeepSeek, Kimi) zijn gebruikt bij de ontwikkeling van de scripts. De keuze van doelen, het gebruik van Chinese tools (FOFA, iox) en timestamps in UTC+8 wijzen sterk in de richting van een Chinese actor.
Conclusie: De operatie toont een hoog niveau van voorbereiding en focus op strategische overheidsdoelen, beginnend bij een simpel ongeauthenticeerd HTTPS-verzoek naar een blootgestelde beheerinterface.
Gekoppelde PHP2Shell-exploit krijgt root-toegang tot 25 servers
Introductie
Op 25 oktober ontdekten onderzoekers van Dream sporen van een door AI ondersteunde campagne, waarschijnlijk van Chinese oorsprong, die root-toegang kreeg tot 25 servers, waaronder systemen in een omgeving gelieerd aan de Amerikaanse overheid. De aanvaller combineerde een PHP2Shell-exploit met een kernel privilege-escalation (LPE) om blootgestelde systemen te compromitteren.
De getroffen apparaten draaien specifieke versies van de firewallsoftware van een grote leverancier. Om veiligheidsredenen wordt de leverancier en de betreffende versies niet bekendgemaakt; de leverancier is inmiddels op de hoogte gesteld.
Na de initiële toegang startte de aanvaller aanvallen op Active Directory. Herstelde artefacten bevestigen dat inloggegevens zijn geëxtraheerd en dat de directory is gescand (enumeration). Deze operatie illustreert hoe een blootgestelde beheerinterface een toegangsweg kan worden tot de identiteitsinfrastructuur van een organisatie. Voor overheidsverdedigers begint de uitdaging pas na het ontdekken van de kwetsbaarheid; de echte strijd ligt in het identificeren van kwetsbare systemen en het begrijpen en beperken van de toegang die een compromis mogelijk maakt.
Het onderstaande onderzoek is uitgevoerd via proactieve threat hunting met behulp van Hero, het autonome cyber-onderzoeksproduct van Dream.
Ontdekking
Onderzoekers van Dream identificeerden een complete aanvalsoperatie. Deze bestond uit een aangepaste wapening van de PHP2Shell-exploitketen (CVE-2026-109618 / CVE-2026-109619) gekoppeld aan de Fragnesia kernel privilege escalation (CVE-2026-46300), doelwittlijsten, exploitatie-logs en ongeveer 40 aangepaste post-exploitation scripts.
De artefacten wezen op een campagne waarbij 25 servers in de Verenigde Staten, Japan, Taiwan en Zuid-Korea waren geroot. Zodra root-toegang was verkregen, richtte de aanvaller zich op drie specifieke servers in een omgeving gelieerd aan de Amerikaanse overheid. De operatie begon met exploit-ontwikkeling in een laboratoriumomgeving en eindigde met persistente toegang tot het interne Active Directory-domein van een Amerikaanse overheidsorganisatie.
Gebruik van AI bij de aanval
Er zijn aanwijzingen gevonden voor het gebruik van AI-ondersteunde tools in de aanvalsinfrastructuur:
- Claude Code was geïnstalleerd.
- aiscan, een AI-gestuurd offensief beveiligingsplatform, was geconfigureerd met de Chinese LLM's DeepSeek en Kimi.
- API-sleutels voor het Chinese reconnaissance-platform FOFA waren aanwezig.
Hoewel er geen direct bewijs is dat AI-tools specifiek zijn gebruikt om de exploit of de post-exploitation scripts te schrijven, suggereren de codestructuur, de stijl van de commentaren en de consistentie over de circa 40 scripts dat er AI-ondersteunde ontwikkeling heeft plaatsgevonden. Desondanks lijkt deze operatie geen volledig autonome aanval door een natiestaat te zijn.
De Exploit: Twee kwetsbaarheden gekoppeld in één request
De aanvaller ontwikkelde twee afzonderlijke exploits en koppelde deze om met één enkel HTTP-verzoek, zonder inloggegevens, root-toegang te verkrijgen op firewalls die specifieke versies van de software van de betreffende leverancier draaien.
PHP2Shell (CVE-2026-109618 / CVE-2026-109619) — Remote Code Execution
De teruggevonden implementatie is een aangepaste, niet-publieke build en geen kopie van bekende publieke exploits. Het volgt hetzelfde basisconcept, maar is onafhankelijk ontwikkeld en specifiek afgestemd op het doelwitplatform.
De kwetsbaarheid richt zich op het session.upload_progress mechanisme van de PHP-appweb beheerserver van de firewall. Het besturingssysteem van de firewall gebruikt PHP 8.0.30 met een hoge geheugenlimiet, wat de memory corruption-fasen van de aanval mogelijk maakt.
De aanval verloopt in vier gecoördineerde fasen:
- A1 — Memory Exhaustion (~383MB): De aanvaller overspoelt de server met speciaal geconstrueerde multipart POST-verzoeken met enorme bestandsnamen en sessie-voortgangsgegevens. Dit drijft de PHP-geheugenallocator tot het uiterste, waardoor het systeem een voorspelbare geheugenindeling krijgt.
- B1 — Information Leak: Een tweede verzoek vervalst de verlopen sessie-ID lengte uit A1, wat een out-of-bounds read forceert. De
Set-Cookie response header van de server bevat de gelekte pointer-waarde, waardoor de aanvaller het basisadres van libphp.so in het actieve proces verkrijgt.
- A2 — Stale Reference Setup (~500MB): Een nieuwe ronde van geheugendruk initialiseert een sessie, waarbij
httpsessionvars als een actieve zendreference overblijft. Vervolgens wordt een tweede Out-Of-Memory (OOM) trigger veroorzaakt die moddata=NULL achterlaat, wat een vervallen referentie creëert die de aanvaller in B2 kan vervalsen.
- B2 — Code Execution: Het laatste verzoek vervalst een PHP HashTable-entry in het vrijgegeven geheugen. De
pDestructor callback van deze entry wijst naar zif_system (de system() functie van PHP), en de data wijst naar een shell-commando string. Wanneer de cleanup-handler van PHP de HashTable doorloopt, wordt de vervalste destructor aangeroepen, waardoor willekeurige commando's worden uitgevoerd als de gebruiker nobody.
Fragnesia (CVE-2026-46300) — Kernel Privilege Escalation
Code-executie als nobody is onvoldoende, omdat SELinux de httpd_t beperkt in het wijzigen van systeembestanden. Om root-toegang te voltooien, koppelde de aanvaller een tweede exploit: een Linux-kernelkwetsbaarheid in het XFRM ESP-in-TCP subsysteem.
Fragnesia gebruikt page-cache writes om /etc/pam.d/su te overschrijven en de authenticatieregels te vervangen door pam_permit.so (alles accepteren). Omdat het PAM-bestand slechts 774 bytes groot is, gebruikt de exploit een per-byte splicing variant om dit precies te schrijven. Na de overschrijving is su root succesvol zonder wachtwoord.
Beide exploits worden uitgevoerd in één enkel B2 HTTP-verzoek. De volledige keten — van een niet-geauthenticeerde HTTPS-verbinding tot een persistente root-webshell — is in minder dan 15 minuten voltooid.
Het Lab: Version Profiling op schaal
De exploit is geen eenvoudige fire-and-forget payload. Er zijn precieze geheugenoffsets nodig die verschillen per versie van het firewall-OS, zoals het adres van zvalptrdtor, het adres van zif_system, de grootte van de HashTable-structuur en geheugenparameters die de heap-indeling per fase bepalen.
Er zijn 11 JSON-versieprofielen gevonden, één voor elke geteste versie van het firewall-OS:
| Firewall Versie | Release branch | PHP | Profielen | Notities |
| [Redacted] | Oudere branch | 7.4.33 | 2 provisioneel | PHP 7.4 — RCE als nobody geverifieerd in lab, maar volledige keten niet gekalibreerd. |
| [Redacted] | Nieuwere branches | 8.0.30 | 1 gekalibreerd, 8 provisioneel | Eén basisprofiel volledig getest; de andere erven de geometrie of delen offsets. |
Elk profiel bevat exacte offsets geëxtraheerd uit het libphp.so binairbestand van die versie, inclusief SHA256-hashes van elke library, ELF build ID's en precieze geheugenparameters (chunk sizes, fill counts, drain counts, spray offsets) die via lab-testen zijn afgestemd.
Het verschil tussen "gekalibreerd" (calibrated) en "provisioneel" (provisional) is belangrijk: gekalibreerd betekent dat de aanvaller de exploit heeft getest tegen een actieve VM van die versie en heeft bevestigd dat de geheugengeometrie werkt. Provisioneel betekent dat offsets zijn berekend vanuit het binaire bestand, maar niet zijn geverifieerd op een live instantie.
De Campagne-trechter: Van 19.000 ontdekt naar 25 geëxploiteerd
De aanvaller volgde een duidelijk proces om van een grote pool aan potentiële doelen naar een selecte groep gecompromitteerde servers te gaan:
Stap 1: Globale ontdekking (19.000 doelen) Via FOFA (een Chinese zoekmachine voor internetassets) identificeerde de aanvaller circa 19.000 internetgevoelige firewalls van de betreffende leverancier. Dit waren apparaten met beheerinterfaces die via certificaat-fingerprints en HTTP-respons-signatures vindbaar waren.
Stap 2: Versie-fingerprinting (5.000 actief) Met een aangepaste scanner (200 gelijktijdige threads) werd bepaald welke apparaten online waren en welke OS-versie zij draaiden. Ongeveer 5.000 reageerden met versie-informatie.
Stap 3: Geografische en versie-filtering (240 doelen) De lijst werd gefilterd op servers in de Verenigde Staten, Japan, Taiwan en Zuid-Korea, en verder gefilterd op versies die overeenkwamen met de exploitprofielen (de nieuwere branches met PHP 8.0.30). Dit resulteerde in een lijst van 240 firewalls. Gezien de strategische belangen in het Pacifisch gebied wijst dit op mogelijke inspanningen van een door een staat gesteunde actor.
Stap 4: Geautomatiseerde exploitatie (24 geroot) De 240 doelen werden in batches van vijf verwerkt met een timeout van 30 minuten per doel. Bij succes gebeurde het volgende:
- De volledige PHP2Shell + Fragnesia keten werd uitgevoerd.
- Er werd een PHP root-webshell van 103 bytes geplaatst in een publiek toegankelijke directory.
- Root-toegang werd geverifieerd via het
id commando.
- Hostname en IP werden gelogd in een CSV-bestand.
In totaal werden 24 firewalls succesvol geroot.
Stap 5: Triage (2 firewalls geprioriteerd) Bij 22 van de 24 servers stopte de aanvaller bij het plaatsen van de webshell. Deze servers werden effectief "geparkeerd". Twee servers, die beide toebehoorden aan een omgeving gelieerd aan de Amerikaanse overheid, werden verder geëxploiteerd.
Stap 6: De Pivot (Verschuiving van Firewall naar Domein) De configuratie van de eerste overheid-firewall onthulde kenmerken zoals CAC (Common Access Card) authenticatie en gestandaardiseerde overheidsnaamgeving. Het configuratiebestand bevatte de volledige interne netwerktopologie: domeincontrollers, een centrale firewall-beheerserver, een Keycloak SSO-server, een GitLab-instantie, VPN-gateways en het Active Directory-domein.
De eerste firewall crashte kort na de exploitatie (waarschijnlijk door de ~900MB aan exploit-verkeer) en kwam niet meer online. De aanvaller richtte zich vervolgens op de tweede firewall van dezelfde organisatie, die op 24 oktober om 10:09 UTC succesvol werd geëxploiteerd.
Binnen enkele uren deed de aanvaller het volgende:
- Bouwen van een persistente tunnel: Een reverse SSH-tunnel met 8 poorten verbond de gecompromitteerde firewall met de infrastructuur van de operator. Dit gaf toegang tot:
- Domeincontrollers (LDAP, LDAPS, RDP)
- De interne firewall-beheerserver
- VPN-infrastructuur
- Een SOCKS5-proxy voor willekeurige toegang tot het interne netwerk.
De tunnel werd verpakt in een systemd-service en een rc.local boot hook, waardoor deze reboots overleeft.
- Exploitatie van de beheerserver: Om 11:35 UTC gebruikte de aanvaller via de tunnel dezelfde PHP2Shell + Fragnesia keten tegen een derde server: de interne firewall-beheerserver. Omdat deze server alle firewalls van de organisatie centraal beheert, kreeg de aanvaller toegang tot alle configuraties, inloggegevens en netwerkinstellingen van elke beheerde firewall. Dit bracht het totaal aantal geëxploiteerde servers op 25.
- AD-aanvalscampagne: De beheerserver werd als lanceerplatform gebruikt voor aanvallen op Active Directory:
- Het LDAP-serviceaccount wachtwoord werd gedecrypteerd uit de configuratie.
- Alle gebruikers en groepen in het domein werden via LDAP-queries in kaart gebracht (enumeration).
- Er werd een password spray uitgevoerd op alle gebruikersaccounts met organisatie-thema's. Omdat
lockoutThreshold=0 stond ingesteld, waren er onbeperkte pogingen mogelijk zonder accountblokkering.
- Er werd geprobeerd backdoor AD-accounts aan te maken (zowel gebruikers- als machine-accounts).
- AD ACL-ketens werden geanalyseerd voor privilege escalation paden.
- Er werd geprobeerd de SAML-signing key te extraheren uit de Keycloak IdP-configuratie en Keycloak SSO te testen op authentication bypass.
De resultaten van deze AD-aanvallen bleven op het lokale bestandssysteem van de beheerserver en zijn niet hersteld, waardoor de volledige omvang van de compromittering onduidelijk is.
Huidige status van de compromittering
Op basis van de herstelde artefacten kan worden bevestigd dat de aanvaller beschikt over:
- Persistente remote toegang tot het interne netwerk van de organisatie via een reverse tunnel en SOCKS-proxy.
- Root-webshells op twee firewalls en de firewall-beheerserver.
- Een volledige lijst van Active Directory-gebruikers en groepen.
- Gedecrypteerde LDAP-serviceaccount inloggegevens.
- Private keys van het firewall-bestandssysteem (HA replicatie keys, SSL/TLS certificaat keys, device authentication keys).
- De volledige netwerktopologie (IP's, hostnames, subnets, serverrollen en VPN-gateways).
- SAML IdP-configuratie met zwakke beveiligingsinstellingen (
validate-idp-certificate: no).
- 22 extra "geparkeerde" firewalls verspreid over de VS, Japan, Taiwan en Zuid-Korea.
Attributie-indicatoren
Hoewel er geen directe attributie aan een specifieke actor plaatsvindt, wijzen meerdere indicatoren in de richting van een Chinese operatie:
| Indicator | Detail |
| Doelselectie | Uitsluitend VS, Japan, Taiwan en Zuid-Korea (strategische doelen voor Chinese operaties in de Pacific). |
| FOFA | De gebruikte reconnaissance-platform is een Chinese service. |
| iox | Een Chinese tunneling-utility werd aangetroffen bij de tools. |
| DeepSeek & Kimi | De LLM's in het aiscan-platform zijn Chinese taalmodellen. |
| UTC+8 timestamps | De klok van de infrastructuur liep op China Standard Time. |
| Chinese prompts | De aiscan-sessielogs bevatten berichten in het Chinees. |
Conclusie
Deze operatie getuigt van een niveau van voorbereiding dat verder gaat dan opportunistische exploitatie. De aanvaller investeerde aanzienlijk in onderzoek: het verkrijgen en decrypteren van firmware, het extraheren van PHP-libraries, het bouwen van precieze geheugenprofielen voor 9 versies en het kalibreren van de exploit-geometrie.
Er was een scherpe focus op overheidsdoelen. Van de 19.000 gescande firewalls werden er 24 geroot, waarna direct de twee belangrijkste doelen werden geïdentificeerd. Binnen enkele uren na het compromitteren van een firewall werd er een tunnel naar het interne netwerk gebouwd, werd een derde server overgenomen en werd een volledige aanval op Active Directory gestart. Dit alles begon met één enkel ongeauthenticeerd HTTPS-verzoek naar een beheerinterface die nooit aan het internet had mogen worden blootgesteld.
De overige 22 gerootte firewalls blijven geparkeerd met actieve webshells. De persistente tunnel naar de Amerikaanse overheidsorganisatie is waarschijnlijk nog steeds actief.
Het dichten van het gat tussen ontdekking en verdediging
Voor overheden en kritieke infrastructuur is het vinden van een kwetsbaarheid slechts het begin. Verdedigers moeten blootgestelde systemen identificeren en actie ondernemen voordat een eerste toegangspunt leidt tot een volledige compromittering.
Dream pakt deze uitdaging aan via twee platforms:
- Sphere: Schaalt nationale cyberverdediging door exposure in kaart te brengen, risico's te prioriteren en aanvallen op overheidsnetwerken te detecteren.
- Hero: Schaalt cyberonderzoek met autonome agenten die experts helpen bij het onderzoeken van dreigingen en het valideren van kwetsbaarheden (ook in software zonder broncode). Dit is de tool die is gebruikt voor dit onderzoek.
Gekoppelde PHP2Shell-exploit krijgt root-toegang tot 25 servers
Introductie
Op 25 oktober ontdekten onderzoekers van Dream sporen van een door AI ondersteunde campagne, waarschijnlijk van Chinese oorsprong, die root-toegang kreeg tot 25 servers, waaronder systemen in een omgeving gelieerd aan de Amerikaanse overheid. De aanvaller combineerde een PHP2Shell-exploit met een kernel privilege-escalation (LPE) om blootgestelde systemen te compromitteren.
De getroffen apparaten draaien specifieke versies van de firewallsoftware van een grote leverancier. Om veiligheidsredenen wordt de leverancier en de betreffende versies niet bekendgemaakt; de leverancier is inmiddels op de hoogte gesteld.
Na de initiële toegang startte de aanvaller aanvallen op Active Directory. Herstelde artefacten bevestigen dat inloggegevens zijn geëxtraheerd en dat de directory is gescand (enumeration). Deze operatie illustreert hoe een blootgestelde beheerinterface een toegangsweg kan worden tot de identiteitsinfrastructuur van een organisatie. Voor overheidsverdedigers begint de uitdaging pas na het ontdekken van de kwetsbaarheid; de echte strijd ligt in het identificeren van kwetsbare systemen en het begrijpen en beperken van de toegang die een compromis mogelijk maakt.
Het onderstaande onderzoek is uitgevoerd via proactieve threat hunting met behulp van Hero, het autonome cyber-onderzoeksproduct van Dream.
Ontdekking
Onderzoekers van Dream identificeerden een complete aanvalsoperatie. Deze bestond uit een aangepaste wapening van de PHP2Shell-exploitketen (CVE-2026-109618 / CVE-2026-109619) gekoppeld aan de Fragnesia kernel privilege escalation (CVE-2026-46300), doelwittlijsten, exploitatie-logs en ongeveer 40 aangepaste post-exploitation scripts.
De artefacten wezen op een campagne waarbij 25 servers in de Verenigde Staten, Japan, Taiwan en Zuid-Korea waren geroot. Zodra root-toegang was verkregen, richtte de aanvaller zich op drie specifieke servers in een omgeving gelieerd aan de Amerikaanse overheid. De operatie begon met exploit-ontwikkeling in een laboratoriumomgeving en eindigde met persistente toegang tot het interne Active Directory-domein van een Amerikaanse overheidsorganisatie.
Gebruik van AI bij de aanval
Er zijn aanwijzingen gevonden voor het gebruik van AI-ondersteunde tools in de aanvalsinfrastructuur:
- Claude Code was geïnstalleerd.
- aiscan, een AI-gestuurd offensief beveiligingsplatform, was geconfigureerd met de Chinese LLM's DeepSeek en Kimi.
- API-sleutels voor het Chinese reconnaissance-platform FOFA waren aanwezig.
Hoewel er geen direct bewijs is dat AI-tools specifiek zijn gebruikt om de exploit of de post-exploitation scripts te schrijven, suggereren de codestructuur, de stijl van de commentaren en de consistentie over de circa 40 scripts dat er AI-ondersteunde ontwikkeling heeft plaatsgevonden. Desondanks lijkt deze operatie geen volledig autonome aanval door een natiestaat te zijn.
De Exploit: Twee kwetsbaarheden gekoppeld in één request
De aanvaller ontwikkelde twee afzonderlijke exploits en koppelde deze om met één enkel HTTP-verzoek, zonder inloggegevens, root-toegang te verkrijgen op firewalls die specifieke versies van de software van de betreffende leverancier draaien.
PHP2Shell (CVE-2026-109618 / CVE-2026-109619) — Remote Code Execution
De teruggevonden implementatie is een aangepaste, niet-publieke build en geen kopie van bekende publieke exploits. Het volgt hetzelfde basisconcept, maar is onafhankelijk ontwikkeld en specifiek afgestemd op het doelwitplatform.
De kwetsbaarheid richt zich op het session.upload_progress mechanisme van de PHP-appweb beheerserver van de firewall. Het besturingssysteem van de firewall gebruikt PHP 8.0.30 met een hoge geheugenlimiet, wat de memory corruption-fasen van de aanval mogelijk maakt.
De aanval verloopt in vier gecoördineerde fasen:
- A1 — Memory Exhaustion (~383MB): De aanvaller overspoelt de server met speciaal geconstrueerde multipart POST-verzoeken met enorme bestandsnamen en sessie-voortgangsgegevens. Dit drijft de PHP-geheugenallocator tot het uiterste, waardoor het systeem een voorspelbare geheugenindeling krijgt.
- B1 — Information Leak: Een tweede verzoek vervalst de verlopen sessie-ID lengte uit A1, wat een out-of-bounds read forceert. De
Set-Cookie response header van de server bevat de gelekte pointer-waarde, waardoor de aanvaller het basisadres van libphp.so in het actieve proces verkrijgt.
- A2 — Stale Reference Setup (~500MB): Een nieuwe ronde van geheugendruk initialiseert een sessie, waarbij
httpsessionvars als een actieve zendreference overblijft. Vervolgens wordt een tweede Out-Of-Memory (OOM) trigger veroorzaakt die moddata=NULL achterlaat, wat een vervallen referentie creëert die de aanvaller in B2 kan vervalsen.
- B2 — Code Execution: Het laatste verzoek vervalst een PHP HashTable-entry in het vrijgegeven geheugen. De
pDestructor callback van deze entry wijst naar zif_system (de system() functie van PHP), en de data wijst naar een shell-commando string. Wanneer de cleanup-handler van PHP de HashTable doorloopt, wordt de vervalste destructor aangeroepen, waardoor willekeurige commando's worden uitgevoerd als de gebruiker nobody.
Fragnesia (CVE-2026-46300) — Kernel Privilege Escalation
Code-executie als nobody is onvoldoende, omdat SELinux de httpd_t beperkt in het wijzigen van systeembestanden. Om root-toegang te voltooien, koppelde de aanvaller een tweede exploit: een Linux-kernelkwetsbaarheid in het XFRM ESP-in-TCP subsysteem.
Fragnesia gebruikt page-cache writes om /etc/pam.d/su te overschrijven en de authenticatieregels te vervangen door pam_permit.so (alles accepteren). Omdat het PAM-bestand slechts 774 bytes groot is, gebruikt de exploit een per-byte splicing variant om dit precies te schrijven. Na de overschrijving is su root succesvol zonder wachtwoord.
Beide exploits worden uitgevoerd in één enkel B2 HTTP-verzoek. De volledige keten — van een niet-geauthenticeerde HTTPS-verbinding tot een persistente root-webshell — is in minder dan 15 minuten voltooid.
Het Lab: Version Profiling op schaal
De exploit is geen eenvoudige fire-and-forget payload. Er zijn precieze geheugenoffsets nodig die verschillen per versie van het firewall-OS, zoals het adres van zvalptrdtor, het adres van zif_system, de grootte van de HashTable-structuur en geheugenparameters die de heap-indeling per fase bepalen.
Er zijn 11 JSON-versieprofielen gevonden, één voor elke geteste versie van het firewall-OS:
| Firewall Versie | Release branch | PHP | Profielen | Notities |
| [Redacted] | Oudere branch | 7.4.33 | 2 provisioneel | PHP 7.4 — RCE als nobody geverifieerd in lab, maar volledige keten niet gekalibreerd. |
| [Redacted] | Nieuwere branches | 8.0.30 | 1 gekalibreerd, 8 provisioneel | Eén basisprofiel volledig getest; de andere erven de geometrie of delen offsets. |
Elk profiel bevat exacte offsets geëxtraheerd uit het libphp.so binairbestand van die versie, inclusief SHA256-hashes van elke library, ELF build ID's en precieze geheugenparameters (chunk sizes, fill counts, drain counts, spray offsets) die via lab-testen zijn afgestemd.
Het verschil tussen "gekalibreerd" (calibrated) en "provisioneel" (provisional) is belangrijk: gekalibreerd betekent dat de aanvaller de exploit heeft getest tegen een actieve VM van die versie en heeft bevestigd dat de geheugengeometrie werkt. Provisioneel betekent dat offsets zijn berekend vanuit het binaire bestand, maar niet zijn geverifieerd op een live instantie.
De Campagne-trechter: Van 19.000 ontdekt naar 25 geëxploiteerd
De aanvaller volgde een duidelijk proces om van een grote pool aan potentiële doelen naar een selecte groep gecompromitteerde servers te gaan:
Stap 1: Globale ontdekking (19.000 doelen) Via FOFA (een Chinese zoekmachine voor internetassets) identificeerde de aanvaller circa 19.000 internetgevoelige firewalls van de betreffende leverancier. Dit waren apparaten met beheerinterfaces die via certificaat-fingerprints en HTTP-respons-signatures vindbaar waren.
Stap 2: Versie-fingerprinting (5.000 actief) Met een aangepaste scanner (200 gelijktijdige threads) werd bepaald welke apparaten online waren en welke OS-versie zij draaiden. Ongeveer 5.000 reageerden met versie-informatie.
Stap 3: Geografische en versie-filtering (240 doelen) De lijst werd gefilterd op servers in de Verenigde Staten, Japan, Taiwan en Zuid-Korea, en verder gefilterd op versies die overeenkwamen met de exploitprofielen (de nieuwere branches met PHP 8.0.30). Dit resulteerde in een lijst van 240 firewalls. Gezien de strategische belangen in het Pacifisch gebied wijst dit op mogelijke inspanningen van een door een staat gesteunde actor.
Stap 4: Geautomatiseerde exploitatie (24 geroot) De 240 doelen werden in batches van vijf verwerkt met een timeout van 30 minuten per doel. Bij succes gebeurde het volgende:
- De volledige PHP2Shell + Fragnesia keten werd uitgevoerd.
- Er werd een PHP root-webshell van 103 bytes geplaatst in een publiek toegankelijke directory.
- Root-toegang werd geverifieerd via het
id commando.
- Hostname en IP werden gelogd in een CSV-bestand.
In totaal werden 24 firewalls succesvol geroot.
Stap 5: Triage (2 firewalls geprioriteerd) Bij 22 van de 24 servers stopte de aanvaller bij het plaatsen van de webshell. Deze servers werden effectief "geparkeerd". Twee servers, die beide toebehoorden aan een omgeving gelieerd aan de Amerikaanse overheid, werden verder geëxploiteerd.
Stap 6: De Pivot (Verschuiving van Firewall naar Domein) De configuratie van de eerste overheid-firewall onthulde kenmerken zoals CAC (Common Access Card) authenticatie en gestandaardiseerde overheidsnaamgeving. Het configuratiebestand bevatte de volledige interne netwerktopologie: domeincontrollers, een centrale firewall-beheerserver, een Keycloak SSO-server, een GitLab-instantie, VPN-gateways en het Active Directory-domein.
De eerste firewall crashte kort na de exploitatie (waarschijnlijk door de ~900MB aan exploit-verkeer) en kwam niet meer online. De aanvaller richtte zich vervolgens op de tweede firewall van dezelfde organisatie, die op 24 oktober om 10:09 UTC succesvol werd geëxploiteerd.
Binnen enkele uren deed de aanvaller het volgende:
- Bouwen van een persistente tunnel: Een reverse SSH-tunnel met 8 poorten verbond de gecompromitteerde firewall met de infrastructuur van de operator. Dit gaf toegang tot:
- Domeincontrollers (LDAP, LDAPS, RDP)
- De interne firewall-beheerserver
- VPN-infrastructuur
- Een SOCKS5-proxy voor willekeurige toegang tot het interne netwerk.
De tunnel werd verpakt in een systemd-service en een rc.local boot hook, waardoor deze reboots overleeft.
- Exploitatie van de beheerserver: Om 11:35 UTC gebruikte de aanvaller via de tunnel dezelfde PHP2Shell + Fragnesia keten tegen een derde server: de interne firewall-beheerserver. Omdat deze server alle firewalls van de organisatie centraal beheert, kreeg de aanvaller toegang tot alle configuraties, inloggegevens en netwerkinstellingen van elke beheerde firewall. Dit bracht het totaal aantal geëxploiteerde servers op 25.
- AD-aanvalscampagne: De beheerserver werd als lanceerplatform gebruikt voor aanvallen op Active Directory:
- Het LDAP-serviceaccount wachtwoord werd gedecrypteerd uit de configuratie.
- Alle gebruikers en groepen in het domein werden via LDAP-queries in kaart gebracht (enumeration).
- Er werd een password spray uitgevoerd op alle gebruikersaccounts met organisatie-thema's. Omdat
lockoutThreshold=0 stond ingesteld, waren er onbeperkte pogingen mogelijk zonder accountblokkering.
- Er werd geprobeerd backdoor AD-accounts aan te maken (zowel gebruikers- als machine-accounts).
- AD ACL-ketens werden geanalyseerd voor privilege escalation paden.
- Er werd geprobeerd de SAML-signing key te extraheren uit de Keycloak IdP-configuratie en Keycloak SSO te testen op authentication bypass.
De resultaten van deze AD-aanvallen bleven op het lokale bestandssysteem van de beheerserver en zijn niet hersteld, waardoor de volledige omvang van de compromittering onduidelijk is.
Huidige status van de compromittering
Op basis van de herstelde artefacten kan worden bevestigd dat de aanvaller beschikt over:
- Persistente remote toegang tot het interne netwerk van de organisatie via een reverse tunnel en SOCKS-proxy.
- Root-webshells op twee firewalls en de firewall-beheerserver.
- Een volledige lijst van Active Directory-gebruikers en groepen.
- Gedecrypteerde LDAP-serviceaccount inloggegevens.
- Private keys van het firewall-bestandssysteem (HA replicatie keys, SSL/TLS certificaat keys, device authentication keys).
- De volledige netwerktopologie (IP's, hostnames, subnets, serverrollen en VPN-gateways).
- SAML IdP-configuratie met zwakke beveiligingsinstellingen (
validate-idp-certificate: no).
- 22 extra "geparkeerde" firewalls verspreid over de VS, Japan, Taiwan en Zuid-Korea.
Attributie-indicatoren
Hoewel er geen directe attributie aan een specifieke actor plaatsvindt, wijzen meerdere indicatoren in de richting van een Chinese operatie:
| Indicator | Detail |
| Doelselectie | Uitsluitend VS, Japan, Taiwan en Zuid-Korea (strategische doelen voor Chinese operaties in de Pacific). |
| FOFA | De gebruikte reconnaissance-platform is een Chinese service. |
| iox | Een Chinese tunneling-utility werd aangetroffen bij de tools. |
| DeepSeek & Kimi | De LLM's in het aiscan-platform zijn Chinese taalmodellen. |
| UTC+8 timestamps | De klok van de infrastructuur liep op China Standard Time. |
| Chinese prompts | De aiscan-sessielogs bevatten berichten in het Chinees. |
Conclusie
Deze operatie getuigt van een niveau van voorbereiding dat verder gaat dan opportunistische exploitatie. De aanvaller investeerde aanzienlijk in onderzoek: het verkrijgen en decrypteren van firmware, het extraheren van PHP-libraries, het bouwen van precieze geheugenprofielen voor 9 versies en het kalibreren van de exploit-geometrie.
Er was een scherpe focus op overheidsdoelen. Van de 19.000 gescande firewalls werden er 24 geroot, waarna direct de twee belangrijkste doelen werden geïdentificeerd. Binnen enkele uren na het compromitteren van een firewall werd er een tunnel naar het interne netwerk gebouwd, werd een derde server overgenomen en werd een volledige aanval op Active Directory gestart. Dit alles begon met één enkel ongeauthenticeerd HTTPS-verzoek naar een beheerinterface die nooit aan het internet had mogen worden blootgesteld.
De overige 22 gerootte firewalls blijven geparkeerd met actieve webshells. De persistente tunnel naar de Amerikaanse overheidsorganisatie is waarschijnlijk nog steeds actief.
Het dichten van het gat tussen ontdekking en verdediging
Voor overheden en kritieke infrastructuur is het vinden van een kwetsbaarheid slechts het begin. Verdedigers moeten blootgestelde systemen identificeren en actie ondernemen voordat een eerste toegangspunt leidt tot een volledige compromittering.
Dream pakt deze uitdaging aan via twee platforms:
- Sphere: Schaalt nationale cyberverdediging door exposure in kaart te brengen, risico's te prioriteren en aanvallen op overheidsnetwerken te detecteren.
- Hero: Schaalt cyberonderzoek met autonome agenten die experts helpen bij het onderzoeken van dreigingen en het valideren van kwetsbaarheden (ook in software zonder broncode). Dit is de tool die is gebruikt voor dit onderzoek.