PEERSTITCH: The FortiGate Implant That Hides Inside Trusted Processes
Suspected nation-state cluster CL-STA-0954 used FortiJump CVE-2024-47575 to steal the configurations of more than 500 managed FortiGate firewalls, then abused FortiOS CVE-2025-61624 to deploy PEERSTITCH, a memory-resident ARM64 implant.
TA2026304Published October 16, 2026Admiralty A1TA2026304A1500+Summary
A suspected nation-state cluster tracked as CL-STA-0954 broke into a telecommunications managed service provider by exploiting the FortiJump flaw in a central FortiManager appliance. From that single box, the attackers walked away with the running configurations, credentials, and cryptographic trust material for more than 500 managed FortiGate firewalls, including devices protecting client networks.
They later returned with stolen credentials, abused a FortiOS path traversal flaw to gain root, and deployed PEERSTITCH, a memory-resident ARM64 implant that writes nothing to disk, opens no ports and makes no outbound connections of its own. Instead it stitches two legitimate FortiOS daemons together through shared process memory and uses their traffic as cover, letting the attackers wave through tagged VPN sessions that FortiOS would normally reject.
Threat Actor
Malware
Targeted Regions
Targeted Products
Targeted Industries
Attack Details
- #01
A state-backed actor has been caught abusing a Fortinet FortiOS weakness to plant PEERSTITCH, a memory-resident ARM64 implant not documented until now. The attackers started at the top of the network rather than at its edge. CL-STA-0954 exploited
CVE-2024-47575, better known as FortiJump, against the victim's central FortiManager appliance. The flaw lets an unauthenticated attacker run commands through the FMG-Access channel on TCP port541. They used it to register a rogue virtual FortiGate namedlocalhost, serial numberFMG-VMTM23017412, from45[.]32[.]41[.]202and later198[.]199[.]122[.]22. Moments after that, they built a configuration archive called.tmon the appliance and pulled it out of the network. - #02
That archive was the real prize. It held the running configurations of more than
500managed FortiGate firewalls, the central management databases, an inventory of serial numbers paired with public IP addresses, internal topology maps, and the certificates and private keys that hold the trust between the manager and every device it controls. The stored passwords were only reversibly encrypted, and it was confirmed that administrative and SSL/VPN credentials could be cracked straight out of the stolen files. - #03
After a long quiet period, the attackers came back and started listening. They used the compromised FortiManager to push unauthorized packet capture rules to managed firewalls, targeting cleartext HTTP, RADIUS, LDAP and TFTP traffic to collect credentials and map the network. Then they logged in as legitimate users, opening SSL/VPN sessions from
23[.]240[.]77[.]233and47[.]18[.]167[.]159. That put them inside internal management segments, but still inside the restricted FortiOS admin shell, so they exploitedCVE-2025-61624to break out. Thesystem.auto-scriptengine does not sanitize object names, so an auto-script object carrying a traversal name wrote a loader outside its intended directory and ran it as root. - #04
The loader downloaded five files, including JavaScript and WebAssembly components and a native ARM64 binary saved as
lldprx. That binary is PEERSTITCH, and it runs exactly once. It finds the running/bin/miglogdlogging daemon and/bin/ikedVPN daemon, attaches to both with ptrace, freezes them, allocates a16 KBread-write-execute memory region in each, and writes its payload there. It then patches three fixed offsets to suppress tamper detection and redirects execution into the hook. Afterwards, it deletes its own file and kills the staging process, leaving nothing on disk. The two hooks talk to each other by writing directly into each other's process memory, watching passing traffic for the markers8550and169.254.0.1and passing session tags across. When iked later sees a tagged VPN session, it takes an alternate code path and skips normal FortiOS security checks. - #05
The attackers also built a backup way in and then cleaned up behind themselves. They reconfigured the Apache
mod_mdmodule on FortiGate so that certificate validation ran Node.js with instructions pulled from their own ACME server on23[.]240[.]77[.]233, spawning an SSH reverse shell that Apache kept renewing on its own. Separately, they used the stolen trust material to impersonate the FortiManager over FGFM and pulled configurations from other firewalls using an account namedFortiGateCloudthat the victim had never created. Finally they killed the logging daemons, cleared crash logs, deleted the rogue accounts and auto-script objects, and overwrote the malicious Apache config with harmless-looking text.
CVEs
| CVE | Name | Affected Product | Zero-Day | CISA KEV | Patch |
|---|---|---|---|---|---|
CVE-2025-61624 | Fortinet FortiOS CLI Path Traversal Vulnerability | Fortinet FortiOS, FortiPAM, FortiProxy, FortiSwitchManager | No | No | Available |
CVE-2024-47575 | FortiJump (Fortinet FortiManager Missing Authentication Vulnerability) | Fortinet FortiManager | Yes | Yes | Available |
Recommendations
- 01Patch FortiOS Against
CVE-2025-61624Apply the fixes described in FortiGuard advisory FG-IR-26-122 to FortiOS, FortiPAM, FortiProxy and FortiSwitchManager. Until that patch is in place, any administrative account on the appliance is effectively a root account.
- 02Patch FortiManager Against FortiJump
Update FortiManager per FG-IR-24-423 to close
CVE-2024-47575. If the appliance was internet-exposed before patching, treat it as compromised rather than fixed, because patching removes the entry point but not what already walked out. - 03Rotate Everything the Manager Held
Assume every credential and certificate stored on a compromised FortiManager is in an attacker's hands. Rotate administrative, local, and SSL/VPN passwords, reissue device certificates and private keys, and regenerate the FGFM trust material for every managed firewall. This material stays valid until it is rotated, patched, or not.
- 04Hunt for the Memory Implant
PEERSTITCH only exists in RAM, so look there. Inspect
/proc/<pid>/mapsfor/bin/miglogdand/bin/ikedfor anonymous16,384-byte regions carryingrwxppermissions, and verify text segment integrity atbase+0x106F7B8,base+0x1072E20andbase+0x109A570for the NOP pattern0xAA0003E0. - 05Audit Auto-Script Objects for Traversal Strings
Review FortiOS configuration revisions for any
system.auto-scriptobject whose name contains../sequences. The attackers deleted theirs after execution, so historical revisions and configuration backups matter more than the current running config. - 06Inspect Apache mod_md Configuration on FortiGate
Verify that
/tmp/apache2/conf/md-acme.confhas not been altered to point at an unfamiliar ACME directory, thatMDChallengeDns01is not mapped to/bin/node, and thatMDRenewModehas not been forced to always. - 07Isolate Management Interfaces Behind Zero Trust
FMG-Access and FGFM on TCP port
541should never be reachable from the internet. Restrict management plane access to a dedicated out-of-band network with explicit allowlisting, since this intrusion turned one reachable management port into visibility over500firewalls.
Indicators of Compromise (IoCs)
| Type | Value |
|---|---|
SHA256 | b9fb0b27ddd59b58d3ae53c7227298a3e0de1e6f868b9429ae21533bb9cd1e70 |
IPv4 | 23[.]240[.]77[.]233 |
URL | hxxp[:]//23[.]240[.]77[.]233[:]8085/pM.js |
Filename | lldprx |
File Path | ../../../../setup |
MITRE ATT&CK TTPs
T1190T1133T1078T1078.003T1059T1059.007T1543T1068T1055T1055.008T1562T1562.001T1070T1070.002T1070.004T1036T1014T1211T1110T1110.002T1040T1552T1552.001T1649T1046T1021T1005T1074T1074.001T1602T1071T1071.001T1105T1219T1205T1008T1041References & Patch Links
Patch Links
- CVE-2024-47575
https://www.fortiguard.com/psirt/FG-IR-24-423 - CVE-2025-61624
https://fortiguard.fortinet.com/psirt/FG-IR-26-122
