Perturbation Probing: A New Diagnostic for the Fragility of LLM Safety

Introducing a New Angle on LLM Safety

Our previous research on logit-gap steering demonstrated that the safety guardrails of an aligned LLM can be bypassed by closing a measurable gap in the model's output scores. That work answered the question of how an attacker bypasses alignment. A natural follow-up question is where inside the model the alignment lives in the first place — and how concentrated or how diffuse that defense actually is. The answer matters because it tells defenders whether safety is a thick perimeter or a thin layer of paint.

Modern LLMs are aligned through reinforcement learning from human feedback (RLHF), a training stage that pushes the model toward refusing harmful prompts and complying with safe ones. Until now, no method has been able to point to the specific pieces of the network that carry that learned behavior cheaply enough to run on every model an enterprise deploys. Our new academic research presents a method that does exactly that, and it produces a result that should change how the industry talks about LLM safety.

Our Research: Perturbation Probing Findings and Technical Impact

Our research introduces a method called perturbation probing. With only two forward passes per prompt and a significantly lower computational cost, it identifies the small set of feed-forward neurons inside an aligned LLM that are causally responsible for a targeted behavior, such as refusing harmful requests.

The headline finding is striking. On open-source LLM Qwen3-4B, just 50 neurons out of 350,208 — about 0.014% of the model's feed-forward neurons — control the safety refusal template. Removing those 50 neurons changes the response format on 80% of 520 standard harmful-prompt benchmarks. The result was replicated on 200 prompts of a second standard benchmark. On a smaller model, Qwen3.5-2B, just 20 neurons were enough to stop the LLM from falsely agreeing with users in multi-turn conversations, dropping that behavior from 36.7% to 0% across 30 questions.

This concentration matters because it demonstrates that an aligned LLM's refusal behavior does not live in a robust, distributed defense. It lives in a thin template layer — a tiny fraction of the network that an attacker who can manipulate internals could disable, and that even a normal optimization run could shift. Relying on this thin layer alone is the LLM analog of relying on a single perimeter firewall: structurally insufficient. True AI safety demands a defense-in-depth strategy, with external content filters and runtime guardrails layered on top of whatever the base model was trained to do.

Beyond identifying the neurons, the same computation produces a diagnostic we call the FFN/Skip ratio: a single number, computable in seconds per model, that predicts whether a model's safety circuit can be easily steered with minimal modifications. Across the 13 models tested, this ratio explained 81% of the variance in how vulnerable each model's safety behavior was to a small targeted change. That makes it a candidate for a quantitative safety fragility score, a metric that allows security teams to compare models on alignment robustness without running adversarial red-team campaigns first.

Figure 1 displays these tests below. The horizontal axis measures how much a model routes decisions through a narrow internal pathway, and the vertical axis measures how much the model’s safety behavior changed when we disabled just 50 neurons. Models track the diagonal closely, which is why one number can predict the other.

Figure 1. Graph displaying the 13 tested models.

Building a Stronger Future for AI Safety

We hope that perturbation probing will serve two roles for the AI security community. First, as a pre-deployment diagnostic. Security teams can measure how much of a model's safety rests on a thin, easily removed layer before they put that model in production. In our experiments, amplifying just 10 identified neurons on a small model improved factual self-correction from 52% to 88% on 200 TruthfulQA prompts without any retraining. The same toolkit that exposes fragility can also be used to repair it.

We are sharing this research to empower the broader AI and security community to build LLMs whose safety properties can be measured, audited and reinforced, not merely asserted. We urge researchers to read the full paper on arXiv, “Perturbation Probing: A Two-Pass-per-Prompt Diagnostic for FFN Behavioral Circuits in Aligned LLMs.” We also recommend integrating fragility diagnostics into your own evaluation pipelines.

For organizations deploying LLMs today, Prisma AIRS Runtime Security provides the external content filters and inline guardrails that a thin template layer alone cannot. Unit 42's AI Security Assessment helps identify where AI adoption introduces governance and exposure risk. Together, they deliver the defense-in-depth posture that this research shows is necessary.

Additional Resources

Disclaimer

We used publicly available open-weight models under their respective licenses for local mechanistic and safety evaluation. The study reports aggregate rates, model-internal measurements, and non-operational summaries only. We do not release harmful generations, executable attack artifacts, jailbreak prompts or instructions that facilitate misuse. For models governed by acceptable-use or prohibited-use policies, experiments are framed as defensive safety evaluation and robustness measurement.

The State of AI-Enabled Malware August 2026: From Brand Abuse to Agentic Execution

Executive Summary

To assess the impact of AI-enabled malware, we collected and analyzed over 400 malware samples that integrate AI in some capacity, from brand impersonation and large language model (LLM)-generated code to agentic execution loops. Our central finding was that the AI malware space is currently overwhelmingly composed of proof-of-concept code, security validation testing and researcher submissions that have never reached a production environment.

Of the 405 samples in our dataset, only 12 appeared in our telemetry on Cortex XDR-protected endpoints, and a small subset was forwarded through Next-Generation Firewalls to WildFire for analysis. Palo Alto Networks products detected and blocked every sample that attempted to reach a customer environment.

These numbers tell a story that sits between two poles in the current discourse. AI-enabled malware is real. However, the volume of genuine operational activity remains a fraction of what public sample repositories suggest. Approximately 97% of the samples we examined exist only in sandboxes and on VirusTotal.

For defenders, the practical takeaway is straightforward. Existing behavioral detection, cloud-based sandboxing and endpoint analytics catch these threats using the same mechanisms that stop conventional malware. The AI component does not evade detection. It changes how the code is authored, not how it executes.

Palo Alto Networks customers are better protected against the threats discussed in this article through the following products and services, which detected these AI-enabled malware threats out of the box:

If you think you might have been compromised or have an urgent matter, contact the Unit 42 Incident Response team.

Related Unit 42 Topics LLM, Agentic AI, Malware

The Dataset

Our starting dataset consisted of 405 unique SHA-256 hashes collected from WildFire analysis reports, VirusTotal Intelligence and published open-source intelligence (OSINT) research.

The collection criteria were broad. We included any sample where AI integration was either a functional component of the malware, a feature of its delivery mechanism or part of its branding. This intentionally inclusive approach captured everything from LLM-powered ransomware agents to cryptocurrency miners that simply used “ChatGPT” in their filename.

We queried this dataset across multiple telemetry sources to measure real-world prevalence:

  • Endpoint presence: Cortex XDR agent telemetry from non-test tenants (December 2024–June 2025)
  • Network visibility: WildFire session data from samples forwarded by Next-Generation Firewalls and Cortex XDR agents (June 2024–June 2025)
  • Alert generation: Cortex XDR alert records for samples that triggered detection logic on endpoints
  • Sandbox verdicts: WildFire analysis results with malware classification

Table 1 summarizes the results of this dataset.

Telemetry Source Samples Queried Samples Discovered Prevalence in Production
Cortex XDR endpoints 405 12 3.0%
WildFire sessions 405 ~15–20 unique hashes ~4%
Cortex XDR alerts generated 12 12 100%

Table 1. Telemetry coverage across the AI malware dataset.

The disparity between the 405-sample dataset and the 12 samples observed in production environments is the most important number in this analysis. Approximately 97% of AI-enabled malware samples exist only in research repositories, sandbox environments and security validation platforms. We found no evidence that they reached a customer endpoint or traversed a customer firewall.

The following sections examine the characteristics of the dataset.

What the Other 97% Looks Like

The samples that never appeared in production telemetry fall into three categories:

  • Proof-of-concept and research code
  • Security validation and testing
  • AI-themed brand abuse

Proof-of-Concept and Research Code

The largest category consists of proof-of-concept implementations published to demonstrate a technique. These include:

  • LLM-powered ransomware frameworks with hard-coded test parameters (such as ransom addresses pointing to the Bitcoin Genesis Block, which cannot receive recoverable payments)
  • AI-assisted reconnaissance scripts designed for conference demonstrations
  • Modular attack frameworks built to test specific AI integration patterns rather than to compromise real targets

Many of these samples share common characteristics:

  • They target localhost or private IP address ranges in their configuration
  • They contain verbose debug logging that no operational threat actor would leave enabled
  • Their submission histories show a single upload from a security research organization or academic institution

Additionally, we found many of these samples in file paths that indicated malware analysis or research. They contained terms such as research, mal or analysis in their directory paths.

Security Validation and Testing

A second category comprises samples submitted by breach-and-attack simulation (BAS) platforms and internal security teams. These appear in WildFire and on VirusTotal because organizations deliberately test their detection capabilities against publicly reported AI malware samples.

The submission patterns are distinctive. They include multiple uploads of the same hash from the same organization within a short time window, often during business hours in a single time zone. They frequently come from IP addresses associated with known security testing infrastructure.

AI-Themed Brand Abuse

A third category uses AI branding without meaningful AI integration. Filenames reference popular AI companies or other AI products, but the payload is conventional malware wrapped in an installer that mimics an AI application.

The AI branding is a social engineering tactic, not a technical capability. These samples are real threats to the people who download them, but they do not represent a new category of AI-enabled attack.

The 3% Found on Endpoints

Twelve samples from the dataset appeared on Cortex XDR-protected endpoints across organizations in three countries. They span five distinct malware families, each representing a different pattern of AI integration or AI-themed delivery. These five families are:

  • FunkSec ransomware
  • A trojanized AI application
  • The Oyster backdoor
  • The Rhadamanthys stealer
  • A COM hijacking DLL

FunkSec Ransomware

The most represented family in our endpoint data is FunkSec, a ransomware strain that multiple researchers have assessed as partially generated with LLM assistance. Seven distinct variants appeared across production endpoints, compiled between Jan. 1–6, 2025. The variants share a common Rust codebase and use similar evasion techniques:

  • Disabling Windows Defender through PowerShell and registry modifications
  • Deleting volume shadow copies
  • Changing the desktop wallpaper to display a ransom note

The PDB paths embedded in the binaries reveal an active development cycle. Variants use project names including:

  • Dev.pdb
  • Funksec.pdb
  • Darkzone.pdb
  • Darkfunk.pdb

This is consistent with a developer iterating on the same codebase under multiple working names. Seven distinct builds in six days is a pace that suggests LLM-assisted development, where generating a new variant is closer to a prompt generation rather than a software development task.

WildFire classified all seven variants as malware. Cortex XDR generated alerts for every variant that executed on an endpoint.

Trojanized AI Application

The most widely encountered sample in the dataset is an NSIS installer that masquerades as a recipe-finding application called Recipe Lister. The binary is signed with a code-signing certificate issued to Global Tech Allies Ltd. — a certificate that has since been revoked. When executed, it extracts and runs a JavaScript backdoor from a temporary directory.

This sample generated the highest volume of telemetry in our dataset. It appeared across more than 50 organizations and generated over 6,500 endpoint profile records and 9,600 XDR alerts during the observation window. The alert data confirms that Cortex XDR blocked the binary across these environments through a combination of local analysis, behavioral protection and WildFire cloud verdicts. No execution succeeded on a protected endpoint.

The detection dynamics around this sample illustrate how layered defense handles AI-themed threats:

  • The code signature initially suppresses static detection, as the file appears legitimately signed
  • Behavioral analytics identify the threat through two secondary signals:
    • The signer is uncommon across the organization's fleet
    • The file entropy is near-maximum (0.999970), indicating packed or encrypted content
  • The WildFire cloud verdict, which arrives after the file is forwarded for sandbox analysis, provides the definitive classification and triggers the block action

Oyster Backdoor

One sample masquerades as a Dropbox installer and carries an Authenticode signature whose subject identity reads Dropbox, Inc. To the victim, this appears to be verified, publisher-signed software. In reality, the installer drops an AutoIt loader that side-loads the Oyster (aka CleanBoost) backdoor. The signed file is not Dropbox software, and the signature lends it false legitimacy.

Attackers are using AI tools to quickly generate the malicious code required for the initial access and delivery phases of the attack, lowering the barrier to entry and speeding up the deployment of loaders like this NSIS installer.

Rhadamanthys Stealer

A .NET executable named redist.exe delivers the Rhadamanthys information stealer with active command-and-control communication. According to previous reporting, this sample was part of an AI-enabled infection chain that ultimately delivered this sample of Rhadamanthys stealer.

COM Hijacking DLL

A DLL masquerading as a component of 360 Total Security named 360Util.dll implements persistence through COM object hijacking. The PDB path references 360Util.pdb, and the file metadata impersonates the Chinese-language product name. We included this sample in the dataset because it was delivered alongside AI-branded lures in campaigns we observed.

Conclusion

The gap between the volume of AI malware samples in public repositories and the volume observed in production environments reflects the current state of AI-enabled threats. AI lowers the barrier to creating malware, and the number of samples in our dataset confirms that many people are experimenting with the technique. But creating a sample and successfully deploying it against a defended environment are different problems, and malware authors have not to date succeeded at using AI to solve the second one.

The samples that did reach production environments were detected by the same mechanisms that catch conventional malware:

  • Sandbox detonation
  • Behavioral analytics
  • Code-signing anomaly detection
  • Entropy analysis

None of the AI-enabled samples in our dataset required a novel detection approach. The AI component influenced how the malware was written, but the resulting binary still exhibits the same behavioral indicators that existing detection logic targets.

This does not mean we can dismiss AI-enabled threats:

  • The development velocity visible in FunkSec's PDB paths suggests that LLM-assisted coding accelerates the iteration cycle for ransomware development
  • The trojanized AI application campaign demonstrates that AI brand recognition is an effective social engineering vector, with the sample reaching more than 50 organizations
  • The presence of legitimate code signatures on multiple samples shows that the delivery sophistication of AI-themed malware matches that of conventional threats

Telemetry data does not reveal statistically significant targeting patterns across the samples. The encounters span three countries and industries with no concentration in any single sector or geography. This is consistent with opportunistic operations rather than targeted campaigns directed at specific organizations or verticals.

The absence of targeting patterns is itself informative. AI-enabled malware, at this stage of adoption, follows the same distribution model as most offensive cyber activity. Threat actors are integrating AI capabilities into tools that they’ve deployed broadly rather than reserving them for operations against specific high-value targets.

When evaluating AI in the current malware landscape, it should not be categorized as mere hype or altogether dismissed. AI-enabled malware is a real and growing category, but our current defensive frameworks detect and block AI-enabled malware regardless of the role that use of AI played in its development. Organizations that maintain strong defense in depth are well positioned to detect these threats as they evolve.

Palo Alto Networks customers are better protected from the threats discussed above through the following products, which detected these AI-enabled malware threats out of the box:

  • The Advanced WildFire machine-learning models and analysis techniques identify indicators shared in this research.
  • Cortex XDR and XSIAM are designed to prevent the execution of known malicious malware and prevent the execution of unknown malware using Behavioral Threat Protection and machine learning based on the Local Analysis module.

If you think you may have been compromised or have an urgent matter, get in touch with the Unit 42 Incident Response team or call:

  • North America: Toll Free: +1 (866) 486-4842 (866.4.UNIT42)
  • UK: +44.20.3743.3660
  • Europe and Middle East: +31.20.299.3130
  • Asia: +65.6983.8730
  • Japan: +81.50.1790.0200
  • Australia: +61.2.4062.7950
  • India: 000 800 050 45107
  • South Korea: +82.080.467.8774

Palo Alto Networks has shared these findings with our fellow Cyber Threat Alliance (CTA) members. CTA members use this intelligence to rapidly deploy protections to their customers and to systematically disrupt malicious cyber actors. Learn more about the Cyber Threat Alliance.

Indicators of Compromise

Samples

Table 2 lists the samples assessed as genuine threat actor activity.

SHA256 hash Family
1619bcad3785be31ac2fdee0ab91392d08d9392032246e42673c3cb8964d4cb7 Trojanized application (RecipeLister)
5226ea8e0f516565ba825a1bbed10020982c16414750237068b602c5b4ac6abd FunkSec ransomware
dcf536edd67a98868759f4e72bcbd1f4404c70048a2a3257e77d8af06cb036ac FunkSec ransomware
66dbf939c00b09d8d22c692864b68c4a602e7a59c4b925b2e2bef57b1ad047bd FunkSec ransomware
c233aec7917cf34294c19dd60ff79a6e0fac5ed6f0cb57af98013c08201a7a1c FunkSec ransomware
e622f3b743c7fc0a011b07a2e656aa2b5e50a4876721bcf1f405d582ca4cda22 FunkSec ransomware
b1ef7b267d887e34bf0242a94b38e7dc9fd5e6f8b2c5c440ce4ec98cc74642fb FunkSec ransomware
20ed21bfdb7aa970b12e7368eba8e26a711752f1cc5416b6fd6629d0e2a44e5d FunkSec ransomware
dd15ce869aa79884753e3baad19b0437075202be86268b84f3ec2303e1ecd966 FunkSec ransomware
c398b3e06ef860670b9597daed85632834fa961aea87164b8ba8bb2f094a14ef COM hijacking DLL
bb932056cae8940742e50b4f2b994a802e703f7bc235e7dd647d085ae2b2baf7 Oyster backdoor/CleanBoost
4fb58687a364c3f6d6f7e0ca03654f9dec0f8832a499d61d40b0d424db1b1b14 Rhadamanthys stealer

Table 2. Samples observed on production endpoints.

Additional Resources

Analyzing the Current State of AI Use in Malware — Palo Alto Networks, Unit 42

Connecting the Dots: Securing the Overlooked Corners of the Software Development Lifecycle (SDLC) Supply Chain

While supply chain threats have been quietly compounding over the past decade, the last 12–18 months have triggered a drastic shift in the scale and velocity of these attacks. Rather than just hunting for bugs in finished software, attackers are targeting the everyday tools and code developers rely on.

Unit 42 research shows this happening at every step of the building process. We've observed attackers spending years pretending to be helpful contributors just to hide backdoors in core software, as seen in the XZ Utils vulnerability (CVE-2024-3094). We've seen attackers hijack accounts to drop malware into popular libraries, like in the Axios supply chain attack. And we've seen them misuse setup scripts to automatically steal credentials using the Shai-Hulud npm worm.

Simply put, attackers are more focused on poisoning the digital factory that builds an application as opposed to the application itself. By targeting continuous integration/continuous delivery (CI/CD) pipelines and developer environments, they hijack software at the source before it ever hits production.

Threat Analysis: ChainDrop npm Worm

Consider the recent ChainDrop npm worm, which infected over 400 packages including massively popular libraries like keyv and cacheable-request using a highly evasive three-step chain:

  • The hook: Attackers modified package manifests with a malicious preinstall script that downloaded the legitimate Bun runtime to silently launch a 727 KB obfuscated payload in the background.
  • The theft: Rather than just scraping disk files, a hidden Python script directly read live process memory from GitHub Actions runners to steal temporary OpenID Connect (OIDC) tokens and secrets, alongside a massive sweep for local developer credentials.
  • The payload: The worm used those stolen npm and GitHub tokens to self-propagate, silently infecting and republishing additional packages while leaving their legitimate functionality perfectly intact so that developers don't notice.

ChainDrop secured long-term persistence by establishing cross-linked hooks directly inside developer tools like VS Code and Claude Code, while managing its entire command-and-control (C2) infrastructure dynamically through Ethereum blockchain transactions.

The malware triggers silently the second someone runs npm install by misusing npm's setup scripts (preinstall hooks). From there, it hits three distinct targets:

  1. Cloud secret harvesting: It searches build server memory to scrape unencrypted credentials and platform access tokens
  2. Local endpoint backdooring: It modifies local developer tool configs (like VS Code's tasks.json) so the attacker retains access even after the build finishes
  3. Automated propagation: It uses stolen tokens to automatically create rogue code repositories, turning compromised accounts into new launchpads to spread the worm

Package Visibility Across the SDLC

The main takeaway is that open-source and third-party packages touch every single phase of the software development lifecycle (SDLC). Modern applications aren't built from scratch, they are assembled. Because open-source code makes up 80-90% of modern codebases, the attack surface expands to developer laptops, CI/CD pipelines and cloud infrastructure.

Ten years ago, a project might have relied on a few dozen external libraries. Today, even a simple application pulls in thousands of indirect dependencies. Generating a software bill of materials (SBOM) at the end of a build is great for compliance, but an SBOM alone simply doesn't cut it anymore. An inventory list created at the finish line won't catch malware that was executed during the build process. To truly secure an environment, every single place a third-party package touches needs to be mapped.

The Endpoint Attack Surface

Developers today navigate an endless matrix of language-specific package managers. They routinely execute installations across a massive array of ecosystems — npm install, pip install, cargo build, go get, mvn install and many more — while simultaneously juggling 10–30 integrated development environment (IDE) extensions. Why are these attacks so effective? Because developer tools lack basic guardrails.

Think about your web browser. When you visit a website, the browser locks it in a safe container (a sandbox) so it can’t touch your computer. But setup scripts and code editor extensions don't have those walls. The second they run, they get the same permissions you have, giving malware total freedom to read your files, steal keys and run commands on your machine.

This massive, un-isolated weakness is exactly why registries and marketplaces have become prime targets, as seen in the recent GlassWorm campaign. Whether it’s a malicious script running silently during a routine dependency pull or a compromised IDE extension updating automatically in the background, an attacker instantly gains unrestricted execution rights on a developer's machine and access to valuable cloud knowledge.

CI/CD Pipelines

Build pipelines rely on numerous outside tools, plugins and helper scripts to assemble code. Attackers often target these build environments because they are packed with temporary passwords and cloud access keys. The compromise of Trivy highlights the potential attack surface of pipeline security tools. This means that only scanning app code is insufficient. A pipeline bill of materials (PBOM) is also needed, which is an inventory list of every single tool running inside your build system.

The Cloud Runtime

Finally, we can't forget the cloud. A standard application SBOM typically only lists the code libraries developers explicitly add to their software. However, cloud environments rely on containers, which require a broader approach. A container SBOM provides the full picture by tracking both the application code and the hidden operating system tools built into the container image such as basic security utilities and system libraries like OpenSSL. Standard application scans completely overlook these deeper system layers.

The danger of this weakness was starkly illustrated by the wave of OpenSSL zero-day vulnerabilities disclosed in early 2026. Because these critical flaws sit deep within the foundational cryptographic infrastructure of the container's operating system, the application-layer code will look perfectly clean and pass every repository scan, while the underlying cloud workload remains completely exposed to a remote takeover.

Given this extensive attack surface, relying on static, point-in-time gateway scans is an insufficient strategy. True supply chain resilience requires continuous visibility between local developer endpoints, automated pipelines and cloud runtime workloads. Correlating telemetry across all three domains is the only way to intercept malicious behaviors and halt a compromise before it propagates downstream.

Tips for Hardening Pipelines

Defending against automated supply chain attacks requires shifting from reactive code scanning to strict execution control across the entire build path. Because tools, IDE extensions and package managers run with high privileges, organizations must lock down the developer environment by disabling lifecycle install scripts (--ignore-scripts), enforcing package cooldown periods, restricting CI/CD egress traffic, using ephemeral CI/CD servers and pinning dependencies down to exact commit SHAs.

Beyond environment hardening, neutralizing autonomous malware like Shai-Hulud means eliminating the long-lived credentials that fuel them. By transitioning to brief OIDC authentication and enforcing end-to-end cryptographic provenance, teams can establish an unbroken chain of trust. This trust extends from signed commits at the developer endpoint to signed artifacts and SBOMs in production, helping stop self-propagating worms in their tracks.

Identity Abuse Through Trusted Communication Channels

Executive Summary

Identity has become a primary security boundary for most organizations, reducing the ability to solely trust other boundaries once associated with corporate networks. Users authenticate to cloud services using enterprise identities that provide access to collaboration platforms, business applications and sensitive data. With the adoption of software-as-a-service (SaaS) on the rise, people are shifting to platforms for communication and collaboration.

Threat actors have adapted to this shift. In addition to typical email-based phishing, attackers increasingly misuse trusted collaboration platforms to conduct identity phishing, impersonation, credential theft, malware delivery and social engineering. Over the last 12 months, our endpoint alerts of malicious activity associated with collaboration tools have more than quadrupled, as Figure 1 shows. This activity could involve compromised accounts, external federated organizations, guest accounts or trusted third-party relationships. In each case, the attackers seek to exploit the trust that people place in enterprise communication platforms.

 

A bar chart displaying the number of collaboration tool alerts from July 2025 to June 2026. The bars show a gradual increase over the months, starting at 1490 in July 2025 and peaking at 6799 in June 2026.
Figure 1. Collaboration tool alerts of severity low or higher per month.

This changes the role that collaboration platforms play within enterprise security. They are not just productivity applications, they have become part of the enterprise attack surface. Unit 42 researchers found that 99% of the alerts generated related to chat or voice phishing operations, indicating that attackers often gain access to these environments through targeted phishing operations. After a successful compromise, attackers can then communicate using the identity and privileges of the compromised user. This allows malicious activity to appear as normal collaboration activity.

Security controls typically remain focused on email and authentication events, often providing limited visibility into activity occurring within authenticated collaboration sessions.

We examine how threat actors leverage trusted communication channels and review identity abuse techniques. We also provide practical recommendations for detecting and defending against identity-focused attacks targeting enterprise collaboration platforms.

Palo Alto Networks customers are better protected from the threats discussed above through the following products and services:

If you think you might have been compromised or have an urgent matter, contact the Unit 42 Incident Response team.

Related Unit 42 Topics Phishing, Identity, Credential Theft 

Understanding Trusted Communication Channels

Enterprise collaboration platforms have become integral to business operations. Employees use these platforms to exchange messages, share files, coordinate projects and communicate with colleagues, customers and business partners. Organizations typically connect collaboration platform access to their identity provider, and people rely on these platforms for trusted, authenticated communication.

Unlike email, collaboration platforms enable real-time conversations and support features such as external federation, guest access, shared workspaces and third-party integrations. These capabilities improve productivity but also create opportunities for misuse. Attackers can exploit compromised accounts, trusted business relationships or authorized external access to interact with victims through legitimate communication channels. Figure 2 shows common pathways for attackers to compromise identities in enterprise and cloud environments.

A flowchart illustrating a cyberattack sequence with five stages: "Threat Actor Access Method," "Trusted Communication Channel" (examples include Slack, Teams), "Identity-Focused Interaction," "Requested User Action," and "Identity Outcome." Each stage describes actions and examples, connected by red arrows denoting progression.
Figure 2. How attackers leverage collaboration platforms to compromise identities.

When a collaboration account is compromised, attackers inherit the identity context of that user, including their permissions, relationships and ongoing conversations. Requests that might appear suspicious in an email can appear routine when delivered through an authenticated collaboration platform. This reduces a target’s suspicion and increases the effectiveness of identity phishing, impersonation, credential theft and social engineering.

As organizations adopt more SaaS collaboration platforms, they should treat these environments as part of the identity attack surface. Protecting them requires both strong authentication, and visibility into how trusted identities and communication channels are used after authentication.

Real-World Misuse of Collaboration Platforms

Recent campaigns demonstrate that attackers use collaboration platforms in multiple stages of identity-focused attacks, from initial access to post-compromise operations. Table 1 summarizes these intrusion stages.

Intrusion Technique Campaign Misuse Pattern
Initial access: Phishing (T1566) Identity phishing through external collaboration channels
Stealth: Impersonation (T1684.001) Impersonation through legitimate platform notifications, hosted content and direct messages
Persistence: Modify Authentication Process (T1556) MFA removal and privileged credential exfiltration through a native Slack webhook integration

Table 1. Collaboration platform misuse by MITRE ATT&CK intrusion technique.

Initial Access

One of the most common techniques is identity phishing through enterprise collaboration platforms. In our Insights article, "When 'Hi, This Is IT' Comes Through Microsoft Teams", we discussed how APT29 used compromised Teams accounts to send links to credential-harvesting pages. We reported that attackers misuse external federation in Teams to initiate conversations with victims while impersonating IT support or other trusted personnel. These campaigns often begin with a request to chat, followed by instructions to visit a phishing site, approve a multifactor authentication (MFA) request, install remote access software or provide credentials.

Okta Threat Intelligence has also documented the technique of identity phishing through attacker-controlled Slack workspaces. The threat actor behind this activity impersonated administrators and employees from targeted organizations and sent phishing links through direct messages, channel mentions and legitimate notifications. The links redirected victims to adversary-in-the-middle phishing proxies designed to capture corporate credentials and MFA tokens.

Security teams might not detect the initial collaboration message directly. They could instead see the actions that follow. An example of this is shown in a process tree from a malicious chat scenario in Figure 3.

A process tree diagram showing a communication application launching a system process, which uses an archive utility to extract a DLL from a downloaded archive file.
Figure 3. Example of an initial access process tree.

In this case, the threat actor sent a RAR file via a link to a victim in a Teams chat. The victim downloaded the file to their Downloads folder. Note that attackers may avoid sending files through Teams because doing so creates an additional detection point through Safe Links/Safe Attachments, instead directing victims to websites or scripts during calls.

The victim then opened an Explorer window and double-clicked [REDACTED].rar, launching WinRAR.exe to open the archive. WinRAR extracted the malicious lpk.dll, which the victim’s endpoint security agent detected. The extracted lpk.dll is a known, older malicious DLL that masquerades as a legitimate Windows language pack DLL. Attackers use the file for DLL sideloading attacks. This recent event demonstrates that attackers continue to use older malware families in attacks delivered through collaboration platforms.

Unlike commonly-seen email phishing, some collaboration platforms support interactive communication. This enables attackers to respond to targets and adjust their social engineering tactics in real time. If successful, the attacker obtains a valid enterprise identity. The attacker can then access enterprise and cloud services with the privileges and identity context of the compromised user.

Impersonation and Identity Compromise

Attackers use impersonation to exploit trust in collaboration platforms and gain access to enterprise identities, posing as known individuals, trusted organizations or support personnel.

  • In January 2026, Fireblocks disclosed a recruitment-themed social engineering campaign in which attackers impersonated Fireblocks executives, recruiters and hiring managers to target technology workers. The attackers initially contacted targets through social media, provided professionally prepared recruiting materials and then scheduled interviews through Google Meet. During the video interviews, an individual presented as a Fireblocks HR manager discussed the candidate’s experience, compensation and other expected hiring topics before assigning a code review task for a fictitious Fireblocks project. Candidates were instructed to clone a GitHub repository and run standard setup commands, including npm install, which executed malicious code and downloaded malware onto their systems. The campaign used legitimate Google Meet communications and a convincing interview process to reinforce the Fireblocks impersonation and persuade victims to execute malicious code. Fireblocks assessed the activity as closely aligned with the North Korea-linked Contagious Interview campaign pattern.
  • In March 2026, a threat actor used a staged Slack workspace as part of a targeted social engineering campaign against the lead maintainer of the Axios npm package. The threat actor impersonated a legitimate company and created a convincing, simulated Slack environment with company branding, channels, users and message history. The interaction later moved to a meeting that was designed to look like Teams. During this meeting, the maintainer was convinced to install software that delivered a remote access Trojan. The threat actor then gained access to the maintainer’s npm account and published two poisoned Axios versions, causing projects that installed the affected releases to retrieve and execute a malicious dependency.
  • In April 2026, OpenSSF reported a campaign targeting members of the Linux Foundation TODO Group Slack workspace and related communities. The threat actor impersonated a known Linux Foundation community leader and contacted targets through Slack direct messages. The messages contained a Google Sites link that led to a fraudulent Google Workspace authentication process. The site requested the target’s email address and verification code. It then instructed the target to install a malicious root certificate. On macOS, the process also downloaded and executed a binary that could provide system access. The campaign used the identity of a recognized community member and an established Slack workspace to support credential collection and malware delivery.

Each of these campaigns used impersonation through trusted collaboration workflows. The attackers relied on recognized identities, legitimate services and familiar business processes to obtain credentials or persuade victims to take actions that enabled identity compromise.

Persistence

In a more novel approach, attackers have misused trusted collaboration services to maintain their access after identity compromise. In a December 2025 intrusion investigated by CERT Polska, a threat actor modified compromised firewall-VPN appliances at a manufacturing company in Poland. The threat actor used the appliances’ built-in scripting mechanism to create weekly scheduled tasks. One script retrieved the password of a privileged identity, and another script modified security settings and disabled two-factor authentication for a privileged account. A third script used the appliances’ native Slack notification capability to send the results to a Slack channel under the threat actor’s control. This activity combined identity persistence and credential exfiltration with a legitimate SaaS integration. It also avoided the need for a separate exfiltration tool. The case demonstrates how attackers can misuse built-in appliance features and trusted collaboration services during post-compromise operations.

The firewall event in Figure 4 shows an example of a Slack webhook request, a similar communication method to the one described in the CERT Polska report. The request used HTTP POST to hooks.slack[.]com with a curl user agent. The example event below is not malicious.

A screenshot of a desktop screen displaying two overlapping windows. The top window is a terminal displaying a cURL command to send a JSON payload with the text "Hello, World!" to a Slack webhook. The bottom window is Wireshark's "Follow HTTP Stream" feature, displaying HTTP request details for the Slack API.
Figure 4. Webhook firewall event.

Perimeter firewalls provide valuable visibility into webhook-related traffic exiting the organization. Many network and security appliances, including VPN appliances, operate behind a separate perimeter firewall and send outbound webhook requests through the enterprise egress path when configured for external alerting or automation. Security teams should review unexpected Slack webhook traffic, uncommon user agents and webhook activity from systems without an approved Slack integration. This type of activity should also be flagged in Microsoft Teams, which supports similar incoming webhook workflows for posting messages from external services.

These examples of initial access, impersonation and persistence demonstrate how attackers leverage trusted communication channels to support identity-focused attacks. Although the techniques differ, each example leverages legitimate platforms, authenticated identities or authorized communication paths to increase the likelihood of success. The common objective is to misuse the trust, access and identity context associated with enterprise collaboration platforms.

Defensive Measures for Securing Collaboration Platforms

Organizations should protect collaboration platforms with the same level of scrutiny applied to email and identity infrastructure. Because these platforms are integrated with enterprise identities, security controls should focus on both preventing identity compromise and detecting misuse after authentication.

Reduce Exposure

The first priority is reducing unnecessary exposure. Collaboration platform administrators should review external federation, guest access and third-party integrations to ensure they support legitimate business requirements. Where possible, limit external communications to trusted organizations, and implement a process to review guest accounts regularly and remove unnecessary access.

Comprehensive Identity Controls

Identity protections should also extend beyond authentication. MFA, conditional access and session risk evaluation help reduce the likelihood of account compromise, but they do not prevent an attacker from misusing a valid session. Security teams should monitor for behavior that could indicate identity compromise, including unusual messaging activity, unexpected file sharing or communications with unfamiliar external tenants.

Identity Verification Procedures

Identity and security teams should define and communicate verification procedures for security-sensitive requests received through collaboration platforms. Users should not approve MFA prompts, install remote access tools, share credentials, transfer files or modify access based only on a message. Instruct people to verify high-risk requests through an approved secondary channel, such as a known phone number, ticketing system or documented internal process.

User Awareness

User awareness remains an important part of effective verification procedures. People should treat collaboration messages, platform notifications and links to hosted content with the same caution as email. This is especially important when a request involves credentials, MFA approval, software installation, remote access tools or sensitive data.

Security training should make clear that content associated with an enterprise collaboration platform is not automatically trustworthy. An attacker can send a direct message, trigger a legitimate platform notification or use content hosted on an approved service to direct victims to a phishing site.

Security awareness teams should include these scenarios in phishing simulations and security awareness exercises. Many people recognize email phishing indicators but might not apply the same scrutiny to collaboration platforms and related notification workflows.

Active Monitoring

Security teams should incorporate collaboration platform telemetry into routine monitoring and incident response. Authentication logs, messaging activity, file sharing events and external tenant interactions provide valuable context for detecting identity abuse.

Network and security appliances should also be included in monitoring coverage. Firewalls, VPN appliances, load balancers and managed switches increasingly support automation, notification integrations and scheduled tasks. Attackers can potentially use these capabilities for malicious purposes following a compromise. To protect against such activity, security teams should monitor:

  • Administrative activity
  • Configuration changes
  • Outbound webhook usage
  • Unusual connections to collaboration or SaaS services

This telemetry should be ingested into a security information and event management (SIEM) system and correlated with identity, endpoint and collaboration platform data. This can improve visibility into malicious activity that might otherwise appear to originate from legitimate users or approved infrastructure.

Collaboration-based reporting must also be easy for users. Security teams should provide a clear process for reporting suspicious communications, notifications, hosted content and links associated with collaboration platforms. Each report should be triaged using identity telemetry, sign-in activity, endpoint alerts, file-sharing events and external tenant information. This helps to determine whether the activity reflects user error, external misuse or identity compromise.

Conclusion

Enterprise collaboration platforms are integrated with enterprise identity and access workflows. As organizations rely on these platforms for communication, attackers are exploiting the trust associated with authenticated users and sanctioned communication channels to conduct identity phishing, impersonation, credential theft and post-compromise operations.

Common security strategies have focused on protecting email and authentication systems. While these controls remain essential, they should be complemented by security measures that address collaboration platforms as part of the enterprise identity attack surface. Authentication alone is no longer sufficient to establish trust. Organizations must also understand how authenticated identities are communicating and recognize when trusted communication channels are being misused.

By extending identity security to include collaboration platforms, defenders can better detect identity abuse, reduce opportunities for compromise and strengthen their ability to respond to identity-focused attacks. As collaboration technologies evolve, organizations should monitor and protect them with the same controls they apply to other critical identity infrastructure.

Palo Alto Networks Protection and Mitigation

Palo Alto Networks customers are better protected from the threats discussed above through the following products:

  • Cortex XDR and XSIAM help to prevent the threats described in this article, by employing the Malware Prevention Engine. This approach combines several layers of protection, including Advanced WildFire, Behavioral Threat Protection and the Local Analysis module, to prevent both known and unknown malware from causing harm to endpoints.
  • Idira Endpoint Privilege Manager (EPM) can enable enterprises to reduce risk, satisfy compliance, and streamline operations. It can help implement least privilege via policy-driven elevation and removal of standing admin rights, and block risky actions, such as execution of unvetted applications and access to memory of other processes, while providing audit-ready evidence.
  • Idira Secrets Manager centralizes the API keys, service account passwords, and webhook tokens that appliances, scheduled tasks, and pipelines depend on, so automation retrieves credentials at runtime instead of reading them from local scripts or device configuration. Automated rotation shortens the window in which a stolen credential stays valid, and universal workload identity replaces static credentials with short-lived SPIFFE-based workload identities where the environment supports it.
  • Idira Privileged Access Management (PAM) helps unify privileged access across human, machine, and agentic identities to secure cloud access across multi-cloud environments. Building on proven PAM, it delivers centralized secrets management alongside modern controls like Just-in-Time access and Zero Standing Privileges. This enforces consistent least-privilege security across on-premises, cloud, and SaaS targets.
  • Idira Secure Infrastructure Access (SIA) can help enforce Zero Standing Privileges (ZSP) through Just-in-Time (JIT) provisioning which grants temporary, tightly scoped access only as needed. Backed by continuous session recording and real-time command monitoring, SIA can detect high risk actions before an attacker compromises critical systems.
  • Idira Secure Cloud Access (SCA) can help enforce Zero Standing Privileges (ZSP) across multicloud environments by applying Just-in-Time (JIT) access controls to cloud consoles, command-line interfaces (CLIs), and the modern cloud infrastructure where workloads reside, including Managed Kubernetes clusters and elastic cloud workloads.

If you think you may have been compromised or have an urgent matter, get in touch with the Unit 42 Incident Response team or call:

  • North America: Toll Free: +1 (866) 486-4842 (866.4.UNIT42)
  • UK: +44.20.3743.3660
  • Europe and Middle East: +31.20.299.3130
  • Asia: +65.6983.8730
  • Japan: +81.50.1790.0200
  • Australia: +61.2.4062.7950
  • India: 000 800 050 45107
  • South Korea: +82.080.467.8774

Palo Alto Networks has shared these findings with our fellow Cyber Threat Alliance (CTA) members. CTA members use this intelligence to rapidly deploy protections to their customers and to systematically disrupt malicious cyber actors. Learn more about the Cyber Threat Alliance.

Additional Resources

Threat Hunting Query

The query below is designed to help Palo Alto Networks customers hunt for, investigate and identify potentially suspicious activity using Cortex XDR. Results returned by this query should not be considered inherently malicious and require further analysis to determine their significance.

Query to Identify Collaboration Tool Spawning a Shell

This XQL query can help to identify where legitimate collaboration platforms — specifically Slack or Teams in this example — are used to execute system shells. The query inspects both the direct process hierarchy and the broader causality chain. It identifies instances where a collaboration tool is either the immediate parent process or an ancestor process that initiated the execution of a shell. Analysts can use this logic to identify:

  • Post-exploitation activity
  • Unauthorized command execution
  • Living-off-the-land techniques that originate from compromised user accounts or application integrations

The query can be modified to search for additional collaboration platforms or system shells.

Threat Brief: Mitigating Large-Scale Credential Attacks (Updated August 18)

Executive Summary

Identity has effectively become the new perimeter, where cybercriminals are increasingly choosing to log in rather than break in. To accomplish this, attackers frequently gather previously leaked username and password pairs. Gathering these credentials can then allow them to pivot to password spraying against services exposed to the internet, gaining credentials for other products and services.

As this sort of attack occurs frequently, this article will be a resource repository of the following information about these attacks:

  • Details of noteworthy large scale credential attacks 
  • Actionable guidance for mitigating these attacks

TheHatman Attack

  • The Hatman attack: In August 2026, the actor TheHatman claimed to have stolen large volume of credentials from organizations' Microsoft Entra tenants

FortiBleed Attack

  • Fortibleed Credential Campaign: In June 2026, there was a large-scale password spraying campaign targeting Fortinet devices

Unit 42 recommends auditing remote access logs for suspicious activity with a focus on successful logins shortly after large volume password failure events. We also recommend reviewing and implementing the hardening guidance in this article for edge devices. 

Palo Alto Networks customers are better protected from this activity through our products and services, such as:

The Unit 42 Incident Response team can also be engaged to help with a compromise or to provide a proactive assessment to lower your risk.

Related Unit 42 Topics Fortibleed, Credential Theft

Activity From TheHatman

From Aug. 1–Aug. 17, 2026, an actor using the handle "TheHatman" made posts across multiple forums offering to sell employee information for multiple enterprises. TheHatman allegedly exfiltrated from organizations' Microsoft Entra tenants. While TheHatman has claimed this data was stolen using compromised credentials, we have been unable to verify a specific intrusion vector.

This activity was publicly reported as early as Aug. 16, 2026, and we have offered initial guidance through social media.

TheHatman claims to have sensitive or confidential information from several high-profile organizations, and this actor has claimed that they used compromised credentials through MFA fatigue and password spraying attacks to gain unauthorized access to these organizations. Unit 42 has not verified these claims.

FortiBleed Campaign

A large-scale password spraying and credential theft campaign (“FortiBleed”) against Fortinet devices was initially disclosed in June 2026. We observed attempts targeting MSSQL devices as well, and have seen reports of Sophos devices also being targeted. While this activity is not targeting Palo Alto Networks devices, we have blocked suspicious login attempts in customer telemetry.

The attackers have used a curated password list to attempt password spraying against services exposed to the internet. We assess that the initial password list for this activity was likely developed through a mix of previous breaches, including the successful exploitation of vulnerabilities. Once the attackers obtain credentials, they add them to their password list for future attempts against additional targets, as well as for logging into accounts they successfully compromised.

The attackers have leveraged a multi-stage process to gain persistent, high-privilege access:

  • Password spraying for initial access: Massive internet-wide scanning and password spraying attempts against Fortinet, Sophos and MSSQL services
  • Configuration extraction: Depending on the permissions of their initial access, the actor could exploit a privilege escalation vulnerability prior to pulling device configuration files, including stored credentials
  • Offline Cracking: Offline password cracking of the stolen credentials adds to the password list used in step one to target new devices, as well as to log into compromised devices to establish persistence as an administrator

We observed an initial access broker (IAB) on the Russian-language cybercrime forum Exploit[.]in claiming responsibility for this campaign, referencing a CVE (no further information), and offering the harvested credentials for sale on June 16, 2026. We have not validated their claims at this time.

Unit 42 observed an initial access broker (IAB) on the Russian-language cybercrime forum Exploit[.]in claiming responsibility for this campaign of large-scale credential attacks, referencing a CVE (no further information), and offering the harvested credentials for sale on June 16, 2026. Unit 42 has not validated their claims at this time.
Figure 1. Darkweb post of IAB selling credentials.
SOCRadar provided the initial reporting on the targeting of FortiGate devices. We observed attempts targeting MSSQL devices as well, and have seen reports of Sophos devices also being targeted.

Interim Guidance

Unit 42 recommends auditing remote access logs for suspicious activity with a focus on successful logins shortly after large volume password failure events. We also recommend reviewing and implementing the hardening guidance below for edge devices.

Palo Alto Networks customers receive assistance protecting against and mitigating credential attacks in the following ways:

Palo Alto Networks also recommends the following hardening guidelines:

  • Require MFA: Require strong phishing-resistant multi-factor authentication for all remote services. NGFW customers can integrate several MFA platforms   (including Palo Alto Networks Idira MFA) and customize their Password Profiles and complexity to enhance their security posture.
  • Adopt zero trust architecture: Leverage “jump boxes” and Zero Trust Network Access (ZTNA) policies to ensure management interfaces are never exposed directly to the public internet, further narrowing the attack surface for configuration extraction.
  • Change default credentials: Change the credentials for default accounts, ensuring long, complex passwords are used to mitigate the risk of password guessing attempts. Ideally onboard accounts to Privileged Access Management system and rotate passwords automatically on-time and on-use.
  • Implement ITDR: Timely detect malicious access attempts and accelerate response with automated identity-centric actions.
  • Disable unused accounts: Run continuous discovery of privileged accounts. Onboard and disable unused accounts to limit the attack surface.
  • Update and patch: Ensure you have the latest software versions and patches installed to mitigate known vulnerabilities, including local privilege escalation vulnerabilities.

The Unit 42 Incident Response team can also be engaged to help with a compromise or to provide a proactive assessment to lower your risk.

Conclusion

We continue to monitor our threat landscape for this and other identity-based attacks. We encourage customers to implement the hunting and hardening recommendations to identify, mitigate, and prevent credential attacks against their networks.

Palo Alto Networks has shared our findings with our fellow Cyber Threat Alliance (CTA) members, including Fortinet. CTA members use this intelligence to rapidly deploy protections to their customers and to systematically disrupt malicious cyber actors. Learn more about the Cyber Threat Alliance.

Palo Alto Networks customers are better protected by our products, as listed below. We will update this threat brief as more relevant information becomes available.

Palo Alto Networks Product Protections For Large-Scale Credential Attacks

Palo Alto Networks customers can leverage a variety of product protections and consulting services to identify and defend against this threat.

If you think you might have been compromised or have an urgent matter, get in touch with the Unit 42 Incident Response team or call:

  • North America: Toll Free: +1 (866) 486-4842 (866.4.UNIT42)
  • UK: +44.20.3743.3660
  • Europe and Middle East: +31.20.299.3130
  • Asia: +65.6983.8730
  • Japan: +81.50.1790.0200
  • Australia: +61.2.4062.7950
  • India: 000 800 050 45107
  • South Korea: +82.080.467.8774

Deep and Darkweb Monitoring

Unit 42's Deep and Dark Web (DDW) monitoring is a service that assists clients in identifying sensitive information and leaked credentials that surface on the dark web, providing critical insights to reduce risk exposure and reduce the time between detection and response.

Cortex Cloud

Cortex Cloud Identity Security encompasses Cloud Infrastructure Entitlement Management (CIEM), Identity Security Posture Management (ISPM), Data Access Governance (DAG) as well as Identity Threat Detection and Response (ITDR) and provides clients with the necessary capabilities to improve their identity related security requirements. By providing visibility into cloud based identities, and their permissions, Cortex Cloud can detect misconfigurations, unwanted access to sensitive data and real-time analysis surrounding usage and access patterns. Additionally, Cortex Cloud provides protections against credentials that were compromised, lost or exposed being leveraged against cloud resources, such as those discussed within this article.

Idira Identity Threat Protection

Idira Identity Threat Protection enables security teams to counter identity-based attacks targeting Idira Next Generation Identity (NGI) Platform and the identities it secures. Using near real-time detection, powered by CORA AI, and leveraging Idira’s visibility across multiple contexts (like PAM, authentication, SSO, cloud, endpoints, browsers, and more), Idira ITP can apply automated, tailored non-disruptive in-session response to contain and minimize potential identity-based threats.

Idira Multi-Factor Authentication

Idira Multi-Factor Authentication helps protect organizations against password spraying, credential theft, and other identity-based attacks by verifying that the person signing in is the legitimate user, not just someone with a valid password. Using phishing-resistant MFA, including passkeys, biometrics, and FIDO2 security keys, along with adaptive, risk-based authentication, Idira evaluates signals such as device trust, location, and login behavior. When risk is detected, it requires additional verification before granting access, helping prevent account compromise while keeping access simple for trusted users.

Idira Privileged Access Management

Idira Privileged Access Management is a SaaS-delivered Privileged Access Management (PAM) solution that mitigates credential compromise and password spraying by prioritizing automated discovery, onboarding, and rotation. The platform continuously scans hybrid environments and infrastructure to detect unmanaged local, domain, service accounts and cloud roles. Discovered credentials are automatically onboarded into a hardened digital vault for centralized management. Privilege Cloud then enforces programmatic transactional credential rotation using complex, randomized strings. This eliminates the static, predictable passwords exploited during spraying attacks, removing standing privileges and blocking lateral movement across the network infrastructure and devices.

References

Updated June 26, 2026 at 1:00 p.m. PT to add product protection for Idira Security and Cortex Cloud, and more information to the hardening guidelines section.

Updated August 18, 2026 at 1:30 p.m. PT to add information about TheHatman attack. 

Kimwolf v7: An Evolution of the Kimwolf Botnet

Content Warning

We are providing a content warning because the following article contains usage of a racial slur by a threat actor, which Unit 42 does not condone in any instance. We have partially redacted the racial slur, but preserved some references to it in order to provide researchers with the ability to identify it and check IoCs as needed.

Executive Summary

We identified a new version (v7) of the Kimwolf Android/internet-of-things (IoT) botnet. This version upgrades its distributed denial-of-service (DDoS) attack capabilities and the resilience of its command-and-control (C2) infrastructure. Kimwolf primarily affects Android TV boxes and set-top boxes.

Kimwolf v7 adds an HTTP/2-based DDoS flood that constructs complete browser fingerprints. This makes attack traffic more difficult to distinguish from legitimate browsing.

The threat’s binary includes five hard-coded public Ethereum-based endpoints for resolving Ethereum Name Service (ENS) domains. ENS is a blockchain-based naming system used to obtain C2 addresses.

Kimwolf also carries a hard-coded Tor .onion hidden service as a backup and a local proxy architecture for flexible routing between clearnet and Tor. The malware developers added this function to directly respond to C2 server takedown efforts in December 2025.

We discovered this variant on Feb. 3, 2026, through threat hunting that followed public disclosures by XLab, Synthient, Infoblox, Cloudflare and others.

Palo Alto Networks customers are better protected through the following products and services:

If you think you might have been compromised or have an urgent matter, contact the Unit 42 Incident Response team.

Related Unit 42 Topics Malware, Botnet, DDoS

Background

The Kimwolf botnet (also tracked as AISURU) has been active since August 2024. It initially targeted Linux IoT devices under the AISURU name. The botnet transitioned to Android TV boxes around August 2025.

This reflects two separate codebases under the same operators. AISURU covers the Linux IoT variants, and Kimwolf covers variants targeting Android.

Kimwolf spreads by misusing residential proxy services to reach unauthenticated Android Debug Bridge (ADB) instances on local networks. Some Android TV boxes ship with ADB enabled on port 5555. Once attackers tunnel through a proxy endpoint into the local network, they can install the malware without any authentication.

Kimwolf Sample Overview

The Kimwolf sample we analyzed as a baseline is a statically linked ARM Executable and Linkable Format (ELF) binary. The file was compiled with the Android Native Development Kit (NDK) using Clang and uses Bionic libc. It statically links BoringSSL for Transport Layer Security (TLS) operations and nghttp2 for HTTP/2 functionality.

The binary is stripped but retains some symbol information. It is not uncommon for malware authors to use racial slurs in their code. The Kimwolf malware family has historically included racial slurs. In our discussion of the v7 variant, we have partially redacted these slurs, but have left enough information present that defenders could identify the variant and check for IoCs.

Previous Kimwolf builds used the internal version strings such as n[redacted]boxv4 and n[redacted]boxv5, establishing the naming pattern for the family. The version string n[redacted]boxv7, shown in Figure 1, identifies this sample as version 7. The binary creates a Unix domain socket @n[redacted]boxv7 to ensure only one instance runs at a time. 

A screenshot of a hexadecimal code in columns, with highlighted values in orange and yellow on the left. The visible ASCII values on the right are lowercase letters "b", "o", "x", and the digit "7".
Figure 1. The n[redacted]boxv7 version string.
On execution, the malware masks its process name as netd_service to blend in with legitimate Android system processes.

We identified six ELF samples that we clustered together based on multiple indicators:

  • They share an identical ELF section layout produced by a common Android NDK build environment, and the same hard-coded set of Ethereum remote procedure call (RPC) endpoints
  • Overlapping C2 infrastructure within the same hosting provider
  • Consistent process-name masquerading behavior

HTTP/2 Flood with Browser Fingerprint Spoofing

One of the most notable new capabilities in Kimwolf v7 is an HTTP/2 flood powered by the nghttp2 library. The function that performs the attack_case17_http2_flood constructs complete browser fingerprints. ​​This makes the flood traffic difficult to distinguish from legitimate browser requests.

Figure 2 shows the header construction logic in the decompiled binary.

A screenshot of code in a development environment. The code is written in a dark-themed editor and contains various programming elements, such as functions, variables, and libraries. Mentions of "Google Chrome" and "Safari" are visible in the code.
Figure 2. Fingerprint header construction in build_http2_attack_headers.

Three-Tier C2 Infrastructure

Kimwolf v7 uses a layered C2 resolution system designed to survive the domain takedowns that disrupted the botnet twice in December 2025.

This isn't the last time operation of this malware faced disruption. On March 19, 2026, the U.S. Justice Department and international partners announced a court-authorized operation that seized C2 infrastructure used by the Aisuru, KimWolf, JackSkid and Mossad botnets.

Ethereum Name Service Resolution

The binary contains five hard-coded public Ethereum RPC endpoints stored in plaintext, shown in Figure 3:

  1. hxxps[:]//0xrpc[.]io/eth
  2. hxxps[:]//eth.llamarpc[.]com
  3. hxxps[:]//ethereum-rpc.publicnode[.]com
  4. hxxps[:]//eth-protect.rpc.blxrbdn[.]com
  5. hxxps[:]//eth.merkle[.]io
A screenshot of a code snippet showing allocation of strings to different variables. Each variable is assigned a URL from various platforms.
Figure 3. Hard-coded public Ethereum RPC endpoints.

These endpoints are legitimate public Ethereum RPC services. The malware misuses them to query ENS domain records and resolve C2 addresses. Organizations should monitor for unusual Ethereum RPC traffic from IoT and Android devices rather than blocking these endpoints outright.

The malware shuffles these endpoints using a pseudo-random number generator (PRNG) before each resolution attempt. The five-way redundancy makes blocking ENS-based C2 resolution harder.

Operator RPC Facade

While the five public RPC endpoints in the baseline binary are third-party services, our infrastructure investigation identified a sixth endpoint that we assess with moderate confidence to be under the operator's control: eth[.]rpcuniverse[.]com.

Several properties distinguish it from the legitimate providers:

  • The legitimate endpoints are established services with significant traffic and resolve to multiple anycast IP addresses across major cloud delivery network (CDN) and cloud providers
  • They have apex domains registered between 2005 and 2022
  • The rpcuniverse[.]com domain has no global traffic ranking
    • It resolves to a single IP address on a low-cost virtual private server (VPS) that was registered on Dec. 12, 2023
    • Its TLS certificate first appeared on the hosting IP address days later
    • Reverse passive DNS shows the IP address hosts only rpcuniverse[.]com subdomains with no other tenants
  • Two Kimwolf samples hardcode eth[.]rpcuniverse[.]com as an additional RPC endpoint alongside the five legitimate providers
    • Both ELF and Android APK variants contact the hosting IP address directly
    • We did not observe this direct-to-IP address contact pattern with any of the legitimate RPC endpoints

We cannot confirm domain ownership. However, the dedicated single-tenant hosting, the timing of its registration relative to Kimwolf activity and its exclusive presence in Kimwolf binaries suggest it is an operator-controlled facade rather than a public service.

Tor Hidden Service Backup

When ENS resolution fails, the v7 binary falls back to a hard-coded v3 Tor .onion address (edctgwib2n5l34t525zkxqzk5bqb6e5il2yiq5r6zu7gtlxa4uosn3qd[.]onion). Figure 4 shows the hard-coded address in the binary.

A screenshot of a code snippet displayed in a text editor, showcasing a function related to building and sending SOCKS CONNECT requests to hidden services. The code includes C++ elements such as variables, hex codes, and the construction of a domain name with ".onion" at the end. The text is color-coded to differentiate elements like functions, operators, and comments.
Figure 4. Hard-coded .onion address.

A function (tor_proxy_state_machine) manages the protocol states. To do this, it performs the following activities:

  • Sending the greeting (0x05 0x01 0x00)
  • Building a CONNECT request with domain type 0x03 and the 62-byte .onion address
  • Waiting for the response and performing a TLS handshake over the tunnel

Figure 5 shows the greeting and TLS handshake states.

A screenshot of computer code in a programming environment. The code includes socket programming and comments related to network communication. The code is shown in multiple colors, likely indicating syntax highlighting, with sections in black for code, orange for comments, and some red highlighting.
Figure 5. Greetings.

Additionally, it uses a local proxy architecture. All C2 traffic routes through a local proxy at 127.0.0[.]1:23075 shown in Figure 6, regardless of whether it is destined for clearnet or Tor. This modular design allows the proxy component to be updated independently from the main bot binary. ​​

A screenshot of a code snippet showing a function definition related to a SOCKS5 proxy with specific values and addresses. The code includes comments and standard programming syntax elements like variables, operators, and function calls.
Figure 6. Local proxy connection.

C2 Infrastructure Clustering

Analysis of Kimwolf v7 samples revealed C2 connections to several IP addresses, including:

  • 212.193.31[.]119 and 212.193.31[.]122 on TCP port 13
  • 212.193.31[.]92 and 212.193.31[.]158 on TCP port 443

None of these IP addresses had prior indicators of malicious activity or associations with public threat intelligence.

During infrastructure analysis, we observed that these hosts presented the same SSH host key. Pivoting on that shared key revealed 22 total IP addresses within the same range, presenting the identical key between Dec. 18, 2025, and Feb. 3, 2026. No hosts outside this range shared the key.

IP address 212.193.31[.]102 was the first host observed with this key on Dec. 18, 2025, and it was the seed from which the configuration propagated. The remaining 21 hosts appeared over the following six weeks, with the last addition on Jan. 31, 2026. All 22 hosts reside in AS202799, geolocated to Saint Petersburg, Russia.

High-Performance UDP Flood

Kimwolf implements a dedicated high-performance UDP flood function that uses a Xorshift256 PRNG seeded from /dev/urandom. It (prng_seed_from_urandom) reads 32 bytes (four 64-bit state words) to initialize the full 256-bit state. A SplitMix64 fallback initializer activates if /dev/urandom is unavailable.

The flood function accelerates IP/UDP checksum computation with ARM NEON single instruction, multiple data (SIMD) instructions. The vectorized checksum loop processes four 16-bit halfwords simultaneously using VLD1.16, VADDW.U16 and VADD.I32 instructions.

This optimization is tailored for the ARM processors found in Android TV boxes. It reduces per-packet checksum overhead to maximize throughput.

Figure 7 shows the NEON SIMD instructions in the disassembled binary.

A screenshot of assembly code from a disassembler tool. The code includes instructions such as ADD, LDR, BIC, and VADD, along with memory addresses and registers. It contains comments referencing "NEON SIMD checksum computation" with labeled sections.
Figure 7. NEON SIMD instructions.

Complete Attack Method Inventory

The dispatch table supports 15 DDoS methods across Layers 3–7 of the Open Systems Interconnection (OSI) model. Cases 8, 11 and 13 are absent from the switch statement, suggesting they are either reserved for future use or were removed during consolidation from the 43 text-named methods in prior versions.

Table 1 lists all 15 attack methods.

Case number Function Description
0 attack_case0_tcp_socket_flood TCP socket-based flood
1 attack_case1_udp_flood_v1 UDP flood variant 1
2 attack_case2_game_server_udp Game server UDP flood (port 27015)
3 attack_case3_dns_flood DNS query flood
4 attack_case4_udp_flood_v2 UDP flood variant 2
5 attack_case5_tcp_syn_flood TCP SYN flood
6 attack_case6_tcp_ack_flood TCP ACK flood
7 a​​ttack_case7_tcp_synack_flood TCP SYN-ACK flood
9 attack_case9_udp_async_flood Asynchronous UDP flood
10 attack_case10_tcp_rst_flood TCP RST flood
12 udp_flood_attack High-performance UDP flood (NEON SIMD)
14 attack_case14_icmp_flood ICMP flood
15 attack_case15_tcp_connection_flood epoll-based TCP connection flood
16 attack_case16_tls_https_flood TLS/HTTPS flood (BoringSSL)
17 attack_case17_http2_flood HTTP/2 flood with Chrome fingerprints (nghttp2)

Table 1. Kimwolf v7 DDoS attack methods.

What Changed From Prior Versions

In Kimwolf v7, malware authors consolidated the attack count to 15 numbered methods. They removed all scanning, exploitation and brute-force functionality. The new additions target:

  • DDoS stealth through HTTP/2 with browser fingerprinting
  • C2 resilience through ENS, Tor and the local proxy

The removal of the scanner and exploit modules suggests the operators have separated the propagation pipeline from the DDoS bot. External loaders now handle initial access while the Kimwolf binary handles attacks and proxy relay.

The earliest dropped sample, targeting the x86 architecture with a Dirty COW exploit, suggests the family evolved from traditional Linux exploitation toward the current ADB-based Android propagation model. The transition from libn[redacted]kernel.so to the less conspicuous libdevice.so filename in November 2025, followed by a revert in December, indicates active operational security adjustments.

Android APK Variants

Alongside the standalone ELF payloads, the Kimwolf operators distribute Android APK packages that bundle an ELF kernel payload inside a Java wrapper. We identified eight APK samples spanning October through December 2025, all sharing the component class systemservice0644.N[redacted]Kernel.

These APKs masquerade as a system service called SystemService. On execution, they probe for root access and execute the embedded ELF kernel with commands shown below in Figure 8.

A screenshot of a computer terminal displaying two command lines related to a system service.
Figure 8. Commands used to execute the embedded ELF kernel.

The earliest build (October 2025) used the com. Android prefix and bundled three kernel variants in a single APK. By late October, the package name shifted to com.n2.systemservice0644, and the kernel was consolidated to a single binary. In November, the kernel filename changed from libn[redacted]kernel.so to libdevice.so, then reverted in the December builds.

Three signing certificates appear across the cluster:

  • The original Kimwolf APK certificate (C=CN, CN=a) used by the com.android.logcatd variants
  • An Android Debug certificate used during development
  • A self-signed certificate with subject C=XK, ST=lol, L=lol, O=lol, OU=lol, CN=lol (country code XK for Kosovo, all other fields set to lol) used by five of the eight N[redacted]Kernel APK files

Dropped ELF Kernel Payloads

The APK wrapper drops one of three ELF kernel payloads, depending on the build. These are listed in Table 2.

SHA256 Hash Filename Architecture
9470c68f9b6fe5f90d61891b95623afd7b4298815b0f95e25610e1c09008dc24 libn[redacted]kernel.so ARM
8242443dfcec66e3fe04cbfa2fbd211ad34065ee07aa93813d792a437caab212 libdevice.so ARM
421111a57b0a4224c052fa4108d90429d579974b5b5111ed2e58516ba09422ca libn[redacted]kernel.so (v1) x86

Table 2. Dropped ELF kernel payloads.

The earliest sample (first seen Sept. 2, 2025) is notable for two reasons:

  • It targets x86 architecture rather than ARM
    • This indicates that the botnet originally targeted x86 Linux systems before pivoting to ARM-based IoT and Android devices
  • It drops a file named libcow.so, and renames its process to inetd to blend in with Unix network services
    • The name libcow.so is likely a reference to the Dirty COW privilege escalation vulnerability (CVE-2016-5195)

The libdevice.so sample renames its process to TVHelper, which explicitly targets Android TV set-top boxes by mimicking a legitimate TV helper service.

Neither the libn[redacted]kernel.so nor libdevice.so kernels embed the Ethereum RPC endpoints found in the standalone ELF builds. The C2 resolution layer resides in the outer APK wrapper or the standalone ELF binary, while the kernel handles lower-level bot operations.

Conclusion

Kimwolf v7 is a focused evolution of an already large-scale botnet. The HTTP/2 flood with Chrome browser fingerprinting complicates application-layer DDoS mitigation, as attack traffic now mirrors legitimate browser behavior at the protocol and header level.

The three-tier C2 system (Ethereum ENS, Tor .onion, local proxy) indicates that the operators are investing in infrastructure built to withstand takedown operations. Organizations should monitor for the following behavioral indicators of Kimwolf compromise on IoT and Android devices:

  • Outbound HTTPS connections to public Ethereum RPC endpoints (e.g., 0xrpc[.]io) from devices that typically do not interact with blockchain services
  • Tor circuit establishment or SOCKS5 proxy traffic from Android TV boxes or IoT devices
  • Connections to port 23075 on localhost
  • A process named netd_service running on consumer Android devices

Organizations should treat Android TV boxes as untrusted and segment them from enterprise networks. Disabling ADB or restricting it to USB-only access removes the primary propagation vector for this botnet.

Palo Alto Networks customers are better protected through the following products and services:

  • The Advanced WildFire machine-learning models and analysis techniques have been reviewed and updated in light of the indicators shared in this research,
  • Advanced URL Filtering and Advanced DNS Security identify known domains and URLs associated with this activity as malicious.
  • Device Security is designed to proactively protect the entire device attack surface, from IT to IoT and OT, with a unified platform that helps deliver comprehensive visibility, actionable risk insights and adaptive security enforcement.

If you think you may have been compromised or have an urgent matter, get in touch with the Unit 42 Incident Response team or call:

  • North America: Toll Free: +1 (866) 486-4842 (866.4.UNIT42)
  • UK: +44.20.3743.3660
  • Europe and Middle East: +31.20.299.3130
  • Asia: +65.6983.8730
  • Japan: +81.50.1790.0200
  • Australia: +61.2.4062.7950
  • India: 000 800 050 45107
  • South Korea: +82.080.467.8774

Palo Alto Networks has shared these findings with our fellow Cyber Threat Alliance (CTA) members. CTA members use this intelligence to rapidly deploy protections to their customers and to systematically disrupt malicious cyber actors. Learn more about the Cyber Threat Alliance.

Indicators of Compromise

SHA256 hash: 406647de09a0ffa279756b4ccb344b1b76a333320c5b50fd367901fa006cf0ff
MD5 hash: d759364844d78a728505fb0485c3adbc
File size: 1,720,108 bytes
File type: ELF 32-bit LSB executable, ARM, statically linked, stripped
File description: Kimwolf v7 bot payload (baseline analyzed sample); version string n[recacted]boxv7

SHA256 hash: 345222bca004595977f971d76900b0c65fd9bf9d91c50cd0c5bf5a93f1ad9e49
MD5 hash: 036bcb62be72c4663b9564955f93b05f
File size: 1,712,624 bytes
File type: ELF 32-bit LSB executable, ARM, statically linked, stripped
File description: Kimwolf v7 bot payload

SHA256 hash: 2ec2e85b0358e0c681cb5067489a9086ec97dbbf7e3c952dd9cd496b319d5af5
MD5 hash: 33faca1e0090f6b12eff703daf4606e4
File size: 1,720,108 bytes
File type: ELF 32-bit LSB executable, ARM, statically linked, stripped
File description: Kimwolf v7 bot payload; hard codes eth.rpcuniverse[.]com in the binary

SHA256 hash: 951c94809aa6c7ab587125f9d4df30fa6a49ee0cbba76a4b7ceedaaa0e5dcd36
File type: Android APK
Package name: com.android.logcatd
File type: ELF 32-bit LSB executable, ARM, statically linked, stripped
File description: Kimwolf Android variant; masquerades as system logcat daemon; includes TorService and BootReceiver persistence; contacts 23.94.221[.]104

SHA256 hash: f07821e313c16cbbd82def45094a22c8d474164051bdbc7648d6869e012014b4
File type: Android APK
Package name: com.android.logcatd
File type: ELF 32-bit LSB executable, ARM, statically linked, stripped
File description: Kimwolf Android variant; sibling of the above, same signing certificate and package; contacts 23.94.221[.]104

VHash: 76554ad09897ac723a850eaf8c525efa
Description: Structural hash shared by the three Kimwolf v7 ELF samples (5 total matches across VirusTotal)

APK signing certificate (SHA-1 thumbprint): 2a1d96f1b066877812587ac94f45f82dfff5f5f9
Subject: C=CN, CN=a
Description: Self-signed certificate used to sign both Kimwolf Android samples

TLS certificate (SHA256 hash): f3e8a55a2a3ea7c7b6676e90f4f49a2c55b13065b68ee50c51cc35fe2b5c3237
Issuer: Let's Encrypt
Description: Certificate issued for eth.rpcuniverse[.]com, observed on 23.94.221[.]104 between Dec. 13, 2023, and March 12, 2024

Domain: rpcuniverse[.]com
Description: Multi-chain RPC service; apex registered Dec. 9, 2023 (Namecheap); resolves to 23.94.221[.]104; hard-coded subdomain present in Kimwolf sample

Domain: eth.rpcuniverse[.]com
Description: RPC subdomain hard-coded in Kimwolf sample 2ec2e85b...

Domain: avax.rpcuniverse[.]com
Description: RPC subdomain resolving to 23.94.221[.]104

IP address: 23.94.221[.]104
Description: Operator host (AS36352 RackNerd, Dallas); hosts rpcuniverse[.]com; contacted by Kimwolf ELF and APK samplesng

IP address:port: 212.193.31[.]158:443
Description: HTTPS C2 traffic (AS202799 SYSECT, Russia); offline after Jan. 31, 2026

IP address:port: 212.193.31[.]119:13
Description: C2 traffic

IP address:port: 212.193.31[.]122:13
Description: C2 traffic

IP address: 212.193.31[.]102
Description: C2 host (linked via shared SSH host key with .158

IP address:port: 212.193.31[.]92:443
Description: HTTPS C2 traffic (AS202799 SYSECT, Russia)

Tor hidden service: edctgwib2n5l34t525zkxqzk5bqb6e5il2yiq5r6zu7gtlxa4uosn3qd[.]onion
Description: v7 hidden-service C2 fallback

Additional Resources

Updated August 13 2026 at 2:00 p.m. PT to add information on the U.S. Justice Department and international partner operation seizing C2 domains used by KimWolf and related botnets.

The Permanent Threat: Analyzing Aeternum’s Blockchain-Based C2 Operations and Communications

Executive Summary

Aeternum is a recently discovered C++ botnet loader that shifts its command-and-control (C2) infrastructure entirely to the public Polygon blockchain. Instead of relying on centralized servers or domains, threat actors operate Aeternum by writing encrypted and plaintext instructions directly using smart contracts. A smart contract is a self-executing program stored on a blockchain that automatically runs when specific conditions are met.

Infected devices continuously query public remote procedure call (RPC) endpoints to retrieve and execute these on-chain commands.

The Aeternum botnet uses decentralized networks and evasion techniques, such as virtual machine detection and antivirus scanning, to operate effectively. This combination establishes a highly resilient, low-cost threat that complicates existing law enforcement takedown methods.

In this article, we analyze three malware cases linked to the Aeternum botnet:

  • Aeternum’s loader, C2 and downloader communications
  • Related Python-based malware using the Telegram API for C2
  • A blended threat consisting of XWorm RAT, the XMRig cryptocurrency miner and data exfiltration

Palo Alto Networks customers are better protected from the threats discussed in this article through the following products and services:

If you think you might have been compromised or have an urgent matter, contact the Unit 42 Incident Response team.

Related Unit 42 Topics Malware, Blockchain, C2 

Background on Aeternum

This article builds upon research by the Ctrl-Alt-Intel team on the Aeternum C2 architecture and the loader binary. That previous research primarily focused on host-based activity.

This malware advertises itself as Aeternum C2 BotNet Loader, and security researchers call it either Aeternum C2 or Aeternum loader.

Our analysis focuses on three malware samples associated with Aeternum activity. Our first sample is the Aeternum loader.

Sample One: Aeternum Loader

SHA256 hash: 5bfb25b8255b61e5ffdf6804451534bcfa9f1dfd225e6c8cdcefb5f50d846898

Sample Characteristics

This Aeternum loader sample is named Build.exe. It is the initial UPX-packed 32-bit portable executable (PE) Windows malware file compiled in C++. Its primary functions are to establish a persistent presence, perform reconnaissance and communicate with the decentralized Polygon blockchain to retrieve encrypted C2 commands.

Behavioral Analysis

The overall flow of this sample executes in multiple stages:

  1. Initial execution and self-unpacking
    1. Build.exe executes a multi-stage self-unpacking sequence
  2. Persistence and setup
    1. Creates a folder under the user's AppData\Local directory and copies itself to it
    2. Creates a Windows shortcut under the program menu's Startup directory (Wmi_Framework_APIKEY_wmsnet_<random_value>.lnk) to ensure auto-launch upon reboot
    3. Executes supporting binaries (wmiframework.exe, ZrvEsJQzWQ.exe, STAAAAAS.exe)
  3. Configuration retrieval and network communications
    1. Deobfuscates global configuration data to produce parameters used to construct network endpoint strings
    2. Sends JSON-RPC requests to Polygon RPC endpoints (decentralized C2 communication)
    3. Queries immutable smart contract addresses using the contract method 0xb68d1809 to retrieve encrypted C2 commands
    4. Decrypts the payload using a weak PBKDF2HMAC/AES-GCM routine
  4. Downloader and payload execution
    1. Downloads files as instructed by the C2 server, such as a clean putty.exe and the malicious DotNetZip.dll, from GitHub repositories
    2. Executes the malicious DLL, which uses hard-coded credentials to connect to a Telegram C2 bot (DLLSendC2Bot)
  5. Exfiltration
    1. Packages the stolen information for exfiltration over encrypted channels to trusted domains, code-hosting platforms and the Telegram API

Static Deobfuscation (XOR)

The pattern of encryption keys for the Aeternum loader (i.e., \x00\x00\x00[ENC bytes]\x00[KEY bytes]\x00\x00\x00) consists of:

  • Three null bytes followed by the encrypted payload bytes
  • A null byte, followed by the key bytes
  • Three null bytes

Since the pattern is known, a script can identify the different number of occurrences along with its offsets. When found, we can then use the key to deobfuscate the hidden information.

Figure 1 shows two examples of the decryption process against two different obfuscated string matches and their deobfuscated values. These values consist of the JSON object strings used for HTTP-based C2 communication during the execution of the malware and its subsequent interaction with the Polygon blockchain.

A screenshot of a command line interface displaying SSH key exchanges and messages labeled 'Push 133' and 'Push 232'
Figure 1. Deobfuscated (XOR) blockchain RPC request Information.

Additional deobfuscated strings also include:

  • Polygon RPC endpoints (i.e., hxxps[:]//polygon-mumbai-bor-rpc.publicnode[.]com)
  • File extensions (.e.g, .ps1, .dll, .exe)
  • HTTP header information (i.e., User-Agent)
  • C2 command information (e.g., hwid, args, ping)
  • Smart contract method (i.e., 0xb68d1809)

However, we suspect that this particular sample differs from others, since we did not find the smart contract addresses either through deobfuscation or plain-text pattern search. During network analysis, this sample used 22 different smart contract addresses during C2 communications.

The full table of deobfuscated strings can be found in the Indicators of Compromise section of this article.

Network Traffic

The Aeternum loader performed the following activities as part of its downloading and C2 communications:

  • Communicating with the Polygon blockchain network
  • Downloading files from GitHub repositories
  • Interacting with social media via Telegram’s API (api.telegram[.]org)

Figure 2 shows an example of the communications traffic filtered in Wireshark.

A screenshot of Aeternum C2 and downloader activity log showing multiple entries of HTTP requests. Details include timestamps, ports, protocols, hosts, and request methods.
Figure 2. Aeternum C2 and downloader network traffic activity.

Aeternum Polygon Blockchain C2 Communications

This section explores how Aeternum performed C2 communications on the Polygon blockchain and how it uses different smart contract addresses to retrieve C2 commands.

Polygon’s JSON-RPC (HTTP Request Analysis)

This sample made a JSON-RPC request using HTTP to the Polygon blockchain. Figure 3 shows the TCP stream of an HTTP POST request to the Polygon RPC endpoint, which includes a JSON object with two important fields: to and data. The to field contains the contract address, and the data field contains the Polygon contract's getDomain() method 0xb68d1809.

A screenshot of Wireshark displaying HTTP stream details. It shows HTTP headers and payload in hexadecimal and ASCII formats. Red annotations point to a "32 byte offset," "266 byte length," "payload starts," and "padding".
Figure 3. Example of Aeternum C2 blockchain HTTP communication (request and response).
Polygon’s JSON-RPC (HTTP Response Analysis)

Following the JSON-RPC request, if the RPC response is an HTTP 200 OK, it will include a JSON object containing the result field with its corresponding payload. This is structured with the following byte sequence:

  • Offset (0x20 = 32 bytes)
  • Payload length (0x10a = 266 bytes)
  • Payload (variable values)
  • Padding (variable length)

Weak Encryption Implementation

Building on existing research, we observed that Aeternum implements a substandard encryption scheme. Specifically, it uses a self-salting password.

The US National Institute of Standards and Technology (NIST) considers a self-salting password a critical cryptographic flaw via predictable salt and public key derivation source, in their remediation standard: NIST SP 800-132. This oversight allows the decryption of the malicious payload by using two known variables: the smart contract address and the payload.

The main decryption logic corresponds to the following operations:

  • PBKDF2HMAC (key stretching): This function uses the SHA256 algorithm to repeatedly hash the password, using the password itself as the salt
  • Key derivation: The kdf.derive(password) performs the key derivation. It takes the encoded password and transforms it into a high-entropy 32-byte (256-bit) cryptographic key.
  • Advanced Encryption Standard in Galois/Counter Mode (AES-GCM) initialization: The derived key is used to initialize an AES/GCM object
  • Decryption: The decryption of the ciphertext uses the provided initialization vector (IV) and the payload, resulting in a UTF-8 encoded string

We used a custom Python script to automate the decryption process, which expects the two values passed to it: the contract address and the hex-string payload, as mentioned above. Figure 4 shows the results of this script run on an encrypted Aeternum blockchain value.

A screenshot of a command prompt window displaying encrypted text and a Python decryption process. The text includes contract address details and a GitHub URL, ending with a process marked "SUCCESS!" with an address and iterations noted.
Figure 4. Decryption script run on an encrypted Aeternum blockchain value.

In this case, the decrypted string contains the Aeternum command all:url:<URI for putty.exe>, which is a command used to instruct the botnet to proceed and fetch the target file.

Although the analyzed sample uses encryption, we found additional samples using plain-text C2 commands, as well as an unknown encrypted payload.

Aeternum Downloader Activity

The malware download requested two different files, putty.exe and DotNetZip.dll, as Figure 5 below shows.

"A screenshot of a network log featuring requests made to GitHub. The log displays columns for Time, TCP Port, Protocol, Host, and Info. The Info column includes file paths and HTTP request methods like GET.
Figure 5. Aeternum downloader activity.

While investigating the malware’s downloader activity, we found requests for file artifacts hosted on GitHub in two different Github projects. Figure 6 shows the malicious DLL in an October 2025 commit from one repository.

A screenshot of a file explorer showing a folder titled "1" containing a file with a size of 49 KB. A note below states, 'Binary file not shown'.
Figure 6. Malicious DLL file hosted on GitHub.

The hosted putty.exe file is a copy of a legitimate installer for PuTTY version 0.83. The DotNetZip.dll file is a malicious DLL file.

While this Aeternum loader sample retrieved legitimate files like PuTTY, this is likely for testing. Attackers could easily swap files in these repositories for malware using the same filename, instantly compromising the safety of anyone who downloads them.

Exfiltration via the Telegram API: Aeternum

After successfully downloading DotNetZip.dll from GitHub and executing it, the malware sample initiated new communications to an endpoint at Telegram’s API (api.telegram[.]org).

As a DLL, the malware's entry point DllMain() first checks for a specific condition by comparing fwReason to 1 to confirm it is being called. Then it invokes the CollectAndSendSystemInfo() function, as shown below in Figure 7.

A screenshot of disassembled code in a software analysis tool. The image shows function details and call flow of the code. The main function displayed calls another function named CollectAndSendSystemInfo. There are annotations indicating exported entries and attributes, with arrows displaying the sequence of calls.
Figure 7. Disassembled code from the malicious DLL.

This function is in charge of all the information gathering and data exfiltration from the compromised machine. The most notable information about this sample is its lack of obfuscation or encryption, as both the chat_id value (-4991861036) and the bot’s API token (8305917772:AAHAou...) are hard-coded, as Figure 8 shows in the disassembled code.

A screenshot of a disassembled code snippet from a software analysis tool. The code includes labeled memory addresses, assembly instructions like "push" and "mov," and data reference.
Figure 8. Hard-coded chat_id value and Telegram bot API token.

Once the malware has collected all the information, it constructs an HTTP request to exfiltrate the information. The structure of this HTTPS request through the Telegram API follows:

  • HTTP Method
    • POST (submission of the collected information)
  • Base path and bot token
    • /bot prefix (required for all Telegram bot API calls)
    • Concatenated bot API token (8305917772:AAHAou…)
  • API Method (URI path)
    • /sendDocument (tells Telegram what action the bot should perform. In this case, it is attempting to send a file (e.g., PDF, ZIP) to a chat)
  • Protocol
    • HTTP/1.1 (indicates the version of the Hypertext Transfer Protocol being used for the communication)
  • HTTP Headers
    • User-agent (set to SystemInfo Bot/2.0)
    • Content-Type (set as multipart/form-data with a boundary set as systeminfoboundary)
  • HTTP Request Body
    • Form-data, containing the names:
      • chat_id (The unique identifier for the target chat)
      • caption (Text to accompany the file)
      • document (The file to be sent, which in this case is a PNG file named screenshot.png)

The content of the exfiltrated information contains different information from the compromised machine, including:

  • CPU
  • RAM
  • Disk
  • GPU
  • Administrator rights check
  • Windows User Account Control (UAC) status

Figure 9 shows an exfiltration request revealed using Burp Suite that contains an example of the data collected by the malware sample.

A screenshot of a "POST" request sent to a Telegram server. The details include connection information, user-agent, and content type. The system information shows the OS as Windows 10 Enterprise, CPU as Intel(R) Core(TM) i5-3470, and memory status with 1.9GB available out of 8GB. Other technical details about proxy and wireless configurations are visible.
Figure 9. Data exfiltration through the Telegram bot API.

The text in the image is in Russian (i.e., ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ, which translates to Additional Information) and uses Cyrillic characters, which require specific encodings like UTF-8 to properly decode.

Sample Two: XWorm + XMRig CoinMinder + Data Exfiltration

SHA256 hash: f2a326cff405299e4ebdfaac955c52fc7e496544eaa0921ecad4816cb3ae3a27

Pivoting on characteristics of the first sample, we found several matches using specific patterns based on the smart contract method function (0xb68d1809). Among these, we identified a 64-bit Windows PE sample that leverages the Aeternum botnet to simultaneously drop an XWorm binary, an XMRig cryptocurrency miner and a data exfiltrator.

The sample is named XBinderOutput_protected.exe and written in C/C++. This PE file is a PyInstaller-packed application containing a Python 3.14 script named XBinderOutput_protected_temp.py.

The embedded script implements multi-layer cryptographic decryption using ChaCha20, AES-CTR and AES-CBC to recover an encrypted payload. The payload is then written to the temporary directory as esewurmgvbqt.exe and executed with a hidden window. The script includes anti-analysis checks for virtual machine environments and debugger presence.

Like the previous sample for Aeternum loader, once executed, this second sample made a JSON-RPC request using HTTP to the Polygon blockchain containing Aeternum’s to and data values. An HTTP 200 OK response was returned as expected, indicating that a command payload was found and its content returned. Figure 10 shows an example of this traffic.

A screenshot of a Wireshark window showing an HTTP POST request. The window displays headers and raw data and specific details. There are fields like "content-type: application/json" and "x-frame-options: SAMEORIGIN." The bottom shows options for filtering and export, with a search button labeled "Find text.
Figure 10. Polygon’s blockchain JSON-RPC request and response.

This time, the hexadecimal value response is not encrypted but converts directly to plain text. After translating the hexadecimal values to ASCII, we found a Pastebin URL as noted below in Figure 11.

A hexadecimal data table with offset values on the left and decoded text on the right. The decoded text includes a URL among other characters.
Figure 11. Decoding Aeternum’s C2 command.

This URL contains the /raw/ URI path that is designed to return the data as-is, without any further processing by the service. Thus, the malware has less work to do in terms of parsing or processing the retrieved information. This URL returned configuration data for the XMRig cryptocurrency miner.

After the malware retrieved data from the Pastebin URL, it started two binaries it had dropped to the infected host, one for an Xworm client and one for an XMRig cryptocurrency miner.

XMRig CoinMiner Analysis and Configuration

The Pastebin URL returned the XMRig cryptocurrency miner configuration data as a JSON object containing different fields. These fields included mining-based settings such as:

  • Algorithm
  • API-endpoint
  • Max CPU
  • Password
  • Pool
  • Wallet address

It also included two behavior-based options:

  • The stealth-target option that enables evasive behavior by blocklisting system monitoring utilities. It triggers a process suspension and its related mining activity upon the execution of diagnostic tools (e.g., Process Hacker) to mask the miner’s footprint and resource consumption.
  • The kill-targets option that implements process termination as a persistence and resource-optimization strategy. It identifies and kills active processes associated with endpoint security software and distributed computing programs to prevent system remediation and ensure maximum CPU allocation for the miner.

The associated Pastebin URL occasionally returns different data for the XMRig configuration. Despite these changes, the data structure remains identical. Figure 12 displays an example of the XMRig configuration data seen in June 2026.

A screenshot of a programming code snippet displayed in a browser window on the pastebin.com website. The code includes parameters for a mining pool, password, and other configurations such as keepalive, SSL, and API endpoints. It lists processes and stealth targets related to a server setup.
Figure 12. Pastebin XMRig cryptocurrency miner configuration structure.

XWorm RAT Analysis and Network Activity

In addition to the XMRig cryptocurrency miner, the main sample dropped an XWorm client named XWormclient.exe. This filename is the default name used when using the XWorm v7.4 builder, indicating that the author generated and bound it into the malicious package.

We extracted the Xworm sample's configuration using CAPE’s community parser for XWorm. This dump of information contains configuration information as shown below in Figure 13, including:

  • Version of the builder (XWorm v7.4)
  • Mutex
  • C2 server
  • IP address
  • Port
  • Key
A command prompt window showing a script execution. The details include various IP addresses, ports, and paths. Mentions of "Python," "CAPE," and "USB" are visible.
Figure 13. XWorm configuration extraction using the CAPE parser.

Armed with this information, specifically the C2 server key, C2 communication port and XWorm version values, we tricked the sample into connecting to a controlled instance of the matching XWorm panel version. Figure 14 shows a screenshot of the C2 panel after the XWorm sample connected to our controlled instance.

A screenshot of XWorm V7.4, with open windows displaying system information and processes. Details include IP addresses, usernames, and software versions, with CPU and RAM usage at the top.
Figure 14. XWorm bot panel controlling a compromised host.

Data Exfiltration From the Compromised Host

During the final stage of this Aeternum sample's execution, the injected system process starts an information gathering and encryption process.

Figure 15 shows an outbound connection HTTP POST request to a C2 server at 193.221.200[.]219 with a custom user-agent (cpp-httplib/0.18.3) and JSON values containing two keys with Base64-encoded values.

A screenshot of a Wireshark interface displaying HTTP stream data. The window shows a POST request to an API endpoint with headers, including content type and user agent details, followed by JSON data containing encoded information. The interface includes options for data representation and search functions at the bottom.
Figure 15. HTTP C2 exfiltration with base64-encoded data.

After further analysis and reverse engineering to understand the meaning of those two keys, we discovered that the uqhash value contains an AES-128 encryption key. We also discovered the data value contains the exfiltrated data in an encrypted blob form.

The following section explains the encryption details and the decryption process we followed to reveal the exfiltrated information.

Encryption Routine

The encryption routine takes raw input bytes and pads them with 0x00 until the length is a multiple of 16 bytes. It then derives a fixed 16-byte key by truncating or zero-extending the provided hexadecimal input. The data is processed block-by-block using a 16-byte block cipher in Electronic Code Book (ECB) mode, producing a deterministic ciphertext where each block is independently encrypted. The result is written out without any IV, chaining or authentication, closely matching a typical minimal malware-style encryption wrapper.

The encryption routine has the following characteristics:

  • Algorithm used: AES-128 (16-byte block cipher) in ECB mode
  • Key properties: no IV, deterministic output, zero padding (non-standard), identical plaintext blocks → identical ciphertext blocks
  • Context in this test: binary data from a file is padded and encrypted in-place using a fixed 16-byte key derived from CLI hexadecimal input, mimicking a simple malware/configuration protection routine

Decryption Routine

To decrypt the required information, we developed a script to reverse the encryption process identified during our analysis and reverse engineering. This script takes two parameters:

  1. The encrypted payload file dump
  2. The hexadecimal representation of the Base64-decoded AES-128 key as a single concatenated string

Figure 16 shows the execution of the decryption script, which in this case generated a 580-byte data dump.

A screenshot of a terminal window displaying a Python decryption command. It shows the file path and commands with input and output file details.
Figure 16. Automated payload decryption using a Python script.

By viewing the contents of the output file, the exfiltrated data is revealed as shown below in Figure 17.

A screenshot of a terminal window displaying the decryption process of an encrypted file. Information includes status code, computer name, username, hash rate, pool details, CPU specifications, client details, and other technical parameters.
Figure 17. Decrypted Information exfiltrated to the C2 server.

Certain behavior (i.e., drop of a .sys file) and network patterns (e.g., URI path, JSON object attributes) match with ZingoStealer reported by Cisco Talos on April 13, 2022. However, we cannot fully attribute this activity to ZingoStealer.

Sample Three: Python Malware Source Code Analysis

SHA256 hash: ea1b6ff3a0c1a749b9f09d66789973321d63d8896b48f7345193bdad512950a2

Python Source Code Analysis

Our third sample is a Python script file containing the source code for the Aeternum malware. The key element used to confirm its association with the Aeternum operation is the data value 0xb68d1809, which functions as the unique function selector used to query the Polygon smart contract.

The code contains a blockchain-based fall-back mechanism to counter infrastructure takedowns. By executing a read-only eth_call to a specific Polygon smart contract, the malware can retrieve and decrypt new C2 domains on the fly. This decentralized dead-drop resolver, combined with the Star Drop space-themed Telegram formatting, highlights an operation designed for resilience and stealth. Figure 18 below shows a section of the Python script illustrating this.

A screenshot of Python code defining a function. It includes JSON-RPC request setup, error handling with response checks, and data conversion for domain retrieval. The code retrieves and decodes a domain, highlighting text processing and exception handling.
Figure 18. The get_domain() function used to retrieve C2 domains from the smart contract.

Analysis of the malware’s source code reveals a multi-staged infection chain that begins with a social engineering lure impersonating a DBeaver installer. To ensure it only executes on high-value targets, the code includes rigorous anti-analysis routines that check for specific sandbox usernames, machine names and a minimum of 8 GB of RAM.

Notably, it validates the presence of Zone.Identifier alternate data streams in a user account's Downloads folder to confirm the system is not a pristine, empty virtual machine. Once validated, the malware establishes persistence by creating a disguised shortcut in the Windows Startup folder and employs an Early Bird APC injection technique.

This technique involves spawning a suspended, signed binary (dpapimig.exe) and injecting shellcode into its address space, effectively executing the malicious payload before security hooks are fully initialized. Figure 19 below shows a section of the Python script representing this.

A screenshot of a code snippet written in Python. It features lists of usernames and computer names, as well as checks for system information such as platform use and RAM size. The code includes functions and conditional statements, and the name "dbeaver" is mentioned as a build.
Figure 19. Block-listed user and computer names with memory check.

Exfiltration via the Telegram API: Python Source Code

The source code further details an aggressive focus on cryptocurrency data exfiltration. It features hard-coded routines to harvest credentials from over 55 cryptocurrency browser extensions and 10 popular desktop wallets. Data exfiltration and C2 communication are handled via a hybrid architecture.

While primary reconnaissance is sent via Telegram, the main C2 loop uses obfuscated JSON payloads padded with junk data to break traffic signatures. Figure 20 below illustrates this in a section of Python script.

A screenshot of a Python script for web scraping and automation. The code retrieves the computer name, IP address and gathers system information like OS platform and Windows Defender status. It also initializes a Telegram bot communication and attempts to scrape extensions and wallet information. The script utilizes libraries such as `os`, `platform`, and `requests`.
Figure 20. The send_tg() function used for data exfiltration via Telegram.

The full table of the malware indicators can be found in the Indicators of Compromise section of this article.

Blockchain Reconnaissance

The key to tracking the Aeternum botnet lies in the Polygon smart contract's function selector, 0xb68d1809, which resolves to the getDomain() function. The malware calls this public function to retrieve an XOR key and Base64-encrypted C2 domain stored in the contract's storage slot. The permanence of this 4-byte selector across all Aeternum malware samples provides a reliable cryptographic fingerprint, which ties all related activity back to the same campaign.

The smart contract architecture is simple but resilient, using storage slot 0 for the admin (deployer's wallet) address and slot 1 for the encrypted domain. While the getDomain() function is public for malware retrieval, a second critical selector, 0xb249cd2d (updateDomain), is an admin-only function used to rotate the C2 domain. Transactions linked to the primary operator's smart contract address, associated with the moniker LenAI, confirmed they actively use this updateDomain() method to push new C2 information, such as hxxps[:]//cdnjsdelivr[.]beer/, to the blockchain.

Figure 21 below shows a flowchart of this operation.

A flowchart illustrating a security breach pattern. Two nodes labeled "updateDomainA" lead to the same destination. One transition shows encrypted code leading to "getDomainA". The other shows code leading to the same endpoint. The endpoint displays a red bug icon, symbolizing a vulnerability or malware.
Figure 21. Aeternum blockchain operation.

Static analysis of the Ethereum virtual machine (EVM) bytecode from all three samples indicates a single threat group is iteratively refining the codebase. Despite variations in deployment addresses and sequential compiler upgrades (from solc 0.8.0 to 0.8.30), the contracts maintain an identical state-management architecture and share the three fundamental function selectors (0xb249cd2d, 0xb68d1809 and 0xf851a440).

These technical details, including progressive gas optimization and updated error messages, prove attackers are refining and redeploying this same codebase over time. This establishes Aeternum as an evolving threat infrastructure.

Conclusion

The Aeternum botnet is one of the latest threats leveraging blockchain-based botnets. Attackers are migrating from conventional self-hosted C2 mechanisms to more evasive and resilient alternatives. They are hiding malicious payloads in smart contracts, such as those on the Polygon blockchain, a trend exemplified by Aeternum.

This investigation shows that malware developers are leveraging the blockchain as a decentralized communication mechanism for their operations. They are also leveraging Aeternum as a botnet selection for the C2 management console. We expect this trend to continue.

Throughout the duration of this study, our Advanced Threat Prevention security solution successfully identified and recorded more than 29,000 detection events (as of June 4, 2026).

Palo Alto Networks customers are better protected from the threats discussed above through the following products and services:

If you think you may have been compromised or have an urgent matter, get in touch with the Unit 42 Incident Response team or call:

  • North America: Toll Free: +1 (866) 486-4842 (866.4.UNIT42)
  • UK: +44.20.3743.3660
  • Europe and Middle East: +31.20.299.3130
  • Asia: +65.6983.8730
  • Japan: +81.50.1790.0200
  • Australia: +61.2.4062.7950
  • India: 000 800 050 45107
  • South Korea: +82.080.467.8774

Palo Alto Networks has shared these findings with our fellow Cyber Threat Alliance (CTA) members. CTA members use this intelligence to rapidly deploy protections to their customers and to systematically disrupt malicious cyber actors. Learn more about the Cyber Threat Alliance.

Indicators of Compromise

Table 1 contains indicators for the Aeternum loader (Sample 1).

Type Value Description
SHA256 hash 5bfb25b8255b61e5ffdf6804451534bcfa9f1dfd225e6c8cdcefb5f50d846898 Aeternum C++ loader executable
SHA256 hash 1505eda3da68e2ff9919b55a31018bd30a991236f041aee835f3bc4e430ce505 Malicious downloaded DotNetZip.dll
Filename DotNetZip.dll Malicious payload executed by the loader
Filename putty.exe Benign file downloaded for testing/staging
Filename Wmi_Framework_APIKEY_wmsnet_<random_value>.lnk Startup link for persistence
Filename wmiframework.exe, ZrvEsJQzWQ.exe, STAAAAAS.exe Supporting binaries
Domain api.telegram[.]org Telegram API endpoint for exfiltration/C2 (used in DLL). (This domain is not inherently malicious, but could be viewed as part of a potential pattern of suspicious activity.)
Repository hxxps[:]//github[.]com/lencod/ Repository hosting malicious file artifacts
Repository hxxps[:]//github[.]com/Mash3Do/ Repository hosting malicious file artifacts
Telegram ID -4991861036 Hard-coded chat-id for Telegram C2 bot
Telegram Token 8305917772:AAHAou... Hard-coded Telegram bot API token
Contract Address 0x04E25a563f159308FC3E15fE9Ccc9D2CF623D0cc Sample 1 Polygon smart contract address
Contract Address 0x16dA95799CB8aB203f83e01AFC030B1217198Da4 Sample 1 Polygon smart contract address
Contract Address 0x1D50703722729dD68e89D819F69eFc5Fb206bBe7 Sample 1 Polygon smart contract address
Contract Address 0x27c7c36981c1ed5cFA2DCDb4B43C27A6BaF6bEa8 Sample 1 Polygon smart contract address
Contract Address 0x4dcE7d4b1229F3705BDB70341484cF2EEE36432e Sample 1 Polygon smart contract address
Contract Address 0x55b4F951d5Ac035C21B170C73C0A930a641b718C Sample 1 Polygon smart contract address
Contract Address 0x6da31EB2A016074ffd5519326573E78E2677E4C8 Sample 1 Polygon smart contract address
Contract Address 0x737791081A398151195a753Fb49f9c1b8bc1fCDB Sample 1 Polygon smart contract address
Contract Address 0x7D2D8A4A6E8D89cf5C151C4f68A521490D9779B0 Sample 1 Polygon smart contract address
Contract Address 0x8d2BaEc2687F59eE1EE7BFd322D33325f5E004ee Sample 1 Polygon smart contract address
Contract Address 0xb3EF2D08Bf25a7daB9d8b98d64E564eA1f6Db924 Sample 1 Polygon smart contract address
Contract Address 0xb8fB2bfb182A172b29C365AD6CF743449975C418 Sample 1 Polygon smart contract address
Contract Address 0xbD6e817Cc510EC3DA5651B5a3AC595d34C0CF1af Sample 1 Polygon smart contract address
Contract Address 0xC37fB924cF5996C9e676BBA399bDfc5F936B3572 Sample 1 Polygon smart contract address
Contract Address 0xC41342908f98E813862EDFe47Ac3af676F8098C9 Sample 1 Polygon smart contract address
Contract Address 0xc7199C1dbCd82c4E002327Aa3EC9158F434a6aCE Sample 1 Polygon smart contract address
Contract Address 0xCE476E6f4d83a7a086Cbcdf0FE2E8f221e47e81C Sample 1 Polygon smart contract address
Contract Address 0xD69A36439FffD145ADAcacB94fDe6f8b3546a361 Sample 1 Polygon smart contract address
Contract Address 0xf9438b4E3200AE1611eD3d03310c803FDdf67672 Sample 1 Polygon smart contract address
Contract Address 0xfbC267200f9e5749045f32dbB55BB16615f1CE5F Sample 1 Polygon smart contract address
Contract Address 0xFDB8b139EeacD17ea7c10c256eA77Ba6Dff18D7d Sample 1 Polygon smart contract address
Contract Address 0xFdfB8c4e827c2d053749C8F2f2058548dde0d073 Sample 1 Polygon smart contract address
RPC Endpoint hxxps[:]//polygon.rpc.hypersync[.]xyz/ Polygon RPC endpoint
RPC Endpoint hxxps[:]//polygon-mumbai.g.alchemy[.]com/v2/demo Polygon RPC endpoint
RPC Endpoint hxxps[:]//polygon-mumbai-bor-rpc.publicnode[.]com Polygon RPC endpoint
RPC Endpoint hxxps[:]//api.noderpc[.]xyz/rpc-polygon-pos/public Polygon RPC endpoint
RPC Endpoint hxxps[:]//polygon-mumbai[.]gateway.tenderly[.]co Polygon RPC endpoint
RPC Endpoint hxxps[:]//public.stackup[.]sh/api/v1/node/polygon-mainnet Polygon RPC endpoint
RPC Endpoint hxxps[:]//gateway.tenderly[.]co/public/polygon Polygon RPC endpoint
RPC Endpoint hxxps[:]//polygon-amoy.gateway.tenderly[.]co Polygon RPC endpoint
RPC Endpoint hxxps[:]//rpc[.]poolz[.]finance/polygon Polygon RPC endpoint
RPC Endpoint hxxps[:]//gateway.tenderly[.]co/public/polygon-mumbai Polygon RPC endpoint
RPC Endpoint hxxps[:]//api.zan[.]top/polygon-amoy Polygon RPC endpoint
RPC Endpoint hxxps[:]//endpoints.omniatech[.]io/v1/polygon-zkevm/testnet/public Polygon RPC endpoint
RPC Endpoint hxxps://rpc[.]polygon-zkevm[.]gateway[.]fm Polygon RPC endpoint
RPC Endpoint hxxps[:]//polygon-pokt.nodies[.]app/ Polygon RPC endpoint
RPC Endpoint hxxps[:]//polygon-amoy.therpc[.]io Polygon RPC endpoint
RPC Endpoint hxxps[:]//rpc.polygonsupernet.public.arianee[.]net Polygon RPC endpoint
RPC Endpoint hxxps[:]//public.stackup[.]sh/api/v1/node/polygon-mumbai Polygon RPC endpoint
RPC Endpoint hxxps[:]//polygon-zkevm-mainnet[.]public.blastapi[.]io Polygon RPC endpoint
RPC Endpoint hxxps[:]//polygontestapi.terminet[.]io/rpc Polygon RPC endpoint
RPC Endpoint hxxps[:]//polygon-mainnet.g.alchemy[.]com/v2/demo Polygon RPC endpoint
RPC Endpoint hxxps[:]//polygon-zkevm.drpc[.]org Polygon RPC endpoint

Table 1. Indicators associated with Aeternum loader (sample 1).

Table 2 contains indicators for XWorm and XMRig cryptocurrency miner, and C2 exfiltration activity (sample 2).

Type Value Description
SHA256 hash f2a326cff405299e4ebdfaac955c52fc7e496544eaa0921ecad4816cb3ae3a27 XBinderOutput_protected.exe (Main sample)
SHA256 hash 4e24bbd0fabac6c3efcec943046afbfd332b2c0108a13becfda23a0e26f9ff5f XWormClient.exe executable
SHA256 hash 81bb80d9c5a97dc41b65f6248c131963c91346eb4fb672836b3d53ae67564d9f XMRig coin miner (miner.exe)
Domain gulf.moneroocean[.]stream XMRig mining pool
Wallet Address 82pNS8tBnvZ5cmV1iU9cXdQmhGz95P18fZpASBrxtaSF1ToTmZtf3HGHrdXMt1Znuu8BLU17koPs2hTXxTajdTviLcgbbAi XMRig Monero wallet
IP Address:Port 193.221.200[.]219 HTTP C2 exfiltration IP address
C2 URL hxxp[:]//sekirolegion.duckdns[.]org/api/endpoint.php C2 contacted by malware (linked to exfiltration IP)
Contract Address 0x75cD25791A60ab3451E2d2feB5ec46c6f541C2B8 Sample 2 Polygon smart contract address

Table 2. Indicators for XWorm + XMRig cryptocurrency miner + C2 exfiltration (sample 2).

Table 3 contains indicators for the Python malware (sample 3).

Type Value Description
SHA256 hash ea1b6ff3a0c1a749b9f09d66789973321d63d8896b48f7345193bdad512950a2 Python script sample
Staging Domain download.sftp-api-group-wechat[.]com Staging domain for malware components
C2 Domain update.constant-path[.]xyz C2 domain (retrieved from contract)
C2 Domain update-launcher[.]xyz C2 domain (retrieved from contract)
C2 Domain test-steve[.]cyou C2 domain (retrieved from contract)
Telegram Bot 7356125890:AAF5ncBIc2pJrEfYPAmy2g9YS7B5NjmtwTc Telegram bot token for exfiltration/C2
Telegram Chats -1002535992165, -1002144122983 Telegram chat IDs
Contract Address 0xb0874252a7359AA701F3F144A1f03A6e0DA8aE6D Sample 3 Polygon Smart Contract address
XOR Key helo1 XOR key for C2
XOR Key $m7*rYpry3 XOR key for domain decryption
Persistence PythonLauncher-*.lnk Shortcut created in Windows Startup folder
Injected Process dpapimig.exe Signed binary used for Early Bird APC injection
Disguised Binary WmiPrvSE.exe Disguised binary

Table 3. Indicators for the Python malware (sample 3).

Table 4 contains the shared blockchain indicators.

Type Value Description
Function Selector 0xb68d1809 getDomain() function selector (used by all samples)
Function Selector 0xb249cd2d updateDomain() function selector (admin only)
Function Selector 0xf851a440 admin() function selector (auto-getter)
Operator Address 0xcaf2c54e400437da717cf215181b170f65187abf LenAI's primary smart contract address
C2 Domain hxxps[:]//cdnjsdelivr[.]beer/ New C2 domain pushed by LenAI via updateDomain transaction

Table 4. Shared blockchain indicators.

Additional Resources

Inside the Modern SOC: The Identity Front Door

The Identity Gap: Why Trust Has Become the New Attack Surface

In The 72-Minute Race, we explored how attackers are compressing the time between initial access and business impact. But as attacks continue to accelerate, another trend has emerged: Attackers are increasingly gaining access through compromised identities rather than exploiting technology vulnerabilities.

According to the 2026 Unit 42 Global Incident Response Report, identity weaknesses played a role in nearly 90% of incidents investigated by Unit 42. The report also found that 65% of initial access activity involved identity-based techniques, underscoring how credential theft, multifactor authentication (MFA) manipulation, session hijacking and social engineering have become some of the most effective ways to gain access to enterprise environments.

Anatomy of a Modern Identity-Driven Compromise

Across recent Unit 42 investigations, we see a consistent pattern. Attackers often gain initial access through:

  • Phishing campaigns
  • Social engineering calls
  • MFA fatigue attacks
  • Compromised third-party accounts
  • Misuse of help desk processes

Once inside, attackers establish persistence, elevate privileges and move laterally across various environments. These activities often resemble legitimate administrative behavior. Malicious activity can remain hidden long enough for attackers to broaden their foothold before security teams recognize the full scope of the incident.

The Attacker's Playbook in Action

A social-first entry: Threat groups such as Muddled Libra (aka Scattered Spider) demonstrate how many attackers increasingly rely on social engineering and identity abuse as part of their toolkit.

Expansion through identity: Once inside, attackers exploit identity weaknesses to establish persistence, compromise additional accounts and escalate privileges to strengthen their foothold. Each action expands their access and makes the compromise more difficult to contain.

The escalating access: As highlighted in the 2026 Unit 42 Global Incident Response Report, 87% of incidents span multiple attack surfaces. An initial compromised identity can quickly become a multi-domain investigation that requires defenders to connect activity across the environment.

The objective: Whether the objective is ransomware deployment, data theft, financial fraud or long-term persistence, identity compromise often serves as the foundation for broader attacker objectives.

From a tooling perspective, the warning signs are often already present across the organization’s security controls. Without automated correlation, these signals can appear low priority in isolation, allowing attackers to expand their access before defenders recognize the full scope of the incident.

How Our Unit 42 Managed Services Team Responds

When investigating identity-driven attacks, our Unit 42 analysts use the Cortex SecOps platform to unify security telemetry into a single investigative view, allowing them to quickly validate suspicious activity and understand the full scope of the attack. Our 24/7 Managed Detection and Response (MDR) team continuously investigates suspicious activity while our threat hunters proactively search for signs of identity compromise that may not yet have generated an alert. AI-driven correlation, behavioral context and Unit 42 threat intelligence help our teams quickly validate high-confidence incidents and determine the full scope of attacker activity.

Organizations using Managed XSIAM extend this approach through AI-driven correlation, integrated investigation and response workflows and continuous SOC engineering delivered by Unit 42 experts. Rather than requiring internal teams to continuously engineer and optimize the platform as attacker techniques evolve, our experts refine:

  • Data integrations
  • Custom detections
  • Correlation rules
  • Automated response playbooks

This helps organizations identify identity-driven attacks earlier and accelerate response before attackers can expand their access.

Advice for SOC Leaders: Look Beyond the Login

As identity attacks continue to evolve, security leaders should focus on the operational challenges that often prevent teams from detecting identity-driven attacks early.

Prioritize Identity Context

A successful login alone is not enough to indicate normal user activity. Correlating identity activity with endpoint, cloud, SaaS and network telemetry provides the behavioral context needed to distinguish legitimate users from compromised accounts.

Reduce Manual Investigation

Consolidate telemetry and investigations into a unified view to reduce analyst pivots between disconnected tools. Centralized visibility enables security teams to identify attacker activity faster and respond with greater confidence.

Continuously Improve Detection

Attackers continuously adapt their techniques. Regularly refining detections, correlation rules and response playbooks helps ensure defenses evolve alongside emerging identity-based threats.

Protect Time for Threat Hunting

Dedicated threat hunting helps uncover credential abuse, privilege escalation and hidden persistence before they escalate into larger incidents.

What's Next

In our next entry in this series, we'll examine why modern attacks increasingly cross security domains and why unified visibility has become essential for detecting and stopping multi-surface attacks before they escalate into business impact.

The Unit 42 Managed Services Edge

Identity attacks have become one of the most effective ways for adversaries to bypass traditional security controls. Unit 42 combines expert-led Managed Detection and Response (MDR), proactive threat hunting, continuous SOC engineering and frontline incident response expertise to help organizations identify identity-driven attacks earlier and respond with greater confidence.

Learn more about Unit 42 Managed Services.

ChainDrop: Inside a Self-Propagating npm Worm

Executive Summary

A self-propagating npm worm nicknamed ChainDrop infected over 400 packages that are collectively downloaded hundreds of millions of times each week. This includes malicious versions of widely used packages such as keyv and cacheable-request. Unit 42 has unique observations of this attack.

The attackers behind ChainDrop potentially exposed developer workstations, continuous integration (CI) pipelines, cloud environments and downstream software users across a large number of organizations.

Once installed, ChainDrop steals:

  • Cloud credentials
  • npm and GitHub tokens
  • SSH keys
  • Other sensitive developer data

It can also extract temporary credentials from GitHub Actions runner memory and use stolen npm publishing tokens to infect and republish additional packages while preserving their legitimate functionality.

We have observed active attempted operations, which were detected out of the box by our existing products.

During our investigation into this attack, we identified 453 public GitHub repositories across five accounts matching the worm’s exfiltration patterns. We also detected ChainDrop execution across 10 distinct environments. At the time of publication, these repos were removed.

We have deobfuscated the malware and identified:

  • Persistence through developer and AI coding tools
  • Blockchain-based command-and-control (C2) resolution
  • Its ability to execute additional attacker-supplied code

Additionally, late on Aug. 4, 2026, we observed the adversary silently reconfiguring the worm's entire C2 infrastructure through a single Ethereum transaction, without requiring any update to the deployed malware.

This attack is the latest in a series of threats to the security of the npm ecosystem.

Unit 42 recommends:

  • Identifying installations of affected npm package versions
  • Removing affected package versions
  • Investigating developer workstations and CI runners for signs of compromise
  • Reviewing unexpected npm publishing and GitHub repository activity.
  • Revoking and rotating potentially exposed npm, GitHub, cloud, SSH and automation credentials.
  • Removing identified persistence mechanisms
  • Blocking both the domain-based and GitHub-based exfiltration channels

The Koi Agentic Endpoint Security risk engine flagged the malicious package activity as the attack unfolded. Cortex XDR detected and alerted on the worm’s execution using out-of-the-box behavioral detections.

Palo Alto Networks customers can use Koi Agentic Endpoint Security to help identify and control malicious packages across developer endpoints.

The Cortex AgentiX Threat Intel agent can help allow analysts to extract, enrich, and search IoCs using natural language to quickly determine organizational impact.

Cortex Cloud Endpoint Protection leverages AI-enabled analytics to help detect and prevent threats targeting Linux endpoints, containers, and associated cloud IAM policies.

Cortex XDR and XSIAM provide behavioral detection, investigation and response that can help organizations address ChainDrop activity executing in development environments.

Idira Secrets Manager and Secrets Hub eliminate hard-coded credentials from configure files and  source code by automating zero-downtime rotation, and dynamically delivering just-in-time access to non-human identities across multi-cloud and DevOps environments.

The Unit 42 Cloud Security Assessment is an evaluation service that reviews cloud infrastructure to identify misconfigurations and security gaps.

The Unit 42 Incident Response team can also be engaged to help with a compromise or to provide a proactive assessment to lower your risk.

Related Unit 42 Topics AI, Malware, Supply Chain, npm Packages 

Details of the ChainDrop npm Worm

Indicators and Behavior of the ChainDrop Worm

We analyzed the contents from one of the infected packages to understand the full attack chain.

The package contained the legitimate software development kit (SDK) code that a user would expect, including the source, dependencies and documentation. But it also contained small indicators of the ChainDrop worm: two extra top-level files and one lifecycle hook.

The indicators of the worm can be subtle, as illustrated in the following example.

One of the indicators is an infected npm package's package.json file containing code with the preinstall command, as shown in Figure 1.

A screenshot of a JSON script section showing a "preinstall" script with the command "node setup.mjs".
Figure 1. An infected npm package's package.json file containing code with the preinstall command.

That preinstall line is the only modification the worm makes to this package's manifest. It points to setup.mjs, a dropper that checks whether Bun (a lightweight JavaScript runtime and package manager alternative to Node.js) is on PATH. It downloads Bun 1.3.13 from the legitimate Oven GitHub repository if it isn't present. Then it feeds Bun a 727 KB obfuscated JavaScript payload (math_init.js) compressed into two source lines.

To be clear: Bun is not compromised. The attacker is using a legitimate runtime as a portable execution vehicle.

The payload spawns a detached background process, sets _NODE_RUNTIME_INIT=1 to prevent recursive relaunch and lets the install finish cleanly. No errors. No warnings.

Most developers would move on without noticing a key detail: The worm is already running.

The worm detaches when it is not in CI. If it detects a CI environment it runs inline in the job instead, which means its own debug output lands in the workflow log. This is useful for defenders looking for indicators because the worm is chatty.

One further gate runs before the worm engages in any collection. This gate is a locale check that, on a Russian-language host, prints “Exiting as russian language detected!” and exits cleanly. The worm spares those machines.

Everything It Steals

The background payload begins a sweep of the infected machine to harvest credentials from the environment. These include the following categories:

  • Cloud credentials:
    • Multiple major cloud infrastructure platforms
      • The worm queries metadata endpoints and token endpoints across both compute instances and container services to harvest temporary identity and access management (IAM) role credentials, extending scope to short-lived identity tokens used by automated integration runners
  • Developer tooling:
    • Docker and Helm configurations
    • Git credentials
    • Mount listings
    • npm and GitHub tokens
    • Poetry and PyPI credentials
    • RubyGems tokens
    • SSH keys
    • Terraform state
    • Vault tokens
  • AI tools:
    • AI-assisted coding tools
    • Cloud-based development platforms
    • Open-source coding assistant configurations and authentication artifacts
  • Everything else:
    • .env files
    • .netrc
    • Application configuration scattered across the home directory
    • Bitcoin and Electrum wallet files
    • Jenkins encrypted credential material
    • Kubernetes service-account tokens and kubeconfigs
    • Shell histories

ChainDrop harvests credentials, but also a wide variety of other information about the systems and environment it’s running on.

Some of the information stolen is vital for the worm’s survival. The npm and GitHub tokens it finds are what it needs to keep spreading.

It Reads CI Runner Memory

An embedded Python helper hidden inside an encrypted blob in the payload locates the Runner.Worker process on GitHub Actions runners, opens /proc/<pid>/maps and /proc/<pid>/mem, and searches live process memory for OpenID Connect (OIDC) tokens and runner secrets.

The flow of this GitHub Actions runner memory scraping is illustrated in Figure 2.

A flowchart diagram illustrating GitHub Actions Runner Memory Scraping Flow with four main sections. 1. Runner: Worker process. - Displays GitHub Actions runner process icon. 2. Find - Shows a file directory icon to locate mapped memory regions. 3. Scrape - Illustrates a magnifying glass over a document to read live process memory. 4. Extract - Depicts a box with icons for OIDC tokens, runner secrets, and other in-memory credentials. Bottom text mentions a Python helper locating runner processes, inspecting memory maps and searching live memory for sensitive tokens.
Figure 2. Diagram showing the GitHub Actions runner memory scraping flow.

Rather than waiting for a file to be written to disk, the worm searches memory. In the process, it captures secrets that may have been designed to vanish when a job finishes.

Organizations should be aware that CI runners are credential targets and can be exfiltrated through attacks on process memory.

Persistence Mechanisms

The worm establishes several persistence mechanisms, but two of them deserve special attention:

  • Cross-linked persistence through VS Code and Claude Code
  • A latent capability for OS-level persistence

It writes a .vscode/tasks.json file with a task labeled Environment Setup and sets it to run when the folder opens — meaning it executes automatically whenever a developer opens the project in VS Code. That task runs node .claude/setup.mjs, a copy of the dropper that is byte-identical to the setup.mjs shipped in the package itself.

It also writes a .claude/settings.json file with a SessionStart command hook, meaning it executes whenever Claude Code starts a session in the project. That hook runs node .vscode/setup.mjs, a second copy of the same dropper.

Figure 3 shows the cross-linked persistence through both .vscode/tasks.json and .claude/settings.json files.

A diagram illustrating cross-linked persistence between VS Code and Claude Code. On the left, a VS Code tasks.json configuration is shown, triggering a script when the folder opens. On the right, a Claude Code settings.json configuration runs the same script during a session. Arrows highlight the execution flow between VS Code and Claude Code. A note states that neither config triggers the other; only the VS Code path executes a specific payload.
Figure 3. Cross-linked persistence.

Neither file triggers the other. Each one runs the dropper copy sitting in the other's directory, and the actual trigger in both cases is a developer action: opening the folder, or starting a Claude Code session. Cross-referencing is a naming trick that makes each artifact look like it belongs to the other tool.

The payload is only ever written as .claude/math_init.js, and setup.mjs resolves math_init.js relative to its own location. .vscode/setup.mjs goes looking for a .vscode/math_init.js that the malware never dropped. In this build, only the VS Code path reaches a payload at all.

The full set of dropped files is:

  • .claude/math_init.js
  • .claude/settings.json
  • .claude/setup.mjs
  • .vscode/setup.mjs
  • .vscode/tasks.json

Deleting either directory outright breaks both paths. However, defenders should remove all five files to be sure the worm is disabled.

The worm also carries an installer for a macOS LaunchAgent (com.user.gh-token-monitor) and a Linux systemd user service (gh-token-monitor.service). In this sample, the installer was decrypted but never invoked. The routine that pipes it to bash has no call site, so treat OS-level persistence as latent capability, not observed behavior.

The attacker is turning a trusted developer and AI-tool configuration into execution infrastructure. These aren't files most developers think to audit.

Propagation and Exfiltration

Once the worm has an npm token, it:

  • Identifies every package the account can publish
  • Downloads or reconstructs each package
  • Adds preinstall: node setup.mjs to the package.json file
  • Writes the dropper (setup.mjs) and the obfuscated payload (math_init.js)
  • Increments the patch version
  • Republishes the infected package as the current npm package

The infected package still works. The original source code is intact. As in the sample we analyzed, the only additions are the two top-level files and the lifecycle hook.

The worm also plants a .github/workflows/codeql_analysis.yml file that serializes ${{ toJSON(secrets) }} and uploads it as an Actions artifact, another path to exfiltrate repository secrets. And it creates public repositories under the victim's GitHub account with the description Shai-Hulud: Here We Go Again and Dune-themed names, using them as an additional exfiltration channel.

It Was Waiting for One Specific Repository

Everything above is a relatively loud and more obvious propagation path. There is a second typosquatting method that is much quieter and it only appears in a single place.

Before collecting anything, the worm checks three environment variables. If these three variables are set:

  • GITHUB_ACTIONS
  • GITHUB_REPOSITORY to contain /opensearch-js
  • GITHUB_WORKFLOW_REF to contain release-drafter.yml

The worm runs a static routine of republishing the repo and exits. No collection takes place.

Also, If the worm is placed in a repo that contains /opensearch-js, but does not contain release-drafter.yml, it exits and steals nothing at all. It stays silent in the runs a maintainer is most likely to be reading.

Inside this second method, the worm does not need a stolen npm token. It asks the runner for an OIDC token with the audience npm:registry.npmjs.org and trades it at npm's own trusted-publishing exchange endpoint for a real publish credential. The repository's legitimate release identity becomes the attacker's.

Then it modifies the package, and not the way it modifies everything else. This path never touches scripts. It downloads the latest @opensearch-project/opensearch tarball, bumps the patch version and adds one line to the package.json file shown below in Figure 4.

A screenshot of a code snippet showing a JSON object with an "optionalDependencies" key. It specifies a GitHub project related to OpenSearch with a setup path.
Figure 4. Line added to the package.json file in the @opensearch-project/opensearch tarball.

The dependency name typosquats the project's own @opensearch-project scope and points at a pinned commit of the project's own repository. In a diff it reads like an internal helper. Detections built around preinstall hooks could easily miss it.

And then the worm signs the result.

Before publishing, the worm:

  • Requests a second OIDC token (audience sigstore this time)
  • Obtains a Fulcio certificate
  • Builds an in-toto SLSA v1 provenance statement over the tarball's SHA-512 hash
  • DSSE-signs it with an ephemeral P-256 key
  • Uploads the entry to the public Rekor transparency log
  • Attaches the bundle to the publish as <name>-<version>.sigstore
  • Logs the resulting search.sigstore.dev URL as it goes

This is not forged provenance. The attestation says the tarball was built in that repository by that workflow, and that is true.

That breaks a control many teams are currently leaning on. Given the reality of today’s npm supply chain threats, a package having valid npm provenance does not mean the package is clean. It only means the tarball came out of the workflow named in the certificate. If that workflow is running attacker code, valid provenance is what you should expect to see. Pivot on the Rekor log index and the workflow identity inside the certificate, not on whether the signature checks out.

We did not observe this path execute, and it cannot execute anywhere except in release-drafter.yml inside the opensearch-project/opensearch-js workflow. But it is fully implemented, reachable from the payload's main entry point, and it names its target in cleartext once the string layers come off. This repository is not typosquatted. The typosquat is the injected dependency name @opensearch/setup, which imitates the real @opensearch-project scope.

The Blockchain Router

The worm doesn't contain a hard-coded C2 domain. Instead, it calls an Ethereum smart contract to ask where to send stolen data.

The contract sits at 0xE1f2395ee43e45A1556EC6438a88c31B83493103. This contract is a small StringListStore with three functions: return all domains, return owner and an owner-only setter. It emits no events, so domain rotation is a silent state write. Defenders who block today's domain may not notice when the operator changes it unless they're polling the contract.

The worm rotates through roughly 60 public Ethereum RPC endpoints until one answers, making it resilient to any single provider blocking the request.

When the contract was first configured, the operator wrote three domains:

  • npm-cache[.]com
  • pypi-get[.]com
  • js-mirror[.]com

Two hours and 35 minutes later, they replaced the list with only npm-cache[.]com. As of our analysis, that's still the active C2.

If contract-resolved domains fail, the worm falls back to searching GitHub commits for the marker thebeautifulmarchoftime, expecting a signed record containing a backup domain. During our query, the fallback was unarmed. No valid operator record existed. However, the mechanism is built and waiting.

The primary C2 domain, npm-cache[.]com, sits behind an edge computing and reverse-proxy service, so its published addresses are shared edge addresses rather than attacker-owned hosts, so block on domain or SNI. Blocking these IP addresses will not reach the origin and will affect unrelated traffic.

The Server Can Answer Back

After sending stolen data, the worm reads the HTTP response, parses it as JSON and evaluates whatever comes back. The JavaScript code to accomplish this is shown below in Figure 5.

A screenshot of a code snippet showing JavaScript logic. It awaits a response text, checks if it's present, parses it as JSON, and evaluates a code property.
Figure 5. The worm's code to read, parse and evaluate the HTTP response.

There is no fixed second-stage payload baked into the worm. The operator chooses the next stage at request time. Because each exfiltration request includes a host-derived UUID, the response can be targeted per victim and never written to disk.

During our analysis, we sent a correctly formatted synthetic envelope using the worm's exact encryption scheme with dummy data to the live C2 endpoint. The server returned an HTTP 200 OK with an empty body. No code field was served to our probe.

That means the remote code execution (RCE) channel was either disarmed at test time, selectively gated on victim attributes or asynchronous.

Encrypted Exfiltration

Stolen data is JSON-serialized, gzipped, encrypted with a random AES-256-GCM key and wrapped with RSA-OAEP-SHA256 using an embedded public key. The worm sends the code shown below in Figure 6.

A screenshot of a code snippet showing a JSON object with three keys: "envelope" containing a base64 encrypted string, "key" containing a base64 RSA-wrapped AES key, and "uuid" with a host fingerprint.
Figure 6. Code sent by the worm.

Everything goes to hxxps://npm-cache[.]com:443/router over TLS. Network capture can prove that data left the machine and estimate its volume, but recovering the plaintext requires the operator's private RSA key.

Only the domain-based sender evaluates returned code. Blocking the domain prevents an arbitrary RCE stage if the functionality is enabled. But the GitHub fallback can still exfiltrate data through victim-owned repositories, which means full containment requires addressing both channels.

It Publishes Stolen Tokens in Public Commit Messages

There is a third situation that we describe in this section, and it is the strangest one. When the GitHub sender carries a stolen token, the worm Base64-encodes that token twice and makes the result the commit message, prefixed with a fixed marker:

IfYouBlockThisAPIKeyItWillCrashTheLiveProductionServersOfAllThirdPartyClients

A separate routine in the same payload searches GitHub's commit API for that marker, double-decodes every match and keeps any token that passes a repository-scope check. One victim's stolen credentials become a usable resource for every other running copy of the worm.

Despite the claims made in the marker, defenders should grep for it. It is long enough and strange enough that a full match is highly unlikely to be a false positive. A live hit means a credential is sitting in a public commit and needs revoking.

We Followed the Money

The three C2 domains were registered through one registrar within eight seconds of each other on May 22, 2026:

  • js-mirror[.]com - 13:40:28 UTC
  • npm-cache[.]com - 13:40:32 UTC
  • pypi-get[.]com - 13:40:36 UTC

All three use the same nameservers.

Fourteen minutes and 23 seconds after the last registration, FixedFloat transferred 0.01805723 ETH to the operator's wallet (0x55F9780e…f31cD).

Three days later, on May 25, the wallet deployed the Ethereum resolver contract, wrote all three domains into it, and 2 hours and 35 minutes after that narrowed the list to just npm-cache[.]com. The next morning it transferred 0.00436 ETH to a Binance-labeled deposit address. The accounting reconciles to the wei.

A timeline showing the deployment of the campaign infrastructure is shown below in Figure 7.

A Campaign Infrastructure Timeline flowchart with six steps depicted in labeled boxes and arrows. Step 1: Domain registration with multiple domains. Step 2: FixedFloat funding occurring 14 minutes later. Step 3: Resolver deployment on May 25. Step 4: Three-domain write with domains written to resolver. Step 5: Single-domain reduction to npm-cache. Step 6: Binance transfer. The process involves domains first being registered, then funded shortly afterward.
Figure 7. Campaign infrastructure timeline.

FixedFloat is a shared exchange wallet with millions of transactions. This wallet tells us the funding rail, not the operator's identity. The Binance deposit address is the strongest identity pivot.

C2 Domain Rotation via Ethereum Smart Contract

On Aug. 4, 2026, the attacker executed an on-chain transaction 0xc55920f1bd0531b6738153068a666c080ddded47e6256f1fd980d51c0b507c91 to modify the StringListStore in smart contract 0xE1f2395ee43e45A1556EC6438a88c31B83493103, rotating the active C2 domain from npm-cache[.]com to a newly registered domain, awqhnjewqjkl[.]icu. The transaction was submitted by wallet 0x55F9780ef31cD, the same wallet that originally deployed the C2 smart contract on May 25, 2026.

The new domain awqhnjewqjkl[.]icu was registered via NameSilo, LLC at 15:15:26 UTC on Aug. 4, 2026, and was operationally active within the hour as the earliest observed connection observed by Unit 42 researchers occurred at 16:10:03 UTC.

The domain exhibits characteristics consistent with domain generation algorithm (DGA) output: a randomized 12-character string on the .icu top-level domain (TLD), flagged as DGA by the VirusTotal community. This represents a shift from the previous C2 domain npm-cache.com, which used a naming convention that mimicked a developer ecosystem and was registered through a different registrar (Tucows/OpenSRS).

Despite the change in registrar and naming convention, both awqhnjewqjkl[.]icu and npm-cache[.]com are proxied through Cloudflare's cloud delivery network (CDN) infrastructure. Both domains serve the identical Cloudflare default CDN-CGI stylesheet d30b4ea6f68456672f5abb35e9dcf7d54226372b66e9d60a7ee26b7a52568e74, confirming shared use of the Cloudflare proxy layer.

The new domain was issued a TLS certificate by Google Trust Services (WE1), which is valid from Aug. 4–Nov. 2, 2026, with Subject Alternative Names (SAN) covering both awqhnjewqjkl[.]icu and *.awqhnjewqjkl[.]icu.

Within approximately 19 hours of the domain becoming active, we witnessed network traffic to victim environments. The affected infrastructure spans four continents: North America, Europe, Asia and Africa. The destination IP addresses for this C2 domain include 104.21.91[.]101 and 172.67.215[.]154. The geographic and organizational breadth of these connections is consistent with the indiscriminate, worm-driven propagation model of ChainDrop.

This C2 rotation demonstrates the adversary's ability to silently reconfigure the worm's entire C2 infrastructure through a single Ethereum transaction, without requiring any update to the deployed malware. Monitoring the smart contract for future setStrings() calls would provide early warning of subsequent domain rotations.

Is This Shai-Hulud?

Multiple indicators point to this being the Shai-Hulud toolchain documented by JFrog:

  • The PBKDF2-based string decoder
  • The Bun 1.3.13 pin
  • The _NODE_RUNTIME_INIT detached-relaunch pattern
  • The self-applied Shai-Hulud: Here We Go Again marker
  • The npm self-propagation and GitHub exfiltration architecture

However, these indicators don’t prove the same attackers are behind the campaign. Because the Shai-Hulud source was published in May 2026, the implementation can be reused by anyone.

This sample also mixes characteristics that don't match any previously published variant:

  • Public victim-owned exfiltration repositories with Dune-themed names
  • Ethereum-based domain resolution, thebeautifulmarchoftime commit-search fallback
  • A Russian-language exclusion check
  • A repository-gated npm trusted-publishing path that mints genuine Sigstore provenance
  • preinstall delivery rather than the binding.gyp technique reported in earlier waves

The ChainDrop worm is clearly part of the Shai-Hulud code lineage. However, we cannot yet say whether it's operated by the group known as TeamPCP, or by another group adapting the published toolkit for their own purposes.

Detecting ChainDrop

We detected ChainDrop operations across 10 distinct environments using out-of-the-box XDR detections focused on JavaScript runtime events. In one instance, as illustrated in the process execution in Figure 8, the threat activity originated within a developer's VS Code environment. The threat actors leveraged Bun to execute the malicious payload Math_Symbol.js from within the cacheable node modules directory. This script then spawned cmd.exe to invoke gh auth token to capture the user's GitHub authentication credentials.

A screenshot of a command line interface displays a series of file paths related to Microsoft VS Code, a temporary executable file, a redacted JS file, and the Windows system32 command.
Figure 8. ChainDrop theft of GitHub PAT in development environment.

Breaking Through Obfuscation and Encryption to Reach the Payload

The 727 KB payload was protected by three nested layers of obfuscation and encryption. We broke through all of them. No unexplained blob remains in the sample.

Layer 1 used Base91 encoding with 73 function-specific alphabets and a 14-position array rotation. We recovered 4,613 hidden string entries.

Layer 2 used a custom byte-permutation cipher built on PBKDF2-SHA256 with 200,000 iterations and seeded Fisher-Yates shuffles. We recovered 727 additional hidden strings.

Layer 3 used AES-256-GCM encryption plus gzip to protect 10 large encrypted blobs. These blobs contained:

  • Bash and Python helpers
  • Persistence installers
  • The GitHub Actions memory scraper
  • Malicious workflow templates
  • VS Code and Claude persistence files
  • RSA public keys
  • Additional dropper copies

These three layers are shown below in Figure 9.

"A diagram illustrating three obfuscation layers and recovered payloads. Layer 1 features ""basE91 + rotation"" with 73 functions and alphanumeric support. Layer 2 highlights a ""custom permutation cipher"" with specific hashing functions and shuffling. Layer 3 shows 10 encrypted blobs. Recovered payloads listed include bash helpers, Python helpers, sensitive files, GitHub Actions memory scraper, and others.
Figure 9. Three layers of obfuscation or encryption used to protect the payloads.

Current Scope of the Attack

During our analysis, at approximately 12:20 UTC on Aug. 4, 2026, we searched GitHub for public repositories matching the worm's exact exfiltration marker: the description Shai-Hulud: Here We Go Again.

We found 453 public repositories across five accounts.

The earliest was created on May 11. The newest had been created roughly 25 minutes before our query. The names followed the pattern that matched the worm's Dune-themed generator exactly, with combinations like sardaukar-futar-421 and harkonnen-ghola-669.

These five accounts are candidate victim accounts, not confirmed victims. The 453 repository counts might be only a starting point for possible compromises. In addition to public matches, there may be private repositories compromised as well. But the naming, description and creation patterns match the worm's behavior, and new repositories were still appearing while we watched.

Three accounts held most of the total repos that we discovered.

The attackers are not only actively compromising repositories, they are also rapidly releasing new versions of compromised packages.

We analyzed one compromised package, but then noticed that a newer version of the package had landed six minutes after the compromised package. Another landed 70 minutes after that.

The threat actors are actively, and rapidly, creating new repositories, versions and patch numbers, which will propagate the worm more efficiently. Because CI/CD pipelines are often configured to pull the latest patch or version, if there are several rapid fire versions, and they are compromised, the CI pipelines are more likely to grab an infected package.

Defenders may not be taking the most effective approach to removing the worm’s infection. It is critical to ensure poisoned packages and their files are fully removed from potentially compromised systems. Unit 42 researchers found that a previously compromised system was rolled back to the latest tag pointing at the latest clean version. This fixed the tagging issue.

However, it didn't fix the poisoned lockfiles, caches, mirrors or tarballs already sitting in a CI image. Even after updating the latest tag to point to a secure version, machines that installed the package during the compromise will not automatically receive the fix. Because lockfiles retain the compromised version, these systems remain vulnerable until administrators actively clear the lockfiles and fetch the updated release.

Interim Guidance

Assume the potential impact is wider than what we know now. The worm attempts to republish itself through packages writable by compromised npm tokens. If a developer installed an affected release, enumerate every package their npm credentials could modify.

Block and Monitor Infrastructure

Add npm-cache[.]com, pypi-get[.]com and js-mirror[.]com to DNS and TLS SNI blocklists. Prefer sinkholing over an HTTP block page, because the worm treats HTTP 400 and 404 as a healthy C2 response. Monitor the resolver contract for domain changes.

Rotate Exposed Credentials

Revoke or rotate npm tokens, GitHub PATs and deploy keys, cloud credentials, Kubernetes service-account tokens, Vault tokens, SSH keys and AI-provider credentials accessible to confirmed infected hosts. Treat CI runners as potentially compromised if the worm executed there.

Hunt for Repository Modifications

Search accessible repositories for:

  • .vscode/tasks.json invoking .claude/setup.mjs
  • .claude/settings.json invoking .vscode/setup.mjs
  • .github/workflows/codeql_analysis.yml containing toJSON(secrets)
  • Math_Symbol.js
  • math_init.js
  • setup.mjs
  • router_runtime.js

Hunt for Latent OS-Level Artifacts

Although the installer was not invoked on the analyzed main execution path, search for:

  • ~/Library/LaunchAgents/com.user.gh-token-monitor.plist
  • ~/.config/systemd/user/gh-token-monitor.service
  • ~/.local/bin/gh-token-monitor.sh
  • ~/.config/gh-token-monitor/

Hunt on the Network

Look for HTTP GET or POST requests to /router on the three C2 domains, Ethereum JSON-RPC eth_call requests targeting 0xE1f2395ee43e45A1556EC6438a88c31B83493103, and GitHub commit searches containing thebeautifulmarchoftime or IfYouBlockThisAPIKeyItWillCrashTheLiveProductionServersOfAllThirdPartyClients.

Hunt Your Own Commit History

Search accessible repositories for commit messages containing IfYouBlockThisAPIKeyItWillCrashTheLiveProductionServersOfAllThirdPartyClients, and for the dead-drop record prefix thebeautifulsnadsoftime.

A match on the first is a leaked credential requiring immediate revocation. A match on the second is a planted backup C2 domain.

Audit Your Supply Chain

Compare recently published patch releases for new preinstall hooks, replaced scripts objects, setup.mjs files and large minified JavaScript bundles. Do not scope to listed packages. The worm is designed to spread to unrelated packages writable by stolen tokens.

Tips for Hardening Pipelines

Here is a practical playbook for AppSec engineers and developers:

  • Bind authentication to the workload: The stealer targeted HashiCorp Vault tokens alongside npm, GitHub, AWS and Kubernetes credentials. A vault does not help when the token authenticating to it is a bearer string in a dotfile. Use credentials bound to the workload itself, such as mutual TLS with a SPIFFE identity, a cloud IAM role, or a projected service account token with an audience claim, so replay from attacker infrastructure fails.
  • Use ephemeral CI runners: Persistent self-hosted runners accumulate credentials and caches across jobs that often belong to different teams, so one poisoned install contaminates everything that runs after it. Single-use runners limit exposure to one job.
  • Plant canary credentials: Use decoys produce high-confidence signals with low false positives. Place non-functional keys in ~/.aws/credentials, ~/.npmrc, and an .env file across build images and workstations, then enable high alert on any use.

Egress filtering in CI/CD: Most npm-based malware attempts to send ~/.npmrc tokens or ~/.ssh keys to a C2 server. Apply strict egress network policies to your CI runners. Only allow connections to your private registry and known deployment targets.

Unit 42 Managed Threat Hunting Queries

The Unit 42 Managed Threat Hunting team continues to track any attempts to exploit these issues across our customers, using Cortex XDR and the XQL queries below. Cortex XDR customers can also use these XQL queries to search for signs of exploitation.

Conclusion

ChainDrop demonstrates how a compromised open-source package can become an entry point into developer workstations, CI pipelines, cloud environments and the broader software supply chain. By stealing publishing credentials and automatically republishing infected packages, the worm can continue spreading through trusted dependencies while leaving their legitimate functionality intact. Its ability to extract ephemeral credentials directly from CI runner memory also means that investigations limited to files stored on developer endpoints may miss critical exposure.

  • Unit 42 recommends:
  • Identifying installations of affected npm package versions
  • Removing affected package versions
  • Investigating developer workstations and CI runners for signs of compromise
  • Reviewing unexpected npm publishing and GitHub repository activity.
  • Revoking and rotating potentially exposed npm, GitHub, cloud, SSH and automation credentials.
  • Removing identified persistence mechanisms
  • Blocking both the domain-based and GitHub-based exfiltration channels

Palo Alto Networks customers are better protected through the products described below. Palo Alto Networks and Unit 42 will continue monitoring this campaign for changes in infrastructure, new affected packages and evidence of additional activity, and we will update this threat brief as relevant information becomes available.

Palo Alto Networks Product Protections for ChainDrop

Palo Alto Networks customers can leverage a variety of product protections and updates to identify and defend against this threat.

If you think you might have been compromised or have an urgent matter, get in touch with the Unit 42 Incident Response team or call:

  • North America: Toll Free: +1 (866) 486-4842 (866.4.UNIT42)
  • UK: +44.20.3743.3660
  • Europe and Middle East: +31.20.299.3130
  • Asia: +65.6983.8730
  • Japan: +81.50.1790.0200
  • Australia: +61.2.4062.7950
  • India: 000 800 050 45107
  • South Korea: +82.080.467.8774

Advanced WildFire

The Advanced WildFire machine-learning models and analysis techniques have been reviewed and updated in light of the indicators shared in this research.

Cloud-Delivered Security Services for the Next-Generation Firewall

Advanced URL Filtering and Advanced DNS Security identify known C2 domains associated with this activity as malicious.

Cortex

Koi Agentic Endpoint Security

Koi Agentic Endpoint Security is designed to help discover every AI artifact and AI agent’s activity across the agentic endpoint, assess its risk, enforce prevention & runtime controls, and remediate violations.

Cortex AgentiX

Security analysts can use natural language to prompt the Cortex AgentiX Threat Intel agent to extract indicators of compromise (IoCs) from this threat brief. Customers can then enrich the indicators, check for sightings in their Cortex tenant and related alerts and provide a summary of the impact to the organization.

Cortex XDR and XSIAM

Cortex XDR and XSIAM help to prevent the threats described in this article, by employing the Malware Prevention Engine. This approach combines several layers of protection, including Advanced WildFire, Behavioral Threat Protection and the Local Analysis module, to prevent both known and unknown malware from causing harm to endpoints.

Specifically, we observed out-of-the-box prevention on Windows via Behavioral Threat Protection. In addition, as part of our continuous cross-platform threat research, targeted behavioral protections for macOS and Linux environments have also been deployed in content version 2370-39889.

We advise customers to upgrade agents to supported versions and the latest content update to receive the best protection

Cortex Cloud

Cortex Cloud Endpoint Protection can help protect organizations from threats expressed within this article. Cortex Cloud 2.1 can detect and prevent malicious operations using behavioral and AI-enabled analytics to detect when Linux endpoints, including containers and virtual machines, are targeted. Additionally, it can detect when cloud platform IAM policies associated with those targeted endpoints are being misused and alert teams when assets are vulnerable to these threats.

Palo Alto Networks Software Supply Chain Security, integrated into Cortex Cloud, helps provide comprehensive visibility across the entire development ecosystem by tracking developer tools, code identities, registries and SBOMs. The solution can effectively harden development pipelines, and helps enforce out-of-the-box security policies to prevent unauthorized tampering or malicious code injection. By automating compliance reporting and governance, it can better empower organizations to mitigate application risks early and deploy secure code with confidence.

Idira Secrets Manager

Idira Secrets Manager limits blast radius by dynamically injecting them into build steps or local environments at runtime via API, CLI, or container sidecars, avoiding long-lived static configuration files on disk.

By pairing Idira Privilege Cloud with Idira Secrets Manager, raw credentials bypass environment variables and process memory entirely. Secretless Manager proxies outbound connections to databases, cloud APIs, and registries, injecting credentials directly into the network stream on the fly. When supply chain worms scan your build runners, there is simply nothing in memory to steal.

Idira Secrets Manager, integrated with Idira Privilege Cloud, handles automated policy-based rotation of credentials and enforces short lived secrets. Secrets requested by build pipelines are dynamically generated or rotated immediately after job completion.

Indicators of Compromise

File Hashes (SHA-256)

  • Math_Symbol.js / math_init.js: 9fc2570b7cef51c1b8df116d144d11ff4096357be7d2c4c6367cfc2509cf1bcc
  • setup.mjs (First variant): 54dc7ea54a1317cca0e890a2770630cf7fa6c97813e0cb9d2caa93012b350668
  • setup.mjs (Second variant): fd3ca4007b225fdf8de7af4345a19179d5efa8c4bb9205f88cda806e5684b1eb
  • setup.mjs.malicious (Variant of setup.mjs based on TLSH pivot): b27b82afa5f15512f3856e549fb83d873fd0049759a4b62ce64c8d7d4dc2c678

Malicious Domains

  • awqhnjewqjkl[.]icu - new C2 domain pulled from Ethereum contract
  • npm-cache[.]com - active during analysis
  • pypi-get[.]com - historical C2, returned from the Ethereum contract in the past
  • js-mirror[.]com - historical C2, returned from the Ethereum contract in the past

C2 Endpoint

  • hxxps://npm-cache[.]com:443/router
  • hxxp://awqhnjewqjkl[.]icu/cdn-cgi/rum?

Ethereum

  • Resolver contract: 0xE1f2395ee43e45A1556EC6438a88c31B83493103
  • Changed C2 Transaction: 0xc55920f1bd0531b6738153068a666c080ddded47e6256f1fd980d51c0b507c91
  • Owner wallet: 0x55f9780e1492344b7417fa723aedc4d0b97f31cd
  • Binance deposit pivot: 0x35477b7b2df3174B9FE8A681750A7E3fbA20F39B
  • Getter selector: 0x53ed5143
  • Setter selector: 0xd3c159e5

GitHub Markers

  • Repository description: Shai-Hulud: Here We Go Again
  • Commit search token: thebeautifulmarchoftime
  • Signed record prefix: thebeautifulsnadsoftime
  • Dune-themed name terms: sardaukar, mentat, fremen, atreides, harkonnen

Latent Persistence Artifacts

The sample embeds an installer for these artifacts, but we did not identify a call site on its main execution path:

  • ~/.local/bin/gh-token-monitor.sh
  • ~/.config/gh-token-monitor/
  • ~/Library/LaunchAgents/com.user.gh-token-monitor.plist
  • ~/.config/systemd/user/gh-token-monitor.service

Compromised Packages

A list of compromised packages is available at a page on our GitHub repository.

Token Jacking: Cybercriminals Could Be Stealing Your AI Resources

Executive Summary

It’s three a.m., do you know what your AI agent is doing? Unit 42 has responded to a growing number of AI token jacking cases resulting in staggering financial losses.

The financial loss comes from criminals gaining access to API keys used by legitimate developers for access to popular AI platforms. These keys are known as tokens, and their theft is called token hijacking, or token jacking for short.

The unrelenting frenzy of AI adoption and soaring costs of model access are converging into an irresistible opportunity for cybercriminals. Premium pricing on scarce AI processing power means stolen access via tokens can generate a quick and easy profit for attackers. Complex, patchwork billing management and limitless scaling by default can lead to massive financial losses in short periods.

Good security hygiene, combined with cutting-edge native AI protection tools, can prevent losses before they begin.

Palo Alto Networks customers are better protected through the following products and services:

The Unit 42 AI Security Assessment can help empower safe AI use and development.

If you think you might have been compromised or have an urgent matter, contact the Unit 42 Incident Response team.

Related Unit 42 Topics AI, LLM, Supply Chain 

How Tokens Work

Token jacking is a new AI-oriented spin on an old technique of stealing access to computing resources.

Establishing a session in service-based computing typically requires authentication, usually involving a username and password, and sometimes a secondary verification method. Many services allow an authenticated user to then generate keys that programs can use on a user's behalf to establish sessions without going through an interactive login to support automated processes. Within a session, the service provider and user have agreed on a structured way to pay to use their service to achieve a pre-defined objective.

AI — in particular, large language models (LLMs) — typically does not have pre-defined objectives. Users can and do carry on long conversations of widely varying complexity, which can consume enormous amounts of the provider’s computing resources. Automated processes also use LLMs to produce iterative content, which they then further process and return to the LLM with additional, related prompts.

To best support this freeform usage, providers typically break both the input prompt and the output data into small chunks called tokens. Regardless of the objective, billing is then based on how many of these tokens are consumed during the session.

Newer and more complex AI models charge more per token, ostensibly because more resources are required to deliver the output. To avoid interruptions in unpredictable workstreams, many providers do not limit the number of tokens an account can consume, instead tallying usage and billing on a cycle.

If an attacker can steal one of these keys, they may find themselves with unlimited programmatic access to tokens that they can then use themselves or resell to other users. Since billing occurs cyclically, the victim might not even be aware of the theft until the attacker has consumed a massive number of tokens.

Transfer Stations

To better understand token jacking, we must understand transfer stations. Skyrocketing token costs for frontier AI models and regional usage restrictions have spawned a massive gray market of fly-by-night vendors selling AI computing capacity at a fraction of the retail cost.

Figure 1 below shows an example of these advertisements. These services are commonly called transfer stations.

A screenshot of an advertisement for "Gemini 3.1 Pro," featuring a decorative background with colorful pinpoints of light. There is text in Chinese with a price listed as ¥32.9 on the side. The product offers various features such as Veo 3.1 Pro support, Nanobanana model generation, and Canvas deep thinking, among others.
Figure 1. Advertisement for gray-market frontier model access.

Third parties acting as intermediaries between official AI providers and end users sell these transfer stations. Many of these advertisements appear on Chinese-language marketplaces like Taobao. They promise access to multiple AI services with seller-issued custom credits that are purchased anonymously. Earlier this year, a researcher named Harshal Singh posted a fascinating deep dive into this world.

A large number of these transfer stations run on just a few open-source software platforms like new-api or one-api, which act as proxy services to official AI APIs. These proxy services handle:

  • Obfuscation
  • Rotation and authentication of real credentials
  • Billing
  • Model routing
  • Normalization of prompts

In many cases, users of these transfer station services are developers seeking inexpensive AI access. Other use cases are less benign.

Competing nation-states can use these transfer stations' proxy services to access cutting-edge frontier models to train and refine their own models at a fraction of the cost that AI development normally incurs. Transfer stations require access to legitimate API tokens for the associated AI models. Attackers often steal or hijack these tokens from a variety of legitimate sources.

How Transfer Stations Obtain Tokens

For transfer stations to be cost-effective, their operators require access to a large pool of discounted legitimate tokens for each frontier AI model offered. Purchasing tokens at full price to simply resell them at a discount isn’t profitable, so many operators turn to stolen credentials.

Attackers can use privileged corporate developer accounts they’ve harvested via information stealers or through phishing campaigns to perform the following activities:

  • Creating new API keys
  • Provisioning models
  • Removing billing limits
  • Disabling critical usage alerts and logging

These developer accounts are readily available for sale by access brokers on dark web marketplaces.

However, a more direct approach is to steal already provisioned access keys. Attackers can harvest these like they do credentials. They can also mine keys from improperly secured file shares or code repositories.

More recently, attackers have stolen these keys using poisoned, self-propagating npm packages downloaded by unsuspecting developers. Once installed, these packages infect any other code releases the developer builds. They steal credentials and access tokens from each environment along the way, amplifying the impact.

Particularly concerning are npm supply chain attacks like Shai-Hulud and Miasma. Attackers could use the huge number of credentials stolen in these campaigns to fuel transfer stations for years.

Impact of Transfer Stations' Token Jacking

The financial impact of token jacking can be catastrophic to organizations. Transfer stations can generate tens of millions of API calls per day, resulting in hundreds of thousands of dollars in usage fees.

We’ve responded to cases where attackers stole inadvertently exposed credentials and integrated them into a transfer station within minutes. This led to nearly a million dollars in charges before discovery and containment.

In some of these cases, we connected massive numbers of malicious API queries to domains hosting the new-api proxy service. Figure 2 shows an example of a transfer station frontend marketplace hosted on an IP address running an instance of new-api and connected to an attack.

A screenshot of a tranfer station website, displaying a list of AI models with their names, descriptions, and compatibility information. The interface includes options to filter and sort models based on various criteria.
Figure 2. Webpage from a transfer station site with prices for different AI models.

Organizations impacted by token jacking have very little recourse to recover funds billed by the AI services for using their API tokens. The cost can derail budgets or even force smaller businesses into bankruptcy.

Even unsuspecting developers trying to use transfer stations for legitimate development risk having their prompts routed to inferior models. Furthermore, developers risk having their sessions monitored and mined for sensitive data that could turn them into future victims.

Mitigation

Organizations can protect themselves against token jacking through various methods.

  • Implement spending limits for AI usage
    • Ensure that these limits alert organizations if usage changes drastically from an established baseline
  • Review all privileged accounts that can be used to provision resources or adjust spending limits
  • Migrate from long-term access keys to short-term bearer tokens to limit the potential window of damage
  • Use an AI gateway in combination with a machine authentication platform
    • This can help ensure that all LLM traffic is tied to a verified and managed machine identity, allowing for real-time monitoring of traffic and usage anomalies
  • Ensure that compute resources include network boundaries where available
    • This restricts access to corporate infrastructure, preventing compromised keys from being used in a transfer station scenario
  • Tightly manage development environments to ensure malicious packages do not enter the development pipeline

Conclusion

AI adoption is accelerating at an unprecedented pace. A mindset of “fail fast and break things” has never been more true — or more risky — than it is today.

This mindset brings with it an opportunity for cybercriminals to target vulnerable organizations through token jacking and to cause staggering losses. While innovation cannot be at the mercy of security, there are ways defenders can manage their risk.

Palo Alto Networks customers are better protected through the following products and services:

Prisma AIRS AI Gateway

The Prisma AIRS AI Gateway helps provide a central control plane to secure and govern enterprise AI traffic. By managing API keys centrally, it removes sensitive credentials from developer environments and build systems. Platform teams can gain full visibility into model usage, agent actions, and token spend across teams. Security teams get integrated guardrails that can enforce access policies, prevent data leaks, and set proactive budget limits.

Idira Agentic Identity Security

Idira Agentic Identity Security helps provide a comprehensive identity security solution for discovery, control and governance of agentic identities. It provides a central registry of agents with cryptographically verifiable identities, enforces strong authentication and zero standing privileges for agents and provides comprehensive audit trails of agent actions. It also enables agents to secretly retrieve and use secrets and API tokens just in time thereby reducing the attack surface.

Koi Agentic Endpoint Security

Koi Agentic Endpoint Security helps discover all software on your endpoints, both binary and non-binary, from installed applications to code packages and AI artifacts. From there you can govern it, whether that means removing a risky or malicious item, or holding new package versions back until they've had time to establish a reputation under public scrutiny.

Cortex Cloud, XDR and XSIAM

Cortex Cloud, XDR, and XSIAM customers are better protected from the topics discussed within this article with cloud runtime security operations monitoring their continuous integration and continuous development (CI/CD) pipelines to ensure that the latest npm packages integrated into test and production environments are monitoring for and preventing malicious code execution.

Cortex Cloud Identity Security

Using Cortex Cloud’s Identity Security which includes Cloud Infrastructure Entitlement Management (CIEM), Identity Security Posture Management (ISPM), Data Access Governance (DAG) as well as Identity Threat Detection and Response (ITDR), allows clients to monitor cloud identities which may have been compromised as a result of the techniques discussed in this article. Enabling these features helps protect cloud identities.

Advanced URL Filtering

Advanced URL Filtering identifies known domains and URLs associated with this activity as malicious.

The Unit 42 AI Security Assessment can help empower safe AI use and development.

If you think you may have been compromised or have an urgent matter, get in touch with the Unit 42 Incident Response team or call:

  • North America: Toll Free: +1 (866) 486-4842 (866.4.UNIT42)
  • UK: +44.20.3743.3660
  • Europe and Middle East: +31.20.299.3130
  • Asia: +65.6983.8730
  • Japan: +81.50.1790.0200
  • Australia: +61.2.4062.7950
  • India: 000 800 050 45107
  • South Korea: +82.080.467.8774

Palo Alto Networks has shared these findings with our fellow Cyber Threat Alliance (CTA) members. CTA members use this intelligence to rapidly deploy protections to their customers and to systematically disrupt malicious cyber actors. Learn more about the Cyber Threat Alliance.

Indicators of Compromise

Table 1 contains indicators associated with recent token jacking activity.

Indicator Context
Go-http-client/2.0,gzip(gfe) User Agent associated with malicious API calls
3.235.109[.]125 Malicious API calls
116.105.166[.]148 Malicious API calls
172.96.142[.]186 Malicious API calls
38.46.219[.]166 Malicious API calls
38.46.219[.]163 Malicious API calls
38.46.219[.]162 Malicious API calls
23.237.196[.]170 Malicious API calls
15.204.106[.]173 Malicious API calls
104.243.42[.]117 Malicious API calls
198.255.70[.]210 Malicious API calls
47.88.103[.]81 Malicious API calls
47.251.72[.]239 Malicious API calls
117.72.74[.]48 Malicious login (Credential Theft)
207.246.106[.]162 Malicious login (Credential Theft)
23.236.182[.]215 Malicious login (Credential Theft)
95.214.112[.]26 Malicious login (Credential Theft)
amutes[.]com Transfer station infrastructure
abb1[.]life Transfer station infrastructure

Table 1. Indicators of token jacking activity.

Additional Resources

The Frontier AI Vulnerability Burst: Industrializing Autonomous Zero-Day Discovery in Open-Source Software

Executive Summary

Frontier AI is fundamentally shifting the dynamics of cybersecurity — accelerating both how vulnerabilities are discovered and how quickly they can be exploited.

Our vulnerability research team built an autonomous vulnerability discovery, validation and reporting system that we call Network and Open-Source Vulnerability Analyzer (NOVA), an agentic research system that leverages proprietary AI harnesses powered by multiple leading frontier AI models. Our goal with this research is twofold: (1) contribute to improving the security of the software supply chain; and (2) ensure our customers are protected from vulnerabilities in the AI era.

In just two months, NOVA analyzed 3,915 open-source software (OSS) projects and uncovered 14,090 confirmed vulnerabilities, 99.4% of which were previously unreported and 40% of them designated as high or critical severity. Nearly every frontier and open-weight model evaluated could find real vulnerabilities, with the strongest results coming from an ensemble of models, specialized security tools, and automated harnesses working together. These initial results illustrate just how dramatic the impact of AI is on the vulnerability landscape.

In response to these significant results, we are actively partnering with open-source maintainers and clearinghouses such as Lightwell and Akrites to responsibly disclose these vulnerabilities and ensure they are patched upstream quickly and securely. Securing the broader open-source supply chain ultimately protects the entire software ecosystem and benefits everyone.

Our experience with NOVA highlights a clear structural change: the patch window has collapsed. When vulnerability discovery accelerates, the time between disclosure and potential exploitation shrinks dramatically. And attackers need not have access to the latest frontier AI model to reverse engineer patches and develop exploits automatically.

This new reality also makes virtual patching an even more important defense strategy in the AI era, and is a key driving force behind our recently announced Frontier Virtual Patching, the next evolution in network vulnerability protection. Frontier Virtual Patching is designed to operate at the speed of AI to keep pace with the new normal of higher rates of vulnerability discovery and compressed attack windows. By harnessing frontier AI to discover unknown vulnerabilities, and deploying protections in hours, we are collapsing the exposure window from the industry-average 55 days it takes to deploy a traditional patch down into a near-zero window of exposure. Our new “vaulted protection” technology enables us to deliver protections ahead of patch availability in a safe and responsible manner.

In addition to these protections available with our network security platform, we recommend that organizations deploy relevant best practices, including vulnerability management, zero-trust network architecture, software supply chain security, and other attack surface reduction best practices.

NOVA: Fully Automated Novel Vulnerability Discovery and Validation

Our vulnerability research team built a fully autonomous vulnerability discovery system requiring no human in the loop until final review. We call this the Network and Open-Source Vulnerability Analyzer (NOVA). For each project we analyzed, NOVA performed the following functions:

  • Review of the project history
  • Reading the source code
  • Identification of vulnerability candidates
  • Creation of a working proof of concept (PoC)
  • Deterministic validation of whether the vulnerability is triggered in a clean environment
  • Generation of a patch candidate
  • Production of a disclosure report

The pipeline has scanned 3,915 projects across six major software ecosystems. It produced findings in every ecosystem we tested, for a total of 14,090 novel vulnerabilities.

That scale changes how defenders should think about vulnerability discovery. Large-scale open-source vulnerability automation is not new: OSS-Fuzz launched in 2016 and, by August 2023, had helped identify and fix more than 10,000 vulnerabilities across 1,000 projects. It shows the step-change frontier AI enables: Work that once accumulated across years of specialized automation can now begin to happen across thousands of targets in a single autonomous campaign.

Table 1 shows that the findings are distributed across very different software ecosystems:

  • The PHP, Java/JVM and C/C++ rows include many larger web platforms, enterprise servers and system software projects, which produced dense clusters of findings per project
  • The Go and JavaScript/TypeScript rows include broad package-ecosystem scans, where each individual package often produced fewer findings but could still affect many downstream products

In other words, both large applications and small dependencies matter, but for different reasons. One matters because of direct exposed attack surface and the other because of supply-chain reach.

 
Language or ecosystem Projects Findings
Go 1,636 3,281
JavaScript/TypeScript 2,197 2,836
PHP 17 2,740
C/C++ 39 1,925
Java/JVM 14 1,784
Ruby/Python/Lua/Perl/Other 12 1,524
Total 3,915 14,090

Table 1. Autonomous pipeline findings by language or ecosystem.

The projects we analyzed also varied widely in size. Figure 1 shows that most projects we studied were under 10,000 lines of code, but the scan also included larger applications and services. That matters because AI-driven vulnerability discovery is not limited to small demonstrations. The pipeline operated across projects ranging from small packages with hundreds of lines of code to large codebases with more than 1 million lines.

Figure 1. The size distribution chart shows the share of scanned projects by lines of code.

We then checked all 14,090 findings against the public record. Only 85 matched vulnerabilities already present in public sources, most published 2–8 weeks after our discovery. This small overlap suggests that many organizations are now independently scanning open-source software. It is reasonable to assume threat actors are doing the same. As AI-assisted discovery becomes easier to run, maintainers will face a growing volume of vulnerability reports that vary widely in quality, urgency and exploitability.

What Kinds of Vulnerabilities AI Found

Automation to find vulnerabilities is not a new concept. What we see from the NOVA research, however, goes much deeper than previous automations.

Previous Impact of Automated Vulnerability Research

Considering memory corruption helps shed light on how frontier AI changes vulnerability research. Memory corruption is one of the areas where vulnerability research was already highly automated before generative AI. Researchers have spent years using fuzzers to prove that machines can find crash-oriented bugs at scale. This is especially true in relation to memory corruption, null dereferences and integer overflows.

While our system found many vulnerabilities in this category, it was not simply covering the same ground as previous automations. The type of vulnerabilities found with previous automations represent only a small fraction of the vulnerabilities found by NOVA. In the taxonomy we used for our frontier AI findings, the closest category, memory and calculation issues represented 557 findings or only 4.0% of the total. Even if resource-management and denial-of-service issues are added, these fuzzing-friendly categories total 1,121 findings — still only 8.0%.

The Other 92%

The vast majority of the analysis we did using frontier AI models — 92% — uncovered vulnerabilities of different types. When we look at the remainder we see that the AI harness was especially effective at identifying semantic and logic flaws such as:

  • Access control and authorization
  • Path traversal
  • Code injection
  • Prototype pollution
  • Server-side request forgery (SSRF)

Patterns of Vulnerabilities by Ecosystem

We found that different ecosystems presented different types of risks. We broke down vulnerability types in relation to the ecosystems studied in Figure 2. (The figure reports percentages within each language, not raw finding volume, so it should be read as a vulnerability fingerprint for each ecosystem.)

The clearest pattern is that the vulnerability mix follows how software is commonly built:

  • C and C++'s issues are dominated by memory-safety and resource-management flaws, the cost of manual memory management
  • JavaScript and TypeScript's issues concentrate in code injection, prototype pollution and SSRF, a byproduct of dynamic, package-heavy code
  • Go's issues skew toward path traversal and SSRF, reflecting its common role in file-serving and proxy services
  • PHP, Java and Python's issues are dominated by access-control and authorization flaws, the classic weak point of applications juggling many user roles
Figure 2. Vulnerability type by language shows that each ecosystem has a distinct weakness profile.

Severity of the Vulnerabilities Found

A significant number of the 14,005 new vulnerabilities we found are considered severe.

The Common Vulnerability Scoring System (CVSS), is a standard way to estimate vulnerability severity. Under CVSS 3.1, 4,030 findings (28.6%) scored High or Critical. Under CVSS 4.0, 5,600 findings (39.7%) scored High or Critical. Figure 3 shows the CVSS 4.0 distribution.

Far from producing a long tail of low-impact issues, NOVA identified a substantial amount of vulnerabilities with the potential for real-world impact.

Figure 3. CVSS 4.0 score distribution shows the share of findings by severity range.

Supply-Chain Reach

A vulnerability in a standalone service only affects the systems that run it. In contrast, a vulnerability in a low-level package can travel much farther, reaching every application that depends on it.

In the package ecosystems we studied, the pipeline produced 5,421 supply-chain findings:

  • 1,280 flaws in dependency packages
  • 4,141 downstream exposures where an application could reach a vulnerable dependency through its own code

These were not based only on static import checks or dependency graphs. For 2,776 of the downstream exposures, the pipeline validated exploitability from the downstream application with a working PoC.

Figure 4 shows why dependency reach matters. Roughly 1,300 dependency-package flaws created more than 4,000 downstream exposures. For defenders, prioritization cannot depend only on project size or direct deployment. It must also account for where the code is used.

Figure 4. Supply-chain area of impact shows how a small number of dependency-package flaws can create many downstream exposures.

How the Autonomous Research Harness Works

The methodology of AI-driven vulnerability research has changed dramatically in the last two years. In 2024, our AI-assisted BOLA research still required a carefully designed workflow for a narrow vulnerability class, with human researchers defining much of the strategy in advance. In 2026, agentic AI can:

  • Start from a broader goal
  • Inspect a codebase
  • Decide where to look
  • Build a PoC
  • Iterate when validation fails

That shift makes AI-driven vulnerability research faster, easier to scale and more useful across many vulnerability classes.

That shift does not remove the need for engineering around the model. It makes harness design more important. A single model asked to find vulnerabilities will produce too much noise and still miss important parts of the codebase or entire vulnerability classes.

The harness gives the agent a structured workflow:

  • Understand the target's architecture
  • Identify where outside input enters
  • Locate dangerous operations
  • Determine which paths connect the two

This turns a broad audit into a set of specific review obligations, such as whether user-controlled data can reach a file operation, an outbound network request, a database query or a command execution point.

The harness also keeps the work accountable. It records paths that were reviewed, paths that were ruled out and candidates that need proof.

Candidate findings are not accepted just because a model reports them. They are passed to independent validation and replayed in a clean environment. They are then sent through patch review and protection generation. This structure lets agents move quickly while still producing evidence that humans, maintainers and defensive systems can act on.

Figure 5 shows the high-level architecture. Project prioritization decides what to analyze first. Research agents and specialized analysis tools work together to map the code and find candidate paths. Independent validation confirms whether a candidate is real. From there, the pipeline produces patch candidates, disclosure material and virtual patch candidates for defensive coverage.

Figure 5. Autonomous vulnerability research harness architecture shows the major stages from selecting which projects to analyze to validation and protection generation.

Figure 6 expands that architecture into the agentic loop that runs for each project. A scoping agent selects the software repository and scan strategy. Discovery agents review the codebase in parallel and generate ranked candidates. Proof-of-concept and verification agents turn strong candidates into working tests and replay them in isolated environments. Gatekeeper agents then score, verify and decide whether to publish, archive or send the project back into the next wave of review.

This is a multi-agent and multi-model design. Code reviewers, exploit developers, adversarial triagers, replay judges and fix-verification agents each perform different jobs, and different models can be selected for the tasks where they are strongest. Discovery is especially ensemble-heavy because it is largely static analysis: multiple models reviewing the same project can cover different code paths and vulnerability classes, which is why the next section examines model complementarity in more detail.

The loop is built to reduce false positives and to operate safely at scale. Candidate findings go through strict validation, isolated replay and continuous adversarial review before they are treated as verified. The pipeline also runs behind multiple containment layers, including containers, gVisor-style sandboxing, virtual machines, network egress controls and least-privilege permissions. That isolation matters because the system is designed to scan hundreds of projects concurrently while handling untrusted code, generated exploits and sensitive artifacts.

Figure 6. Agentic autonomous loop for vulnerability scanning.

Why We Use a Multi-Model Ensemble

We also found that a multi-model ensemble is essential. In a controlled evaluation across 14 projects, different models often found different vulnerabilities in the same codebase.

Figure 7 shows this complementary behavior. A higher score means the models found more distinct sets of issues, while a lower score means they tended to converge on the same findings.

Figure 7. Model complementarity by project shows how often different models found different vulnerabilities on the same software.

The trend is clear: Small packages usually leave less room for disagreement, while larger applications, services and libraries create more opportunity for models to specialize and uncover different parts of the attack surface.

Figure 8 reinforces the same conclusion. In the evaluation, every model contributed a large set of findings that no other model found. The highest-volume model found 235 confirmed vulnerabilities, including 185 unique to that model in this experiment. Even the lowest-volume model found 139 confirmed issues, including 93 that no other model found. This is why we view the ensemble as a defensive requirement rather than an optimization.

Figure 8. Unique findings by model shows that every evaluated model contributed findings no other model found.

Beating Attackers With Virtual Patching and Industry-wide Collaboration

Our approach to addressing the impact of AI on the vulnerability landscape is to pair earlier discovery with faster protection. Finding vulnerabilities before attackers do is only useful if that intelligence can be turned into customer defenses and coordinated remediation quickly.

Our partnership with leading vulnerability clearinghouses enables us to quickly and proactively report vulnerabilities to software maintainers to ensure security bugs are properly remediated upstream.

As vulnerabilities are patched and disclosed, protections are added to our Advanced Threat Prevention (ATP) service on our next-generation firewall and SASE products to protect customers. With Advanced Threat Prevention, defenders can deploy network-level protections that detect or block exploit attempts before they reach vulnerable software. This is especially important for open-source components embedded across many products, as well as commercial software, operational technology, medical devices and other environments where patching can be slow, risky or constrained by availability requirements.

And with our new Frontier Virtual Patching capability, protections for newly discovered vulnerabilities can be delivered within hours, safely protecting customers before official patches are available.

This approach aligns with our collaboration with Project Lightwell, which combines our rapid network-level protection with software remediation to help organizations reduce exposure to emerging threats.

In addition to our ongoing research in proactive vulnerability discovery, we continue to forge industry partnerships across the enterprise software and OT vendor landscape to accelerate vulnerability disclosure, remediation and customer protection without overwhelming maintainers or enterprise patching teams.

The Path Forward

The vulnerability surge is already underway. AI can compress months or years of manual review into days, and a finding is no longer just a written report. An autonomous agent can often read code, test a hypothesis, generate a working PoC and validate the result in the same workflow.

That changes the economics of both offense and defense, and it narrows the window organizations have traditionally relied on between vulnerability discovery, patch development, patch testing and production deployment.

At the same time, expert judgment remains irreplaceable. Models are powerful at scale, but top human researchers still lead in creative synthesis, complex exploit chaining and unusual intuition. The strongest defensive posture combines:

  • Autonomous systems for speed and breadth
  • Human experts for judgment and prioritization
  • Innovative approaches to mitigation

The next phase of security will be defined not only by who can find vulnerabilities first, but by who can convert early discovery into protection fastest. As Palo Alto Networks CEO Nikesh Arora has emphasized, this is a moment for cybersecurity providers to step up and shift the advantage back to defenders.

Palo Alto Networks is continuing to invest in AI-native vulnerability research, responsible disclosure, partner collaboration and mitigation capabilities so customers can reduce exposure before attackers can exploit newly discovered flaws.

The Unit 42 AI Security Assessment can help empower safe AI use and development.

Read more about how Palo Alto Networks is utilizing Frontier AI.

Additional Resources

Almost Half of Malware Samples Communicate Direct to IP

Executive Summary

Malware samples often bypass DNS entirely, communicating directly to IP addresses instead. Our analysis of 4 million dynamic analysis reports indicates that almost half (45.32%) of malware samples with any command-and-control (C2) activity made at least one direct-to-IP (D2IP) address connection. Measured as a fraction of all C2 connection attempts, D2IP traffic accounts for 23.17% of the total.

A wide variety of threats — including ransomware droppers, peer-to-peer (P2P) botnets and supply chain risks — communicate directly with hard-coded IP addresses, bypassing DNS entirely and evading DNS-based defenses altogether.

This article introduces zero trust IP (ZT-IP), which is a network-level enforcement approach that applies zero trust principles to IP-based traffic. The enforcement approach verifies whether outbound connection destinations were ever sanctioned by a DNS response. We validate this approach against real-world network traffic and samples, demonstrating how ZT-IP successfully surfaces threats including:

  • Phorpiex ransomware droppers connecting directly to C2 IP addresses
  • A persistent data exfiltration campaign using a custom obfuscated HTTP GET request
  • Mozi P2P botnet payloads delivered to internet-of-things (IoT) devices without DNS

Palo Alto Networks customers are better protected from the threats discussed here through the following products and services:

If you think you might have been compromised or have an urgent matter, contact the Unit 42 Incident Response team.

Related Unit 42 Topics Malware, DNS, Ransomware

The DNS Visibility Gap

DNS security has become a cornerstone of enterprise threat defense. By monitoring and filtering DNS queries, security teams can block malware from reaching known-bad domains and use sinkholing to disrupt C2 communications before they establish a foothold. This approach is effective when malware plays by the rules of relying on DNS for domain resolution.

However, many types of malware do not. For example, a backdoor malware sample made no DNS query at all before initiating a WebSocket connection directly to an IP address. Disassembly via Ghidra revealed why. The destination address wss://154.92.19[.]71:39989 was hard coded into the binary as a Unicode string.

This is not an isolated edge case. Without the DNS resolution step in network communications, malware is invisible to DNS-based security controls, protective DNS sinkholing and DNS anomaly detection systems. The connection simply appears as raw IP traffic with no prior context.

Prevalence of IP Traffic in Malware

We analyzed over 4 million Advanced WildFire dynamic analysis reports for a 30-day period to quantify how prevalent this behavior truly is. We filtered out connections to common legitimate services, internal addresses and DNS resolvers. After doing that, we found that 20.11% of malware samples exhibited C2 activity.

The contrast with benign samples is striking. Only 1% of benign samples establish connections to untrusted IP addresses after applying the same filtering criteria. Those that do average just 1.6 such connections per sample. This is a small fraction of the activity observed in malware.

Among malware with C2 connections, TCP dominates (94.43% prevalence, averaging 4.17 unique C2 IP addresses per sample). UDP is present in 17.50% of cases but contacts far more IP addresses per sample (average 13.79%), consistent with scanning and P2P mesh behavior.

Most critically for DNS-based defenses, 45.32% of malware samples with any C2 activity made at least one direct-to-IP (D2IP) address connection — a raw IP contact with no preceding DNS query. Even after excluding bulk port-scanning behavior, the figure remains 41.97%.

Measured as a fraction of all C2 connection attempts, D2IP traffic accounts for 23.17% of the total.

Threats Discovered Through ZT-IP Analysis

By searching for D2IP connections (ZT-IP analysis), we were able to uncover multiple threats.

Phorpiex Ransomware Dropper

Among traffic flagged by ZT-IP, we observed the following suspicious HTTP GET request toward the destination IP address at 178.16.54[.]109 as shown below in Figure 1.

A screenshot of an HTTP GET request. It includes a user-agent string indicating Mozilla/5.0 with Windows NT 10.0 and Chrome/128.0.0.0, followed by a host IP address.
Figure 1. Suspicious HTTP GET request to 178.16.54[.]109.
The observed request exhibits multiple variations, including sequential numeric GET paths (e.g., /1 through /6) and specific file downloads (e.g., /sex/k/n.txt, /new.php). 

We found that these requests correlate with several malware samples (e.g., the binary retrieved from hxxp[:]//178.16.54[.]109/st.exe) associated with Phorpiex (aka Trik), a long-running malware family used primarily as a dropper and spam botnet. Figure 2 illustrates the many malicious samples hosted on 178.16.54[.]109 in a flow chart of this activity.

A network diagram showing interactions between nodes. A central node connects with multiple "FILE" nodes and a flag icon. Arrows indicate paths labeled "download" and "path_of." Another section features nodes connected by "load" and "download" pathways, ending in "FILE" nodes.
Figure 2. The IP address 178.16.54[.]109 is used to deliver multiple threats.
This traffic aligns with Phorpiex's staged payload delivery mechanism. This mechanism is characterized by initially fetching configuration, and then retrieving additional malicious components such as a ransomware payload.

A key indicator of malicious D2IP activity was the absence of DNS queries preceding the connections to 178.16.54[.]109. Since the request bodies appear benign, they often bypass standard heuristic detectors.

The \GET Exfiltration Campaign

One of the most distinctive findings was a persistent campaign using a non-standard HTTP request we call the \GET protocol. This is an obfuscated request format designed to evade security detection while exfiltrating data.

Unlike standard HTTP requests, these requests begin with \GET (backslash-GET) rather than standard GET followed by a backslash. The \GET is followed by a long encoded string ranging from 250–666 characters, as shown in Figure 3.

Red text overlaid on a white background, resembling network request or data transmission code, displaying a long string of alphanumeric characters typical in digital communication or coding.
Figure 3. \GET protocol request to 18.228.188[.]56.
Statistical analysis of the encoded payloads reveals a structured encoding scheme:

  • The first and last four characters: alphanumeric (0-9 and A-Z), evenly distributed
  • Middle characters: hex-like (0-9 and A-F), evenly distributed
  • The payload length ranges from 250–666 characters

Disassembly of associated malware samples (e.g., cc43cdbe8eb9874f55fffbe23b560b673eb9f31fb9a953926bba29464fd2dd07) confirms there are no hex-format IP addresses hard coded in the binaries. Instead, multiple hard-coded strings follow the same encoding rule, consistent with the payload lengths observed.

The C2 infrastructure is hosted on public cloud infrastructure in Brazil. Samples that point to it were found impacting high-value sectors including government, airlines and universities. Because the threat leverages shared cloud resources, simple IP-based blocking is ineffective.

Furthermore, the malware employs a notable operational security measure. It rotates both its destination port and IP address on a regular schedule, which evades static IP-blocking defenses.

SectopRAT

We observed two separate attackers operating infrastructure at 87.120.107[.]33 and 194.76.227[.]94, respectively, deploying the same malware family of SectopRAT against educational institutions. Both actors leverage SectopRAT's in-browser proxy capability to silently mirror all victim browser traffic to attacker-controlled servers in real time.

The proxy operates via two endpoints. The first, /churl (shown in Figure 4), relays every URL the victim visits, including:

  • Authenticated session pages
  • Single sign-on (SSO) redirects
  • Learning management system content
A screenshot of an HTTP GET request. It includes a URL with a masked query parameter and header information such as an IP address, user agent details featuring Windows NT 10.0, AppleWebKit, and Chrome.
Figure 4. HTTP GET request using /churl.

The second, /fsave (shown in Figure 5), exfiltrates form fields including usernames and plaintext passwords at the moment of submission.

A redacted URL string with hidden sections, displaying parameters and partially visible encoded values.
Figure 5. HTTP GET request using /fsave.

An identifier (pcid/clid) in every request allows each actor to track individual compromised devices across sessions. Both attackers’ campaigns communicate entirely over D2IP connections, bypassing DNS-based visibility layers entirely.

IoT Botnets

IoT malware families often exploit network vulnerabilities to self-propagate, relying on D2IP communication that makes them invisible to DNS-based security layers.

Mozi is a Mirai-derived P2P botnet known for targeting IoT devices with MIPS, ARM and x86 architectures. We observed its characteristic exploitation payload embedded directly in HTTP requests. Figure 6 shows an example of the exploitation payload for Mozi.

A terminal window displaying a command sequence that includes wget, a URL, and references to Mozi malware.
Figure 6. Example of an IoT exploitation payload embedded in an HTTP request.

In ASCII text, this translates to the three commands shown in Figure 7.

A screenshot of a terminal showing commands for downloading, setting permissions, and executing a payload file, specifically for D-LINK/MIPS devices.
Figure 7. Commands from the IoT exploitation, listed in sequential order.

The Mozi campaign showed highly distributed patterns with thousands of source and destination IP addresses, consistent with the Mozi botnet's P2P mesh structure. However, because this IoT malware propagates by making D2IP connections without DNS resolution, blocking this type of connection can effectively prevent it from spreading within sensitive environments.

Similarly, we identified a Mirai variant that we named Boatnet, which was distributed from the IP address 2.26.98[.]67.

Boatnet demonstrates thorough platform targeting, covering at least 14 different architectures. Beyond standard IoT architectures, Boatnet includes binaries for m68k (Motorola 68000). This processor family is common in legacy industrial control systems (ICS) and aging embedded hardware, which current malware typically overlooks. Unlike generic variants, Boatnet fragments its ARM coverage into three discrete sub-variants (ARM5, ARM6 and ARM7) to ensure optimal performance across different hardware generations.

Binaries are hosted under a /hiddenbin/ directory, as noted in Figure 8, showing a deliberate attempt to mimic legitimate system paths and evade basic file-path detection.

A screenshot of a command line interface displaying an HTTP GET request. It includes headers such as Range, Accept, Host, and Connection.
Figure 8. HTTP GET request showing a Boatnet binary under a /hiddenbin/ directory.

We observed infected devices fetching payloads with a User-Agent string of Wget/1.13.4 (released in 2012). This serves as a significant fingerprint, suggesting the botnet is specifically harvesting older, unpatched hardware. Boatnet also demonstrates more operational maturity than “vanilla” Mirai through its use of HTTP Range headers.

Conclusion

D2IP communication from malware won’t be detected by approaches that focus specifically on securing requests at the time a hostname is resolved. This is illustrated by threats like the Phorpiex ransomware dropper, the obfuscated \GET exfiltration campaign and the P2P Mozi botnet.

ZT-IP closes this critical gap by applying strict zero trust principles to outbound D2IP connections, ensuring only DNS-sanctioned traffic is permitted. It is a necessary network-level enforcement mechanism to block what DNS-based detection cannot see.

Palo Alto Networks customers are better protected from the threats discussed here through the following products and services:

  • Advanced WildFire machine-learning models and analysis techniques have been reviewed and updated in light of the IoCs shared in this research.
  • Advanced URL Filtering and Advanced DNS Security identify known domains and URLs associated with this activity as malicious.
  • Cortex XDR and XSIAM help to prevent the threats described in this article, by employing the Malware Prevention Engine. This approach combines several layers of protection, including Advanced WildFire, Behavioral Threat Protection and the Local Analysis module, to prevent both known and unknown malware from causing harm to endpoints.

If you think you may have been compromised or have an urgent matter, get in touch with the Unit 42 Incident Response team or call:

  • North America Toll-Free: 866.486.4842 (866.4.UNIT42)
  • EMEA: +31.20.299.3130
  • APAC: +65.6983.8730
  • Japan: +81.50.1790.0200

Palo Alto Networks has shared these findings with our fellow Cyber Threat Alliance (CTA) members. CTA members use this intelligence to rapidly deploy protections to their customers and to systematically disrupt malicious cyber actors. Learn more about the Cyber Threat Alliance.

Indicators of Compromise

Malicious destination IP addresses

  • 2.26.98[.]67
  • 62.60.179[.]230
  • 87.120.107[.]33
  • 91.92.243[.]29
  • 103.245.236[.]146
  • 178.16.54[.]31
  • 178.16.54[.]109
  • 194.76.227[.]94
  • 206.189.229[.]43

Malware samples

  • 01a96eeafb72042b3f69afd21b4c9155dbfe7f97ab3dca392972ad531a075ac2
  • 9639f7ebc6a6d69d7bf5b8bc869e7783a1406088f192868624ad8919e9bfd1d4
  • bf24277400cc453d530e4277d3bd24e96c5e409adef6970518bdc59205aa0241
  • e310476c41ae4f6e3c4ed9bb88303ee6e5e1455bd7afe51cf48965ea7599e6e5
  • e3513922666c202c1ae5c06eea277ba10477868d6d89ce2819f4f8ff9070bc85
  • e5715e6611ef6bcb233f5d2098510dab3db408abbb728b00e1821bb255829373

Additional Resources

Appendix: What Is ZT-IP?

ZT-IP, which we have also called No-DNS or D2IP detection, extends the zero trust security model to IP-based traffic. This ensures that network services only connect to IP addresses previously resolved and approved by a trusted DNS service. Outbound connections to an IP address without a prior, valid DNS query are flagged as suspicious and blocked.

In Figure 9, ZT-IP secures the network and firewall level through a simple enforcement mechanism:

A network diagram illustrating packet flow with DNS filtering. The sequence includes a DNS query to example.com, a DNS response, and verification of IP by the DNS resolver, which is allowed. Another packet with destination IP is not approved and blocked.
Figure 9. The security model of ZT-IP.

The mechanism:

  • Tracking legitimate IP addresses: The system monitors all valid DNS responses to learn which IP addresses are approved for outbound connections
  • Building a trust list: These approved IP addresses are tracked in a secure list, along with a time limit for how long they remain valid
  • Enforcement: Whenever a device attempts an outbound connection to an IP address, the firewall checks this list
  • Blocking bypass attempts: The connection is only allowed if the destination IP address was recently approved by DNS. If an IP address is not on the list or its approved time limit has expired, the connection is immediately flagged as a potentialNo-DNS threat and blocked.

Because some legitimate network protocols (such as DNS, Neighbor Discovery Protocol, VoIP, P2P and certain IoT services) connect directly to IP addresses by design, ZT-IP incorporates mechanisms to prevent false positives. It uses allowlists that exempt private intranet IP addresses, specific trusted network protocols and well-known benign public IP addresses from these strict DNS checks.

ZT-IP delivers the following key advantages for network defense:

  • Stops patient zero attacks: It proactively blocks unknown C2 callbacks and malware attempting to phone home using hard-coded IP addresses
  • Secures shared infrastructure: It differentiates between legitimate traffic and malicious connections targeting the same shared cloud hosting environments, securely blocking the malicious traffic because it lacks the necessary DNS context
  • Network-level protection: By operating at the firewall level, ZT-IP secures environments like IoT and operational technology (OT) without requiring endpoint agents to be installed on every single device

Pass the Passkey: A Novel Attack Surface in Passwordless Authentication

Executive Summary

This article analyzes new attack classes against passwordless authentication, focusing on Google’s synced passkey ecosystem and the Cloud Authenticator used by desktop clients. The attacks demonstrate how malware on a compromised endpoint can misuse onboarding, recovery and device trust workflows to take over passkey-protected accounts. We show how an attacker can authenticate without user interaction, bypass user verification requirements and extract all synced passkey private keys.

After decades of breaches and billions in losses, the attack vectors that defined the era of passwords and shared secrets are finally starting to fade. Passkeys replace passwords and traditional multi-factor authentication (MFA) with public-key cryptography, decreasing entire classes of attacks that have dominated the threat landscape for years.

With no shared secret to steal, reuse or phish, many of an attacker’s most reliable tools are becoming obsolete. This represents a significant disruption for the credential theft market.

Attackers, however, persist. They evolve, and defenders must prepare for a new generation of attacks. As passkeys become widely adopted and scale to billions of accounts, defenders must prepare for new attack surfaces, some of which we disclose in our research.

This article is part 3 in our series examining passkey adoption from a security perspective. If you haven’t read the previous parts, we recommend starting here:

Part 1: The Art of the Invisible Key – Passkey Global Breakthrough

Part 2: Google Authenticator: The Hidden Mechanisms of Passwordless Authentication

Palo Alto Networks customers are better protected from this new attack vector through the following products and services:

If you think you might have been compromised or have an urgent matter, contact the Unit 42 Incident Response team.

Related Unit 42 Topics Google Authenticator, Cloud, Malware

Setting the Stage

Google’s synced passkey implementation is particularly instructive due to its scale and how it creates a higher standard for private key protection in two critical ways:

  • Private keys are generated and used within a cloud-enclave isolation environment
  • Hardware-backed, client-device-bound keys control access to cloud-based cryptographic operations, attesting to the user’s presence on a trusted device

This article builds on the architectural analysis from Part 1 and Part 2 of our previous articles in this series. We now shift from how passkeys are built and deployed to how attackers can misuse them.

We present three novel attacks that enable account takeover of passkey-protected accounts. Each attack challenges a different core assumption of passkey authentication security. When a client authenticates with a passkey, the following is expected:

  • Users provide explicit consent on the device to verify user presence
  • For MFA, users must also unlock the device to verify biometric (i.e., something you are) or knowledge-based (i.e., something you know) authentication factors
  • Passkey private keys cannot be shared or copied

The Google documentation reflects these core assumptions, describing the passkey login process as a secure alternative to passwords (as shown in Figure 1).

A screenshot of Google Account Help page explaining passkeys. It highlights that passkeys are more secure than passwords as they cannot be shared, copied, or accidentally given away. Using a passkey to sign in ensures access to your device and its unlocking.
Figure 1. Google documentation describes passkeys as requiring device access, device unlock, and non-shareable credentials.

Challenging these expectations is a category of attacks we've nicknamed Pass-ta-key. This playful, layered name blends the word passkey and the phrase “pass the key,” with a light nod to the concept of plate of pasta, illustrating how tangled this key implementation can get.

These attacks each expose a different weakness in practice:

  • Pass-ta-key attack: An attacker takes over an account protected by a Google-synced passkey using malware running on the victim’s device, without requiring privilege escalation, device unlock or user interaction
  • Silver Pass-ta-key attack: An attacker deceives the Google Cloud Authenticator into believing the victim has unlocked the device with biometrics, leading to full account takeover without using the victim’s device during authentication
  • Golden Pass-ta-key attack: An attacker can extract all synced passkeys in a form that allows them to be shared or sold on the credential black market

These attacks demonstrate how malware can exploit synced passkeys, even when providers add hardware-backed protections to secure credentials within the cloud authenticator.

Disclaimer: This research involved responsible and ethical security analysis. We responsibly disclosed all presented exploits. The cloud authenticator model is used by various passkey providers across multiple browsers and platforms. This work, however, focuses on Google Password Manager in Chrome on Windows, specifically on devices equipped with a Trusted Platform Module (TPM). All presented attacks rely on malware already existing on the victim’s device during the initial stage.

Stage Zero Reconnaissance

Before attempting any of the attacks, the attacker needs visibility into how passkeys are used within the victim’s account. On a compromised endpoint, this visibility is readily available.

Chrome locally stores synced passkey data as part of its synchronization process. On Windows, Chrome persists this data as proto-encoded WebauthnCredentialSpecifics records, which represent synced WebAuthn credentials, within its sync database:

%LocalAppData%\Google\Chrome\User Data\<Profile>\Sync Data\LevelDB

Accessing these records does not require elevated privileges. The records allow an attacker to enumerate where the victim uses passkeys, along with associated usernames, credential identifiers and the encrypted private key.

After identifying a service where the victim uses passkeys, an attacker can attempt to authenticate as the victim.

The primary challenge for attackers is bypassing the protection of the private key, which is used to sign authentication challenges. This private key is secured by a master key. While an encrypted version of this master key is stored on each client device, only the cloud authenticator can decrypt it.

Despite this security, the architecture remains vulnerable to exploitation. The following sections detail methods attackers could use to exploit system mechanisms, authenticate as the victim, and compromise passkey-secured accounts.

Device Identity Impersonation: The Pass-Ta-Key Attack

Our first attack is the most straightforward approach, which involves taking over a passkey-protected account by mimicking the behavior of Google Password Manager and Chrome during legitimate authentication. In a normal flow, Chrome sends a request to the cloud authenticator, signed using the device’s hardware-backed keys.

Unlike a legitimate user flow that requires user interaction and device unlock, this attack shows how malware can obtain the required signature silently, without user consent, biometrics, device unlock or elevated privileges.

To understand this, we focus on Chrome’s device identity key, which represents client device possession to the cloud authenticator. As previously explained (part 2: Login with Synced Passkey and Device Key Signature), generating the required assertion involves signing data sent to the cloud authenticator using one of the device’s hardware-backed keys. This is the identity key or the user verification key (UV key).

Although both keys are hardware-bound, they are not accessed in the same way. For the identity key, Chrome creates the conditions that allow it to request a signature while running as a user without elevated privileges and without triggering device unlock protections.

On Windows, Chrome calls the NcryptCreatePersistedKey function without assigning a key name, making the TPM-backed key ephemeral and preventing it from being persisted to disk. Instead of storing the private key within the TPM, Chrome calls NcryptExportKey to export the key as an NCRYPT_OPAQUE_KEY_BLOB, which instructs the TPM to encrypt the private key using a TPM-resident key. The resulting blob is stored as wrapped_identity_private_key in the passkey_enclave_state file, making it available for future use on the same physical TPM.

Malware can extract this wrapped_identity_private_key from disk or Chrome’s memory. It can then invoke cryptographic operations using standard Windows Cryptography API: Next Generation (CNG) APIs (NCryptOpenStorageProvider, NCryptImportKey, NCryptSignHash), without elevated privileges, mimicking Chrome’s own actions.

Having established that malware can generate the required signature, we now detail the full Pass-ta-key attack flow (as shown in Figure 2). This flow allows a remote attacker with unprivileged malware on the victim’s device to authenticate as the victim.

A flowchart illustrating a security process involving four entities: Relying Party, Attacker, Infected Victim, and Cloud Authenticator. The chart shows interactions like "Log in with passkey," "Noise NX handshake," and "Identity Key Signature". The process moves horizontally with lines and arrows indicating the flow of steps.
Figure 2. Pass-ta-key attack flow.

The attack flow consists of the following phases:

  1. After collecting the victim’s synced passkey records (Stage Zero: Reconnaissance), the attacker selects a targeted account and initiates a passkey login
  2. The relying party responds with a fresh authentication challenge
  3. The attacker initiates a WebSocket handshake with the Google Cloud Authenticator
  4. Using the hash of that handshake, the attacker interacts with the victim’s TPM and uses the extracted identity key to sign the handshake hash together with the assertion request
  5. The attacker sends an assertion request to the cloud authenticator, including the identity key signature
  6. From the cloud authenticator’s perspective, the request appears to be a trusted device making a valid request, so it produces a valid assertion response
  7. This assertion is then forwarded to the relying party, completing authentication and giving the attacker full control of the victim’s account

Video 1 demonstrates the attack as it would unfold in practice. (We have blurred the names of the relying parties to avoid naming.)

Video 1. Example of a successful Pass-ta-key attack.

As the video begins, the screen splits between the attacker's terminal and the victim's desktop. The video first shows the attacker establishing a command-and-control (C2) listener, passively waiting for victims to connect.

On the victim’s machine, the Trojan executes as a standard user, without elevated privileges. Once active, it collects the victim’s encrypted, synced passkeys and sends them back to the attacker’s C2 server. This provides visibility into the victim’s available passkeys.

The attacker selects a target, such as a messaging application account protected by a passkey, navigates to the application and chooses Login with passkey. The relying party then responds with a fresh authentication challenge.

Next, the attacker initiates communication with the Google Cloud Authenticator. After completing the handshake, the attacker triggers the Trojan to use the device’s identity key to sign the required data. Specifically, it uses the hash of the handshake combined with the hash of the serialized assertion request.

The attacker then attaches this signature to the request sent to the cloud authenticator. The cloud authenticator returns the requested assertion. The attacker forwards this valid assertion to the relying party and successfully logs in as the victim.

UV Flag: When MFA Depends on a Single Bit

The Pass-ta-key attack is effective when the relying party does not strictly require user verification. Many relying parties configure WebAuthn’s userVerification parameter as preferred rather than required to support diverse devices and user experiences, making them susceptible to this attack.

When a relying party explicitly requires user verification, one would expect the cloud authenticator to reject requests that are not signed using a key gated by PIN or biometric verification. Surprisingly, this is not the case.

The cloud authenticator returns a valid assertion regardless of whether the request was signed using the identity key or the UV key. The difference comes down to a single bit in the authenticator data, the User Verified (UV) flag.

When the assertion is signed using the UV key, this flag is set to 1. When it is signed using the identity key, the flag remains 0.

While the Pass-ta-key attack produces cryptographically valid assertions matching the relying party’s public key, our testing shows attacks typically fail when user verification is required because the UV flag remains unset. For example, when attempting the attack against a passkey-protected GitHub account, the attacker receives an error message, as shown in Figure 3.

A screenshot of a GitHub login screen with a circular logo above the text "Sign in to GitHub." A red error message states, "Unable to sign in with your passkey. Please sign in with your password."
Figure 3. Message from GitHub passkey login failure.

Although authentication is typically rejected when user verification is required, this behavior is not always consistently enforced across relying parties. In our testing, we identified relying parties that accepted authentication because they did not properly validate the UV flag. This allowed the attack to succeed despite the absence of user verification.

The lack of validation effectively reduces the authentication process to a single factor. By compromising only the device identity key, the attacker is able to authenticate successfully and take over the account, even though MFA is required.

We reported this issue to the affected relying parties.

Video 2 demonstrates this behavior in practice on eBay. Although eBay sets the userVerification parameter to required, the demo recording shows a successful passkey login using the described technique, without any user interaction or additional authentication factors.

We captured this recording before eBay fixed the issue. Following our report, eBay addressed this verification gap and now properly validates the UV flag.

Video 2. Pass-ta-key attack succeeds despite the absence of user verification, even when the UV is required.

Pending Attacker: The Silver Pass-Ta-Key Attack

When an account is protected by stronger authentication requirements, such as for financial or federal identity systems, the attacker must also bypass user verification. This initially appears to be a significant challenge.

The cloud authenticator requires a message signed with the UV key to set the UV flag. Client interaction controls access to this key, as the OS validates the user via the same mechanism used for device unlock. Without escalating to system privileges or physical access to the victim device, an attacker has no apparent path to obtain such access.

Attackers can bypass this challenge through the following mechanism:

  • Instead of bypassing access to the UV key, the attacker invalidates the existing key registered in the cloud authenticator and registers a newly generated key under their control
  • Once the attacker-controlled key is registered, any message signed with it is accepted by the cloud authenticator as if the user had successfully performed device unlock

Figure 4 demonstrates the attacker-side authentication flow in the Silver Pass-ta-key attack, focusing on the authentication phase after the attacker-controlled UV key is registered.

A diagram illustrating a security process involving four entities: Relying Party, Attacker, Infected Victim, and Cloud Authenticator. Each entity is in a colored box. Arrows show the flow of communication, including a "Noise NK handshake" to the Attacker, a "Fake UV Key signature" to Google Cloud Authenticator, and an "assertion response" returning to Relying Party.
Figure 4. Attacker-side authentication flow in the Silver Pass-ta-key attack.

This approach has important implications. It allows the attacker to fully automate authentication across all the victim’s accounts without human interaction, even where user verification is enforced. Furthermore, the attacker no longer needs live access to the victim’s device during authentication.

Unlike the previous attack, which required active malware on the victim’s device for each authentication, the Silver attack provides reusable access. This allows the attacker to access the victim’s passkey-protected accounts from their own environment, without requiring the victim’s device to be online or active. Ultimately, this enables account takeover across all passkeys associated with the victim without requiring elevated privileges.

Invalidating the Existing User Verification Key

To carry out this attack, the first objective is to invalidate the existing UV key associated with the target device. From the previous attack, we learned how an attacker can use unprivileged malware to sign attacker-controlled requests with the device identity key and send them to the cloud authenticator. The attacker can leverage this capability to issue a device/forget command on behalf of the victim. A simpler option is to directly delete the victim’s passkey_enclave_state file, as there are no built-in protections that prevent its removal.

Regardless of the method, the next time the user attempts to use a passkey, Chrome is forced to re-onboard the device. This occurs either because Chrome no longer has access to the device key or because the cloud authenticator no longer recognizes the device as registered.

Exploiting the Onboarding Flow

On Windows, device onboarding is only completed after the second use of a passkey on the same device. During the first use, Chrome begins onboarding with the cloud authenticator in the background while prompting the user to enter the Google Password Manager (GPM) recovery PIN.

If Chrome were to create the UV key at this point, it would also trigger a Windows Hello prompt, requiring the user to authenticate again using biometrics or a PIN. Since both steps may involve a PIN, presenting them back-to-back in the same flow can be confusing and lead to user errors. To avoid this, Chrome defers the creation of the UV key.

Instead, the device is initially registered in a uv_key_pending state. During this first interaction, the GPM recovery PIN satisfies user verification, and the actual UV key is only created and registered during the next passkey use, when the additional prompt is no longer needed.

After forcing the victim into this re-registration state, the attacker can exploit the uv_key_pending condition. In their own environment, the attacker generates an asymmetric key pair. They then send a device/add_uv_key command to the cloud authenticator, providing the attacker-controlled public key as the UV key.

The cloud authenticator does not validate the attestation of newly registered UV keys to verify whether they originate from secure hardware. As a result, the attacker-controlled key is stored alongside the legitimate device identity key:

From this point on, the attacker can use the forged UV key to request signatures for any passkey associated with the victim and obtain assertions with the UV bit set. This provides access to high-value accounts even when user verification is enforced and validated.

Stealing the Master Key: The Golden Pass-Ta-Key Attack

In this attack, the attacker effectively gains the cloud authenticator’s superpower, the ability to decrypt synced passkeys. This is particularly impactful because it undermines the intended protection mechanism.

The passkey’s private key is protected using a symmetric master key called the security domain secret (SDS). This master key is not directly accessible, it is stored on the device as an encrypted wrapped_secret. Only the cloud authenticator can decrypt this wrapped_secret using its device-specific key (wrapping_key) within its isolated environment, as noted in Figure 5.

A diagram showing a process between a client device and a cloud authenticator. Arrows indicate the flow from client device to cloud authenticator.
Figure 5. Synced passkey decryption inside the cloud authenticator.

Figure 5. Synced passkey decryption inside the cloud authenticator.

This design aims to protect synced passkeys even if the client device is compromised. As Google noted in response to one of our vulnerability reports:

“The (cloud) enclave authenticator’s primary function is to make it difficult to steal passkey private data, which would be an obvious target for malware if it were locally available.”

The security of this model ultimately hinges on the protection of the 32-byte SDS. If an attacker is able to obtain the SDS, they effectively gain the ability to decrypt all synced passkeys for that account. This allows them to authenticate as a fully verified user and take over every service where the victim relies on passkeys.

Leaking the SDS

This secret should never be exposed to the client device, even during device loss or account recovery. However, we unexpectedly found the SDS present in Chrome’s logs during registration with the cloud authenticator, simply by opening chrome://device-log/FIDO, as noted in Figure 6.

A screenshot showing a log entry with blurred sensitive information. It displays a JSON formatted message containing the command "keys/wrap" and the purpose labeled as "security domain secret."
Figure 6. The SDS (the passkey master key) is exposed in plaintext in the device log.

In the current Chrome implementation, every device joining or rejoining an account’s security domain retrieves the SDS from the recovery key store, Google’s Trusted Vault service. The cloud authenticator includes a mechanism that allows Chrome to facilitate the recovery flow where the key cannot be decrypted on the client device, however this mechanism is not used. Instead, Chrome recovers the SDS in an accessible form.

One possible explanation is needing to standardize the device join and recovery process across platforms. Unlike desktop environments, Google Password Manager on iOS and Android does not rely on the cloud authenticator and must obtain the master key to decrypt synced passkeys. As a result, Chrome appears to follow the same recovery model, even though the cloud authenticator could enable a more isolated approach.

Although Google removed this secret from Chrome’s logging output following our report, the SDS is still sent to the client and remains accessible in Chrome’s process memory. If the attacker forces the victim to re-register with the cloud authenticator and knows the pattern to look for, they can extract the SDS directly from memory.

The Golden Pass-ta-key attack allows full account takeover through the following steps:

  1. The attacker forces Chrome to trigger a fresh onboarding using the same mechanisms as the Silver Pass-ta-key attack
  2. The attacker monitors the system for the recreation or modification of the passkey_enclave_state
  3. Once the file is recreated/modified, the attacker dumps Chrome’s process memory and extracts the SDS, which is temporarily present in plaintext
  4. The attacker reads the WebauthnCredentialSpecifics records from Chrome’s sync database (Stage Zero: Reconnaissance)
  5. Using the extracted SDS, the attacker decrypts the encrypted fields in each record and recovers the corresponding passkey private keys
  6. The attacker uses the recovered private keys to sign the relying party’s challenge and successfully authenticates as the victim

Figure 7 shows how an attacker would use the SDS to decrypt passkeys and forge a valid authentication response.

A diagram illustrating an authentication attack involving entities like "Relying Party," "Attacker," "Infected Victim," and "Cloud Authenticator." The flow includes encrypted passkeys and a "Fake Authenticator" with steps labeled "challenge" and "assertion response." The attacker extracts a "Security Domain Secret."
Figure 7. Flow of the Golden Pass-ta-key attack.

Video 3 shows how an attacker uses the stolen SDS to log in to a high-value account (in this case, a crypto exchange).

Video 3. How an attacker uses the stolen SDS to log in to a high-value account.

The Golden Pass-ta-key attack has a significantly broader impact. Beyond the reusable access from the attacker’s environment, the SDS allows the attacker to decrypt all existing passkeys as well as any future passkeys created for the account.

While the Silver attack is mitigated by unregistering or re-enrolling the device, the Golden attack provides strong persistence. Even if a compromise is detected, remediation is limited. In Google’s current implementation, there is no way to rotate or revoke the SDS, meaning all current and future synced passkeys remain protected by the same master key.

Mitigations

Enforce Strict User Verification (UV) Validation

Relying parties should require userVerification = required and validate the UV flag in all authentication responses. Failure to enforce this check can reduce authentication to a single factor. Figure 8 below shows the authenticator data layout.

A diagram illustrating the structure of data fields, including RP ID Hash (32 bytes), Flags (1 byte), Counter (4 bytes, big-endian unit32), Attested Credential Data (variable length if present), and Extensions (variable length if present, CBOR). A red arrow highlights "Bit 2: User Verified (UV) result" in the Flags section, clarifying that "1 means the user is verified" and "0 means the user is not verified."
Figure 8. Authenticator data layout. Source: W3C, Web Authentication.

Validate Device Key Registration and Attestation

Credential managers should verify the origin and attestation of newly registered device keys, including UV and identity keys. Accepting arbitrary keys without validation allows unauthorized key registration and bypass of user verification requirements.

Harden Recovery and Device Re-Registration Flows

Credential manager recovery PIN prompts are typically associated with onboarding or account recovery, not routine passkey authentication. Unexpected or repeated prompts during normal passkey usage may indicate re-triggering of onboarding or recovery, potentially due to phishing attempts or local manipulation of passkey state.

These flows are security-sensitive because recovery operations can re-establish device trust and restore access to synced credentials. In the scenarios from our research, triggering recovery enabled registration of new verification keys or exposure of key material used to decrypt synced passkeys.

Monitoring agents should detect and restrict unnecessary re-triggering of onboarding and recovery flows, especially after deletion or modification of local passkey state files. Additional verification should be required before re-establishing device trust or recovering synced credentials.

Prevent Exposure of Sensitive Key Material on the Client

Sensitive material such as the master key should not be exposed to the client, including through memory or logs. Instead, credential managers should use designs where cryptographic operations are performed on behalf of the client, without transferring the underlying key material to the client environment.

Restrict Access to Local Passkey Data

Access to passkey-related storage, such as Chrome’s sync database and local state files (e.g., passkey_enclave_state), should be limited to the browser process and protected through platform access controls. This reduces the ability to enumerate credentials, manipulate onboarding state or access device-bound key material from a compromised endpoint.

Improve Detection of Abnormal Passkey Usage

WebAuthn defines a signature counter (signCount) mechanism intended to help relying parties detect cloned or unexpectedly reused credentials. In traditional authenticators, the counter increases with each authentication operation and can provide a signal of abnormal credential usage.

In synchronized passkey systems, authentication assertions commonly contain a constant signCount value. As a result, relying parties and credential providers have limited visibility into unauthorized use of synced credentials, including scenarios where passkeys are extracted or reused from unexpected environments.

Google noted that globally consistent signature counters are difficult to implement in synchronized passkey systems that operate across multiple devices and platforms, particularly when assertions originate from independent clients.

Credential managers that centrally coordinate authentication operations should consider implementing coordinated signature counter mechanisms that account for synchronization and multi-device consistency challenges. Such mechanisms can improve visibility and detection of unexpected credential usage or passkey reuse across environments.

Conclusion

Passkeys represent a meaningful step forward in authentication security. By eliminating shared secrets, they reduce entire classes of attacks that have historically led to widespread account compromise. This changes the economics of credential theft and forces attackers to adopt new techniques.

The attacks presented in this research do not break the underlying cryptography. Instead, they exploit gaps between design assumptions and real-world implementations. These gaps include:

  • Trust placed in client devices
  • Inconsistencies in relying party validation
  • Weaknesses in onboarding and recovery flows

When combined with malware on the endpoint, these gaps enable account takeover scenarios that bypass the guarantees passkeys are expected to provide.

A central takeaway is that endpoint compromise remains a critical part of the threat model. When authentication decisions rely on signals from the user’s device, an attacker with access to that device can manipulate those signals in ways that are difficult to detect. Hardware-backed keys, secure enclaves and cloud isolation significantly raise the bar, but they do not fully eliminate this risk.

Passkey deployments should be treated as one layer in a broader security strategy. Relying parties must enforce strict validation, including proper handling of the user verification signal. Platform providers should continue hardening onboarding and recovery flows, and organizations should invest in protections against malware and memory access on endpoints.

As adoption continues to grow, so will attacker interest in this space. Understanding these emerging attack paths is essential to ensuring passwordless authentication delivers its intended security benefits in real-world conditions.

Palo Alto Networks customers are better protected from the threats discussed above through the following products:

Cortex Cloud Identity Security

Cortex Cloud Identity Security encompasses Cloud Infrastructure Entitlement Management (CIEM), Identity Security Posture Management (ISPM), Data Access Governance (DAG) and Identity Threat Detection and Response (ITDR). It provides clients with the necessary capabilities to improve their identity-related security requirements by providing visibility into identities, and their permissions, within cloud and container environments. This helps accurately detect misconfigurations and unwanted access to sensitive data. It also allows real-time analysis surrounding usage and access patterns.

Idira Threat Detection and Response

Idira Threat Detection and Response (TDR) enables security teams to counter identity-based attacks targeting Idira Next Generation Identity (NGI) Platform and the identities it secures. Using near real-time detection, powered by CORA AI, and leveraging Idira’s visibility across multiple contexts (like PAM, authentication, SSO, cloud, endpoints, browsers, and more), Idira ITP can apply automated, tailored non-disruptive in-session response to contain and minimize potential identity-based threats.

Idira Endpoint Privilege Manager

Idira Endpoint Privilege Manager (EPM) enables enterprises to reduce risk, satisfy compliance, and streamline operations. It helps implement least privilege via policy-driven elevation and removal of standing admin rights, and blocks risky actions, such as execution of unvetted applications and access to memory of other processes, while providing audit-ready evidence and unified identity governance. Automation and consolidation improve efficiency and support Zero Trust strategies, strengthening security without slowing the business.

Idira Privilege Access Management

Idira Privilege Access Management unifies privileged access across human, machine, and agentic identities to secure cloud access across multi-cloud environments. Building on proven PAM, it delivers centralized secrets management alongside modern controls like Just-in-Time access and Zero Standing Privileges. This enforces consistent least-privilege security across on-premises, cloud, and SaaS targets.

If you think you may have been compromised or have an urgent matter, get in touch with the Unit 42 Incident Response team or call:

  • North America: Toll Free: +1 (866) 486-4842 (866.4.UNIT42)
  • UK: +44.20.3743.3660
  • Europe and Middle East: +31.20.299.3130
  • Asia: +65.6983.8730
  • Japan: +81.50.1790.0200
  • Australia: +61.2.4062.7950
  • India: 000 800 050 45107
  • South Korea: +82.080.467.8774

Palo Alto Networks has shared these findings with our fellow Cyber Threat Alliance (CTA) members. CTA members use this intelligence to rapidly deploy protections to their customers and to systematically disrupt malicious cyber actors. Learn more about the Cyber Threat Alliance.

Additional Resources

The Xcode Assassin Returns: A Deep Dive Into the Latest XCSSET Version

Executive Summary

After months of dormancy, the attackers behind the XCSSET malware released version 40 (v40), targeting the macOS ecosystem. This version’s advanced architecture hides its core logic in memory space, reducing its digital footprint.

V40 further enhances its detection evasion capabilities by combining polymorphic payload generation with fileless persistence and dynamic in-memory execution, while weakening a number of security mechanisms on the affected machine.

Since early April 2026, the malware has spread through supply chain attacks by hiding itself in the Xcode projects of dozens of legitimate applications with thousands of active users. Xcode is Apple’s integrated development environment (IDE) for building apps for its various operating systems.

XCSSET’s author enhanced the threat’s ability to spread through open-source projects on GitHub and upgraded its worming capabilities. It can now infect all existing Xcode projects on a compromised system for maximum impact.

The author used a multi-layered cipher shift to conceal the threat’s internal functions. In response, our researchers leveraged advanced AI and pattern-matching algorithms to de-obfuscate the malware's logic.

This article:

  • Explores XCSSET’s updated stealth practices
  • Examines the new operational modules
  • Reveals findings regarding the attackers' rotating command-and-control (C2) infrastructure
  • Provides mitigation strategies to detect and prevent this threat

Palo Alto Networks customers are better protected from the threats discussed above through the following products and services:

If you think you might have been compromised or have an urgent matter, contact the Unit 42 Incident Response team.

Related Unit 42 Topics Supply Chain, Backdoor, macOS

Background

XCSSET is a modular macOS malware family that primarily targets software developers within the Apple ecosystem, spreading through Xcode projects. Threats in this family download task-specific modules from a C2 server, giving it capabilities including:

  • Browser hijacking
  • Credential theft
  • Clipboard monitoring
  • Data exfiltration

XCSSET’s initial discovery was by Trend Micro in 2020. Security researchers at Microsoft analyzed and documented two subsequent versions in March and September 2025. These updates indicate that the attackers were enhancing their codebase.

In mid-April 2026, we started tracking a new version of XCSSET. We saw a secondary wave of attacks in early May 2026 that introduced an expanded suite of operational modules.

In this new version, we observed a heightened volume of attacks targeting developers across South Asia, which is consistent with Trend Micro's initial 2020 reporting,

While the threat actor has named this latest iteration XCSSET v40, the security community has historically identified only a handful of intermediary versions, none of which featured formal version labels.

Infection Chain Analysis

In this section, we provide a high-level overview of XCSSET v40’s infection chain. The threat’s authors restructured its execution framework to be more stealthy and modular. We provide a complete step-by-step breakdown of each phase in Appendix A.

The malware injects an initial downloader script into benign project files in Xcode projects and vulnerable Git repositories. While the attack lifecycle begins with the infected codebase, the endpoint infection is triggered only when the developer builds that project locally.

The malware scrambles its payload generation at compile time, switching between nested layers of different encryption mechanisms. Figure 1 shows a benign infected Xcode project on GitHub with two separate XCSSET payloads.

A screenshot of a code editor showing lines of code in a project file. Some lines are blurred. The code is related to configuration sections within the project. A highlighted area includes seemingly obfuscated text with labels "AFI79" and "AE1CAD1"
Figure 1. Infected Xcode project on GitHub.

The XCSSET v40 infection chain consists of four distinct stages prior to final payload execution:

  • The initial loader script establishes C2 communication
  • The second stage collects basic fingerprinting information on the system and downloads further modules
  • The third stage includes a temporary staging applet that is dropped onto the system to load the final stage into volatile memory space
  • The fourth stage is the core module logic

The moment this memory-resident core module loop becomes active, the malware terminates its staging processes and deletes all installation files from the disk. The goal of the core-module (internally called boot) is to execute and load additional, specialized modules into memory, such as keyloggers, clipboard hijackers or browser hijackers.

Figure 2 describes XCSSET v40’s infection chain.

A diagram showing phases of a cyberattack involving a trojanized Xcode project. Phase 1: Developer downloads project, which executes a command. Phase 2: Bash stager runs initial reconnaissance. Phase 3: Additional reconnaissance occurs, with two loaders managing further operations. Phase 4: Execution of boot orchestrator and decryption of payloads. Attack phase details modules for browser hijack, data exfiltration, crypto stealing, and persistence.
Figure 2. XCSSET v40 full infection chain.

New Module Breakdown

Our analysis of XCSSET v40 uncovered 17 distinct modules, each designed for a different goal. The modules were delivered via a dynamic C2 infrastructure and executed in memory.

We found that the operators have enhanced several of its legacy modules while introducing two new components. These include a Chrome hijacking backdoor and a Telegram trojanizer.

We provide the full list of XCSSET v40 modules in Appendix B.

Chrome Hijacking Backdoor via Chrome DevTools Protocol (CDP) Protocol

The Chrome hijacking module controls the browser by misusing a legitimate Chromium feature, the CDP.

For the CDP-based hijacking to work, the malware must redirect how the user interacts with the browser. It does this by wrapping the benign Google Chrome binary in a malicious persistence script. When a victim launches Google Chrome, the wrapper executes a three-step chain:

  • The orchestrator check: First, it restarts the main XCSSET orchestrator module (boot) every time Google Chrome is initialized, ensuring the malware's core process remains active
  • CDP execution: It then launches the legitimate Google Chrome application with specific command-line arguments that activate the CDP on a pre-defined local port, exposing the browser's internal engine
  • chrome_remote backdoor: Finally, it drops and launches a specialized Chrome hijacking binary (chrome_remote). This binary connects to the opened CDP port, allowing the attackers to execute arbitrary JavaScript, manipulate active browser sessions and extract cookie tokens invisibly.

Figure 3 illustrates the module’s infection and execution chain.

A diagram illustrating a cyberattack process involving a Boot Orchestrator, Browser Hijacker, and chrome_remote Backdoor. The Boot Orchestrator starts the attack, which injects into memory via the Browser Hijacker and creates persistence by launching the browser with CDP flags. The chrome_remote Backdoor connects to a local HTTP and WebSocket server, opening localhost:18907, leading to stages like Cookie Theft and Password Theft. Arrows indicate the process flow.
Figure 3. Chrome-hijacking backdoor’s execution chain.

Inside the chrome_remote Binary

The chrome_remote binary dropped by the browser hijacking module establishes a persistent WebSocket connection to the C2 server to pull down real-time JavaScript payloads. Leveraging CDP's ability to inject code before a page even loads allows the malware to force the browser to evaluate and execute these remote scripts on every new tab or document the user opens.

Once injected into a webpage, the malware’s dynamic scripts override critical browser APIs to manipulate the user's active session for the following goals:

  • Traffic interception: Hooks placed on window.fetch and XMLHttpRequest monitor to exfiltrate sensitive data streams, credentials and API tokens
  • Crypto wallet manipulation: Intercepting MetaMask's Ethereum provider allows the malware to alter cryptocurrency wallet addresses or manipulate decentralized application (dApp) transactions
  • Credential theft: Overriding password-manager autofill fields captures credentials

This module is able to pivot from a browser hijack to full host-level compromise, operating within the context of the legitimate Google Chrome process. The binary monitors active tabs for specific browser console logging events. If the operator wants to run a local system command on the infected machine, they execute a standardized string such as a console.log prefixed with a specific delimiter.

The chrome_remote binary intercepts this console event, strips the delimiter and passes the remaining payload to the host's underlying shell handler (exec.Command). The resulting shell output is then packaged and routed back through the active CDP WebSocket to the C2 server, establishing a stealthy, fileless reverse shell.

We reported the information about this threat to Google. This behavior is protected against in Windows, and Google is currently working on expanding the same protections to macOS.

Telegram Trojanizer

We identified a new Telegram Desktop trojanizer module in May 2026 that was absent from the April 2026 deployment. The delayed introduction of this module demonstrates that the threat actor was actively refining XCSSET v40 after it was already deployed in the wild.

This new module performs the following activities:

  • Downloading a pre-built malicious Telegram.app ZIP
  • Wiping the legitimate copy
  • Dropping the C2-supplied replacement in its place
  • Ad hoc code-signing the fake Telegram app
  • Issuing a kill command to the original Telegram process so the victim relaunches the trojanized copy

This module was updated with a custom AES-encrypted configuration from a dedicated endpoint (/w?tr). We have observed this security mechanism in other modules in earlier iterations of the XCSSET malware family.

The decrypted configuration is written to ~/.tr, and a companion ~/.tr_map file tracks state. Whenever the SHA-1 of .tr changes, .tr_map is cleared. Both files are then uploaded back to the C2 as base_tr_file.txt and base_tr_map.txt.

Because the configuration blob itself was not captured during our collection window, we could not verify its exact contents. However we assess that this is how XCSSET’s operators kept server-side track of which Telegram-related markers existed on each infected host.

This is not the first time XCSSET has been seen targeting Telegram. The original 2020 generation of XCSSET featured dedicated telegram / telegram_lite data-stealing modules. The 2025 XCSSET iteration included the data_folders_finder module that exfiltrated Telegram's chat history, cached files and local encryption keys.

The newest Telegram trojanizer represents a meaningful escalation in the attacker’s access to the app. Rather than a one-time copy of Telegram-related data, the attacker now replaces the application binary itself, giving them an in-process foothold.

The Invisible Malware: New Tactics, Techniques and Procedures (TTPs) Breakdown

When analyzing v40, it became clear that XCSSET went through architectural changes and made core changes to its TTPs.

The attackers behind the malware enhanced its stealth practices to sabotage detection and thwart analysis, while also adding new persistence and data theft methods. This section highlights the recent TTPs observed in v40 illustrated in Figure 4, including:

  • Multi-layered encryption
  • Polymorphism
  • New fileless persistence
  • Impairing defenses
  • Virtual machine (VM) evasion
A diagram of XCSET v40 malware characteristics with a skull icon in the center. Features include Polymorphic, Fileless Persistence, Anti-VM, and Impairing Defenses, each in separate colored boxes.
Figure 4. New XCSSET v40 TTPs.

Multi-Layered Polymorphism and Encryption

The architectural hallmark of XCSSET v40 is its defense-evasion framework, combining overlapping layers of polymorphism and a dual-key encryption scheme. Rather than relying on a single defensive trick, the malware implements a multi-tiered cryptographic gauntlet across its binaries, network payloads and internal source code. Figure 5 describes the XCSSET v40 evasion stack:

A diagram titled "XCSSET v40 Evasion Stack" showing three levels: "Binary Level" with note on frequent recompilation, "Network Level" detailing dual-key encryption, and "Module Level" describing Caesar and substitution ciphers. Each level includes icons.
Figure 5. Layers of polymorphism and encryption in XCSSET v40.

Binary and Network-Level Polymorphism

The malware leverages polymorphism to rotate its digital fingerprints and evade detection. The loader binary, which is responsible for executing the core modules in memory, is recompiled on the C2 server every few hours. During analysis, we observed eight distinct hashes delivered to a single endpoint within a 24-hour window.

The functional modules streamed to the orchestrator are polymorphic. Each component is encrypted via AES-256-CBC using a per-build key and a randomized Initial Vector (IV) prepended to the ciphertext. Because the IV shifts with every single transmission, even two identical modules served seconds apart will result in two different encrypted blobs. Figure 6 illustrates the encrypted payload injection process into osascript as detected in Cortex XDR.

A flowchart illustrating a cyberattack process involving several steps. The process starts with "osascript" as the main node, which injects an AES-encrypted payload into the loader. This is followed by several "sh" and "bash" nodes. A new module payload is downloaded via a "curl" command, linking to a specified URL. "Apple" is labeled at a box indicating the starting point of the process.
Figure 6. Encrypted module payload injected to XCSSET v40’s loader.

Network Level Dual-Key Architecture

While previous versions of XCSSET protected their C2 communications using a single, hard-coded plaintext key, v40 introduces a dual-key architecture that separates inbound and outbound encryption.

Unlike its predecessors, XCSSET v40 embeds its inbound key within the compiled AppleScript loader. As a result of this compartmentalized key placement, defenders who retrieved the outbound key from network telemetry will not be able to decrypt and access the core logic of the malware.

Module Source-Code Obfuscation and String-Literal Ciphers

The malware applies a third layer of polymorphism at the structural code level. Every internal string literal is dynamically encoded using a per-module keyed Caesar cipher featuring a randomized 52-character alphabet and variable shift values. As a result, no two builds of the same module share common string signatures.

XCSSET v40’s developers also implemented a pre-compilation substitution cipher for all internal module, function and variable names. Because this obfuscation takes place on the C2 server before distribution, the decryption mapping is absent from the host endpoint. This absence means that analysts cannot reverse a local execution routine to reveal the original code structure.

Figure 7 includes a scrambled source-code module with decrypted string literals.

A screenshot of a code snippet featuring a function written in a programming language. The function includes command-line operations such as `curl` and `osascript`, as well as conditions using `if` and `else`. There are several references to connecting to a server using specific URLs and managing session files.
Figure 7. Encrypted function names in the boot module.

By leveraging advanced pattern matching and LLM assistance, we broke the identifier substitution cipher. This allowed us to trace the obfuscated module and function names back to their original, operator-assigned names. This allowed us to dive into the malware’s core logic.

XCSSET adopted new technologies to scale their operations. This can also be a reminder for the threat intelligence community that defenders can harness those same capabilities to neutralize this threat.

New Fileless Persistence

Beyond introducing polymorphic capabilities, XCSSET v40 also added a new fileless persistence to its TTPs. In addition to its usual persistence through Git hooks, Launch Daemons and trojanized applications, v40 adopted another method that misuses the macOS defaults configuration system.

Defaults is the macOS counterpart to the Windows Registry, which is a built-in mechanism for managing user preferences and application settings.

Historically, macOS malware families like NetWire and FruitFly have misused the defaults utility to store state data. XCSSET v40 instead uses this utility to shift from predictable, disk-resident persistence to a fileless re-infection loop.

Rather than dropping additional scripts on disk between cycles, XCSSET v40 writes a Base64-encoded staging payload into a preferences domain it generates per host. Inside the domain, the malware writes the payload under keys that are meant to seem random, like mpirv_eahpi_apm or ychax_muwch_ucy. When a victim launches a trojanized or hijacked application, the threat runs a one-liner to retrieve and decode the payload:

The decoded blob re-infects the host, with the SRC tag identifying which infection vector (e.g., hijacked browser, infected Xcode project or trojanized application) is responsible for triggering the re-arm.

Beyond standard persistence, XCSSET v40 uses the defaults system during initial infection to store and query system information. Misusing defaults as an operational configuration cache is uncommon in the macOS malware landscape.

Impairing Defenses

XCSSET v40 also introduces significant defense-evasion techniques that were not observed in prior campaigns. In this multi-part effort to thwart Apple’s defenses, XCSSET v40:

Disabling the SoftwareUpdate Configuration Channel

XCSSET v40 executes the following commands to hinder the machine’s ability to receive security updates:

Setting these values to false prevents the endpoint from automatically retrieving updates to crucial macOS signature databases like:

  • XProtect
  • MRT
  • TCC

This also prevents access to Apple's Rapid Security Response channel, which delivers emergency patches between full macOS releases.

Termination of Cloud Telemetry Mechanisms

XCSSET v40 runs a constant loop that hinders the endpoint’s ability to send security-related data through the CloudTelemetryService process. This evasion method blocks the transmission of local security telemetry to Apple, ensuring that the operator's tooling is not sampled into subsequent XProtect signature releases.

Exclusive File Lock on the XProtect Signature Database

The malware spawns a Perl process that tries to acquire and hold access to the endpoint's YARA-rule database (XPdb). This exclusive file lock on the XProtect signature database ensures that if the endpoint does receive a security update, its content could not be written to disk.

TCC Database Reset Upon Denial of Permissions

Prior XCSSET versions terminated module execution when the user denied AppleEvents automation prompts. XCSSET v40 instead invokes tccutil reset AppleEvents, which clears the user's TCC decision database for the AppleEvents service. It then reloads a TCC prompt, masquerading as System Settings or Xcode to trick the user into re-granting automation permissions to the malware's bundle ID. The subsequent automation request is treated as a first-time prompt, redisplaying the consent dialog.

Anti-VM Reporting

XCSSET v40 also attempts to avoid running on VMs. Upon execution of the stats module (one of the first modules downloaded to the machine), the module generates a set of checks on the machine’s CPU and hardware metadata. This check is to determine whether or not the infected endpoint is a VM.

Once the module performs those checks, it calculates a final verdict ("Model Identifier suggests VM: false", "Result: likely physical") and ships the results over to the C2. Hosts reporting a virtual environment receive no further module deliveries, ensuring that automated sandboxes do not analyze XCSSET’s core logic.

C2 Infrastructure Analysis

By analyzing XCSSET v40’s Uniform Resource Identifier (URI) structure and domain registration strategies, we were able to learn more about the timeline of the most recent campaign. We even found several operational security (OPSEC) failures that provided insights into the attacker’s strategies and capabilities.

Endpoint URL Breakdown

XCSSET v40 shows a clear pattern of URL endpoint structure throughout the campaign, assigning distinct functionality to each URI endpoint as shown in Table 1.

Path Method Purpose
/d/<rotated_binary_name> GET <Base64- + AES-encrypted payload> Binary download (e.g., AppleScript loader, Chrome hijacker binary)
/a GET Loader and stager retrieval during initial infection
/s/<rotated_module_name> GET <Base64- + AES-encrypted payload> AppleScript module retrieval (executed in-memory)
/l POST -d <Base64 payload> Status and log reporting
/u POST -F m=<Base64 payload> File exfiltration
/p POST -d t=…&u=…&s=… Heartbeat
/w?<cmd> GET Server-side dynamic configuration retrieval (e.g., /w?cbp for clipboard, /w?tr for telegram)
/e POST Browser-hijack events

Table 1. XCSSET v40 URI endpoint breakdown.

Domain Registration and Staging Strategy

XCSSET v40's C2 infrastructure reveals a distinct domain registration strategy. In early 2026, the attackers registered about 40 different domains in at least four short bursts across a small pool of IP addresses. The operator staged and aged these domains months before launching the attack wave, to bypass detection of newly registered domains.

Geographically, the attackers’ targeting parameters and naming conventions have also evolved. While the 2025 campaigns relied on [.]ru (Russia) domains masquerading as legitimate content delivery networks (CDNs) and tech properties, the 2026 attack wave introduced [.]in (India) names registered alongside identical [.]ru siblings. This geographic infrastructure pivot aligns with recent victimology, matching our observations of XCSSET v40 targeting developers across South Asia.

OPSEC Failures

Despite mitigating detection risks by aging their domains, the attackers compromised their own campaign through poor OPSEC. Specifically, they cross-contaminated the IP addresses hosting those domains across different XCSSET campaigns.

Furthermore, all four operator IP addresses are linked by a single shared SSL thumbprint (6e480d648fa1b70612f5d198a66875e28847547d), reused SSH keys and a shared self-signed remote desktop protocol (RDP) certificate.

Mitigation Strategies

Defending against XCSSET v40 requires defenders to use real-time behavioral enforcement to flag runtime irregularities. Unit 42 suggests the following mitigations to detect and prevent this threat:

  • Implement AI-enhanced process anomaly detection capable of flagging runtime irregularities, specifically monitoring for abnormal AppleScript instances
  • Monitor browser launcher paths and block unauthorized file-write activity
  • Identify and block the creation of abnormal local system defaults domains and their modification through the defaults utility
  • Track ad hoc signed applications and untrusted local code signers, immediately isolating binaries that bypass native Apple Gatekeeper requirements
  • Implement automated supply-chain dependency scanning to intercept poisoned open-source repositories before they are pulled into internal developer pipelines

Conclusion

The latest XCSSET version demonstrates a persistent and specialized threat within the macOS landscape. Rather than relying on conventional delivery methods, the framework turns legitimate developer workstations into automated, self-propagating supply chain vectors.

The discovery and analysis of XCSSET v40 reveals a modular framework for exfiltrating data, subverting system security and performing persistent browser hijacking.

While the malware's historical reliance on AppleScript and bash stagers remains consistent, v40 introduces a significant technical evolution in defense evasion. By adopting a largely memory-resident and polymorphic architecture, XCSSET v40 leaves a minimal disk footprint.

Because adversaries are now using AI-enhanced pipelines to generate polymorphic code on the fly, defenders must shift to AI-driven behavioral analysis to identify unusual or suspicious process chains and flag anomalous use of built-in detection mechanisms.

Palo Alto Networks Protection and Mitigation

Palo Alto Networks customers are better protected from the threats discussed above through the following products:

Cortex XDR and XSIAM

At the endpoint level, Cortex XDR blocks XCSSET on macOS hosts using Behavioral Threat Protection (BTP) to terminate fileless, in-memory execution chains—including suspicious osascript calls, multi-pass base64/xxd decoders, and process spawning from infected .xcodeproj build phases—while Advanced WildFire inspects and blocks payloads on disk.

At the Security Operations level, Cortex XSIAM correlates these host-level detections with developer repository, network, and identity telemetry, providing SOC analysts with a unified attack narrative and automated playbooks to stop cross-environment supply-chain propagation.

Advanced URL Filtering and Advanced DNS Security

Advanced URL Filtering and Advanced DNS Security identify known domains and URLs associated with this activity as malicious.

If you think you may have been compromised or have an urgent matter, get in touch with the Unit 42 Incident Response team or call:

  • North America: Toll Free: +1 (866) 486-4842 (866.4.UNIT42)
  • UK: +44.20.3743.3660
  • Europe and Middle East: +31.20.299.3130
  • Asia: +65.6983.8730
  • Japan: +81.50.1790.0200
  • Australia: +61.2.4062.7950
  • India: 000 800 050 45107
  • South Korea: +82.080.467.8774

Palo Alto Networks has shared these findings with our fellow Cyber Threat Alliance (CTA) members. CTA members use this intelligence to rapidly deploy protections to their customers and to systematically disrupt malicious cyber actors. Learn more about the Cyber Threat Alliance.

Indicators of Compromise

XCSSET v40 C2 Domains

  • accapple[.]ru
  • adschecks[.]ru
  • adschecks.ru
  • adsmobi[.]ru
  • adsmorein[.]in
  • adsmoreme[.]in
  • amdcdn[.]ru
  • amzndev[.]in
  • amzndev[.]ru
  • amznprod[.]in
  • applecdn[.]ru
  • appledisk[.]ru
  • appledns[.]ru
  • applehosts[.]ru
  • appletime[.]in
  • bulksec[.]ru
  • cdnamz[.]in
  • cdnamz[.]ru
  • cdnapple[.]in
  • cdnatapple[.]ru
  • cdnroute[.]ru
  • checkcdn[.]ru
  • chromeads[.]ru
  • cnmag[.]ru
  • devnetaps[.]ru
  • dnsapple[.]ru
  • dnsrelays[.]ru
  • explorecdn[.]ru
  • fiddlejoy[.]ru
  • figmacat[.]ru
  • figmanets[.]in
  • funchats[.]ru
  • gironetcdn[.]ru
  • goalmate[.]ru
  • googlenets[.]ru
  • greencn[.]ru
  • icloudsnet[.]ru
  • imails[.]ru
  • legalads[.]in
  • littleads[.]in
  • littledns[.]ru
  • maganet[.]ru
  • mindelgate[.]ru
  • netapsdev[.]ru
  • netcdnads[.]in
  • netcdnamz[.]ru
  • netcdndev[.]in
  • netcorps[.]ru
  • netsprot[.]in
  • netsproto[.]in
  • networkads[.]in
  • rigacdn[.]in
  • rigmajoys[.]in
  • rigmanet[.]ru
  • rigmanets[.]in
  • sahusuzuki[.]in
  • stuffdns[.]in
  • testjoys[.]ru
  • timewebnet[.]in
  • vigmanet[.]ru
  • whitead[.]in
  • whiteads[.]ru
  • wincdn[.]ru
  • windsecure[.]ru

C2 URLs - Chrome CDP Helper Binary

  • hxxps[:]//amzndev[.]in/d/zw_sfp64
  • hxxps[:]//amzndev[.]ru/d/zw_sfp64
  • hxxps[:]//googlenets[.]ru/d/zw_sfp64
  • hxxps[:]//netcdndev[.]in/d/zw_sfp64
  • hxxps[:]//whitead[.]in/d/zw_sfp64
  • hxxps[:]//whiteads[.]ru/d/zw_sfp64

XCSSET v40 C2 IP Addresses

  • 91.108.106[.]229
  • 95.142.35[.]34
  • 95.142.35[.]206
  • 95.142.37[.]159
  • 151.243.109[.]188
  • 178.208.92[.]129
  • 178.208.92[.]168

XCSSET v40 SSL Thumbprint

  • 6e480d648fa1b70612f5d198a66875e28847547d

Additional Resources

Appendix A - XCSSET v40 Infection Lifecycle Breakdown

The infection lifecycle of XCSSET v40 can be categorized into four phases, as detailed below.

Phase 1: Initial Compromise and Execution

The infection lifecycle begins when a developer opens a poisoned Xcode project, typically downloaded from GitHub or built internally:

  • The moment the developer builds the project locally, a malicious run-script phase executes silently in the background
  • The malware dynamically scrambles its payload generation at compile time, switching between nested layers of Hex- and Base64-encoding
  • This decoded script initiates contact with the attacker’s C2 infrastructure by executing a curl request to the /a with basic execution context (p=xcode_phase) to retrieve the next stage

Phase 2: Host Reconnaissance and Staging

  • The retrieved staging payload runs a second, specialized curl command that collects and exfiltrates primary host metadata
  • The payload queries the operating system type (uname -s) and the current username (whoami), transmitting these details back to the C2 endpoint

Phase 3: Loader Wrappers and Binaries

If the C2 approves the host profile, it returns a bash script obfuscated via a custom substitution cipher. This script handles the high-risk task of staging the main loader while covering its tracks:

  • The bash script performs deeper hardware fingerprinting, matching the host's serial number against targeted profiles
  • It then pulls the primary malware loader to /tmp/r and compiles an accompanying AppleScript wrapper as /tmp/p.app on the fly
  • To eliminate forensic evidence, the loader wrapper is executed in memory by osascript, which in turn downloads the main orchestrator module and its AppleScript loader
  • After execution, the malware terminates osascript and deletes both /tmp/r and /tmp/p.app from the disk to minimize its forensic footprint

Phase 4: Orchestrator and Core Logic Modules

Once it erases its disk footprint, the malware transitions to a mostly fileless execution:

  • The main orchestrator module named “boot” by the developers runs and retrieves additional module payloads from https://<C2>/s/<encoded_module_name>
  • Finally, the orchestrator pipes the payloads to the AppleScript to decrypt and execute the modules in memory

Appendix B - XCSSET V40 Module Breakdown

This appendix maps the 17 modules identified in XCSSET v40. We correlated the canonical XCSSET v40 module names recovered through our decryption efforts with the terminology used in the three prior public reports.

Please note that since XCSSET has gone through major architectural changes in v40, some modules’ logic may be expanded or split into different modules. It is also worth noting that previous reports of XCSSET did not decrypt the original module names, and therefore they appeared as jumbled strings.

Module Name Previously Recorded Names Functionality
boot boot, bootstrap Main orchestrator, module-dispatch loop
stats vexyeqj, seizecj Initial reconnaissance on the infected endpoints, exfiltrates existing browser extensions, performs anti-VM checks
clipboard_v2 bnk Keyboard hijacker
payloader payloader Secondary module dispatcher, downloads dynamic configuration files, performs keyboard hijacking
replicator_finder replicator, dfhsebxzod Xcode project file infector
git_finder pods_infect, jez, jey Git pre-commit hook infector
zip_infect_finder logic previously existed in dfhsebxzod and replicator modules Split out in v40 from replicator_finder. Recursively traverses user directories to identify and infect Xcode projects present in .zip archives.
data_folders_finder finder, txzx_vostfdi, neq_cdyd_ilvcmwx C2-driven folder finder and data exfiltrator
firefox_data iewmilh_cdyd Infostealer targeting Firefox
notes_app cozfi_xhh Apple Notes exfiltrator
settings_app xmyyeqjx LaunchDaemon-based persistence using a fake Settings.app, defense evasion by blocking XProtect features
finder_app finder_app, vectfd_xhh TCC permission misuse and reset, creates trojanized app that mimics Finder/ Xcode/ Terminal/ Reminders/ SimulatorTrampoline
persist hfdieiz, some of the logic previously existed in xmyyeqjx .zshrc and Dock-app based persistence
browser_remote chrome_remote, firefox_remote, opera_remote, yandex_remote, brave_remote, edge_remote, 360_remote (one module per browser, each downloads a backdoor masquerading as browser from the server; uses an exploit to hijack the actual browser) Unified browser-hijack dispatcher checks for existing browser on the endpoint and dispatches different hijacking modules
safari_remote safari_remote Browser hijacker
chrome_remote new module (v40) Browser backdooring and hijack through CDP protocol
Note: Trend Micro’s 2020 report mentions a module named chrome_remote, but v40’s module has different functionality
tdesktop new module (v40) Telegram desktop trojanizer

Chinese-Speaking Threat Actor Harnesses AI Models for Autonomous Cyberattacks

Executive Summary

Unit 42 identified an AI-enabled autonomous hacking campaign carried out by a Chinese-speaking threat actor. They targeted infrastructure using seven vulnerabilities, combining autonomous AI-driven enumeration with manual exploitation that achieved confirmed impact.

The actor, operating under the aliases knaithe and KnYuan, leveraged DeepSeek, via the Hermes Agent framework, as their autonomous offensive operator. They orchestrated this operator via Telegram for the following activities:

  • Independently enumerating targets and their vulnerabilities using FOFA
  • Sourcing exploit tools
  • Initiating attacks without human intervention

In parallel with their use of DeepSeek as their autonomous operator platform, the actor configured multiple large language models (LLMs) (Qwen, GLM, Kimi, MiniMax). We also identified limited usage and testing of Western platforms. This includes Claude Code for connectivity testing and proxy validation. There were also signs of usage of Codex on exploit development directories. This limited usage is consistent with evaluating the AI-market to identify their preferred tool set.

When initial exploitation failed due to the target environment's restrictive configurations, their Hermes Agent autonomously conducted searches for known critical-severity Common Vulnerabilities and Exposures (CVEs). It initially surveyed 10 product families, scanning GitHub for trending proofs of concept (PoCs) and prioritizing vulnerabilities by attack surface. This research led the agent to pivot to higher-value vulnerabilities, the seven covered in Table 2 below. While the observed campaign had limited impacts, the workflow confirms a functional, end-to-end autonomous offensive capability.

Palo Alto Networks customers are better protected from the threats described here through the following products and services:

The Unit 42 AI Security Assessment and Unit 42 Frontier AI Defense service can help identify and mitigate complex AI-enabled risks.

If you think you might have been compromised or have an urgent matter, contact the Unit 42 Incident Response team.

Related Unit 42 Topics GenAI, Vulnerabilities, LLM

Technical Analysis

We gained unique insights into this autonomous attack capability when the autonomous agent inadvertently exposed its infrastructure by starting a file server in its home directory. This revealed the full operational environment to our threat researchers.

This visibility enabled us to understand their full tool set, how the attackers orchestrated multiple AI platforms and gave us a peek into their targeting. Based on our analysis of their session logs and configuration files, the actor primarily used the Hermes Agent with DeepSeek as its reasoning agent for the attack phase of this campaign. Their Hermes Agent conducted autonomous vulnerability enumeration, downloaded public exploit code from the internet and attempted exploits against targets.

Additionally, the threat actor leveraged the following tools in a limited capacity, likely indicating an ongoing assessment of the AI market for their use cases:

  • Claude Code: The actor only used this for connectivity testing and proxy validation. Session history (10 entries across three sessions) contained only /model checks, connectivity tests and one npm install request.
  • Codex: There were signs of usage on exploit development directories, but the chat logs were not preserved. The actor marked their exploit development directories as trusted, granting full access to read, modify and execute code. Although we cannot verify actual usage because the actor configured their system to limit local response storage (disable_response_storage = true), the correlation between trusted directories and successful campaigns is notable.
  • Qwen Code: There was minimal usage by the actor, including two sessions total. They configured multiple large language models (LLMs) (Qwen, GLM, Kimi, MiniMax), consistent with evaluating Chinese-market AI models.

Tool Configuration and Proxy Infrastructure

The actor configured four AI coding tools to remove client-side execution permissions. Note, this does not impact server-side controls for vendor-hosted platforms. They routed the two Western tools, Claude Code and Codex, through a third-party proxy service (code.newcli[.]com) to reduce traceability. The actor accessed DeepSeek and Qwen directly through their native API endpoints.

The actor enabled anti-attribution settings on both tools. The actor configured Claude Code with CLAUDE_CODE_ATTRIBUTION_HEADER: "0" and CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: "1", while they set Codex to disable_response_storage = true to limit response storage. Unit 42 did not recover any Codex chat logs from the exposed server. Note: This setting does not impact the retention of logging or safety signals in OpenAI’s safety systems.

Table 1 summarizes each tool's configuration.

Tool Model Configuration Change Access Method
Hermes Agent DeepSeek Framework: no built-in safety layer; custom red-teaming skills with godmode jailbreaking skill available Direct API: api.deepseek[.]com
Codex GPT-5.4 (via proxy) network_access = "enabled" Proxy: code.newcli[.]com/codex/v1
Claude Code Opus (via proxy) dangerously-skip-permissions: true, 12 of its tools are explicitly allowlisted (Bash, file I/O, web requests, agent spawning, etc.) Proxy: code.newcli[.]com/ultra
Qwen Code GLM-5/Qwen/ Kimi/MiniMax approvalMode: "yolo" Direct API: dashscope.aliyuncs[.]com

Table 1. AI tool configurations.

DeepSeek/Hermes Agent — Autonomous Attack Cycle

DeepSeek, operating through the Hermes Agent framework, served as the actor's primary offensive AI tool. Hermes Agent provided orchestration (terminal access, Telegram-based command and control, and the skills system) while DeepSeek served as the reasoning engine for code generation, vulnerability assessment, target selection and decision-making.

The actor had customized Hermes Agent with three red-teaming skills:

  • godmode: LLM jailbreaking, framework-bundled
  • web-terminal-exploitation: unauthenticated WebSocket exploitation, custom-created
  • fofa-cyberspace-search: a custom procedure template instructing DeepSeek to use the actor's fofoapi.py script for internet asset enumeration

The actor also integrated the open-source FofaMap-Platinum-Full-Expert Model Context Protocol (MCP) server, which exposes:

  • FOFA asset search
  • Nuclei scan generation
  • A DeepSeek-powered natural-language-to-FOFA query translator directly within the agent

We recovered the following sequence in Figure 1 from a single Hermes Agent session (May 7, 2026). We were unable to recover additional operator input beyond the initial task.

A flowchart illustrating a cybersecurity attack process with four phases: Langflow Exploitation, Autonomous CVE Research, Vulnerability Assessment & Exploit Acquisition, and n8n Exploitation Attempt. It shows how the attack progresses starting from an initial task and leads to the final attack session. Key terms like "AUTONOMOUS PIVOT" and "n8n" are highlighted.
Figure 1. Autonomous attack flow observed in Hermes Agent session (May 7, 2026).

Phase 1: Langflow Exploitation (CVE-2026-33017)

DeepSeek identified a Langflow vulnerability (CVE-2026-33017, CVSS 9.8) and autonomously attempted exploitation through the following steps:

  1. Downloading the public PoC exploit from GitHub
  2. Enumerating 84 Langflow instances via FOFA (title="Langflow")
  3. Running the PoC scanner (langflow_poc.py --scan-file langflow_targets.txt --threads 10)
  4. Identifying one vulnerable target (Langflow 1.3.4)

The exploitation attempts failed because the vulnerability requires either auto_login enabled or a public flow ID and the target had neither. DeepSeek assessed the entire product as a low-value target:

Phase 2: Autonomous CVE Research and Target Selection

After abandoning Langflow, DeepSeek conducted autonomous research to identify a higher-value vulnerability. It surveyed deployment counts across 10 product families via FOFA, and then searched GitHub for trending 2026 CVE PoC repositories sorted by stars. DeepSeek evaluated each candidate by severity, deployment footprint and exploitability before selecting n8n:

FOFA confirmed n8n as a high-value target: 647,017 instances globally; 25,209 in China.

Phase 3: n8n Vulnerability Assessment and Exploit Acquisition

DeepSeek obtained the public n8n exploit PoC from the Chocapikk repository. The PoC chains two CVEs into an attack sequence requiring an unauthenticated form with file upload:

The following are advisories from n8n:

DeepSeek analyzed affected version ranges to identify exploitable targets:

Phase 4: n8n Target Enumeration and Exploitation Attempts

DeepSeek ran FOFA queries targeting Chinese n8n instances and probed targets for version and form endpoints. Three instances were confirmed to be running vulnerable versions (v1.18.0, v1.117.3, v1.108.2). One target exposed three form endpoints, but all required authentication:

DeepSeek launched parallel scanning across 50-plus remaining Chinese targets. None had publicly accessible forms. The actor did not achieve exploitation. The recovered session data ends at this point.

Manual Campaigns

Separate from the autonomous AI campaigns, the actor conducted manual operations using conventional workflows (FOFA enumeration, custom Python scanners and direct exploitation) with confirmed impact.

These included:

  • Data exfiltration from three organizations via a Citrix NetScaler vulnerability (CVE-2026-3055)
  • Command execution on 11 Marimo notebook instances (CVE-2026-39987)
  • Java deserialization reverse shell attempts against nine Apache Tomcat servers (CVE-2026-34486)
  • Reverse shell callbacks targeting three IKE VPN endpoints (CVE-2026-33824).

How the AI Exposed the Operation

Hermes Agent, responding to a Telegram command, started an HTTP file server (python3 -m http.server 8888) from the actor's home directory (/home/worker) rather than an isolated staging directory. This exposed the actor's entire workspace:

  • AI tool configurations
  • API keys
  • Exploit scripts
  • Target lists
  • Bash history
  • Hermes autonomous exploitation session logs

The exposure was unintentional. The actor demonstrated operational security awareness elsewhere, having emptied exploit directories after use and disabled Codex conversation logging.

Vulnerabilities

CVEs Exploited or Staged

The threat actor maintained active exploit tooling for seven vulnerabilities. The threat actor likely retrieved the tooling manually or they downloaded it from public repositories via the Hermes Agent during the autonomous scan -> download -> exploit cycles. Table 2 summarizes each vulnerability and the actor's method of engagement.

CVE Product CVSS Method Actor Activity
CVE-2026-33017 Langflow 9.8 Autonomous Exploitation attempt (failed — auto_login disabled)
CVE-2026-21858/CVE-2025-68613 n8n Workflow Automation 10.0 / 9.9 Autonomous Exploitation attempt (failed — auth required)
CVE-2026-3055 Citrix NetScaler ADC & Gateway 9.8 Manual Active exploitation, data exfiltrated
CVE-2026-34486 Apache Tomcat 7.5 Manual Active exploitation, reverse shell attempts
CVE-2026-39987 Marimo Notebook 9.8 Manual Active exploitation, command execution confirmed
CVE-2026-0300 PAN-OS User-ID Authentication Portal 9.8 Manual Non-functional research PoC cloned, not executed
CVE-2026-33824 Windows IKE Extensions (IKE VPN) 9.8 Manual Active exploitation, reverse shell attempts

Table 2. CVEs exploited or staged by the threat actor.

PAN-OS CVE-2026-0300

The actor cloned a public repository (qassam-315/PAN-OS-User-ID-Buffer-Overflow-PoC) for CVE-2026-0300, a buffer overflow vulnerability in the PAN-OS User-ID Authentication Portal (Captive Portal). The cloned code is non-functional with placeholder values that cannot achieve code execution. No evidence of modification or execution was found.

Targeting Analysis and Limited Success

From our analysis and visibility, we identified that this actor attempted to exploit over 460 targets, leveraging a mix of autonomous and manual techniques. What’s interesting is that the actor appeared to allow DeepSeek to narrow the targeting scope, likely to conserve AI compute.

For example, DeepSeek sampled approximately 100 IP addresses out of the 25,209 Chinese systems that FOFA scans identified with exposed n8n instances. Of those 100 systems, it probed roughly 40 unique IP addresses, checking their version via curl commands.

While most of the systems were unreachable or non-responsive, DeepSeek found three with the vulnerable versions and attempted to exploit them automatically. This autonomous process of target identification, sampling and narrowing of scope is notable because the system executed hundreds of hours of manual targeting analysis in mere minutes, while also managing its own compute resources.

Across all the exploitation attempts, both autonomous and manual, Unit 42 confirmed data exfiltration from three Citrix NetScaler targets (CVE-2026-3055) and command execution on 11 Marimo notebook endpoints (CVE-2026-39987). However, we reviewed evidence of batch exploitation against an unknown number of hosts that were listed in a file deleted by the actor prior to our analysis. 

The three successful exploitations had memory data exfiltrated through the Citrix NetScaler out-of-bounds memory read vulnerability (CVE-2026-3055). The actor searched the exfiltrated data for NetScaler authentication cookies (NSC_AAAC=), indicating session hijacking intent. The actor persistently targeted a government entity in Malaysia and they exploited it over multiple days with memory grooming parameters and maximum read attempts. The actor returned with proxy anonymization on subsequent attempts.

Attribution

The Chinese-speaking actor is based in Zhuhai, China, and operates as an opportunistic exploit operator and self-described binary security researcher. This assessment is supported by the actor’s GitHub activity, specifically their maintenance of 1DayNews, an automated vulnerability intelligence pipeline. This tool:

  • Aggregates RCE disclosures from 17 sources (primarily network perimeter vendors)
  • Leverages DeepSeek to filter for exploitability
  • Distributes actionable alerts via Telegram

The actor's broader activity is opportunistic, with confirmed victims spanning three countries and multiple sectors. The autonomous AI campaigns targeted Chinese domestic infrastructure indiscriminately. In contrast, the manual campaign against the Malaysian target demonstrated higher intent, including refined exploitation parameters and proxy anonymization sustained over multiple days.

Conclusion

Our findings document a threat actor developing AI-augmented offensive capabilities that enabled them to dramatically increase the speed and scale of their campaigns. This research validates an emerging threat posed by AI-enabled attackers as they hone their autonomous attack processes to discover, assess, pivot and retarget without human intervention.

Although these autonomous campaigns did not achieve full compromise of any of their intended targets, the findings carry several implications for defenders.

  • Autonomous AI-driven attack cycles are operationally viable, and the margin of failure was narrow: Exploitation was prevented by target-side configuration requirements — the absence of prerequisite workflow configurations (Langflow) and authentication on form endpoints (n8n). Targets with weaker default configurations would have been susceptible.
  • Threat actors are constructing persistent AI offensive infrastructure: Rather than using AI tools in isolation, this actor assembled an integrated environment — custom automation skills, MCP server integration, proxy anonymization, and Telegram-based command and control — designed to retain and reuse successful procedures across sessions.
  • Threat actors follow the path of least resistance: For their autonomous attack engine, the actor selected a model with minimal safety controls (DeepSeek) accessed through an open-source framework with no client-side restrictions. The actor attempted to use Western models, but their provider-side controls likely limited their effectiveness for autonomous attacks. This likely led the actor to select the most permissive model for their campaign. Note: Our colleagues at OpenAI were able to confirm that their provider-side safeguards refused requests that violated their policies. They also confirmed that continued attempts led their safety systems to flag and disable an account they believe is linked to this campaign prior to our intelligence sharing with their team.
  • Autonomous AI execution introduces novel operational security risks for threat actors: The same autonomous capability the actor developed for offensive use directly caused the exposure of the operation, producing forensic artifacts that would not have existed under manual execution.

The significance of these findings lies in the trajectory rather than the outcome of any individual campaign. The actor is actively iterating — refining tool configurations, developing custom skills, establishing proxy infrastructure and executing autonomous attack cycles. The technical barrier to AI-augmented offensive operations is low and continues to decrease.

Palo Alto Networks Protection and Mitigation

Palo Alto Networks customers are better protected from the threats discussed above through the following products:

Cortex XDR and XSIAM

To combat an attack in which an attacker takes advantage of software exploits or vulnerabilities, Cortex XDR employs Endpoint Protection Modules (EPM). Each EPM targets a specific exploit type in the attack chain.

In addition, Cortex XDR and XSIAM help protect against post-exploitation activities using a multi-layer approach. This approach combines several layers of protection, including Advanced WildFire, Behavioral Threat Protection and the Local Analysis module, to prevent both known and unknown malware from causing harm to endpoints.

Cortex Xpanse

Cortex Xpanse has the ability to identify exposed Langlow, n8n and Citrix ADC/Netscaler devices on the public internet and escalate these findings to defenders. Customers can enable alerting on this risk by ensuring that these attack surface rules are enabled. Identified findings can be viewed in the incident view of Expander. These findings are also available for Cortex XSIAM/XDR/Cloud customers with the ASM license.

Next-Generation Firewall with Advanced Threat Prevention

Next-Generation Firewall with the Advanced Threat Prevention security subscription can help block the attacks with best practices via the following Threat Prevention signatures 97030, 96882, 96855, 97044, 97046, 97251, 97177, and 510019.

The Unit 42 AI Security Assessment and Unit 42 Frontier AI Defense service can help identify and mitigate complex AI-enabled risks.

If you think you may have been compromised or have an urgent matter, get in touch with the Unit 42 Incident Response team or call:

  • North America: Toll Free: +1 (866) 486-4842 (866.4.UNIT42)
  • UK: +44.20.3743.3660
  • Europe and Middle East: +31.20.299.3130
  • Asia: +65.6983.8730
  • Japan: +81.50.1790.0200
  • Australia: +61.2.4062.7950
  • India: 000 800 050 45107
  • South Korea: +82.080.467.8774

Palo Alto Networks has shared these findings with our fellow Cyber Threat Alliance (CTA) members. CTA members use this intelligence to rapidly deploy protections to their customers and to systematically disrupt malicious cyber actors. Learn more about the Cyber Threat Alliance.

Additional Resources