DarkCloud Stealer: Comprehensive Analysis of a New Attack Chain That Employs AutoIt

Executive Summary

In January 2025, Unit 42 researchers identified a series of attacks distributing DarkCloud Stealer. The latest attack chain incorporated AutoIt to evade detection and used a file-sharing server to host the malware. This article explores the chain of events from these recent campaigns and analyzes the characteristics of these attacks.

DarkCloud employs multi-stage payloads and obfuscated AutoIt scripting, making its detection challenging with traditional signature-based methods. Its ability to extract sensitive data and establish command and control (C2) communications highlights the importance of thorough detection and assessment.

Palo Alto Networks customers are better protected from DarkCloud Stealer through our Network Security solutions and Cortex line of products including Advanced WildFire, Cortex XDR and Cortex XSIAM.

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

Related Unit 42 Topics Infostealers, AutoIt

History of DarkCloud Stealer

The threat author has advertised DarkCloud Stealer in hacking forums as early as January 2023. Our telemetry reveals that attackers distributing DarkCloud Stealer have targeted various sectors but have notably focused on government organizations.

A February 2025 report from a Polish telecommunications provider notes that DarkCloud Stealer has appeared in attacks against machines in Poland. Initially spotted in 2022, this information stealer is designed to capture sensitive browser data like credit card information, login credentials and other personal data.

The malware is predominantly distributed through email phishing campaigns and is currently undergoing active development.

Activity Timeline

We have been monitoring this malware family since its appearance in 2022, and we have observed multiple samples that we believe are new variants of DarkCloud Stealer in late January 2025. Figure 1 shows a timeline displaying the sample count of the newly observed DarkCloud variant in January and February of 2025.

Bar chart displaying the number of samples collected on various dates. The highest count is 35 samples on 1/31/2025, with other notable counts on 1/28/2025 at 18 samples and 2/2/2025 at 19 samples. The chart includes the Palo Alto Networks and Unit 42 logos.
Figure 1. Timeline of new DarkCloud variant samples observed.

Figure 2 shows one of the samples, an AutoIt-compiled Portable Executable (PE) file in an analysis tool. Figure 3 shows the same sample in another analysis tool. Both tools confirm this sample is an AutoIt compiled PE file.

Screenshot of a software interface showing a highlighted section named "TimeDateStamp" with the value "2025-01-31 18:12:40". Additionally, the software identifies it as "Microsoft Visual C++(2013). AutoIt is also highlighted in red.
Figure 2. Compiled AutoIt PE file as detected by Detect-It-Easy.
Screenshot of a hexadecimal editor displaying various bytes of data with some sections in ASCII format highlighted.
Figure 3. AutoIt compiled script magic bytes in the RCData PE resource as shown by CFF Explorer.

Delivery Mechanism and Updated Infection Chain

We have observed many different attack chains that vary slightly. Since the variations in the attack chains are minor, we are illustrating just two possible attack chains for this article.

This attack chain starts with a phishing email. As shown in Figure 4, the email might contain a RAR archive or a phishing PDF that eventually downloads the RAR archive.

The RAR archive contains an executable file that eventually delivers the malicious payload. The multi-step nature of this attack underscores its intricacy and stealth. The stages of this attack are:

  1. A phishing email containing either a RAR archive or a phishing PDF
    1. In the case of an email with a phishing PDF, the PDF contains a pop-up message asking the victim to download a malicious archive disguised as a software update (from a file-sharing service URL).
  2. The RAR archive contains an AutoIt compiled PE (EXE) file.
  3. In addition to the AutoIt script (AU3 file), the AutoIt compiled EXE is packaged with two encrypted data files. One of the files is an encrypted shellcode, and the other file is the XORed payload.
  4. The AutoIt script builds and runs the final DarkCloud Stealer payload from the two data files.
Diagram depicting a cybersecurity threat where a phishing email with a PDF leads to a file sharing service, followed by a RAR file that contains an AutoIt EXE. This then executes encrypted shell code revealing an XORed payload, resulting in a final payload.
Figure 4. Infection chain of the new DarkCloud Stealer variant.

Figure 5 displays the number of these new AutoIt-based DarkCloud samples observed in various affected industries, while Figure 6 shows the geolocation of the samples we have seen.

A horizontal bar chart illustrating the number of samples across different industries. From top to bottom, the bars represent State and Local Government with 25 samples, Federal Government with 21 samples, High Tech with 12 samples, Finance with 9 samples, Manufacturing with 6 samples, and Media and Entertainment with 3 samples. The chart is branded by Palo Alto Networks and UNIT 42.
Figure 5. A new variant of the DarkCloud Stealer, samples seen for top industries.
Bar chart showing the number of samples from various countries. United States has 27, Brazil has 24, Peru and The Netherlands each have 8, Turkey has 4, and Hungary has 2. Palo Alto Networks and Unit 42 logo.
Figure 6. Geolocation of where we saw samples.

Technical Analysis

This section delves into the attack chain in these recent DarkCloud Stealer campaigns.

Phishing Email to File-Sharing Service

The initial phishing email contains a PDF file that displays a pop-up message stating the victim's Adobe Flash Player is out of date, as shown below in Figure 7. If a victim clicks the “Download Flash” button, this downloads a RAR archive from a file-sharing service. The archive contains the malicious AutoIt compiled executable.

PDF with identifying information is blurred in the background, supposedly for a purchase order. In the center is a popup for an Adobe Flash Player update notification, with the 'Update' and 'Download Flash' buttons visible.
Figure 7. Phishing PDF file.

Below, Figure 8 shows the downloaded RAR file and extracted EXE file.

Screenshot of a computer interface showing a WinRAR archive manager with a file named "olyfl3.rar" highlighted and an executable file for Adobe Reader installation visible.
Figure 8. Downloaded RAR file and extracted sample.

File-sharing services are commonly abused for malware distribution because they offer a convenient way for cybercriminals to host their malicious files. Most of these services can host files that do not require any login credentials or thorough validation of user activities, making them a useful tool in an attack chain.

Another benefit for attackers using file-sharing services is that they can host and remove files for a defined period of time. If someone deletes a file from the server, the attack will eventually cease. But this is also a disadvantage, as the attackers do not have full control compared to owning their own servers. If someone deletes their file-sharing account, the attack chain breaks.

In our case, the malicious RAR file is hosted on the URL hxxps[:]//files.catbox[.]moe/olyfi3.001.

Dropper - AutoIt Compiled Executable

A notable enhancement in this new variant is the incorporation of AutoIt compiled PE files as the dropper component.

AutoIt is a legitimate scripting language for automating the Windows GUI and general scripting tasks. Over the years, criminals have abused it to hide malicious activity. We have published various articles on criminal groups abusing the AutoIt platform.

An AutoIt-compiled executable is typically composed of two parts:

  • A standalone AutoIt interpreter
  • The compiled script bytecode stored as a resource within the PE file

The compression and encryption prevent easy decompilation of the bytecode. The compiled AutoIt binary handles the decompression of the bytecode before interpreting and executing it.

To better understand how this decompression works, we can analyze the AutoIt script extracted from the AutoIt-compiled PE file. At the beginning of the AutoIt script, as illustrated in Figure 9, the Call(), StringLen() and StringMid() function pointers are assigned to obscurely named global variables using the Execute() function. The string-related global variables serve as the building blocks for a string decoding function used for additional obfuscation.

Image showing three lines of colorful programming code with global variables and function calls, written on a dark background.
Figure 9. Variables assigned execution of Call() and Strings operations from the AutoIt script.

Figure 10 shows the subsequent string decoding function.

Screenshot of computer code written in a text editor, featuring a function, with obfuscation.
Figure 10. String decoding function in its original obfuscated form.

Figure 11 shows the deobfuscated version of the same function from Figure 10.

Screenshot of computer code with syntax highlighting featuring a function named StringDecode.
Figure 11. Manually deobfuscated string decoding function.

After implementing the string decoding function, the malware author uses the function to define additional variables, as illustrated in Figure 12. These additional variables use more random names, serving as basic function executions that will be used later.

A screenshot of computer code featuring declarations of global variables in a text editor, with syntax highlighting in purple, green, and yellow colors.
Figure 12. More global variables are assigned to function execution, albeit with an added layer of obfuscation.

Figure 13 displays the deobfuscated version of the same code from Figure 12. These definitions closely resemble the initial function executions presented at the start of the script, albeit with an added layer of string obfuscation.

Image of a colorful computer code snippet showing four lines in a terminal with syntax highlighting. Each line begins with the keyword "Global" followed by a variable and an assignment that involves the "Execute" function with commands like "BinaryLen", "DllStructCreate", "DllStructSetData", and "DllStructGetPtr".
Figure 13. Deobfuscated version of global variables assigned to function execution.

The AutoIt compiled EXE does not simply run the AU3 script alone. The EXE is compiled with two additional files, likely via the native AutoIt FileInstall() function. Specifically, in this sample, the filenames are iodization and plainstones.

Upon closer examination, we see plainstones is an XOR-encrypted PE file. Iodization appears to contain a shellcode pattern. This pattern consists of a series of characters representing hex values, interspersed with a static 8-digit numeric string.

Figure 14 displays a snapshot of the iodization file with the shellcode representation. Upon careful reading, the concatenated values form 0x558bec, which corresponds to the prologue of a subroutine.

Image featuring a repeated pattern of numerical values and vertical red lines on a black background.
Figure 14. A data blob that decodes into a PE file.

Indeed, we can locate the shellcode builder AutoIt script snippet as depicted in Figure 15.

Screenshot of a computer screen displaying code in a text editor with syntax highlighting. The code includes variable declarations and conditional statements in a programming language.
Figure 15. Code snippet for extracting shellcode from the encrypted dropped file.

Additionally, the deobfuscated version of this code is shown in Figure 16.

A screenshot displaying a script in a coding environment with variables and conditional structures. The script includes string manipulation functions and a loop, primarily in blue and green text on a black background.
Figure 16. Deobfuscated code snippet for extracting shell code from the encrypted dropped file.

Our analysis led to the following three insights.

  • In some samples of this malware, the associated global variable linking to the execution of StringLower() is not defined. This could potentially be a bug in the malware authors' toolchain.
  • The extractShellCode() function shown above in Figure 16 includes case sensitivity as an optional parameter, although it is not used in this case. This suggests the existence of potential variants with higher levels of obfuscation that use upper and lower case letters to encrypt the binary data file.
  • The same extractShellCode() function also includes the capability of bitwise AND assignment (&=) for encryption that is not used in this context. Once again, this indicates the possibility of variants with additional obfuscation methods applied to encrypt the binary data file.

The AutoIt script first creates a DllStructure to host the shellcode. It then calls VirtualProtect() to change the memory protection to PAGE_EXECUTE_READWRITE. Finally, the script executes the shellcode using CallWindowProc().

Figure 17 displays the deobfuscated code showing these functions. Notably, the entry point of the shellcode is not at the beginning of the injected blob but at the 9168th byte (or 0x23D0 in hex), as indicated by the parameters of CallWindowProc.

Screenshot of code with syntax highlighting that demonstrates how the shell code is executed.
Figure 17. A code snippet showing how the shellcode is eventually executed.

Upon examining the entry point of the shellcode, as depicted in Figure 18, we observed that soon after the 558BEC prologue, the code promptly initiates the construction of a string in memory. This string serves as the XOR decryption key for the previously mentioned plainstones file.

A screenshot displaying a section of assembly language code with various operation commands like 'mov', 'push', and register manipulations, commonly used in software development and debugging. A section in the upper middle is highlighted in grey.
Figure 18. Entry point of shellcode and string building as shown in IDA Pro.

Figure 19 displays the decrypted output as a PE file. Subsequently, the shellcode builds this PE file in memory and eventually executes it.

Screenshot of a CyberChef interface showing various cryptographic operations being performed with input, recipe, and output sections visible.
Figure 19. Decrypted DarkCloud payload as shown in CyberChef.

Payload - DarkCloud Executable

This section shows various functionalities employed by the final DarkCloud payload. First, as shown in Figure 20 below, we can identify the final payload executable as DarkCloud Stealer because of the DARKCLOUD signature string found in the sample.

Text on a computer screen displaying credentials including a username and password for an application named PIDGIN. Below, a file named recentServers.xml is mentioned, showing details of an FTP server including URL, host, and port. The background is dark with green text.
Figure 20. Strings from the DarkCloud Stealer sample as displayed in Hacker’s View.

In general, DarkCloud Stealer is a comprehensive data-stealing malware that collects and exfiltrates information such as:

  • Computer names
  • Usernames
  • Screenshots
  • Contacts
  • Browser passwords
  • Email client passwords

This infostealing functionality is shown in Figure 21 below.

Screenshot of a programming code in an IDE, featuring variables and functions, highlighted with syntax coloring. Some portions are highlighted in red boxes.
Figure 21. Various infostealing capabilities of the DarkCloud payload as shown by IDA Pro.

Stealing Browser and Mail Client Data

The payload attempts to retrieve saved usernames and passwords from various Chrome-based and Gecko-based browsers. Figure 22 shows a list of folders that the DarkCloud sample iterates through to scan for files such as logins.json, key4.db and signons.sqlite.

Code with most of the information redacted. An arrow points to the portion that hides various browser paths.
Figure 22. List of targeted browser data folders (displayed in Hacker’s View).

Figure 23 shows that the malware then checks each profile from the mail client and gathers saved credentials and data. Once it collects all the data, the malware consolidates it into a single file that it can exfiltrate from the victim's machine to the C2 server.

Image displaying a computer screen with various lines of code and data structures in a programming environment. Key terms visible include "UTF-16LE," "SOFTWARE," and references to "aData" and "LoginData". Portions redacted in green indicate a "Path to Mail Client" with arrows.
Figure 23. Disassembled code showing information-stealing functions from a mail client.

This sample checks for user accounts and credit card details from various Chromium-based and Gecko-based browsers. It searches for information from various types of popular credit cards, as shown in Figure 24 below.

Credit Card Information Stealing

The image displays two side-by-side screenshots of computer code with text and syntax highlighting, primarily featuring SQL database queries and assembly language instructions.
Figure 24. Disassembled code that shows credit card information stealing functionality.

SMTP and FTP Credential Stealing

This sample attempts to retrieve saved login credentials from various FTP client applications and decrypts them for exfiltration as shown in Figure 25.

Screenshot of code with various commands highlighted in pink and purple, and a section labeled "FTP Client Application" in a green box at the top, which is redacted in the image and indicated by an arrow.
Figure 25. Disassembled code indicating the malware steals credentials from a well-known FTP client.

Anti-Analysis and Other Crucial Functionalities

DarkCloud incorporates numerous anti-analysis techniques, including checks for analysis tools such as:

  • WinDbg
  • Fiddler
  • TCPView
  • Process Explorer
  • VMWare Tools
  • Wireshark
  • Process Monitor

The sample uses typical junk code and fake API calls to make analysis more difficult. This sample also checks for the victim’s public IP address using the web services below to obtain geolocation.

  • hxxp://showip[.]net
  • hxxp://www[.]mediacollege[.]com/internet/utilities/show-ip.shtml

Lastly, persistence is achieved through an addition to the RunOnce registry key:

  • HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce\

Conclusion

DarkCloud Stealer has been active since 2022 and is continuously evolving. Attackers often modify their techniques for delivering malware, making detection and prevention more difficult. Palo Alto Networks monitors these campaigns, using a range of static and dynamic techniques to detect and prevent them.

Stealers of this type are well-known elements of the threat landscape, and there are many approaches to protecting customers from these evolving attacks. These methods include dynamic and behavioral detections, as well as more reactive signature or pattern-based solutions.

MITRE ATT&CK® Techniques

Tactic Technique ID Technique Name
Initial Access  T1566.001  Phishing
Execution  T1204 

T1053 

User Execution 

Scheduled Task/Job

Persistence  T1053  Scheduled Task/Job 
Defense Evasion  T1140 Deobfuscate/Decode Files or Information
Credential Access T1555

T1539

T1552

T1528

Credentials from Password Stores

Steal Web Session Cookie

Unsecured Credentials

Steal Application Access Token

Discovery T1087

T1518

T1057

T1007

Account Discovery

Software Discovery

Process Discovery

System Service Discovery

Palo Alto Networks Protection and Mitigation

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

  • The Advanced WildFire machine-learning models and analysis techniques have been reviewed and updated in light of the IoCs shared in this research.
  • Cortex XDR and XSIAM are designed to:
    • Prevent the execution of known malicious malware, and also prevent the execution of unknown malware using Behavioral Threat Protection and machine learning based on the Local Analysis module.

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: 00080005045107

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 for the malicious PDF file:

  • bf3b43f5e4398ac810f005200519e096349b2237587d920d3c9b83525bb6bafc

SHA256 hash for the downloaded RAR archive:

  • 9940de30f3930cf0d0e9e9c8769148594240d11242fcd6c9dd9e9f572f68ac01

SHA256 hash of AutoIt-compiled EXE for DarkCloud Stealer:

  • 30738450f69c3de74971368192a4a647e4ed9c658f076459e42683b110baf371
  • 1269c968258999930b573682699fe72de72d96401e3beb314ae91baf0e0e49e8

URL hosting malicious RAR archive:

  • hxxps[:]//files.catbox[.]moe/olyfi3.001

Additional Resources

Stealthy .NET Malware: Hiding Malicious Payloads as Bitmap Resources

Executive Summary

This article highlights a new obfuscation technique threat actors are using to hide malware through steganography within bitmap resources embedded in otherwise benign 32-bit .NET applications. Upon execution, these files kick off a multi-stage chain of extracting, deobfuscating, loading and executing secondary payloads (dynamic-link libraries), eventually detonating the final payload (executable).

We illustrate how to recover the final payload from the initial bitmap resource embedded in the original file using malware drawn from recent malicious spam (malspam) campaigns observed in our internal telemetry. Security practitioners can better defend against this technique by understanding the inner workings of it.

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 Agent Tesla, Remcos RAT, XLoader

Initial Discovery

We observed multiple waves of malspam from a campaign using email attachments between the end of 2024 and early 2025. The most prominent of these waves targeted organizations in the financial industry in the Republic of Türkiye. Another wave of malspam targeted the logistics sector in Asia. In this campaign, attackers disseminated more than 250 emails, each with the same malware attached, throughout the targeted regions.

The attackers composed the email subject in the targeted region's native language. The original malware sample was a Windows executable (.exe) file, with a filename either related to:

  • Procurement - Request for quotation (RFQ) or purchase order (PO)
  • The name of the compromised organization sending out the malspam emails
  • The date of a specific financial transaction of interest

One commonality among the waves of malspam in this campaign is using bitmap resources embedded in otherwise benign 32-bit .NET applications to spearhead these attacks into targeted industries, sectors and regions. For example, the malware sample we analyzed for this article uses a copy of a legitimate .exe file for an application named Windows Forms OCR.

Besides hiding malicious payloads as bitmap resources, other common .NET obfuscation techniques include:

  • Metadata obfuscation: Renaming or removing class, method or property names to hinder static analysis
  • Opcode replacement: Swapping standard intermediate language (IL) instructions with functionally equivalent but less recognizable ones (e.g., substituting the callvirt opcode with call to confuse .NET decompilers often used by analysts when examining .NET malware samples)
  • Stolen bytes: Removing or relocating segments of IL code, reconstructing the code dynamically at runtime, so that decompiled code is rendered incomplete or invalid by .NET decompilers
  • Control flow obfuscation: Reordering, restructuring or replacing execution paths with opaque predicates, state machines or dispatcher loops (e.g., control flow flattening)
  • Virtualization-based obfuscation: Replacing IL code with custom bytecode that can only be executed by the accompanying custom interpreter (c.f. Uncovering .NET Malware Obfuscated by Encryption and Virtualization)
  • String encryption: Encrypting strings at rest and decrypting them only when necessary at runtime
  • Dynamic code generation: Generating and executing code at runtime via reflection

Attackers can use each of these techniques either independently or in some combination to strengthen the resilience of a malicious .NET application against reverse engineering efforts.

Technical Analysis

The following sections present a detailed analysis of how we recovered the final payload from an initial bitmap resource.

This analysis is for a malware sample with the following SHA-256 hash:

  • ac5fc65ae9500c1107cdd72ae9c271ba9981d22c4d0c632d388b0d8a3acb68f4

Stage 1: Initial Payload

The MainForm class used in the .NET code of this sample adopts a naming convention for its methods and parameters consistent with a particular topic.

For example, it would pair marine research and oceanography with names like the following:

  • AbyssalScan(oceanFloor, marineLife, maxSpecimens)
  • MarineExploration(oceanFloor, marineLife, maxSpecimens)
  • VerifyOxygenSaturation(level)

Figure 1 depicts the original malware sample process xgDV.exe unpacking its .NET bitmap resource sv into the TL.dll assembly.

Diagram showing the structure of a .NET application process. It features a flowchart with two main boxes: XgDV.exe and .NET Process (xgDV.exe). Connections lead from XgDV.exe to Manifest Resource inside a .NET Directory structure, and toward TL.dll showing resource unpacking.
Figure 1. Conceptual overview of stage 1 in the malware unpacking process.

The InitializeComponent() method of the MainForm .NET class is responsible for deobfuscating and loading the first 71,168 bytes of the malicious bitmap resource named sv as shown in Figure 2.

A screenshot displaying a segment of computer code in a text editor with syntax highlighting, showing a function named InitializeComponent.
Figure 2. Loading the malicious bitmap resource.

Stage 2: TL.dll

The bitmap resource named sv is fully loaded as TL.dll. This TL.dll assembly is another loader that does not contain any resources of its own. Figure 3 depicts the TL.dll assembly unpacking the .NET bitmap resource rbzR, found embedded in the original malware sample process xgDV.exe, into the Montero.dll assembly.

Diagram showing the process of extracting the .NET resource named "Montero.dll" from an executable named "xgDV.exe" to another process "xgDV.exe" represented by TL.dll. The diagram highlights the steps through .NET directory, metadata header, metadata stream, and manifest resource, concluding with the resource "rbzR/Montero.dll" that is part of the second step.
Figure 3. Conceptual overview of stage 2 in the malware unpacking process.

The original process then uses reflection through the LateBinding.LateCall() function call. This call invokes a method named Justy() within the TL.dll assembly. Embedded in the original sample, a second bitmap resource named rbzR is encoded as the hexadecimal string 72627A52 and passed as a parameter to this Justy() method, as shown in Figure 4.

A screenshot of a code snippet in a programming IDE, featuring a function named MainForm.
Figure 4. Executing the loaded bitmap resource.

Stage 3: Montero.dll

Figure 5 depicts the Montero.dll assembly unpacking its .NET byte array resource uK5APqTdSG into the final payload, Remington.exe.

Diagram illustrating the unpacking process of the .NET application named xgDV.exe into Remington.exe, highlighting the use of a manifest resource within the Montero.dll section. This is the third stage.
Figure 5. Conceptual overview of stage 3 in the malware unpacking process.

TL.dll deobfuscates and loads the bitmap resource named rbzR as Montero.dll, which is yet another loader. This file deobfuscates, loads and executes its own byte array resource named uK5APqTdSG.

Montero.dll accomplishes the deobfuscation by applying XOR encryption with subtraction, as shown in Figure 6. Using the XOR key opIaZhYa, this process produces the final payload named Remington.exe.

Screenshot of a computer code with syntax highlighting in dark mode.
Figure 6. XOR encryption with subtraction algorithm.

Additionally, a number of flags dictate the nature of this final payload's execution (e.g., whether the final payload is forked as a child process or not).

Stage 4: Final Payload

The objective of this obfuscation is to evade detection and successfully detonate popular malware families (e.g., Agent Tesla variants, XLoader and Remcos RAT) to gain an initial foothold into victim systems.

In this case, the final payload belongs to the Agent Tesla family. Its configuration is extracted as follows:

  • Post-infection SMTP data exfiltration:
    • Server: hosting2[.]ro.hostsailor[.]com:587
    • Sender: packagelog@gtpv[.]online
    • Password: 7213575aceACE@@
    • Receiver: package@gtpv[.]online

Analysis Approach

One effective approach to overcome this obfuscation technique is to use the .NET Framework's ICorDebugManagedCallback interface to create a debugger that hooks the following API functions:

  • System.Resources.ResourceManager::GetObject(string name)
    • Intercepts embedded resources (including bitmaps) being read by the .NET application
  • System.AppDomain::Load(byte[] rawAssembly) and System.Reflection.Assembly::Load(byte[] rawAssembly)
    • Intercepts the loading of a .NET assembly from a raw byte array

Hooking is the act of placing breakpoints, which temporarily pauses program execution at certain points in time to extract values of interest.

Conclusion

The use of bitmap resources to conceal malicious payloads is a steganography technique that is prevalent in malspam campaigns. By hiding malicious payloads as bitmap resources, threat actors can potentially bypass traditional security mechanisms and evade detection.

The analysis covered in this article underscores how threat actors are able to leverage this method of delivery to execute malicious code in a stealthy manner. It is important for security practitioners to understand this obfuscation technique to stay ahead of such threats.

Palo Alto Networks Protection and Mitigation

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

  • The 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 are designed to prevent the execution of known malicious malware, and also 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: 00080005045107

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

Note that some of the listed samples use a Captive.dll with the SHA-256 hash 5adff9ae840c6c245c0a194088a785d78d91fe734ee46a7d51605c1f64f6dadd as the Stage 2 loader, instead of the aforementioned TL.dll.

Agent Tesla Variant Activity

SHA-256 hashes for three samples

  1. 30b7c09af884dfb7e34aa7401431cdabe6ff34983a59bec4c14915438d68d5b0
  2. 5487845b06180dfb329757254400cb8663bf92f1eca36c5474e9ce3370cadbde
  3. ac5fc65ae9500c1107cdd72ae9c271ba9981d22c4d0c632d388b0d8a3acb68f4

Post-infection SMTP data exfiltration

For SHA-256 hash: 30b7c09af884dfb7e34aa7401431cdabe6ff34983a59bec4c14915438d68d5b0

  • Server: mail.gtpv[.]online:587
  • Sender: kings@gtpv[.]online
  • Password: 7213575aceACE@@
  • Receiver: king@gtpv[.]online

For SHA-256 hash: 5487845b06180dfb329757254400cb8663bf92f1eca36c5474e9ce3370cadbde

  • Server: nffplp[.]com:587
  • Sender: airlet@nffplp[.]com
  • Password: $Nke%8XIIDtm
  • Receiver: smt.treat@yandex[.]com

For SHA-256 hash: ac5fc65ae9500c1107cdd72ae9c271ba9981d22c4d0c632d388b0d8a3acb68f4

  • Server: hosting2.ro.hostsailor[.]com:587
  • Sender: packagelog@gtpv[.]online
  • Password: 7213575aceACE@@
  • Receiver: package@gtpv[.]online

XLoader Activity

SHA-256 hashes for four samples

  1. 511af3c08bd8c093029bf2926b0a1e6c8263ceba3885e3fec9b59b28cd79075d
  2. 604cbcfa7ac46104a801a8efb7e8d50fa674964811ec7652f8d9dec123f8be1f
  3. 98195a4d27e46066b4bc5b9baea42e1e5ef04d05734c556d07e27f45cb324e80
  4. a4a6364d2a8ade431974b85de44906fe8abfed77ab74cc72e05e788b15c7a0cf

C2 for data exfiltration

For SHA-256 hash: 511af3c08bd8c093029bf2926b0a1e6c8263ceba3885e3fec9b59b28cd79075d

  • hxxp[://]www.sixfiguredigital[.]group/aoc3/

For SHA-256 hash: 604cbcfa7ac46104a801a8efb7e8d50fa674964811ec7652f8d9dec123f8be1f

  • hxxp[://]www.sixfiguredigital[.]group/aoc3/

For SHA-256 hash: 98195a4d27e46066b4bc5b9baea42e1e5ef04d05734c556d07e27f45cb324e80

  • hxxp[://]www.sixfiguredigital[.]group/aoc3/

For SHA-256 hash: a4a6364d2a8ade431974b85de44906fe8abfed77ab74cc72e05e788b15c7a0cf

  • hxxp[://]www.yperlize[.]net/aa02/

Remcos RAT Activity

SHA-256 hashes for three samples

  1. 3b83739da46e20faebecf01337ee9ff4d8f81d61ecbb7e8c9d9e792bb3922b76
  2. 8146be4a98f762dce23f83619f1951e374708d17573f024f895c8bf8c68c0a75
  3. 9ed929b60187ca4b514eb6ee8e60b4a0ac11c6d24c0b2945f70da7077b2e8c4b

C2 for data exfiltration

For SHA-256 hash: 3b83739da46e20faebecf01337ee9ff4d8f81d61ecbb7e8c9d9e792bb3922b76

  • myhost001.myddns[.]me:9373
  • 103.198.26[.]222:9373

For SHA-256 hash: 8146be4a98f762dce23f83619f1951e374708d17573f024f895c8bf8c68c0a75

  • 67.203.7[.]163:3320

For SHA-256 hash: 9ed929b60187ca4b514eb6ee8e60b4a0ac11c6d24c0b2945f70da7077b2e8c4b

  • 176.65.144[.]154:3077

Additional Resources

Updated May 14, 2025, at 6:25 a.m. PT to remove mentions of modified timestamps, which do not apply. 

Iranian Cyber Actors Impersonate Model Agency in Suspected Espionage Operation

Executive Summary

Unit 42 recently identified suspected covert Iranian infrastructure impersonating a German model agency. This infrastructure hosted a fraudulent website designed to mimic the authentic agency’s branding and content.

Visitors unknowingly triggered obfuscated JavaScript designed to capture detailed visitor information, such as:

  • Browser languages
  • Screen resolutions
  • IP addresses
  • Browser fingerprints

Attackers likely collected these data points to enable selective targeting.

The website replaces a real model's profile with a fake one, including a currently inactive link to a private album. This suggests preparation for targeted social engineering attacks, likely using the fake profile as a lure. We have not yet observed direct victim interaction, though it is possible victims would arrive at the fake website through spear phishing.

The operation's complexity, methods and targeting lead us to believe with high confidence that these are the actions of an Iranian threat group. With lower confidence, we suspect a group overlapping with Agent Serpens, also known as APT35 or Charming Kitten, is behind this campaign. This group is known for conducting espionage campaigns against Iranian dissidents, journalists and activists, particularly those living abroad.

In this article, we will cover details of the fake website’s functionality, including the obfuscated data collection routines and the fictitious profile likely used for social engineering.

Individuals and organizations, particularly those involved with Iranian activist communities, should remain vigilant for similar operations and treat unsolicited contacts cautiously before engaging.

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 Iran, Phishing

Technical Analysis of the Fake Mega Model Agency Site

While monitoring infrastructure we assess is likely tied to Iranian cyber actors, we discovered the domain megamodelstudio[.]com. This domain was registered on Feb. 18, 2025, and has resolved to 64.72.205[.]32 since March 1, 2025. This domain hosts a website impersonating the Hamburg-based Mega Model Agency, as illustrated in Figure 1.

Black website banner featuring the logo 'Mega' at the center top, with menu options below reading 'Women', 'Men', 'Curvy', 'Apply'.
Figure 1. Fake Mega Model Agency website.

This actor-created website closely replicates the actual website's branding, layout and content. However, the clone includes an obfuscated script designed to harvest detailed visitor information and potentially lure specific targets to a fictitious model’s profile.

This fake website exhibits the hallmarks of social engineering attacks performed by known Iranian advanced persistent threat groups (APTs). Most notably, it appears to link to Agent Serpens, a threat actor that the security community has widely reported to perform espionage campaigns against individuals and organizations critical of the Iranian regime, including in Germany [PDF].

Upon visiting any page of the fake website, obfuscated JavaScript code runs in the victim’s browser. The likely goal of the code is to enable selective targeting by determining sufficient device- and network-specific details about visitors.

The script performs the following tasks:

  • Enumerating browser languages and plugins, retrieve screen resolution and collect timestamps to track a visitor’s locale and environment
  • Revealing the user’s local and public IP address using WebRTC-based IP address leaking
  • Leveraging canvas fingerprinting, using SHA-256 to produce a device-unique hash
    • Canvas fingerprinting is a technique that uses the HTML5 canvas element to identify unique characteristics about a user’s device and generate a corresponding fingerprint
  • Structuring the collected data (e.g., language, screen size, canvas hash) as JSON and delivering it to the endpoint /ads/track via a POST request
    • This naming convention suggests an attempt to disguise the collection as benign advertising traffic rather than storing and processing potential target fingerprints

In addition to its data collection routines, the fake website contains functionality designed to dynamically alter on-page references to a specific model and replace them with details and images of a model named “Shir Benzion.” We assess that this replacement profile is likely fictitious and part of a social engineering tactic.

Attackers also inject a link to a private album into the profile for this fictitious model, though it appears to be non-functional at the time of writing. We assess that this is likely a placeholder intended for targeted social engineering attacks, potentially serving as a mechanism for harvesting credentials or delivering malware payloads. We illustrate these observations in Figures 2 and 3.

Two screenshots comparing the legitimate versus fake modeling agencies. The top image shows a modeling agency featuring a grids of headshots with alphabetized labels above to search by name among blurred and unidentifiable images. The interface includes menu options for different categories such as "Women", "Men", and "Curvy". The bottom image is the same except for the addition of the fake Shir Benzion profile.
Figure 2. Top: Legitimate Mega Model Agency women’s page. Bottom: Fake page with profile of a real model replaced by the fictitious “Shir Benzion” profile.
Three images from fake model Shir Benzion's private album featuring a model wearing a white sweater and cap, posing in front of a building.
Figure 3. Fictitious “Shir Benzion” profile with private album lure.

The fake website’s current functionality, combined with the potential for further malicious development, indicates that this campaign is both an ongoing and evolving threat.

Conclusion

This operation, involving detailed visitor profiling and sophisticated impersonation tactics, demonstrates a continued escalation in suspected Iranian cyberespionage activity. Such activities present significant risks to various organizations and individuals, such as those advocating for or supporting Iranian dissidents.

Individuals and organizations should treat unsolicited contacts offering seemingly appealing opportunities cautiously. People should independently verify the legitimacy of contacts, websites and offers before engaging or sharing sensitive information.

Palo Alto Networks customers are better protected from the threats discussed in this article 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: 00080005045107

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

  • Domain: megamodelstudio[.]com
  • Description: The domain pointing to the website impersonating Mega Model Agency
  • IP address: 64.72.205[.]32
  • Description: The IP address of the server hosting the fake Mega Model Agency website
  • URL: hxxps://www.megamodelstudio[.]com/model
  • Description: The URL for the main page of the fake Mega Model Agency website
  • URL: hxxps://www.megamodelstudio[.]com/women
  • Description: The URL for the women’s page of the fake Mega Model Agency website
  • URL: hxxps://www.megamodelstudio[.]com/women/Shir-Benzion
  • Description: The URL for the fictitious “Shir Benzion” profile

Additional Resources

 

Lampion Is Back With ClickFix Lures

Executive Summary

Unit 42 researchers recently uncovered a highly focused malicious campaign targeting dozens of Portuguese organizations, particularly in the government, finance and transportation sectors. This campaign was orchestrated by the threat actors behind Lampion malware, an infostealer that focuses on sensitive banking information. This malware family has been active since at least 2019.

During our investigation, we found that the group has added ClickFix lures to their arsenal. ClickFix is a social engineering technique that multiple malware families have adopted since late 2024, which lures victims to copy and execute malicious commands on their machine, under the guise of fixing computer problems.

This campaign follows many of the same patterns as previous Lampion malware activity in terms of targets and infrastructure, as well as tactics, techniques and procedures (TTPs). These included multiple, highly obfuscated Visual Basic (VB) scripts as part of the attack chain, and similarities in the initial social engineering themes.

While the final payload was commented out in the activity we observed, we could otherwise determine the full infection chain, including loaders. It is possible that a new wave of attacks could instead deliver the final payload.

The techniques and activities presented in this article highlight the importance of implementing enhanced detection capabilities to identify complex and obfuscated threats.

Palo Alto Networks customers are better protected from the threats described 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 PowerShell, VBScript

Technical Analysis of the Lampion Campaign

Between late 2024 and early 2025, we noticed an increase in attacks against Portuguese companies. In the process of examining our telemetry, we noticed one campaign in particular that demonstrated unusual size and focus. Although the campaign used several measures to evade traditional detection mechanisms, we successfully identified and disrupted the infection chain.

This campaign can be linked to Lampion banking malware, an infostealer that focuses on sensitive banking information. For example, the C2 server used in this campaign is the same server that was used in successful Lampion infections in the past. Furthermore, we found the same TTPs being used as in past Lampion campaigns: multiple, highly obfuscated VB scripts, indirect execution of consecutive stages, and similar initial infection lure subjects.

Infection Chain Analysis: A Long and Winding Road

The campaign’s infection chain began with a phishing email that contains a malicious ZIP file attachment. An HTML file within this ZIP file redirects the victim to autoridade-tributaria[.]com, a website mimicking a legitimate Portuguese tax authority.

Upon going to the website, the victim is then presented with a fake document or software installation page that prompts them to copy a malicious PowerShell command and execute it in the Run dialog. This command includes a comment in Portuguese: “#Habilitar Visualização de ficheiro” (this translates to “Enable File Preview” in English). This is shown at the end of the code snippet below.

A screenshot of a computer code snippet written in PowerShell, showing a malicious command to download and execute a file from a remote server. The code includes mention of a hosted URL and a .php file, with usage of Invoke-WebRequest and Start-Process commands. The final line is in Portuguese, translated to "Enable File Preview."
Figure 1. Code snippet from PowerShell command.

This command is the heart of the ClickFix fraud, which is a technique that is being used by various crimeware strains such as Lumma Stealer and NetSupport RAT — and now also Lampion. When an attacker uses ClickFix in a social engineering attack, the victim is prompted to copy malicious commands to their Run dialog or terminals to “fix” a certain problem.

This technique manipulates the victim into running a malicious command that infects their machine.

The victim’s execution of the malicious PowerShell command downloads and executes an obfuscated Visual Basic Script (VBS) file, which is part of this campaign. Figure 1 depicts the infection chain below.

Flowchart illustrating a phishing attack process beginning with a phishing email containing a ZIP file. The flow includes multiple steps such as downloading, executing files, and contacting servers, culminating in a DLL loader, and various scripts that create scheduled tasks and a CMD file on startup. Symbols like clouds labeled "Cloud Provider" and visual representations of emails, HTML files, and scripts are used to denote different stages and actions.
Figure 2. Lampion's ClickFix infection chain.

Another interesting aspect of Lampion’s infection chain is that it is divided into several non-consecutive stages, executed as separate processes. This dispersed execution complicates detection, as the attack flow does not form a readily identifiable process tree. Instead, it comprises a complex chain of individual events, some of which could appear benign in isolation.

In the next section, we take a deep dive into the VBS infection chain, which combines multiple obfuscation and bloating techniques that attackers implemented in these scripts.

Analysis of Stages 1 and 2: Initial VBS Downloaders

The first and second stages of this campaign have several different versions, mainly varying in size and filenames. Overall, both use multiple obfuscation methods such as junk variables and indirect ASCII conversions to bloat the original code to a significant size. This type of obfuscation hinders the work of both defenders and analysts, by obscuring the script’s main functionality.

Once the first stage is executed, it writes a similarly obfuscated second-stage downloader in the %TEMP% folder. To further thwart detection, the first stage does not directly execute the second but rather creates a hidden scheduled task to be triggered at a random time.

The sole function of the second stage is to download yet another VBS stager from a cloud-hosted server. This stager is disguised as a PHP file, a technique used repeatedly throughout this campaign. Figure 2 shows a deobfuscated code snippet from the first stage responsible for writing the second stage.

Text editor screen displaying multiple lines of programming code, with syntax color-coded for easier parsing.
Figure 3. Deobfuscated first stage writing second stage content.

Analysis of Stage 3: The Final VBS Payload

The third VBS stands out due to its large size (between 30 MB and 50 MB). Although it is filled with junk variables and obfuscated functions, this stage is also more robust in its functions.

The third stage VBS is in charge of reconnaissance and detection evasion maneuvers, such as:

  • Checking for existing security products using Windows Management Instrumentation (WMI)
  • Discerning whether the victim’s machine is a sandbox or virtual machine (VM)
  • Gathering initial data on the targeted endpoint, including a unique MD5 value of a victim ID, Base64-encoded under the GET request parameter dados= (“data” in Portuguese)
  • Sending the encoded ID to the cloud-hosted command-and-control (C2) server

Figure 3 depicts the process tree generated during stage 3 execution.

Cortex XDR screenshot illustrating a cyber attack flow with two scripts executing commands via Node.js, showing interactions with system startup processes and command shells, highlighted by named entities and directional arrows.
Figure 4. Process tree of third stage execution as shown in Cortex XDR.

Similar to the previous stages, the third stage does not directly execute the fourth stage but instead creates a complex execution method:

  • First, it writes the content of the command shown in Figure 3 into a .cmd file in the Windows startup folder and names it after the victim’s hostname
  • Afterwards, the script creates a hidden scheduled task that forces the system to shut down
  • The shutdown triggers the execution of the .cmd file during the subsequent startup, ultimately launching the fourth-stage DLL loader with rundll32.exe

We believe the threat actor reuses this stage across multiple campaigns with varying infection vectors. By looking at the comments present in the script, we can see a decoded version of a curl command that was supposed to download the final Lampion payload from the attacker’s C2. Since the attacker deactivated the command for downloading the payload by placing it within a comment block, the final Lampion payload was not downloaded in this campaign.

A code snippet overlaid with the full decoded comment in red text.
Figure 5. Alternative method of downloading Lampion via curl, commented out by the attacker.

Furthermore, the attacker left other comments that revealed the script’s functionality in Portuguese (such as “obtain information on antivirus software,” shown in Figure 5).

A screenshot of code in a text editor with syntax highlighting. The code contains various commands and functions written in Portuguese, related to system, hardware, and software information retrieval. Four lines are highlighted in red boxes to indicate where the Portuguese is.
Figure 6. Comments in Portuguese by the threat actors.

Despite their many efforts to obfuscate code, in certain cases the attacker kept an unencoded version of some of the commands that the code executed. These are translated into natural language and placed in comments, as shown in Figure 6.

Screenshot of two lines of code. The second line is highlighted in a red box and is a decoded version of the fourth execution stage of the malware.
Figure 7. Comments containing a decoded version of fourth stage execution.

Analysis of Stage 4: The Loader DLL
After exfiltrating initial reconnaissance data, the third stage VBScript tries to download the fourth stage — a DLL loader — from another cloud-hosted address that redirects to hxxps://inde-faturas[.]com/54879878. The fourth stage DLL’s name is generated from the infection timestamp, in YYYYMMDDHHmmSS format (e.g., 20241201120101.dll).

This loader variant is also extremely large, at over 700 MB. This makes it impossible for people to upload to crowd-sourced threat intelligence platforms, thus increasing the difficulty for defenders.

As outlined above, the DLL is triggered by rundll32.exe, which calls a different export function for each unique victim. All functions are usually words in Portuguese, unlike past campaigns in which the fourth stage was triggered by a randomized function name.

Unlike previous campaigns that downloaded the fourth stage along with a zipped Lampion payload, this campaign only downloads the aforementioned DLL. This could indicate either a mistake on the attacker’s part or a testing phase for the next wave of attacks. The commented-out commands relating to the .zip payload download suggest incomplete or incorrect content.

Conclusion

We recently detected a campaign that targets Portuguese-speaking individuals and organizations in various sectors, including government, finance and transportation. This campaign aligns with TTPs and indicators that Lampion used in the past. It also shows the group’s adaptation of a new initial attack vector: ClickFix lures.

The increasing prevalence of ClickFix, coupled with low awareness of its risks, poses a significant threat. We advise security practitioners to proactively address this evolving threat by:

  • Increasing awareness by educating personnel to be wary of ClickFix lures
  • Setting up defense and monitoring measures for PowerShell scripting and clipboard activity

Palo Alto Networks Protection and Mitigation

Palo Alto Networks customers are better protected from the Lampion attack vector through Cortex XDR and XSIAM.

Cortex XDR VBS Local Analysis Module and Advanced WildFire classify the Lampion VBS loader samples discussed in this article as malicious.

Advanced URL Filtering and Advanced DNS Security identify known URLs and domains associated with ClickFix campaigns 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: 00080005045107

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.

Appendix A

Detection With Cortex XDR VBS Local Analysis Module

The new Cortex XDR VBS Local Analysis Module provides enhanced detection capabilities to identify complex and obfuscated VBS threats. In the campaign described above, several rules were triggered by malicious activity originating from impacted endpoints. Figure 7 below depicts alerts that were triggered due to the execution of malicious VBScripts as part of the attack.

Screenshot of Cortex XDR, a cybersecurity alert interface displaying details of a potential malware threat, identified as "XOR Agent" from "wscript.exe", with an alert level marked as medium and status as prevented or blocked.
Figure 8. Malicious VBScript detection and prevention shown in Cortex XDR.

Indicators of Compromise

Phishing Email

  • ee4c8e4cce55bd40afa1fb0bc0eee3d7c23d0ebe2db48c2092e854f6ca1472ce

Stage 1 VBS

  • 4aeb84dd71588a35084109ff5525c7bff2f30e0ed58ce139621b17f2374bdb35

Stage 2 VBS

  • bba48cf24bb9e6bdcbc79c2241f101e3dd4127ab450e3dbbe1b79fa738f06483
  • 29b63fcf8e5f08fd12166507b3a85746e3ec685ae0620a124e64125ecd9ccf9b

Stage 3 VBS

  • 58fe2a7d4435c9c24c98d33aff1110add4bf95add31558f51289a028ddafcc6e
  • 334dfbaefbf7e6301d2385f95d861eb6dae9018c48fb298a2cbf5f364fbcdb2d
  • 1681c3b88ed315543ac1bf07d258d560cf2f85bfd26c10471d71700eaeb57fb3

Lampion C2 Stage 4 Loader

  • 5.8.9[.]77
  • 83.242.96[.]159

Domains

  • Inde-faturas[.]com
  • autoridade-tributaria[.]com

C2 URLs

  • http://18.116.63[.]61/ifeellike.php
  • http://18.116.63[.]61/trogloditas.php
  • http://3.135.249[.]199/prayfor.php
  • http://18.217.122[.]187/proposito.php
  • http://18.226.150[.]56/persistir.php
  • http://3.142.40[.]36/grow.php
  • http://18.216.78[.]94/aceitalo.php
  • http://3.23.103[.]13/stick.php

C2 IPv4 Addresses (Cloud-Hosted)

  • 18.221.69[.]167
  • 18.222.97[.]143
  • 18.116.15[.]129
  • 18.220.96[.]58
  • 3.135.200[.]135
  • 18.191.192[.]110
  • 18.224.38[.]123
  • 18.118.163[.]100
  • 3.147.127[.]14
  • 3.138.32[.]196
  • 18.117.11[.]70
  • 18.117.173[.]119
  • 18.116.28[.]153
  • 3.16.76[.]203
  • 3.15.7[.]241
  • 3.15.155[.]141
  • 18.117.71[.]203
  • 3.133.160[.]140
  • 3.133.113[.]215
  • 3.143.24[.]42
  • 18.217.180[.]185
  • 3.23.105[.]171
  • 3.142.200[.]117
  • 3.128.34[.]187
  • 18.191.240[.]233
  • 3.147.86[.]100

Additional Resources

AI Agents Are Here. So Are the Threats.

Executive Summary

Agentic applications are programs that leverage AI agents — software designed to autonomously collect data and take actions toward specific objectives — to drive their functionality. As AI agents are becoming more widely adopted in real-world applications, understanding their security implications is critical. This article investigates ways attackers can target agentic applications, presenting nine concrete attack scenarios that result in outcomes such as information leakage, credential theft, tool exploitation and remote code execution.

To assess how widely applicable these risks are, we implemented two functionally identical applications using different open-source agent frameworks — CrewAI and AutoGen — and executed the same attacks on both. Our findings show that most vulnerabilities and attack vectors are largely framework-agnostic, arising from insecure design patterns, misconfigurations and unsafe tool integrations, rather than flaws in the frameworks themselves.

We also propose defense strategies for each attack scenario, analyzing their effectiveness and limitations. To support reproducibility and further research, we’ve open-sourced the source code and datasets on GitHub.

Key Findings

  • Prompt injection is not always necessary to compromise an AI agent. Poorly scoped or unsecured prompts can be exploited without explicit injections.
  • Mitigation: Enforce safeguards in agent instructions to explicitly block out-of-scope requests and extraction of instruction or tool schema.
  • Prompt injection remains one of the most potent and versatile attack vectors, capable of leaking data, misusing tools or subverting agent behavior.
  • Mitigation: Deploy content filters to detect and block prompt injection attempts at runtime.
  • Misconfigured or vulnerable tools significantly increase the attack surface and impact.
  • Mitigation: Sanitize all tool inputs, apply strict access controls and perform routine security testing, such as with Static Application Security Testing (SAST), Dynamic Application Security Testing (DAST) or Software Composition Analysis (SCA).
  • Unsecured code interpreters expose agents to arbitrary code execution and unauthorized access to host resources and networks.
  • Mitigation: Enforce strong sandboxing with network restrictions, syscall filtering and least-privilege container configurations.
  • Credential leakage, such as exposed service tokens or secrets, can lead to impersonation, privilege escalation or infrastructure compromise.
  • Mitigation: Use a data loss prevention (DLP) solution, audit logs and secret management services to protect sensitive information.
  • No single mitigation is sufficient. A layered, defense-in-depth strategy is necessary to effectively reduce risk in agentic applications.
  • Mitigation: Combine multiple safeguards across agents, tools, prompts and runtime environments to build resilient defenses.

It is important to emphasize that neither CrewAI nor AutoGen are inherently vulnerable. The attack scenarios in this study highlight systemic risks rooted in language models’ limitation in resisting prompt injection and misconfigurations or vulnerabilities in the integrated tool — not in any specific framework. Therefore, our findings and recommended mitigations are broadly applicable across agentic applications, regardless of the underlying frameworks.

Palo Alto Networks redefines AI security with Prisma AIRS (AI Runtime Security) — delivering real-time protection for your AI applications, models, data, and agents. By intelligently analyzing network traffic and application behavior, Prisma AIRS proactively detects and prevents sophisticated threats like prompt injection, denial-of-service attacks, and data exfiltration. With seamless, inline enforcement at both the network and API levels.

Meanwhile, AI Access Security offers deep visibility and precise control over third-party generative AI (GenAI) use. This helps prevent shadow AI risks, data leakage and malicious content in AI outputs through policy enforcement and user activity monitoring. Together, these solutions provide a layered defense that safeguards both the operational integrity of AI systems and the secure use of external AI tools.

A Unit 42 AI Security Assessment can help you proactively identify the threats most likely to target your AI environment.

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, Prompt Injection

An Overview of the AI Agent

An AI agent is a software program designed to autonomously collect data from its environment, process information and take actions to achieve specific objectives without direct human intervention. These agents are typically powered by AI models — most notably large language models (LLMs) — which serve as their core reasoning engines.

A defining feature of AI agents is their ability to connect AI models to external functions or tools, allowing them to autonomously decide which tools to use in pursuit of their objectives. A function or tool is an external capability — like an API, database or service — that the agent can call to perform specific tasks beyond the model's built-in knowledge. This integration enables them to reason through given tasks, plan solutions and execute actions effectively to achieve their goals. In more complex scenarios, multiple AI agents can collaborate as a team — each handling different aspects of a problem — to solve larger and more intricate challenges collectively. ​

AI agents have diverse applications across various sectors. In customer service, they power chatbots and virtual assistants to handle inquiries efficiently. In finance, they assist with fraud detection and portfolio management. Healthcare can also utilize AI agents for patient monitoring and diagnostic support.

Figure 1 is a typical AI Agent architecture that shows how an agent uses an LLM to plan, reason and act through an execution loop. It connects to external tools via function calling to perform tasks such as accessing code, data or human input.

Diagram illustrating the architecture of an application with AI model integration. The diagram includes three main components: Services, Application, and AI Model. The Application is subdivided into Input, Agent, and Output areas, featuring Planning, Execution Loop, and Function Calling within the Agent. Supporting Services include Long-Term Memory and Vector Datastore. The AI Model is marked with a LLM (Large Language Model) and Function Calling. Icons for code, human in the loop, device, and content are shown under Services. Palo Alto Networks and Unit 42 logo lockup.
Figure 1. AI agent architecture.

The agent could also incorporate memory — both short- and long-term — to retain context and enhance decision-making. Applications interact with the agent by sending requests and receiving results through input and output interfaces, typically exposed as APIs.

Security Risks of AI Agents

As AI agents are typically built on LLMs, they inherit many of the security risks outlined in the OWASP Top 10 for LLMs, such as prompt injection, sensitive data leakage and supply chain vulnerabilities. However, AI agents go beyond traditional LLM applications by integrating external tools that are often built in various programming languages and frameworks.

Including these external tools exposes the LLMs to classic software threats like SQL injection, remote code execution and broken access control. This expanded attack surface, combined with the agent’s ability to interact with external systems or even the physical world, makes securing AI agents particularly critical.

The recently published article OWASP Agentic AI Threats and Mitigation highlights these emerging threats. Below is a summary of key threats relevant to the attack scenarios demonstrated in the next section:

  • Prompt injection: Attackers sneak in hidden or misleading instructions to a GenAI system, attempting to cause the application to deviate from its intended behavior. This can cause the agent to behave in unexpected ways, like ignoring given rules and policies, revealing sensitive information or using tools to take unintended actions.
  • Tool misuse: Attackers manipulate the agent — often through deceptive prompts — to abuse its integrated tools. This can involve triggering unintended actions or exploiting vulnerabilities within the tools, potentially resulting in harmful or unauthorized execution.
  • Intent breaking and goal manipulation: Attackers target an AI agent’s ability to plan and pursue objectives by subtly altering its perceived goals or reasoning process. Attackers exploit these vulnerabilities to redirect the agent’s actions away from its original intent. A common tactic includes agent hijacking, where adversarial inputs distort the agent’s understanding and decision-making.
  • Identity spoofing and impersonation: Attackers exploit weak or compromised authentication to pose as legitimate AI agents or users. A major risk is the theft of agent credentials, which can allow attackers to access tools, data or systems under a false identity.
  • Unexpected RCE and code attacks: Attackers exploit the AI agent’s ability to execute code. By injecting malicious code, they can gain unauthorized access to elements of the execution environment, like the internal network and host file system. This poses serious risks, especially when agents have access to sensitive data or privileged tools.
  • Agent communication poisoning: Attackers target the interactions between AI agents by injecting attacker-controlled information into their communication channels. This can disrupt collaborative workflows, degrade coordination and manipulate collective decision-making — especially in multi-agent systems where trust and accurate information exchange are critical.
  • Resource overload: Attackers exploit the AI agent’s allocated resources by overwhelming their compute, memory or service limits. This can degrade performance, disrupt operations and make the application unresponsive, impacting all the users of the application.

Simulated Attacks on AI Agents

To investigate the security risks of AI agents, we developed a multi-user and multi-agent investment advisory assistant using two popular open-source agent frameworks: CrewAI and AutoGen. Both implementations are functionally identical and share the same instructions, language models and tools.

This setup highlights that the security risks are not specific to any framework or model. Instead, they stem from misconfigurations or insecure design introduced during agent development. It is important to note that CrewAI or AutoGen frameworks are NOT vulnerable.

Figure 2 illustrates the architecture of the investment advisory assistant, which consists of three cooperating agents: the orchestration agent, news agent and stock agent.

Diagram showing an Orchestration Agent interacting with Customers, a News Agent, and a Stock Agent. The Orchestration Agent processes input and output from Customers and manages tasks with the News Agent, which uses a Web Reader and Search Engine, and the Stock Agent, which uses a Code Interpreter, Database, and Stock data. Palo Alto Networks and Unit 42 logo lockup.
Figure 2. Investment advisory assistant architecture.
  • Orchestration agent: This agent manages the user interaction. It interprets user requests, delegates tasks to the appropriate agents, consolidates their outputs and delivers final responses back to the user.
  • News agent: This agent gathers and summarizes the latest financial news about a specific company or industry. It is equipped with two tools:
    • Search engine tool: This tool uses Google to retrieve URLs pointing to relevant financial news. We use CrewAI’s implementation of SerperDevTool.
    • Web content reader tool: This tool fetches and extracts text content from a given webpage. We use CrewAI’s implementation of ScrapeWebsiteTool.
  • Stock agent: This agent helps users manage their stock portfolios, including viewing transaction history, buying or selling stocks, retrieving historical stock prices and generating visualizations. It uses three tools:
    • Database tool: This tool provides functions to read from or update the portfolio database, sell or buy stocks, and view transaction history.
    • Stock tool: This tool fetches historical stock prices from Nasdaq.
    • Code interpreter tool: This tool runs Python code to create data visualizations of the portfolio.

Sample questions the assistant can answer:

  • Show the news and sentiment about Palo Alto Networks
  • Show the news and sentiment about the agriculture industry
  • Show the stock history of Palo Alto Networks over the past four weeks
  • Show my portfolio
  • Plot the performance of my portfolio over the past 30 days
  • Recommend a rebalancing strategy based on current market sentiment
  • Buy two shares of Palo Alto Networks
  • Display my transactions from the past 60 days

Users interact with the assistant through a command-line interface. The initial database includes synthesized datasets for users, portfolios and transactions. The assistant uses short-term memory that retains conversation history only within the current session. This memory is cleared once the user exits the conversation.

All these attack scenarios assume that malicious requests are made at the beginning of a new session, with no influence from previous interactions. For detailed usage instructions, please refer to our GitHub page.

The remainder of this section presents nine attack scenarios, as summarized in Table 1.

Attack Scenario Description Threats Mitigations
Identifying participant agent Reveals the list of agents and their roles Prompt injection, intent breaking and goal manipulation Prompt hardening, content filtering
Extracting agent instructions Extracts each agent’s system prompt and task definitions Prompt injection, intent breaking and goal manipulation, agent communication poisoning Prompt hardening, content filtering
Extracting agent tool schemas Retrieves the input/output schema of internal tools Prompt injection, intent breaking and goal manipulation, agent communication poisoning Prompt hardening, content filtering
Gaining unauthorized access to an internal network Fetches internal resources using a web reader tool Prompt injection, tool misuse, intent breaking and goal manipulation, agent communication poisoning Prompt hardening, content filtering, tool input sanitization
Exfiltrating sensitive data via a mounted volume Reads and exfiltrates files from a mounted volume Prompt injection, tool misuse, intent breaking and goal manipulation, identity spoofing and impersonation, unexpected RCE and coder attacks, agent communication poisoning Prompt hardening, code executor sandboxing, content filtering
Exfiltrating service account access token via metadata service Accesses and exfiltrates a cloud service account token Prompt injection, tool misuse, intent breaking and goal manipulation, identity spoofing and impersonation, unexpected remote code execution (RCE) and coder attacks, agent communication poisoning Prompt hardening, code executor sandboxing, content filtering
Exploiting SQL injection to exfiltrate database table Extracts database contents via SQL injection Prompt injection, tool misuse, intent breaking and goal manipulation, agent communication poisoning Prompt hardening, tool input sanitization, tool vulnerability scanning, content filtering
Exploiting broken object-level authorization (BOLA) to access unauthorized user data Accesses another user’s data by manipulating object references Prompt injection, tool misuse, intent breaking and goal manipulation, agent communication poisoning Tool vulnerability scanning
Indirect prompt injection for conversation history exfiltration Leaks user conversation history via a malicious webpage Prompt injection, tool misuse, intent breaking and goal manipulation, agent communication poisoning Prompt hardening, content filtering

Table 1. Investment advisory assistant attack scenarios.

Identifying Participant Agents

Objective

The attacker aims to identify all participant agents within the target application. This information is typically accessible to the orchestration agent, which is responsible for task delegation and must be aware of all participant agents and their functions.

Figure 3 shows that we aim to extract the information solely from the orchestration agent.

Infographic about Prompt Injection featuring two icons: the top showing a person and the bottom depicting chat windows with the radioactive symbol indicated prompt injection. Text includes roles such as the Orchestrator, coworkers, News Agent, and Portfolio Agent.
Figure 3. Identify AI agents in an agentic application.

Attack Payload Explanation

  • CrewAI: We want the orchestrator agent to answer this request, so we explicitly ask it not to delegate the request to other coworker agents.
  • AutoGen: The orchestration agent relies on a set of built-in tools to transfer tasks to coworkers. These tools follow a consistent naming convention, prefixed with transfer_to_, and the coworker’s functionalities are also specified in the tool’s description. The Swarm documentation describes the specifics of this handoff mechanism.

Putting It All Together

Table 2 lists the example attacker inputs to identify participant agents.

Setting the Scene

Attacker  End users of the assistant
Victim Assistant owner
Relevant threats: Prompt injection, intent breaking and goal manipulation

Attack Payload

Framework CrewAI AutoGen
Attacker Input

Protection and Mitigations

Prompt hardening, content filtering

Table 2. Example attacker inputs to identify participant agents.

Extracting Agent Instructions

Objective

The attacker seeks to extract the system instructions (e.g., roles, goals and rules) for each agent. Although users can only directly access the orchestration agent, they can explicitly ask the orchestration agent to forward queries to specific agents. Figure 4 shows that by taking advantage of the communication channel between agents, attackers can deliver the same exploitation payload to each individual agent.

Diagram showing three connected boxes labeled "Orchestration Agent," "News Agent," and "Stock Agent." The Orchestration Agent, highlighted with a symbol of three connected chat icons, directs to both News Agent and Stock Agent with arrows indicating communication flow. Each box includes titles for roles and policies. Between the Orchestration Agent is the chance to insert prompt injection in the news agent or the stock agent.
Figure 4. Extract agent instructions.

Attack Payload Explanation

To extract the orchestration agent’s instructions, the agent request must NOT be delegated to other agents. To access instructions of a participant agent, the prompt must be forwarded to the target agent. Since there are no strict rules for how tasks should be delegated, the orchestration agent typically forwards the task to the agent that has its name explicitly specified in the request.

Putting It All Together

Table 3 lists example attacker inputs used to extract agent instructions from each participant agent in the stock advisory assistant.

Setting the Scene

Attacker  End users of the assistant
Victim Assistant owner
Relevant threats: Prompt injection, intent breaking and goal manipulation, agent communication poisoning

Attack Payload

Framework CrewAI AutoGen
Attacker input for the orchestrator agent 
Attacker input for the news agent 
 
Attacker input for the stock agent 

Protection and Mitigations

Prompt hardening, content filtering

Table 3. Example attacker inputs for extracting agent instructions.

Extracting Agent Tool Schemas

Objective

The attacker aims to extract the tool schemas of each agent. While users have direct access only to the orchestration agent, they can explicitly instruct the orchestration agent to forward queries to specific agents. Figure 5 shows that by taking advantage of the communication channel between agents, attackers can deliver the same exploitation payload to each individual agent.

A bad actor uses an orchestration agent connected to two other agents labeled News Agent and Stock Agent. Between the Orchestration Agent and the other two is the opportunity to add prompt injection. The orchestration agent includes a function labeled 'Description' with blank Input and Output fields. Both News Agent and Stock Agent have multiple function fields labeled 'fun1:', 'fun2:', and more, which are left blank.
Figure 5. Extract agent tool schemas.

Attack Payload Explanation

Similar to the agent instruction extraction attack, each of the prompts shown in Table 4 is destined for a specific target agent. In CrewAI, the orchestrator “delegates” tasks to coworker agents, while in AutoGen, the orchestrator “transfers” tasks to coworker agents.

Putting It All Together

Setting the Scene

Attacker  End users of the assistant
Victim Assistant owner
Relevant threats: Prompt injection, intent breaking and goal manipulation, agent communication poisoning

Attack Payload

Framework CrewAI AutoGen
Attacker input for the orchestrator agent
Attacker input for the news agent 
Attacker input for the stock agent 

Protection and Mitigations

Prompt hardening, content filtering

Table 4. Example attacker inputs for extracting tool schemas.

Gain Unauthorized Access to Internal Network

Objective

The attacker abuses the web content reader tool to access the private web server on the internal network. This attack is a variation of server-side request forgery (SSRF) that relies on the unprotected server, web reader tool in this case, to forward the exploitation payloads to another target in the internal network. Figure 6 illustrates how the payload is delivered to the target server.

Diagram showing a bad actor using an 'Orchestration Agent' which is inset with a 'Prompt Injection' symbol, and a 'News Agent' connected to a 'Web Reader'. Both agents are linked to a 'Private Server' within an 'Internal Network'.
Figure 6. Gain unauthorized access to the internal network.

Attack Payload Explanation

The example inputs in Table 5 are straightforward. Since we ask the assistant to read a “news” website, the orchestration agent would delegate the task to the news agent without any special instruction. Since the Web Reader tool has unrestricted network access, attackers could exploit it to scan and enumerate resources within the internal network.

Putting It All Together

Setting the Scene

Attacker  End users of the assistant
Victim Assistant owner
Relevant threats: Prompt injection, tool misuse, intent breaking and goal manipulation, agent communication poisoning

Attack Payload

Framework CrewAI AutoGen
Attacker Input

Protection and Mitigations

Prompt hardening, content filtering, tool input sanitization

Table 5. Example attacker inputs to gain unauthorized access to an internal network.

Sensitive Data Exfiltration via Mounted Volume

Objective

The attacker abuses the code interpreter tool used by the stock agent to access credential files that may be mistakenly mounted into the container. To enable file exchange between the agent and the code interpreter, it is common to mount a directory from the host into the container. However, if this mounted volume includes sensitive data — such as credentials, source code or configuration files — the attacker can exploit the interpreter to exfiltrate these assets.

As illustrated in Figure 7, the attacker sends a malicious payload to the stock agent’s code interpreter. This payload executes code within the container to locate and extract sensitive files from the mounted directory.

Illustration depicting a threat actor using prompt injection in agentic AI. The process includes the Orchestration Agent, Prompt Injection, Code Interpreter, and Stock Agent, connected by lines indicating communication paths, all centralized around the Host. A Key File is shown connected to the network. The Code Interpreter goes through Docker before connecting to the key file.
Figure 7. Abuse code interpreter to steal credential files stored on the host.

Attack Payload Explanation

The example attacker inputs in Table 6 direct the agent to search for files in a mounted volume for credentials. Note that the attacker inputs refer to the stock agent as a Portfolio Management Agent. The path of the mounted directory is often explicitly specified in the tool’s description or in the agent’s instructions, allowing the agent to read and write files during normal operations. The payload also instructs the agent to Base-64 encode the output because most frontier LLMs have internal safeguards that prevent generating responses containing sensitive information such as secrets and credentials.

Putting It All Together

Setting the Scene

Attacker  End users of the assistant
Victim Assistant owner
Relevant threats: Prompt injection, tool misuse, intent breaking and goal manipulation, identity spoofing and impersonation, unexpected RCE and coder attacks, agent communication poisoning

Attack Payload

Framework CrewAI AutoGen
Attacker Input

Protection and Mitigations

Prompt hardening, code executor sandboxing, content filtering

Table 6. Example attacker inputs to exfiltrate sensitive data through a mounted volume.

Service Account Access Token Exfiltration via Metadata Service

Objective

The attacker abuses the code interpreter tool used by the stock agent to access the GCP metadata service. Most cloud providers expose similar metadata endpoints that allow applications running on a virtual machine (VM) to query information about the instance. As shown in Figure 8, the attacker sends the exploitation payload to the stock agent’s code interpreter, which then executes the malicious code in the container to access the cloud infrastructure’s metadata service.

Illustration depicting a threat actor using prompt injection in agentic AI. The process includes the Orchestration Agent, Prompt Injection, Code Interpreter, and Stock Agent, connected by lines indicating communication paths, all centralized around the Host. The Code Interpreter goes through Docker before connecting to the cloud infrastructure metadata.
Figure 8. Abuse the code interpreter to steal a service account access token from the metadata service.

One critical piece of metadata is the VM’s service account, which grants VM access to other cloud services and resources. If an attacker obtains the service account’s access token, they can potentially impersonate the agent or its tools — or escalate the attack to compromise the underlying cloud infrastructure.

Attack Payload Explanation

The example attacker inputs in Table 7 instruct the agent to query the metadata server URL for Google Compute Engine and retrieve the VM’s service account access token. To succeed, the request must include a special HTTP header (Metadata-Flavor: Google) required by the metadata server to validate the requests.

Putting It All Together

Setting the Scene

Attacker  End users of the assistant
Victim Assistant owner
Relevant threats: Prompt injection, tool misuse, intent breaking and goal manipulation, identity spoofing and impersonation, unexpected RCE and coder attacks, agent communication poisoning

Attack Payload

Framework CrewAI AutoGen
Attacker Input

Protection and Mitigations

Prompt hardening, code executor sandboxing, content filtering

Table 7. Examples of attacker input to exfiltrate a service account access token via metadata service.

Gain Unauthorized Access to Application Database

Exploiting SQL Injection to Exfiltrate Database Table

Objective

The attacker exploits a SQL injection vulnerability in one of the agent's tools to dump a database table containing transaction histories for all users.

Figure 9 illustrates how the attacker sends the exploitation payload to the vulnerable function through prompt injection.

Image depicting a cybersecurity threat process starting on the left with a bad actor using prompt injection in agentic AI. It includes two labeled sections: an "Orchestration Agent" containing the "Prompt Injection", and the "Stock Agent" represented by the function "fun(...)" interacting with a database icon. Lines connect each section indicating the flow of actions.
Figure 9. Exploit vulnerabilities on the tool to gain access to other users’ data.
Attack Payload Explanation

The prompt examples in Table 8 instruct the agent to invoke the View Transactions tool with attacker-supplied input containing a SQL injection payload. This payload is crafted to extract rows from the transaction history table. To avoid hitting the language model’s output context limit, the query restricts the number of returned rows to 20.

Putting It All Together

Setting the Scene

Attacker  End users of the assistant
Victim Assistant owner and users of the assistant
Relevant threats: Prompt injection, tool misuse, intent breaking and goal manipulation, agent communication poisoning

Attack Payload

Framework CrewAI AutoGen
Attacker Input

Protection and Mitigations

Prompt hardening, tool input sanitization, tool vulnerability scanning, content filtering

Table 8. Example attacker inputs for SQL injection to exfiltrate a database table.

Exploiting BOLA to Access Unauthorized User Data

Objective

The attacker exploits a broken object level authorization (BOLA) vulnerability in one of the agent's tools to access other users’ transaction history.

The attacker sends the exploitation payload in the same way shown above in Figure 9.

Attack Payload Explanation

The query examples in Table 9 ask the assistant to return a transaction with a specific ID. Different from the previous SQL injection example, the attacker-supplied function input shows no sign of maliciousness. The attacker simply provides a transaction ID belonging to another user and the assistant will use the Get TransactionByID tool to retrieve the transaction. Because the root cause of BOLA is insufficient access control on the backend, exploiting it is typically straightforward and doesn't require a specially crafted payload. This also makes detection of BOLA attacks difficult.

Putting It All Together

Setting the Scene

Attacker  End users of the assistant
Victim Assistant owner and users of the assistant
Relevant threats: Prompt injection, tool misuse, intent breaking and goal manipulation, agent communication poisoning

Attack Payload

Framework CrewAI AutoGen
Attacker Input

Protection and Mitigations

Tool vulnerability scanning

Table 9. Example attacker inputs for exploiting BOLA to gain unauthorized access to user data.

Indirect Prompt Injection for Conversation History Exfiltration

Objective

The attacker compromises a website that targeted victims frequently visit. Through indirect prompt injection, malicious instructions embedded in the webpage trick the assistant into sending the user's conversation history to an attacker-controlled domain.

This attack unfolds in three stages (illustrated in Figure 10):

  1. The assistant, acting on behalf of a victim user, uses the web reader tool to retrieve content from a compromised website.
  2. The retrieved webpage contains malicious instructions that tell the assistant to load additional content from an attacker-controlled site. As part of this instruction, the assistant is asked to include a query parameter: summary=[SUMMARY] — where [SUMMARY] should be replaced with the user's conversation history.
  3. Following the injected instructions, the assistant summarizes the user's conversation history, URL-encodes it and unknowingly sends it to the attacker's domain as part of the requested URL.
Diagram depicting a flowchart with three main components labeled as "Orchestration Agent," and "News Agent" as well as the site server. The first process is that the orchestration agent communicates with the news agent and then onto the server. From there the bad actor uses the news site to insert prompt injection in the orchestration agent. From there the prompt injection goes back to the web reader in the news agent.
Figure 10. Exfiltrate the conversation history via a web-based indirect prompt injection.

Attack Payload Explanation

The injected prompts shown in Table 10 direct the assistant to invoke the web reader tool and visit an attacker-controlled URL that includes a special query parameter [SUMMARY]. Assuming the attacker has knowledge of the tool's name and schema, the malicious instructions explicitly specify which tool to invoke and how to structure the request. This structure includes embedding the user’s conversation history within the [SUMMARY] parameter.

Putting It All Together

Setting the Scene

Attacker  Any party able to inject prompts into a webpage the assistant may access
Victim Assistant users and the assistant owner
Relevant threats: Prompt injection, tool misuse, intent breaking and goal manipulation and agent communication poisoning

Attack Payload

Framework CrewAI AutoGen
Malicious instructions in the webpage

Protection and Mitigations

Prompt hardening, content filtering

Table 10. Examples of attacker input for indirect prompt injection to exfiltrate conversation history.

Protection and Mitigation

Securing the expanded and complex attack surface of agentic applications requires layered, defense-in-depth strategies. No single defense can address all threats — each mitigation targets only a subset of threats under certain conditions. This section outlines five key mitigation strategies relevant to the attack scenarios demonstrated in this article.

  1. Prompt hardening
  2. Content filtering
  3. Tool input sanitization
  4. Tool vulnerability scanning
  5. Code executor sandboxing

Prompt Hardening

A prompt defines an agent’s behavior, much like source code defines a program. Poorly scoped or overly permissive prompts expand the attack surface, making them a prime target for manipulation.

In the stock advisory assistant examples hosted on GitHub, we also provide a version of “reinforced” prompts (CrewAI, AutoGen). These prompts are designed with strict constraints and guardrails to limit agent capabilities. While these measures raise the bar for successful attacks, prompt hardening alone is not sufficient. Advanced injection techniques could still bypass these defenses, which is why prompt hardening must be paired with runtime content filtering.

Best practices for prompt hardening include:

  • Explicitly prohibiting agents from disclosing their instructions, coworker agents and tool schemas
  • Defining each agent’s responsibilities narrowly and rejecting requests outside of scope
  • Constraining tool invocations to expected input types, formats and values

Content Filtering

Content filters serve as inline defenses that inspect and optionally block agent inputs and outputs in real time. These filters can effectively detect and prevent various attacks before they propagate.

GenAI applications have long relied on content filters to defend against jailbreaks and prompt injection attacks. Since agentic applications inherit these risks and introduce new ones, content filtering remains a critical layer of defense.

Advanced solutions such as Palo Alto Networks AI Runtime Security offer deeper inspection tailored to AI agents. Beyond traditional prompt filtering, they can also detect:

  • Tool schema extraction
  • Tool misuse, including unintended invocations and vulnerability exploitation
  • Memory manipulation, such as injected instructions
  • Malicious code execution, including SQL injection and exploit payloads
  • Sensitive data leakage, such as credentials and secrets
  • Malicious URLs and domain references

Tool Input Sanitization

Tools must never implicitly trust their inputs, even when invoked by a seemingly benign agent. Attackers can manipulate agents into supplying crafted inputs that exploit vulnerabilities within tools. To prevent abuse, every tool should sanitize and validate inputs before execution.

Key checks include:

  • Input type and format (e.g., expected strings, numbers or structured objects)
  • Boundary and range checking
  • Special character filtering and encoding to prevent injection attacks

Tool Vulnerability Scanning

All tools integrated into agentic systems should undergo regular security assessments, including:

  • SAST for source-level code analysis
  • DAST for runtime behavior analysis
  • SCA to detect vulnerable dependencies and third-party libraries

These practices help identify misconfigurations, insecure logic and outdated components that can be exploited through tool misuse.

Code Executor Sandboxing

Code executors enable agents to dynamically solve tasks through real-time code generation and execution. While powerful, this capability introduces additional risks, including arbitrary code execution and lateral movement.

Most agent frameworks rely on container-based sandboxes to isolate execution environments. However, default configurations are often not sufficient. To prevent sandbox escape or misuse, apply stricter runtime controls:

  • Restrict container networking: Allow only necessary outbound domains. Block access to internal services (e.g., metadata endpoints and private addresses).
  • Limit mounted volumes: Avoid mounting broad or persistent paths (e.g., ./, /home). Use tmpfs to store temporary data in-memory
  • Drop unnecessary Linux capabilities: Remove privileged permissions like CAP_NET_RAW, CAP_SYS_MODULE and CAP_SYS_ADMIN
  • Block risky system calls: Disable syscalls like kexec_load, mount, unmount, iopl and bpf
  • Enforce resource quotas: Apply CPU and memory limits to prevent denial of service (DoS), runaway code or cryptojacking

Conclusion

Agentic applications inherit the vulnerabilities of both LLMs and external tools while expanding the attack surface through complex workflows, autonomous decision-making and dynamic tool invocation. This amplifies the potential impact of compromises, which can escalate from information leakage and unauthorized access to remote code execution and full infrastructure takeover. As our simulated attacks demonstrate, a wide variety of prompt payloads can trigger the same weakness, underscoring how flexible and evasive these threats can be.

Securing AI agents requires more than ad hoc fixes. It demands a defense-in-depth strategy that spans prompt hardening, input validation, secure tool integration and robust runtime monitoring.

General-purpose security mechanisms alone are insufficient. Organizations must adopt purpose-built solutions — such as Palo Alto Networks Prisma AIRS — to Discover, Assess and Protect threats unique to agentic applications.

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

A Unit 42 AI Security Assessment can help you proactively identify the threats most likely to target your AI environment.

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: 00080005045107

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

Updated May 2, 2025, at 2:20 p.m. PT to update product language.

Gremlin Stealer: New Stealer on Sale in Underground Forum

Executive Summary

Unit 42 researchers have identified information-stealing malware written in C#, called Gremlin Stealer. This malware appears to be a variant of Sharp Stealer, displaying a code base strikingly similar to Hannibal Stealer. This stealer’s seller has actively advertised it on a Telegram group since mid-March 2025.

This information-stealing malware exfiltrates data from its victims and uploads this information to its web server for publication. It can capture data from browsers, the clipboard and the local disk to steal sensitive data such as credit card details, browser cookies, crypto wallet information, File Transfer Protocol (FTP) and virtual private network (VPN) credentials.

Palo Alto Networks customers are better protected from Gremlin Stealer through our Network Security solutions and Cortex line of products, including Cortex XDR and XSIAM, Advanced WildFire, Advanced Threat Prevention, Advanced URL Filtering and Advanced DNS Security.

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

Related Unit 42 Topics Cryptocurrency, Infostealers, Telegram

Malware Advertisement

Gremlin Stealer’s authors predominantly distribute it through a Telegram channel named CoderSharp. Gremlin Stealer has a code layout comparable to Hannibal Stealer, which is reportedly a variant of Sharp Stealer. This malware is undergoing active development.

Sales and Feature Advertisement on Telegram

The description of Gremlin Stealer asserts that the malware can steal data from a wide range of software. Figure 1 shows a Telegram post advertising Gremlin Stealer.

Screenshot of Telegram describing the features of "Gremlin Stealer," malware written in C#. The text lists capabilities like bypassing Chrome V20 protection, stealing data from various cryptocurrencies and browsers, as well as obtaining information from popular VPN services and PC specs. The message also mentions pricing information and a contact method. Timestamp shows 09:00 PM. Some of the information is redacted.
Figure 1. Telegram post advertising Gremlin Stealer.

Published Stolen Data

The group behind Gremlin Stealer claims to have uploaded vast amounts of data from its victims' machines to its server at 207.244.199[.]46. We assess this server is a configurable portal that comes with the sale of the malware.

Figure 2 shows a screenshot of Gremlin Stealer’s website login page.

Screenshot of login screen for Gremlin featuring a logo with a stylized mask above two text fields labeled for username and password respectively, and a login button labeled 'Войти'.
Figure 2. Gremlin Stealer login page.

The Gremlin Stealer website currently displays 14 files. The authors of the website describe these files as ZIP archives of stolen data from victims' machines, with options to delete or download the archives.

As indicated by the timestamps in Figure 3, Gremlin Stealer has been active since March 2025.

Dashboard interface of Gremlin featuring metrics such as MB of data stored alongside a series of cards displaying file data with sensitive information redacted.
Figure 3. Gremlin Stealer site showing entries for stolen victim data.

The web interface shown in Figure 3 also demonstrates the user interface of the backend infrastructure that comes with the purchase of this malware.

Technical Analysis

We have monitored Gremlin Stealer since we initially discovered it in March 2025. The functions of this stealer from Figure 1 are listed below.

Stealer functions

  • Basic features include:
    • Bypassing Chrome cookie V20 protection
    • Its build process does not download anything from the internet
  • Stealing functionality targets the following:
    • Popular browsers (e.g., cookies, passwords, cards, forms)
    • Popular cryptocurrencies
    • Clipboard data
    • FTP services
    • Steam (token and session data)
    • Popular VPN services
    • Telegram session data
    • Discord tokens (spot search by browsers)
    • Screenshots
    • Specified information from victim PC (e.g., BSID, HVID, RAM, CPU, GPU and IP address)

Bypass Chrome Cookie V20 Protection

The first feature advertised for Gremlin Stealer is that it bypasses Chrome’s cookie v20 protection. Figure 4 shows code snippets from a Gremlin Stealer sample viewed in dnSpy.

A screenshot of a computer screen displaying a code in an Integrated Development Environment (IDE). The code includes functions and the syntax is color-coded.
Figure 4. GetCookies function from a Gremlin Stealer sample shown in dnSpy.

This view shows the GetCookies function under a V20Collect class, which demonstrates how it bypasses Chrome's cookie V20 protection and obtains cookie-related information. This is a common technique that has been used by many information stealers. Google made changes to prevent the use of this technique, as detailed in the post, “Changes to remote debugging switches to improve security.”

Below, Figure 5 shows the writteCookieToFile function that writes stolen information into a text file under the LOCAL_APP_DATA folder for uploading to Gremlin's server. The text file contains the associated domain, name, value, path and expiration date for each of the cookies.

A screenshot of computer code written in C# programming language of the GetCookies function.
Figure 5. GetCookies function from a Gremlin Stealer sample in dnSpy.

Support for Chromium and Gecko Browsers

Gremlin Stealer checks for cookies and saved passwords from an extensive list of Chromium- and Gecko-based browsers and writes them into a file to be exfiltrated later.

Below, Figure 6 shows a code snippet from the ChromiumBrowsers function with a list of Chromium-based browsers it steals from. A RunBrowserv20 function is also called to handle newer cookie encryption called "v20" in Chromium-based browsers. There is also an equivalent function built to handle a list of Gecko-based browsers.

Screenshot of a computer program code snippet, showing functions written in C# language to handle application data paths for browsers like Google Chrome, Firefox, and Microsoft Edge. Several parts of the text are redacted with red bars.
Figure 6. ChromiumBrowsers function.

Cryptocurrency Wallet Stealer

Figure 7 shows that Gremlin Stealer checks for various cryptocurrency wallets and steals files from each directory.

A screenshot of computer code related to various cryptocurrencies like Bitcoin, Ethereum, and Litecoin.
Figure 7. List of cryptocurrency wallets targeted by Gremlin Stealer.

Taking Litecoin as an example, Gremlin Stealer checks for a related registry entry. If found, it copies the wallet.dat file to a temporary directory, as illustrated in Figure 8 below.

Screenshot of code written in C# LitecoinCore. The code includes operations involving the Windows Registry and file management related to 'LitecoinCore' wallet data.
Figure 8. Gremlin Stealer's Litecoin wallet stealing function.

As Figure 9 shows, Gremlin Stealer searches for files containing a list of domains associated with each cryptocurrency in specific folders and then duplicates these files for later exfiltration. It also creates a hash list representing the data to be exported.

Screenshot of a computer code snippet with much of the information redacted by red highlight.
Figure 9. Cryptocurrency-related domains that Gremlin Stealer searches for.

FTP Credentials

Gremlin Stealer attempts to steal FTP usernames and passwords. Figure 10 shows a decompiled code snippet for the TotalCommander FTP credential-stealing function.

A screenshot of code is written in C# and includes functions to create directories and handle files.
Figure 10. Gremlin Stealer code snippet for copying TotalCommander files.

VPN Credentials

Gremlin Stealer also obtains username, password and configuration files from popular VPN clients. Figure 11 shows a code snippet of the VPN stealing function.

Screenshot of a computer screen displaying code with highlighted syntax and some information redacted with red highlight.
Figure 11. Gremlin Stealer code snippet for stealing VPN data.

Telegram and Discord Sessions

Gremlin Stealer also targets data and session information from Telegram and Discord to upload to its configured server.

Figures 12 and 13 show code snippets for stealing information from Telegram and Discord.

A screenshot of a code snippet written in C# aiming to get the path of the Telegram desktop application if it is running, utilizing the Environment and Process classes.
Figure 12. Gremlin Stealer code snippet for Telegram data stealing function.
Screenshot of code written in C#, written to steal Discord sessions.
Figure 13. Gremlin Stealer code snippet for Discord sessions stealing function.

System Information

Gremlin Stealer creates a text file that contains system information (e.g., PC username, clipboard data, processor information and hardware ID), as shown below in Figure 14.

A screenshot of Gremlin Stealer code with syntax highlighting. It includes various system information commands and functions about the operating system, screen resolution, CPU, RAM, and more.
Figure 14. Gremlin Stealer code snippet for system information stealing function.

Credit Card Information Stealing

This malware also steals credit card information and sends the data to its server. Figure 15 shows a code snippet of Gremlin Stealer's function to steal credit card information.

Screenshot of a computer code snippet written in C# programming language used for encrypting and decrypting credit card information.
Figure 15. Gremlin Stealer code snippet for the function to steal credit card information.

Uploading the Victim’s Files to Gremlin Stealer's Server

Figure 16 shows that Gremlin Stealer creates a folder under LOCAL_APP_DATA to store the following in plain text files:

  • Saved passwords
  • Cookies
  • Autofill data
  • Screenshots
  • System information
  • Discord sessions
  • Telegram sessions
  • FTP and VPN credentials
  • Cryptocurrency wallets data
A screenshot displaying multiple lines of code. The code includes references to system information, cookies, VPN detection, and more. Some sections of the text are obfuscated with red blocks for privacy.
Figure 16. Gremlin Stealer sends all stolen data to a private server.

These texts are gathered into a ZIP archive, which is sent to its server through the URL hxxp[:]//207.244.199[.]46/index.php, shown in Figure 17.

Screenshot of code featuring a public string variable named 'myPrivateServer' set to a local IP address, highlighted in red.
Figure 17. Code snippet with URL for Gremlin Stealer server.

Gremlin Stealer sends this data using the Telegram bot shown in Figure 18. It uploads the stolen data to the server using a hard-coded Telegram API key.

Screenshot of code with a Telegram URL highlighted in a red box.
Figure 18. Gremlin Stealer code snippet with URL for Telegram bot.

Figure 19 shows a TCP stream of an HTTP POST request that Gremlin Stealer makes when sending stolen information to its server. It sends the information as a ZIP archive that contains all the data stolen from the victim's Windows host.

A screenshot showing an HTTP POST request with multipart data. An arrow points to a host IP address and a second red arrow points to the ZIIP file name that contains the public IP address of the victim host.
Figure 19. TCP stream of an HTTP POST request for a ZIP archive being uploaded to the Gremlin Stealer server.

Conclusion

Gremlin Stealer is new malware that has been active since March 2025. This malware searches for a variety of applications on a victim's Windows computer, and our code analysis confirms the specific applications targeted.

Stealers of this type are well-known entities in the threat landscape, and there are many approaches to protecting customers from these evolving attacks. Palo Alto Networks diligently monitors these campaigns, utilizing a range of static and dynamic techniques to detect and prevent them.

These methods include dynamic and behavioral detections, as well as more reactive signature or pattern-based solutions.

Palo Alto Networks Protection and Mitigation

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

  • The 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.
  • Advanced Threat Prevention has an inbuilt machine learning-based detection that can detect exploits in real time.
  • Cortex XDR and XSIAM are designed to:
    • Prevent the execution of known malicious malware, and also prevent the execution of unknown malware using Behavioral Threat Protection and machine learning based on the Local Analysis module.
    • Protect against credential gathering tools and techniques using the new Credential Gathering Protection available from Cortex XDR 3.4.
    • Detect post-exploit activity, including credential-based attacks, with behavioral analytics, through Cortex XDR Pro.

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: 00080005045107

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 of the Gremlin Stealer sample analyzed for this article:

  • d1ea7576611623c6a4ad1990ffed562e8981a3aa209717065eddc5be37a76132

URLs:

  • hxxp[:]//207.244.199[.]46/index.php

Updated May 9, 2025, at 10:05 a.m. PT to note Gremlin Stealer's similarities to other stealers.

Extortion and Ransomware Trends January-March 2025

Executive Summary

Unit 42 regularly monitors the cyberthreat landscape, including trends in extortion and ransomware. Ransomware actors continue to evolve to increase the effectiveness of their attacks and the likelihood that organizations will pay what is demanded. In our 2025 Unit 42 Global Incident Response Report, we found that 86% of incidents involved business disruption, spanning operational downtime, reputational damage or both.

In this survey of recent trends, we share qualitative observations based on incident response cases and the broader threat landscape. These include:

  • Threat actors claiming compromises that can’t be substantiated
  • Nation-state actors working with ransomware actors
  • Use of tools to disable endpoint security sensors
  • Attacks on more types of systems, including cloud
  • Insider threats leading to extortion

We also share insights about public reports of ransomware compromises posted on threat actors’ leak sites. This includes:

  • The most active ransomware leak sites
  • Activity by month
  • Activity by country
  • Industries most affected by ransomware

Palo Alto Networks customers are better protected from ransomware threats through our Network Security solutions and Cortex line of products.

Unit 42 can help organizations proactively prepare to mitigate the threat of ransomware through our Ransomware Readiness Assessment.

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

Related Unit 42 Topics Ransomware, Cybercrime

Incident Response Trends: Ransomware and Extortion Highlights

Unit 42 responds to many ransomware and extortion incidents every year.

As organizations are becoming more security-savvy, they are catching attacks in the early stages. This means we have seen a rise in investigations that stop at network intrusion, before attackers have a chance to succeed at their other objectives. However, we still see a large number of successful ransomware and extortion attacks. We have also seen threat actors becoming more aggressive to gain victims’ attention and command consistent and higher payments. For more details about these observations, please see our 2025 Global Incident Response Report.

Here are some of our key recent observations of ransomware and extortion campaigns.

Attackers Lie

Unit 42 has tracked various extortion campaigns where the attackers exaggerated threats of leaking data (often using old or fake data) to pressure victims into making payments.

In a March 2025 campaign, scammers physically mailed threatening letters to executives claiming to be a known ransomware group preparing to leak sensitive data. An example of one of the letters used in the campaign is in Figure 1.

Envelope supposedly addressed from BianLian Group in Boston, MA, with a postal stamp from Boston dated 25 February 2025, marked "TIME SENSITIVE - READ IMMEDIATELY. The addressee information has been redacted.
Figure 1. Envelope for fake BianLian ransom note. Source: Bleeping Computer.

However, the letters’ recipients had no other evidence of a breach. These letters claimed to be the threat actor we track as Bitter Scorpius, publicly known as BianLian. However, we currently have no evidence confirming this is actually BianLian (moreover, the FBI assessed this to be a scam).

We also saw multiple cases of a threat actor posing as a rebrand of the notorious Babuk group. This threat actor used data from older, already resolved extortion campaigns to attempt to re-extort more than 60 victims.

Nation-state Actors Are Working With Ransomware Actors

In October 2024, Unit 42 published observations of a nation-state actor directly collaborating with a ransomware group. We identified Jumpy Pisces, a North Korean state-sponsored threat group associated with the Reconnaissance General Bureau of the Korean People's Army, as a key player in a ransomware incident. This change marked our first observed instance of the group using existing ransomware infrastructure. It was potentially acting as an initial access broker (IAB) or an affiliate of Fiddling Scorpius, which distributes Play ransomware.

Since that time, we have seen additional artifacts of North Korean actors (already notorious for large money theft) continuing to cooperate with ransomware groups, signaling a new trend in the cybercriminal threat landscape.

In March 2025, a North Korean hacking group tracked as Moonstone Sleet reportedly deployed Qilin ransomware payloads in a limited number of attacks.

Ransomware Actors Are Using Tools to Disable Endpoint Security Sensors

Ransomware actors continue to evolve their capabilities, and we’ve recently observed them using tools known as “EDR killers.” These tools are designed specifically to terminate defensive software, making it easier for attackers to encrypt vast amounts of data before anyone notices.

Their success has sparked interest in the affiliate community, leading to rapid adoption. The integration of these tools has become more common, making them a favored asset in an affiliate’s toolkit.

In one extortion incident that Unit 42 investigated, we observed an attacker unsuccessfully attempt to use an AV/EDR bypass tool to get around Cortex XDR. In this particular case, our incident responders were able to turn the tables by using the threat actors’ attempts to gain a certain level of access to their rogue systems. In the process, we gained visibility into the threat actor’s tooling, targeting and persona. The attack chain from this incident is presented in Figure 2.

Diagram illustrating the cyber attack lifecycle with six stages: Initial Access via Atera, Lateral Movement featuring PsExec, Internal Discovery/Credential Access and Defense Evasion, Threat Actor Extortion Email with a blackmail email icon, Rogue Machines Connected as depicted with multiple devices, and Exfiltration showing data extraction. Includes Palo Alto Networks and Unit 42 logos.
Figure 2. High-level chain of events in the attack investigated by Unit 42.

Outside of this ideal outcome, organizations should be on the lookout for EDR killers.

Ransomware Actors Are Attacking More Types of Systems, Including Cloud

Extortion attacks continue to evolve to impact more data in victim networks. Actors are now targeting critical servers and applications, including those running on virtualized infrastructure and in the cloud.

We are also seeing more ransomware payloads that can be ported to run on more than just Windows – Linux, hypervisors (ESXi) and even macOS.

Cybercriminals such as Bling Libra (distributors of ShinyHunters ransomware) and Muddled Libra gain access to cloud environments by exploiting misconfigurations and finding exposed credentials.

Insider Threats Can Lead to Extortion

Since 2023, Unit 42 has tracked North Korea state-sponsored threat actors who gain unauthorized remote employment with worldwide organizations. These actors often use fake AI-enhanced identities to infiltrate organizations.

Circumventing sanctions to work and gain money is one part of the scheme. Alongside that are security and legal risks, including the possibility of extortion [PDF].

After being discovered on company networks, North Korean IT workers have extorted victims by holding stolen proprietary data and code hostage until the companies meet ransom demands. In some instances, North Korean IT workers have publicly released victim companies' proprietary code. North Korean IT workers have copied company code repositories, such as GitHub, to their own user profiles and personal cloud accounts. While not uncommon among software developers, this activity represents a large-scale risk of theft of company code.

In multiple instances, the conspirators supplemented their employment earnings by stealing sensitive company information, such as proprietary source code, and then threatening to leak such information unless the employer made an extortion payment.

Reported Ransomware Compromises: Charts and Stats

Unit 42 monitors public reports of ransomware compromises posted on threat actors’ leak sites. The charts and insights below are based on our observations from January-March 2025. They cover the ransomware groups that created the highest numbers of public posts about compromises, as well as information on reported compromises by month, country and industry.

However, no collection of publicly reported compromises ever reflects all compromises. In addition, the data shared below does not reflect all leak site posts. We’ve included only data that has been vetted according to established analytic standards. It’s also always important to note that threat actor groups may not report compromises honestly.

Bar chart showing reported compromises by ransomware name. RansomHub leads with 254 incidents, followed by CL0P with 210, and Akira with 147. Other ransomware types like Qilin, Play, Lynx, Funksec, Cactus, Medusa, and Inc. range between 72 and 53 incidents. Includes Palo Alto Networks and Unit 42 logos.
Figure 3. Most active ransomware leak sites from January-March 2025.

RansomHub is the most prolific type of ransomware among public reports on leak sites from January-March 2025, as seen in Figure 3. Unit 42 tracks the group that distributes RansomHub as Spoiled Scorpius. In our ransomware retrospective published in August 2024, we listed RansomHub as an emerging ransomware to watch. While extremely active since it started in 2024, we expect a drop in RansomHub activity during the next quarter due to operational issues this group has endured in April 2025

Bar chart showing the number of reported compromises for January, February, and March. January has 370 compromises, February has 578, and March has 549. The chart includes logos for Palo Alto Networks and Unit 42.
Figure 4. Leak site posts from all ransomware families per month.

Ransomware activity tends to fluctuate seasonally, making it important, for example, to compare activity to the same quarter of the previous year, rather than the most recent quarter. This helps account for changes that can occur due to travel seasons, annual holidays and other recurring events.

Following this pattern, we observed similar fluctuations in leak site data in 2025, as seen in Figure 4, compared to leak site data during the previous period of January-March 2024. In particular, in both 2024 and 2025, we saw a rise of activity from January to February, followed by a slight dip in March.

Bar chart displaying the number of reported compromises by country. The United States leads significantly with 822 incidents, followed by Canada with 88 and the United Kingdom with 58. Other countries listed are Germany, Brazil, France, India, Italy, Australia, and Spain, all ranging between 40 and 25 incidents. The chart includes logos for Palo Alto Networks and Unit 42.
Figure 5. Ransomware activity categorized by the country in which the victim organization is headquartered.

While the vast majority of organizations publicly impacted by ransomware in January-March 2025 are headquartered in the United States, as seen in Figure 5, this may not paint the full picture of the impact of ransomware attacks. Since many large organizations have offices in countries besides where they are headquartered, a ransomware attack could affect organizations, employees or customers in multiple parts of the world.

With that caveat, we have consistently seen the United States at the top of this list for the years we’ve tracked leak sites. After the United States, commonly impacted organizations are headquartered in Canada, the United Kingdom and Germany, though the specific order can change.

Bar chart showing the number of cyber incidents by industry. Industries include Manufacturing with 230 incidents, Wholesale & Retail with 170, Professional Services with 144, High Technology with 132, Healthcare with 123, Construction with 113, Transportation & Logistics with 90, Financial Services with 81, Agriculture with 53, and Education with 52. The chart includes logos for Palo Alto Networks and Unit 42.
Figure 6. Leak site posts January-March 2025 per industry.

Many ransomware attacks are opportunistic, with threat actors focusing on organizations they can compromise and where they will make the most money. That said, interesting patterns can emerge in affected industries.

For example, in the first half of 2024, the healthcare industry was the second most impacted, driven in part by prominent compromises of organizations in that vertical. However, when looking at data over the past several years, healthcare more commonly occupies the fifth or sixth most impacted spot, as seen above in Figure 6.

For the past several years, manufacturing has topped the list of most impacted industries. This may be in part due to features of the industry, such as the common use of specialized software that is difficult to update, combined with the immediate financial impact of downtime.

Conclusion

Unit 42 continues to monitor ransomware threats, through incident response cases, observation of dark web leak sites and other sources of telemetry. Ransomware remains a significant and evolving threat, especially as threat actors continue to evolve more ways of gaining access. The involvement of nation-state groups, combined with low barriers to entry for ransomware affiliates, means that cybercriminals at all skill levels may get involved with ransomware.

Organizations should stay aware of trends in ransomware and employ a defense-in-depth strategy for protection. While it is important to maintain backups, organizations should be prepared for ransomware actors to apply other forms of pressure (such as reputational pressure) to force a ransom payment even if the organization has not lost access to data. For more about Unit 42’s recent observations of ransomware trends, please read the 2025 Global Incident Response Report.

Palo Alto Networks Protection and Mitigation

Palo Alto Networks customers are better protected from ransomware threats through Network Security solutions and the Cortex line of products.

The Next-Generation Firewall with Cloud-Delivered Security Services includes the following capabilities:

Our Cortex protections include Cortex Xpanse, which detects vulnerable services exposed directly to the internet that might be exploitable and infected by ransomware.

Through Cortex XDR and XSIAM, all known ransomware samples are prevented by the XDR agent out of the box using the following endpoint protection modules:

  • The Anti-Ransomware module helps prevent encryption behaviors on systems running Microsoft Windows or macOS.
  • The Local Analysis module helps detect ransomware binaries on Windows, macOS and Linux.
  • XDR also includes protection capabilities like Behavioral Threat Protection (BTP) which helps prevent ransomware activity on Windows, macOS and Linux.
  • Palo Alto Networks’ Cloud Security Agent (CSA) leverages XSIAM to provide cloud based detection and monitoring capabilities to both Cortex and Prisma Cloud cloud agents.

Our cloud-based security solutions also help protect virtual machines running in cloud environments.

We frequently update machine learning models and analysis techniques in Advanced WildFire with information discovered from our day-to-day research on ransomware.

Unit 42 can help organizations proactively prepare to mitigate the threat of ransomware through our Ransomware Readiness Assessment.

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: 00080005045107

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

False Face: Unit 42 Demonstrates the Alarming Ease of Synthetic Identity Creation

Executive Summary

Evidence suggests that North Korean IT workers are using real-time deepfake technology to infiltrate organizations through remote work positions, which poses significant security, legal and compliance risks. The detection strategies we outline in this report provide security and HR teams with practical guidance to strengthen their hiring processes against this threat.

In our demonstration, it took just over an hour with no prior experience to figure out how to create a real-time deepfake using readily available tools and cheap consumer hardware. This allows adversaries to easily create convincing synthetic identities, enabling them to operate undetected and potentially generate revenue for sanctioned regimes.

While we can still detect limitations in current deepfake technology, these limitations are rapidly diminishing. Organizations must implement layered defenses by combining enhanced verification procedures, technical controls and ongoing monitoring throughout the employee lifecycle.

Palo Alto Networks customers are better protected from the threats discussed in this article through Unit 42 Insider Threat Services.

Organizations can engage the Unit 42 Incident Response team for specific assistance with this threat and others.

Related Unit 42 Topics Social Engineering, DPRK, Wagemole

Interviewing North Koreans

Talent acquisition and cybersecurity communities have recently reported a surge in candidates employing real-time deepfakes during job interviews. Investigators have documented cases where interviewees presented synthetic video feeds, using identical virtual backgrounds across different candidate profiles as shown in Figure 1.

Screenshots of two individuals in a virtual meeting, each displayed within separate, blue-bordered video call frames. The background shows a simple office and a plain blue wall. Both are deepfake interviews.
Figure 1. A side-by-side comparison of two deepfake interviewees. Source: Daniel Grek Sanchez Castellanos and Bettina Liporazzi.

The Pragmatic Engineer newsletter documented a case study involving a Polish AI company that encountered two separate deepfake candidates. Interviewers suspected the same individual operated both personas, particularly when the operator showed notably increased confidence during the second technical interview after previously experiencing the interview format and questions.

Unit 42's analysis of indicators shared in the Pragmatic Engineer report aligns with known tactics, techniques and procedures (TTPs) attributed to Democratic People's Republic of Korea (DPRK) IT worker operations. This represents a logical evolution of their established fraudulent work infiltration scheme.

North Korean threat actors have consistently demonstrated a significant interest in identity manipulation techniques. In our 2023 investigation, we reported on their efforts to create synthetic identities supported by compromised personal information, making them more difficult to detect.

We found further evidence when we analyzed the breach of Cutout.pro, an AI image manipulation service, which revealed scores of email addresses likely tied to DPRK IT worker operations. Figure 2 shows such image manipulation in face-swapped headshots.

Side-by-side images of a person before and after a face swap, showing a transformation from a natural look on the left to a more polished appearance with a filter.
Figure 2. A North Korean operator experiments with face-swapping.

DPRK IT workers incrementally advanced their infiltration methodology by implementing real-time deepfake technology. This offers two key operational advantages. First, it allows a single operator to interview for the same position multiple times using different synthetic personas. Second, it helps operatives avoid being identified and added to security bulletins and wanted notices like the one shown in Figure 3. Combined, it helps DPRK IT workers enjoy enhanced operational security and decreased detectability.

Wanted poster by the FBI featuring photos of multiple individuals labeled as 'DPRK IT Workers' with their names displayed beneath each photo.
Figure 3. A wanted poster for DPRK IT workers, retrieved on March 20, 2025.

Zero to Passable

A single researcher with no image manipulation experience, limited deepfake knowledge and a five-year-old computer created a synthetic identity for job interviews in 70 minutes. The ease of creation demonstrates how dangerously accessible this technology has become to threat actors.

Using only an AI search engine, a passable internet connection and a GTX 3070 graphics processing unit purchased in late 2020, they produced the sample shown in Figure 4.

Figure 4. A demonstration of a realtime deepfake on cheap and widely-available hardware.

They used only single images generated by thispersonnotexist[.]org, which permits the use of generated faces for personal and commercial purposes, as well as free tools for deepfakes. With these, they generated multiple identities, as shown in Figure 5.

Figure 5. A demonstration of identity switching.

A simple wardrobe and background image change could be all it takes to come back to a hiring manager as a brand-new candidate. In fact, the most time-consuming part of this entire process was creating a virtual camera feed to capture in video conferencing software.

With a little more time and a much more powerful graphics processing unit, a higher resolution version of the same process produced more convincing results, as shown in Figure 6.

Figure 6. A higher quality deepfake using a more resource-intensive technique.

Detection Opportunities

There are several technical shortcomings in real-time deepfake systems that create detection opportunities:

  1. Temporal consistency issues: Rapid head movements caused noticeable artifacts as the tracking system struggled to maintain accurate landmark positioning
  2. Occlusion handling: When the operator's hand passed over their face, the deepfake system failed to properly reconstruct the partially obscured face
  3. Lighting adaptation: Sudden changes in lighting conditions revealed inconsistencies in the rendering, particularly around the edges of the face
  4. Audio-visual synchronization: Slight delays between lip movements and speech were detectable under careful observation

At this time, there are several ways to make life difficult for the would-be deepfakers. The most effective method appears to be passing a hand over a face, which disrupts facial landmark tracking.

Govind Mittal et al. of New York University suggest additional strategies:

  • Rapid head movements
  • Exaggerated facial expressions
  • Sudden lighting changes

These techniques exploit weaknesses in real-time deepfake systems, causing visible artifacts that help humans detect fakes with high accuracy.

We’ll demonstrate three more options to add to an interviewer’s repertoire in Figures 7a-c.

Figure 7a. The “ear-to-shoulder.”

Figure 7b. The “nose show.”

Figure 7c. The “sky-or-ground.”

Mitigation Strategies

The DPRK IT worker campaign demands close collaboration between human resources (HR) and information security teams. When both work together, it affords an organization more detection opportunities across the entire hiring and employment lifecycle.

Disclaimer: The following are mitigation strategies meant to offer insights and suggestions for the reader’s consideration. They are being provided for informational purposes only and should not be considered legal advice. Prior to implementing any of these practices, consult with your own legal counsel to confirm alignment with applicable laws.

For HR Teams:

  • Ask candidates to turn their cameras on for interviews, including initial consultations
    • Record these sessions (with proper consent) for potential forensic analysis
  • Implement a comprehensive identity verification workflow that includes:
    • Document authenticity verification using automated forensic tools that check for security features, tampering indicators and consistency of information across submitted documents
    • ID verification with integrated liveness detection that requires candidates to present their physical ID while performing specific real-time actions
    • Matching between ID documents and interviewee, ensuring the person interviewing matches their purported identification
  • Train recruiters and technical interviewing teams to identify suspicious patterns in video interviews such as unnatural eye movement, lighting inconsistencies and audio-visual synchronization issues
  • Have interviewers get comfortable with asking candidates to perform movements challenging for deepfake software (e.g., profile turns, hand gestures near the face or rapid head movements)

For Security Teams:

  • Secure the hiring pipeline by recording job application IP addresses and checking they aren't from anonymizing infrastructure or suspicious geographic regions
  • Enrich provided phone numbers to check if they are Voice over Internet Protocol (VoIP) carriers, particularly those commonly associated with identity concealment
  • Maintain information sharing agreements with partner companies and participate in applicable Information Sharing and Analysis Centers (ISACs) to stay current on the latest synthetic identity techniques
  • Identify and block software applications that enable virtual webcam installation on corporate-managed devices when there is no legitimate business justification for their use.

Additional Indicators:

  • Monitor for abnormal network access patterns post-hiring, particularly connections to anonymizing services or unauthorized data transfers
  • Deploy multi-factor authentication methods that require physical possession of devices, making identity impersonation more difficult

Organizational Policy Considerations:

  • Develop clear protocols for handling suspected synthetic identity cases, including escalation procedures and evidence preservation methods
  • Create a security awareness program that educates all employees involved in hiring about synthetic identity red flags
  • Establish technical controls that limit access for new employees until additional verification milestones are reached
  • Document verification failures and share appropriate technical indicators with industry partners and relevant government agencies

By implementing these layered detection and mitigation strategies, organizations can significantly reduce the risk of synthetic identity infiltration while maintaining an efficient hiring process for legitimate candidates.

Conclusion

The synthetic identity threat typified by North Korean IT worker operations represents an evolving challenge for organizations worldwide. Our research demonstrates the alarming accessibility of synthetic identity creation, with continuously lowering technical barriers as AI-generated faces, document forgery tools and real-time voice/video manipulation technologies become more sophisticated and readily available.

As synthetic identity technologies continue to evolve, organizations must implement layered defense strategies that combine:

  • Enhanced verification procedures
  • AI-assisted countermeasures for deepfake detection
  • Continuous verification throughout employment

This approach significantly improves an organization's ability to detect and mitigate against not only North Korean IT workers but also a variety of similar threats.

No single detection method will guarantee protection against synthetic identity threats, but a layered defense strategy significantly improves your organization's ability to identify and mitigate these risks. By combining HR best practices with security controls, you can maintain an efficient hiring process while protecting against the sophisticated tactics employed by North Korean IT workers and similar threat actors.

Palo Alto Networks customers can better protect against the threats discussed above through Unit 42 Insider Threat Services to holistically improve detection and remediation.

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: 00080005045107

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

Cascading Shadows: An Attack Chain Approach to Avoid Detection and Complicate Analysis

Executive Summary

In December 2024, we uncovered an attack chain that employs distinct, multi-layered stages to deliver malware like Agent Tesla variants, Remcos RAT or XLoader. Attackers increasingly rely on such complex delivery mechanisms to evade detection, bypass traditional sandboxes, and ensure successful payload delivery and execution. The phishing campaign we analyzed used deceptive emails posing as an order release request to deliver a malicious attachment.

This multi-layered attack chain leverages multiple execution paths to evade detection and complicate analysis. Figure 1 below illustrates the attack chain used by this campaign.

Diagram illustrating malware injection process via different types of files and scripts. It shows pathways starting from email attachments progressing through ZIP and RAR files to extracted VBS and PowerShell scripts, leading to either AutoIt or .NET compiled executables. These executables inject malware into running processes.
Figure 1. Attack chain used for this campaign.

The campaign arrives to victims as emails with attached archives. These archives contain script-based malware that ultimately infects a host with the final malware.

Our analysis demonstrates how we can track and mitigate threats that rely on multi-stage delivery mechanisms. Additionally, we highlight techniques for analyzing AutoIt-based malware and debugging shellcode to equip analysts with better threat-hunting capabilities. Despite this multi-layered approach used by the attackers, Advanced WildFire effectively detects each stage, ensuring our customers are better protected against such attacks.

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

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

Related Unit 42 Topics XLoader, Remcos RAT

Technical Analysis of Attack Chain

Delivery Through Fake Order Release Phishing Email

We focus this article on this particular attack chain due to its uncommon use of AutoIt compiled executables, which we observed exclusively in December 2024. This campaign has only been seen delivering the Agent Tesla variant.

The phishing emails for this particular attack chain appear to be official communications falsely claiming that a payment had been made, urging the recipient to review an attached order file. The attachment, doc00290320092.7z, contains a JavaScript encoded (.jse) file.

When executed, this .jse file initiates the infection chain. This script acts as a downloader, retrieving and executing a PowerShell script. Figure 2 shows an example of an email with the attachment.

Email screenshot displaying a message header and an attachment of a ZIP file. The email body is in Croatian.
Figure 2. Example of a phishing email for this attack chain.

Malicious Archive: Disguised Order Review Script

After opening the doc00290320092.7z attachment, a potential victim would find its content, a file named doc00290320092.jse. Notice that both the ZIP filename and the JSE filename start with doc, creating the illusion that the JSE file is a legitimate document.

The JSE file is a simple downloader designed to retrieve and execute a PowerShell script from a remote server. Figure 3 shows that the script in the JSE file is not obfuscated, as this attack chain relies on a multi-layered approach rather than heavy obfuscation.

Screenshot of a computer script in a text editor. A red box highlights the URL to download the next stage PS1. The code is white on a black background with no syntax highlighting.
Figure 3. Content of the JSE file used in this attack chain.

PowerShell Delivering Encoded Payload

The PowerShell script is straightforward, containing a Base64-encoded payload that it decodes, writes to the temporary directory and executes. Figure 4 shows an example of the PowerShell script.

Screenshot of a few lines of code with the payload.
Figure 4. Example of the PowerShell script with Base64-encoded payload.

Diverging Execution - .NET or AutoIt

Analyzing multiple PowerShell payloads from different emails revealed that the next-stage payload varies between two types of files. These droppers are either a .NET compiled executable or an AutoIt compiled executable. This suggests that the attacker employs multiple execution paths to increase resilience and evade detection. As seen in previous stages, the attacker’s focus remains on a multi-layered attack chain rather than sophisticated obfuscation.

.NET Compiled Executable

The .NET file contains the next-stage payload, which is encrypted using either AES or Triple DES. Once decrypted, the payload is injected into a running RegAsm.exe process.

We observed similarity across multiple .NET samples from this attack chain. Figure 5 below highlights these similarities by showing two different .NET samples in dnSpy, revealing the injection into a RegAsm.exe process, reinforcing the multi-layered approach employed by the attacker.

Screenshot of a software interface displaying code analysis of two side by side code blocks, highlighting sections titled 'Injecting payload in RegAsm.exe' on the top and and 'Identical Functions' on the bottom with various functions and lines of code visible in different panels.
Figure 5. Comparison of .NET droppers and RegAsm process injection.

The two .NET samples shown in Figure 4 load different malware families. The first sample injects a variant of AgentTelsa, possibly Snake keylogger, into a RegAsm.exe process. The second sample follows a similar injection technique but delivers XLoader.

AutoIt Compiled Executable

​​The AutoIt compiled executable introduces an additional option to the attack chain, further complicating detection and analysis. The AutoIt script within the executable contains an encrypted payload that loads the shellcode for the final malware stage. This ultimately results in the injection of a .NET file into a RegSvcs process, which in turn loads an Agent Tesla variant.

Figure 6 shows an example of the AutoIt script within the AutoIt compiled executable. It also contains the decrypted payload revealing shellcode designed to decrypt and inject the final malware.

Screenshot collage. On the left is the extracted AutoIt as analyzed by WildFire and the encrypted payload. On the right is the shellcode to decrypt and load the payload.
Figure 6. AutoIt script extracted by WildFire.
AutoIt Dropper Analysis in IDA Pro

We debugged the AutoIt executable in IDA Pro to explore the debugging methods used by this AutoIt-based malware.

​​One of the key functions in AutoIt for tracing shellcode execution is DLLCALLADDRESS. To locate the function responsible for handling DLLCALLADDRESS, we can search for text cross-referencing the DLLCALLADDRESS string. The only reference appears in a function that builds the lookup table.

Analyzing this function reveals that a pointer to the DLLCALLADDRESS string is moved to the memory address 0x493684, while a function pointer is moved at 0x493684+0xC as shown below in Figure 7.

Screenshot of a computer screen displaying assembly language code in a debugging software with highlighted text indicating changes in function pointers. On the top highlighted in a red box is the PTR to function moved at 0x493690. On the bottom is the PTR to DLLCALLADDRESS moved to 0x493684.
Figure 7. Pointer to the DLLCALLADDRESS function shown in IDA Pro.

Tracing this further, a few functions down the call chain, we reach the function responsible for executing the shellcode as illustrated in Figure 8.

Diagram showing the flow and linking of various software functions and pointers, including the pointer named 'DLLCALLADDRESS' and 'call_address_function' for the shellcode. Lines and arrows indicate the relationships and directions between the functions.
Figure 8. Functional flow chart showing where Call_address_function calls the shellcode.

The dynamically resolved API calls in the shellcode indicate a straightforward execution flow. The shellcode follows a common pattern. It first loads the encrypted payload into memory, decrypts it and finally injects it into a RegSvcs process. The injected payload then reflectively loads another .NET compiled executable, which ultimately executes an Agent Tesla variant packed with .NET Reactor.

This final payload, an Agent Tesla variant, is a well-documented infostealer.

Conclusion

This analysis highlights how attackers increasingly rely on multi-layered delivery mechanisms and multiple execution paths to evade detection. By stacking simple stages instead of focusing on highly sophisticated techniques, attackers can create resilient attack chains that complicate analysis and detection. However, with its memory detection capabilities, Advanced WildFire can detect and better protect its customers.

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

  • Advanced URL Filtering and Advanced DNS Security identify known domains and URLs associated with this activity as malicious.
  • Cortex XDR and XSIAM are designed to:
    • Prevent the execution of known malicious malware, and also prevent the execution of unknown malware using Behavioral Threat Protection and machine learning based on the Local Analysis module.
    • Protect against credential gathering tools and techniques using the new Credential Gathering Protection available from Cortex XDR 3.4.
    • Detect post-exploit activity with behavioral analytics through Cortex XDR Pro.

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: 00080005045107

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

AutoIt Infection Chain 1

  • 00dda3183f4cf850a07f31c776d306438b7ea408e7fb0fc2f3bdd6866e362ac5doc00290320092.7z
  • f4625b34ba131cafe5ac4081d3f1477838afc16fedc384aea4b785832bcdbfdddoc00290320092.jse
  • d616aa11ee05d48bb085be1c9bad938a83524e1d40b3f111fa2696924ac004b2files.catbox[.]moe/rv94w8[.]ps1
  • 550f191396c9c2cbf09784f60faab836d4d1796c39d053d0a379afaca05f8ee8AutoIt compiled EXE for Agent Tesla variant

AutoIt Infection Chain 2

  • 61466657b14313134049e0c6215266ac1bb1d4aa3c07894f369848b939692c49 – doc00290320092.7z
  • 7fefb7a81a4c7d4a51a9618d9ef69e951604fa3d7b70d9a2728c971591c1af25 doc00290320092.jse
  • 8cdb70f9f1f38b8853dfad62d84618bb4f10acce41e9f0fddab422c2c253c994 files.catbox[.]moe/gj7umd.ps1
  • c93e37e35c4c7f767a5bdab8341d8c2351edb769a41b0c9c229c592dbfe14ff2 – AutoIt compiled EXE for Agent Tesla variant

Agent Tesla (Variant) Configuration

  • FTP Server: ​​ftp[:]//ftp.jeepcommerce[.]rs
  • FTP username: kel-bin@jeepcommerce[.]rs
  • FTP password: Jhrn)GcpiYQ7

Additional Resources

Slow Pisces Targets Developers With Coding Challenges and Introduces New Customized Python Malware

Executive Summary

Slow Pisces (aka Jade Sleet, TraderTraitor, PUKCHONG) is a North Korean state-sponsored threat group primarily focused on generating revenue for the DPRK regime, typically by targeting large organizations in the cryptocurrency sector. This article analyzes their campaign that we believe is connected to recent cryptocurrency heists.

In this campaign, Slow Pisces engaged with cryptocurrency developers on LinkedIn, posing as potential employers and sending malware disguised as coding challenges. These challenges require developers to run a compromised project, infecting their systems using malware we have named RN Loader and RN Stealer.

The group reportedly stole over $1 billion USD from the cryptocurrency sector in 2023. They have achieved this using various methods, including fake trading applications, malware distributed via the Node Package Manager (NPM) and supply chain compromises.

In December 2024, the FBI attributed the theft of $308 million from a Japan-based cryptocurrency company to Slow Pisces. More recently, the group made headlines for its alleged involvement in the theft of $1.5 billion from a Dubai cryptocurrency exchange.

We have shared our threat intelligence with analysts at GitHub and LinkedIn to take down the relevant accounts and repositories.

They provided the following statement in response:

GitHub and LinkedIn removed these malicious accounts for violating our respective terms of service. Across our products we use automated technology, combined with teams of investigation experts and member reporting, to combat bad actors and enforce terms of service. We continue to evolve and improve our processes and encourage our customers and members to report any suspicious activity.

Additional information

This report details how Slow Pisces conceals malware within its coding challenges and describes the group's subsequent tooling, aiming to provide the wider industry with a better understanding of this threat.

Palo Alto Networks customers are better protected from the threats discussed in this article through our Next-Generation Firewall with Advanced URL Filtering and Advanced DNS Security subscriptions.

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

Related Unit 42 Topics Cryptocurrency, DPRK

Technical Analysis

Our visibility of this campaign broadly follows three steps, illustrated below in Figure 1.

Diagram illustrating cybersecurity threats involving PDF lures, GitHub repositories, and a C2 server. It shows: 1) PDF files like job descriptions and question sheets acting as lures, 2) GitHub JavaScript and Python repositories with multiple external APIs, potentially fetching malicious data, and 3) a C2 server configured to send benign data or a malicious payload under certain conditions. Palo Alto Networks and UNIT 42 logos are included.
Figure 1. Overview of Slow Pisces “coding challenges” campaign.

Stage 1 - PDF Lures

​​Slow Pisces began by impersonating recruiters on LinkedIn and engaging with potential targets, sending them a benign PDF with a job description as shown below in Figure 2. If the potential targets applied, attackers presented them with a coding challenge consisting of several tasks outlined in a question sheet.

Image displaying two documents side by side. On the left is a 'Job Description' for a UX Design Team Coordinator. On the right is a 'Question Sheet' containing technical and general questions related to user experience (UX) design.
Figure 2. Benign PDF lures.

We have observed Slow Pisces impersonating several organizations with these lures, primarily in the cryptocurrency sector. The question sheets include generic software development tasks and a “real project” coding challenge, which links to a GitHub repository shown in Figure 3 below.

Screenshot of a document titled "Coding and Problem-Solving Skills With Real Project." It includes a link to a GitHub repository and outlines a coding task involving Bitcoin and Ethereum exchange rates from API sources. The text requests enhancements to the project by adding more market APIs and improving the network communication in the code.
Figure 3. “Real project” coding challenge contained in the PDF lure.

Stage 2 - GitHub Repositories

Slow Pisces presented targets with so-called coding challenges as projects from GitHub repositories. The repositories contained code adapted from open-source projects, including applications for viewing and analyzing:

  • Stock market data
  • Statistics from European soccer leagues
  • Weather data
  • Cryptocurrency prices

The group primarily used projects in either Python or JavaScript, likely depending on whether the target applied for a front-end or back-end development role. We also saw Java-based repositories in this campaign, though they were far less common, with only two instances impersonating a cryptocurrency application called jCoin.

This scarcity suggests attackers might have created repositories on demand, based on a target's preferred programming language. Consequently the group more frequently used languages more popular in the cryptocurrency sector, such as JavaScript and Python. Likewise, undiscovered repositories might also exist for other programming languages.

Stage 3a - Python Repository

In late 2024, the group used a project shown below in Figure 4 titled “Stocks Pattern Analyzer” adapted from a legitimate repository.

Screenshot of a GitHub repository named "Stocks Pattern Analyzer" showing file structure on the left and README file content on the right explaining how to run the application directly and with Docker.
Figure 4. “Stocks Pattern Analyzer” Python repository.

Most of the code in the repository is benign. When targets attempt to run the project according to the question sheet, data is fetched from three remote locations:

  • hxxps://en.wikipedia[.]org/wiki/List_of_S%26P_500_companies
  • hxxps://en.wikipedia[.]org/wiki/Currency_pair
  • hxxps://en.stockslab[.]org/symbols/sp500

Two of the URLs pull data from Wikipedia. The third URL uses a domain controlled by Slow Pisces. This pattern — using multiple data sources, most legitimate but one malicious — is common in the group's Python repositories.

The malicious command-and-control (C2) server is configured to mimic the format of the legitimate sources. In this case, it uses the .en subdomain and .org top-level domain (TLD) like we see for the legitimate Wikipedia domain above.

YAML Deserialization

Slow Pisces could simply place malware directly in the repository or execute code from the C2 server using Python's built-in eval or exec functions. However, these techniques are easily detected, both by manual inspection and antivirus solutions.

Instead, Slow Pisces first ensures the C2 server responds with valid application data. For example, the repository mentioned above expects a list of S&P 500 company symbols. The C2 URL initially replies with this data in a JSON-formatted list.

The threat actors only send a malicious payload to validated targets, likely based on IP address, geolocation, time and HTTP request headers. Focusing on individuals contacted via LinkedIn, as opposed to broad phishing campaigns, allows the group to tightly control the later stages of the campaign and deliver payloads only to expected victims.

To avoid the suspicious eval and exec functions, Slow Pisces uses YAML deserialization to execute its payload as shown in Figure 5.

Screenshot of Python code defining a function 'fetch_symbols' which retrieves stock symbols from the S&P 500 using an API call, handles different content types, and processes responses based on their content type. The last line has a section highlighted in a red box.
Figure 5. Python code showing the entry point of Slow Pisces’ malware using YAML deserialization.

This code fetches data from the C2 server via HTTPS and checks the Content-Type response header. If the header indicates JSON data (application/json), the code parses and returns the JSON to the application.

If the response indicates YAML data (application/yaml), the code uses the yaml.load() function from the PyYAML library to parse the data. This function is inherently unsafe and the PyYAML documentation explicitly recommends yaml.safe_load() for untrusted input.

YAML is typically used for configuration files, like the example shown below:

However, yaml.load() can serialize and deserialize arbitrary Python objects, not just valid YAML data. For example, the following Python code prints the numbers 0-4:

If this code was serialized using yaml.dump() it would become the following:

Finally, when this data is passed to yaml.load() it will execute the original code: range(0, 5).

This highlights a potential detection point as payloads for the Python repository, and malware using YAML deserialization in general, contains !!python/object/apply:builtins if the payload uses a built-in Python function.

The following stages in Table 1 exist primarily in memory and generally have no footprint on disk. To aid the community in detection and awareness, we have uploaded these payloads to VirusTotal. The YAML deserialization payload executes malware we have named RN Loader and RN Stealer based on the C2 token format we observed in RN Stealer, which we discuss in the following sections.

Stage SHA256 Hash
YAML Deserialization Payload 47e997b85ed3f51d2b1d37a6a61ae72185d9ceaf519e2fdb53bf7e761b7bc08f
RN Loader 937c533bddb8bbcd908b62f2bf48e5bc11160505df20fea91d9600d999eafa79
RN Stealer e89bf606fbed8f68127934758726bbb5e68e751427f3bcad3ddf883cb2b50fc7

Table 1. Python repository payloads.

Slow Pisces’ YAML deserialization payload begins by creating the folder Public in the victim’s home directory and creating a new file in that directory named __init__.py. Embedded Base64 data is decoded and written to this file, containing the next infection stage (RN Loader), which is then executed.

RN Loader

This newly created file for RN Loader at ~/Public/__init__.py deletes itself after execution, ensuring that it exists solely in memory. It sends basic information about the victim machine and operating system over HTTPS to the same C2 at en.stockslab[.]org, followed by a command loop with the following options in Table 2.

Code Description
0 Sleep for 20 seconds
1 Base64-decodes sent content and saves it to the file init.dll for Windows or init for all other operating systems.

Sets an environment variable X_DATABASE_NAME to an empty string.

Loads and executes the downloaded DLL using ctypes.cdll.LoadLibrary.

2 Base64-decodes sent content and executes it using the Python built-in exec.
3 Base64-decodes sent content and a parameter. Content is saved to the file dockerd, while the parameter is saved as docker-init.

dockerd is then executed in a new process, with docker-init supplied as a command-line argument.

9 Terminates execution.

Table 2. RN Loader command table.

The payloads of the command loop from Table 2 using options 1 and 3 are currently unknown and are likely triggered by specific conditions. However, we recovered a Python-based infostealer delivered by option 2, and we track this malware as RN Stealer.

RN Stealer

RN Stealer first generates a random victim ID, subsequently used as a cookie in all communications to the C2 server. It then requests an XOR key from the server for encrypting exfiltrated data.

Communication with the C2 server occurs over HTTPS, using Base64-encoded tokens to identify request and response types. The analyzed payload includes four token types:

  • R0 requesting XOR key
  • R64 exfiltrating data
  • R128 exfiltrating compressed data
  • R256 infostealer complete

The format of these token types — the letter R followed by an integer N — led to our names for this payload. We call the payload RN Stealer and the preceding stage RN Loader.

We recovered the script for this RN Stealer sample from a macOS system. As such, threat authors tailored this sample to steal information specific to macOS devices, including:

  • Basic victim information: Username, machine name and architecture
  • Installed applications
  • A directory listing and the top-level contents of the victim’s home directory
  • The login.keychain-db file that stores saved credentials in macOS systems
  • Stored SSH keys
  • Configuration files for AWS, Kubernetes and Google Cloud

The data gathered by RN Stealer likely determines whether persistent access is necessary. If so, we can infer the following steps for this Python infection chain:

  1. The C2 server checks beaconing victims against unknown criteria. Valid victims receive a YAML deserialization payload. Invalid victims receive benign JSON data.
  2. The deserialization payload establishes a command loop with the C2 server, exfiltrating basic victim information and delivering a custom Python infostealer via option code 2 in Table 2.
  3. The infostealer gathers more detailed victim information, which attackers likely used to determine whether they needed continued access.
    1. If continued access is required, the C2 server delivers a payload via option codes 1 or 3.
    2. If access is no longer needed, option code 9 terminates the malware's execution, removing all access since the payload resides solely in memory.

Stage 3b - JavaScript Repository

If the targeted victims applied for a JavaScript role, they might instead encounter a “Cryptocurrency Dashboard” project, similar to the example in Figure 6 below.

Screenshot of a GitHub repository named "Cryptocurrency Dashboard," featuring a README.md file displayed. This README includes sections: Features, Installation, Usage, Project Structure, Configuration, Dependencies, and License. It describes the project as an application built with Node.js, Express, and EJS that displays real-time and historical data for various cryptocurrencies.
Figure 6. JavaScript repository.

This application contains a .env file with the C2 and legitimate data source:

  • PORT=3000
  • COINGECKO_API_URL=hxxps://api.coingecko[.]com/api/v3
  • JQUERY_API_URL=hxxps://update.jquerycloud[.]io/api/v1

The COINGECKO_API_URL value is used to fetch data for the Cryptocurrency Dashboard while the JQUERY_API_URL value represents a C2 server controlled by Slow Pisces. Similar to the Python repository, the JavaScript C2 server only delivers payloads to validated targets, otherwise it responds with a version number.

The repository uses the Embedded JavaScript (EJS) templating tool, passing responses from the C2 server to the ejs.render() function, shown below in Figure 7.

Screenshot showing a code snippet in JavaScript. It includes a comment and a function call to render a homepage with settings and items per page. res.render is highlighted in a red box.
Figure 7. JavaScript code showing the entry point of Slow Pisces’ malware using the EJS render function.

Like the use of yaml.load(), this is another technique Slow Pisces employs to conceal execution of arbitrary code from its C2 servers, and this method is perhaps only apparent when viewing a valid payload.

The EJS render function accepts various parameters, one of which is called view options. Within this, arbitrary JavaScript code can be supplied and executed through the key escapeFunction.

A Taiwanese researcher who goes by the handle Huli discussed the technical details of how this results in arbitrary code execution in a CTF post. However, we can sufficiently understand that a payload structured as shown in Figure 8 will result in the code contained in escapeFunction being executed when passed to ejs.render().

Screenshot of a JavaScript code snippet involving functions with "escapeFunction" highlighted in a red box.
Figure 8. Partial EJS render payload.

Unfortunately, we were not able to recover the full portion of this payload. As such, we can only surmise that a new directory .jql is created under the user’s home directory where a file called helper.js is dropped, containing Base64-encoded data.

Infrastructure

The timeline below in Figure 9 details the C2 infrastructure used in this campaign from February 2024-February 2025, grouped by the type of repository served (JavaScript or Python).

Timeline of infrastructure tracking the JavaScript command and controls (top, yellow label) and the Python command and controls (bottom, orange label). The timeline starts at the end of Q1 of 2024 and continues to Q2 of 2025.
Figure 9. C2 infrastructure timeline.

As mentioned earlier, the domains in the infrastructure of this campaign can mimic the format of the legitimate sources used alongside them, frequently using subdomains like .api or .cdn. We have discovered infrastructure associated with this campaign up to the time of this article.

Conclusion

This report has covered Slow Pisces’ most recent campaign, impersonating recruiters over LinkedIn to target developers in the cryptocurrency sector with malicious coding challenges. While we were not able to recover the full attack chain for JavaScript repositories, the Python version of the campaign delivered two new payloads that we have named RN Loader and RN Stealer.

Using LinkedIn and GitHub in this manner is not unique. Multiple DPRK-affiliated groups have used similar tactics such as Alluring Pisces and Contagious Interview.

These groups feature no operational overlaps. However, these campaigns making use of similar initial infection vectors is noteworthy.

Slow Pisces stands out from their peers’ campaigns in operational security. Delivery of payloads at each stage is heavily guarded, existing in memory only. And the group’s later stage tooling is only deployed when necessary.

In particular, the group made use of two techniques to conceal functionality:

  • YAML deserialization
  • EJS escapeFunction

Both of these techniques greatly hinder analysis, detection and hunting. Similarly, relatively new or inexperienced developers in the cryptocurrency sector would have difficulty identifying these repositories as malicious.

Based on public reports of cryptocurrency heists, this campaign appears highly successful and likely to persist in 2025. While this article highlighted two potential detection opportunities for YAML deserialization and EJS escapeFunction payloads, the most effective mitigation remains strict segregation of corporate and personal devices. This helps prevent the compromise of corporate systems from targeted social engineering campaigns.

Palo Alto Networks Protection and Mitigation

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

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: 00080005045107

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

Domain IP Address First Seen Last Seen Repository
getstockprice[.]com 70.34.245[.]118 2025-02-03 2025-02-20 Python
cdn[.]clubinfo[.]io 5.206.227[.]51 2025-01-21 2025-02-19 Python
getstockprice[.]info 131.226.2[.]120 2025-01-21 2025-01-23 Python
api[.]stockinfo[.]io 136.244.93[.]248 2024-10-30 2024-11-11 Python
cdn[.]logoeye[.]net 54.39.83[.]151 2024-10-29 2024-11-03 Python
en[.]wfinance[.]org 195.133.26[.]32 2024-10-12 2024-11-01 Python
en[.]stocksindex[.]org 185.236.231[.]224 2024-09-11 2024-10-04 Python
cdn[.]jqueryversion[.]net 194.11.226[.]16 2024-08-23 2024-09-23 JavaScript
en[.]stockslab[.]org 91.103.140[.]191 2024-08-19 2024-09-12 Python
update[.]jquerycloud[.]io 192.236.199[.]57 2024-07-03 2024-08-22 JavaScript
cdn[.]soccerlab[.]io 146.70.124[.]70 2024-08-07 2024-08-21 Python
api[.]coinpricehub[.]io 45.141.58[.]40 2024-05-06 2024-08-06 Java
cdn[.]leaguehub[.]net 5.133.9[.]252 2024-07-15 2024-07-21 Python
cdn[.]clublogos[.]io 146.19.173[.]29 2024-06-24 2024-07-12 Python
api[.]jquery-release[.]com 146.70.125[.]120 2024-06-10 2024-06-28 JavaScript
cdn[.]logosports[.]net 185.62.58[.]74 2024-05-08 2024-06-23 Python
skypredict[.]org 80.82.77[.]80 2024-05-06 2024-06-16 JavaScript
api[.]bitzone[.]io 192.248.145[.]210 2024-04-25 2024-05-13 Python
weatherdatahub[.]org 194.15.112[.]200 2024-04-05 2024-05-03 JavaScript
api[.]ethzone[.]io 91.234.199[.]90 2024-04-16 2024-04-24 Python
api[.]fivebit[.]io 185.216.144[.]41 2024-04-08 2024-04-14 Python
blockprices[.]io 91.193.18[.]201 2024-03-15 2024-04-09 JavaScript
api[.]coinhar[.]io 185.62.58[.]122 2024-03-26 2024-04-09 Python
mavenradar[.]com 23.254.230[.]253 2024-02-21 2024-03-26 JavaScript
indobit[.]io 146.70.88[.]126 2024-03-19 2024-03-20 Python
api[.]thaibit[.]io 79.137.248[.]193 2024-03-07 2024-03-09 Python
chainanalyser[.]com 38.180.62[.]135 2024-02-23 2024-03-06 JavaScript

Additional Resources

How Prompt Attacks Exploit GenAI and How to Fight Back

Executive Summary

Palo Alto Networks has released “Securing GenAI: A Comprehensive Report on Prompt Attacks: Taxonomy, Risks, and Solutions,” which surveys emerging prompt-based attacks on AI applications and AI agents. While generative AI (GenAI) has many valid applications for enterprise productivity, there is also potential for critical security vulnerabilities in AI applications and AI agents.

The whitepaper comprehensively categorizes attacks that can manipulate AI systems into performing unintended or harmful actions — such as guardrail bypass, information leakage and goal hijacking. In the appendix, it details the success rates for these attacks – certain attacks can be successful as often as 88% of the time against certain models, demonstrating the potential for significant risk to enterprises and AI applications.

To address these evolving threats, we introduce:

  • A comprehensive, impact-focused taxonomy for adversarial prompt attacks
  • Mapping for existing techniques
  • AI-driven countermeasures

This framework helps organizations understand, categorize and mitigate risks effectively.

As AI security challenges grow, defending AI with AI is critical. Our research provides actionable insights for securing AI systems against emerging threats.

The article below provides a condensed version of the full paper, showing the taxonomy and covering the key points. For a more detailed version of these concepts, as well as references, please refer to “Securing GenAI: A Comprehensive Report on Prompt Attacks – Taxonomy, Risks and Solutions.”

Palo Alto Networks offers a number of products and services that can help organizations protect AI systems, including:

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

The Urgent Need for GenAI Security

As GenAI becomes embedded in critical industries, prompt attacks pose an urgent and severe security threat. These attacks manipulate AI models into leaking sensitive data, bypassing guardrails or executing unintended actions. This can lead to data breaches, misinformation and financial losses. In high-stakes sectors like healthcare and finance, the consequences can be catastrophic, from compromised patient records to flawed automated decision-making such as biased lending decisions.

Beyond immediate risks, such attacks erode user trust and system reliability, amplifying ethical concerns such as misinformation and AI-driven exploitation. Our analysis of leading large language models (LLMs) reveals substantial vulnerabilities – certain attacks can be successful as often as 88% of the time against certain models. These findings emphasize the need for a structured defense strategy to secure AI applications against adversarial manipulation.

Background: AI System Architecture

AI Applications

A typical enterprise GenAI application consists of multiple interdependent components:

  • App workloads: User interfaces, prompt engineering (designing and optimizing the prompt inputs) and business logic
  • AI model: Foundation models, fine-tuned models or hybrid AI systems
  • Datasets: Retrieval-augmented generation (RAG) data extracted from the knowledge base for real-time knowledge retrieval and training datasets for model fine-tuning
  • Tools and plugins: APIs and external services enabling task execution
  • Users: End-users or other applications providing instructions

Given the complexity of the interactions between these components, solely monitoring user inputs and outputs is insufficient. Threat detection must extend to AI-generated outputs, RAG interactions and tool integrations to ensure security. Figure 1 shows the architecture of a typical AI application.

Diagram illustrating the structure of an AI application system with components labeled "Users," "AI App," and "Datasets." Elements include a representation of users linked to various AI app functions such as database, vector, tools, and plugins. The datasets section includes external data sources and training dataset processing. The focus is on the flow and management of data within the system.
Figure 1. Architecture of a typical AI application.

AI Agents: A New Layer of Complexity

AI agents extend traditional GenAI applications with reasoning, long-term memory and autonomous decision-making. They coordinate tools, decompose tasks and improve over time. This enables powerful automation but also introduces new security risks:

  • Memory corruption: Attackers inject malicious instructions to persistently alter behavior
  • Instruction and tool schema exposure: Crafted prompts can extract sensitive system operations
  • Tool exploitation: Malicious inputs can trigger unauthorized actions, such as SQL injection attacks

The following sections will explore specific prompt attack techniques and mitigation strategies.

Part 1: Impact-Based Categorization of Prompt Attacks

We categorize adversarial prompt attacks into four impact-based categories to facilitate understanding of the associated security risks.

  • Goal hijacking: Manipulating the AI’s objective to perform unintended actions
  • Guardrail bypass: Circumventing safety measures designed to restrict harmful output
  • Information leakage: Extracting sensitive data from the AI model or its associated systems
  • Infrastructure attack: Disrupting or damaging the underlying infrastructure of the AI system

Each category highlights a distinct facet of potential threats, enabling organizations to tailor their defense strategies effectively.

What Is Goal Hijacking?

Goal hijacking involves crafting input to redirect the LLM to take actions away from the intended purpose of the application or user. Such attacks do not necessarily require bypassing system guardrails but instead only require the attacker to cause the model to perform the attacker’s goal rather than its intended functionality. For example, an adversary can manipulate an LLM-based application that parses resumes by hiding new instructions inside a document to increase their chances of passing initial resume screening.

Goal hijacking can occur in a RAG system when the application retrieves data from sources poisoned with malicious instructions. This type of attack, which exploits a model’s inability to separate legitimate instructions from an attacker’s instructions within a conversation, is often referred to as indirect prompt injection. The attacker can be a malicious end user or a third party with access to the application’s data sources.

What Is a Guardrail Bypass?

Guardrail bypass involves circumventing the safety measures implemented by the application developers or built into the AI model itself. This includes attempts to disregard guardrails put in place by the system prompt, model training data, or an input monitor.

Successfully bypassing these guardrails allows attackers to exploit plugin permissions, generate toxic content, inject malicious scripts or URLs, and engage in other harmful activities. For example, an attacker can attempt to bypass guardrails by obfuscating disallowed instructions using an encoding scheme.

What Is an Information Leakage Attack?

Information leakage attacks aim to extract sensitive data from the AI system. One common tactic is obtaining the LLM's system prompt, which can reveal information about the application's guardrails and proprietary prompt engineering techniques. Another tactic, known as leak replay, involves crafting prompts to retrieve sensitive information the model has memorized from its training data or previous sessions.

What Is an Infrastructure Attack?

Infrastructure attacks target the application infrastructure and resources supporting the AI application. Two well-documented examples are resource consumption attacks and remote code execution attacks.

For example, a cost utilization attack might involve submitting short prompts designed to execute the LLM's full context window (or trigger a server timeout) such as asking the model to repeat an instruction 100,000 times. Furthermore, when GenAI applications execute commands provided by an LLM, they are vulnerable to remote code execution attacks where an attacker designs input prompts to trick an application into executing arbitrary commands. These arbitrary commands are those that the attacker chooses, not ones chosen by the intended user.

Attacks Targeting AI Agent Platforms

To better understand the security risks posed by AI agent vulnerabilities, it is crucial to categorize attacks based on their techniques and map them to their broader impacts. This systematic approach highlights how specific attack methods lead to consequences such as goal hijacking, information leakage, infrastructure attacks and guardrail bypass.

Linking techniques to their impacts allows organizations to better prioritize mitigation strategies and address vulnerabilities comprehensively. See Table 1 for the AI agent security issues mapping from technique-based categorization to impact-based categorization.

Technique-based  Impact-based 
Goal Hijacking Guardrail Bypass Information leakage Infrastructure attack
Memory Corruption X X
Exposure of Instructions and Tool Schemas X
Direct Function Exploitation X X

Table 1. AI Agent security issues mapped from technique to impact categorization.

Part 2: Categorizing Prompt Attacks by Technique

This section categorizes prompt attacks based on the techniques used by attackers. Attackers execute these techniques in two main ways:

  • Direct: The attacker sends the malicious prompt or query directly to the LLM-integrated application. This involves crafting input designed to exploit vulnerabilities in the LLM's interpretation or processing.
  • Indirect: The attacker embeds malicious information within the data sources used by the LLM-integrated application. When the application processes this poisoned data, it inadvertently creates a malicious prompt that is then passed to the LLM. This is often seen in RAG systems.

A technique refers to a general attack strategy, while an approach is a specific implementation of that strategy. Malicious prompts often combine multiple techniques and approaches.

For example, social engineering is a technique that involves manipulating the LLM through deceptive prompts. An approach using this technique might involve impersonating a trusted authority figure within the prompt.

We classify prompt attacks into four primary techniques:

  • Prompt Engineering: Crafting carefully worded prompts to elicit desired (but potentially unintended) responses from the LLM
  • Social Engineering: Using deceptive prompts to manipulate the LLM, often by impersonating a trusted authority or exploiting psychological vulnerabilities
  • Obfuscation: Disguising malicious instructions within the prompt to evade detection or bypass filters
  • Knowledge Poisoning: Contaminating the LLM's training data or knowledge base with malicious information

Figures 2a and 2b illustrate how these techniques map to specific impact categories, clarifying the relationship between the techniques and their potential consequences.

Table breaking down techniques by prompt engineering and how it relates to impacts.
Figure 2a. Mapping techniques by category.
Table breaking down techniques by social engineering, obfuscation, knowledge poisoning and how they related to impacts.
Figure 2b. Mapping techniques by category.

As the landscape of prompt attacks evolves, new techniques will likely emerge, adding complexity to the already diverse set of methods discussed here. Many attacks do not operate in isolation but often involve a combination of techniques, which increases their effectiveness and complicates detection and mitigation. The emergence of multimodal systems further enhances the sophistication of these attacks, as AI integrates diverse inputs (e.g., text, image, audio or video), making them more challenging to detect and mitigate.

Advanced attacks span multiple technique categories, such as multimodal jailbreaks, which leverage image or audio inputs to bypass LLM guardrails. For example, typographic visual prompts can embed hidden instructions within an image. This allows attackers to bypass model guardrails leading to impacts such as goal hijacking, information leakage and guardrail bypass. Similarly, audio-based prompts containing hidden messages can yield comparable outcomes, underlining the need for robust defenses against multimodal prompt attacks.

These developments underscore the need for adaptable, proactive security strategies to combat the growing complexity and evolving nature of prompt-based threats.

Part 3: Detect and Prevent Adversarial Prompt Attacks

The following section describes how to secure your GenAI applications against each of the four impact categories, including specific attack scenarios and prevention techniques.

Goal Hijacking

Goal hijacking attacks often involve manipulating the model to disregard prior instructions and perform a different task than intended by the user or system prompt. A key mitigation strategy is to implement input guardrails that detect and prevent adversarial prompt attacks, including those using prompt engineering, social engineering or text obfuscation techniques. These guardrails could include techniques like analyzing prompt similarity to known malicious prompts, detecting unusual patterns in input text, or limiting the model's ability to deviate from the original instructions. Furthermore, robust access controls on data sources used by the model (especially in RAG systems) can reduce the risk of indirect prompt injection, a common method for goal hijacking.

Guardrail Bypass

As shown earlier, many types of prompt attacks enable an attacker to bypass GenAI application guardrails, especially those that use social engineering or obfuscation. A comprehensive LLM prompt guardrail is required to detect the many ways to jailbreak a GenAI model. As new types of LLM jailbreaks are continuously discovered, regularly updating and testing these guardrails against known attack patterns and emerging threats is critical for maintaining a strong security posture. A guardrail that has remained stagnant for just a few months may already have significant vulnerabilities.

Information Leakage

Securing against information leakage requires multiple types of guardrails, due to the many ways that an attacker can exfiltrate information from a GenAI system. Incorporating a guardrail on LLM input and output that scans for sensitive data, such as personally identifiable information (PII), protected health information (PHI), intellectual property and other confidential information is crucial. Specifically, guarding against prompt leakage (exfiltration of system instructions) and leak replay (retrieval of memorized training data) requires robust defenses. Moreover, agentic workflows, where AI agents interact with tools and services, present opportunities for malicious actors to employ the same prompt hacking mechanics to exfiltrate tools signatures and use them without authorization. As a result, a guardrail to prevent adversarial prompt attacks can also mitigate information leakage or unauthorized tool use.

Infrastructure Attack

As previously discussed in the earlier sections on prompt attacks, there are multiple ways that an attacker can cause an infrastructure attack on a GenAI application. For example, an attacker can manipulate a GenAI application to compromise its resources with prompt attacks such as the repeat-instruction or remote code execution attacks. Furthermore, an attacker can manipulate a GenAI model to generate malware that can compromise the application workload or end user. Poisoning application data sources with malicious URLs presents another attack vector, potentially exposing people to phishing or other web-based threats.

As a result, preventing infrastructure attacks on GenAI applications requires a multi-faceted approach combining traditional application security and GenAI-specific security measures. Comprehensive prompt guardrails can prevent many prompt injection attacks. Furthermore, the inputs and outputs of GenAI models must be scanned for malicious payloads, including harmful URLs and malware.

Conclusion

This article has introduced a comprehensive, impact-based taxonomy of adversarial prompt attacks, providing a framework for classifying both existing and emerging threats. By establishing a clear and adaptable taxonomy, we aim to empower the GenAI ecosystem to effectively map, understand and mitigate the risks posed by adversarial prompt attacks.

For GenAI application developers, this article highlights the critical importance of designing secure applications and conducting thorough testing before public deployment. Awareness of the techniques and impacts of adversarial prompt attacks will enable developers to build systems that are resilient to evolving threats.

For GenAI users, particularly enterprise users, this article serves as a guide to recognizing the risks of adversarial prompt attacks. By remaining vigilant and cautious when interpreting the outputs of GenAI applications, users can minimize the potential consequences of such attacks.

Enterprise network administrators and policymakers will gain valuable insights into the security risks associated with adversarial prompt attacks. Equipped with this understanding, they can better secure their environments by carefully evaluating GenAI applications, implementing robust policies and managing risks effectively. When attacks occur, they will be better prepared to assess the impacts and take remediation actions.

Robust security solutions can help organizations address these challenges by providing capabilities such as:

  • Enhanced visibility and control over GenAI systems
  • Model and dataset protection
  • Adaptive defense against evolving attacks
  • Zero-day threat prevention within the enterprise

These solutions can help detect potential data exposure risks and manage overall security posture. Please refer to the Unit 42 Threat Frontier: Prepare for Emerging AI Risks on how adversaries can leverage GenAI and how Unit 42 can help defend your organization.

By leveraging these tools and the insights shared in this blog, stakeholders across the GenAI ecosystem can confidently navigate the evolving threat landscape and secure their applications, networks and data against adversarial prompt attacks.

Again, please refer to the full prompt attack whitepaper “Securing GenAI: A Comprehensive Report on Prompt Attacks: Taxonomy, Risks, and Solutions” for more technical insights.

Palo Alto Networks offers products and services that can help organizations protect AI systems:

  • AI Runtime Security is an adaptive, purpose-built solution that discovers, protects and monitors the entire enterprise application and agent stack including models and data from AI-specific and foundational network threats.
  • AI Access Security offers comprehensive visibility and control over GenAI usage in enterprise environments, helping detect potential data exposure risks and strengthening the overall security posture.
  • AI Security Posture Management (AI-SPM) enables rapid GenAI application development by reducing risk in the AI application stack and supply chain.
  • Unit 42’s AI Security Assessment provides recommended security best practices and helps you proactively identify the threats most likely to target your AI environment.

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: 00080005045107

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

OH-MY-DC: OIDC Misconfigurations in CI/CD

Executive Summary

In the course of investigating the use of OpenID Connect (OIDC) within continuous integration and continuous deployment (CI/CD) environments, Unit 42 researchers discovered problematic patterns and implementations that could be leveraged by threat actors to gain access to restricted resources. One instance of such an implementation was identified in CircleCI’s OIDC.

OIDC extends the OAuth protocol by adding a new token to the protocol, enabling applications to verify user identities and authorize access to resources using that token. It plays a crucial role in ensuring secure and seamless authentication and authorization during CI/CD processes. Securing these implementations is critical, as OIDC is rapidly being adopted as the primary foundation for modern cloud authentication workflows. In this article, we discuss potential critical security risks in OIDC implementation and usage.

Our analysis revealed three key threat vectors:

  • Loosely configured policies used by identity federations
  • Reliance on user-controllable claim values
  • Ability to leverage poisoned pipeline execution (PPE) in combination with permissive identity federation

We urge organizations to review and strengthen their OIDC policies, implement strict claim validation and enhance CI/CD security practices.

CircleCI also shared a response describing how they addressed the issue and offering recommendations to improve security.

Palo Alto Networks' Cortex Cloud and Prisma Cloud offerings provide protection against these threats through comprehensive cloud security features.

If you suspect a compromise or have an urgent security matter, contact the Unit 42 Incident Response team immediately.

Related Unit 42 Topics JSON, IAM

OIDC Overview

This paper accompanies the presentation “Oh-My-DC,” delivered at DEF CON 32 in August 2024. This article assumes a basic familiarity with OAuth and CI/CD pipelines, including concepts like authorization grants, access tokens and the different stages of a CI/CD workflow.

Readers unfamiliar with these concepts may find the following resources helpful:

What Is OIDC?

OIDC extends the OAuth protocol by adding a new token to the protocol, enabling applications to verify user identities and authorize access to resources using that token. The protocol comprises two key parts:

  • Authentication
  • Authorization

Considering the authentication, the OIDC protocol performs the same OAuth authentication flow, with an additional requirement that the identity provider (IdP) issues an ID token to the client after successful authentication.

This ID token, formatted as a JSON Web Token (JWT), contains values (called claims) about the just-authenticated identity (e.g., their username, email) and some other vendor-specific information we will touch on later.

Per the authorization part, it occurs when the client attempts to access a resource, usually on the cloud side. At this point, the resource's identity federation policy comes into play. This policy verifies the claims within the received ID token against a predefined set of rules. If the claims in the ID token satisfy the policy, the client is granted access to the resource.

Figure 1 illustrates the OIDC protocol, highlighting the authentication and authorization components.

Diagram illustrating the authentication process with an Identity Provider. It shows a user attempting to access a resource via a web server, being redirected, and logging in with an ID token to access the resource.
Figure 1. OIDC flow with authentication (abbreviated as AuthN) and authorization (AuthZ) highlighted.

Having covered the basic OIDC flow, we can now examine its application within CI/CD environments.

OIDC in CI/CD

Credential leaks and authentication vulnerabilities within CI/CD systems have led to numerous breaches in recent years. These incidents directly correlate with the increasing interactions between CI pipelines and external resources, particularly cloud resources.

The OIDC protocol addresses this challenge by eliminating the need for password-based authentication when CI machines interact with external resources. This follows the idea of “if you don't have a password, you can't leak it.”

Instead, the protocol relies on identity tokens that CI machines acquire through the OIDC flow. In essence, OIDC enables passwordless interaction between our CIs and resources.

Diagram illustrating the workflow between a Developer, VCS and CI. It shows the Developer linked to a VCS provider (GitHub, GitLab, Bitbucket) repository, which then connects to a CI provider (CircleCI, GitHub Actions) that interacts with a Cloud Resource (AWS, GCP, Azure).
Figure 2. Flow of a CI machine accessing a cloud resource.

A key challenge in implementing OIDC within CI/CD lies in the ephemeral nature of CI runners, which lack persistent credentials. How then do these runners obtain identity tokens?

The answer lies in the fundamental CI/CD architecture. The CI/CD vendor is the only entity that can authoritatively identify a runner, as it's the sole party aware of the newly provisioned ephemeral machine.

This architectural reality positions the CI/CD vendor as the natural IdP in the OIDC flow.

Diagram illustrating the authentication process involving a CI Provider, Identity Provider, and Cloud Provider. Steps include requesting an ID token, verifying token's integrity and expiration, and accessing a cloud resource using short-lived credentials. Icons for CI Provider, Identity Provider, and Cloud Provider enhance understanding.
Figure 3. OIDC flow, in the context of CI.

This vendor-as-IdP model has significant security implications, namely bypassing the authentication phases as well as requiring at least two more configuration points. These will be addressed later in the case study.

Let's summarize how OIDC integrates with CI environments. When a workflow is triggered, the CI/CD vendor provisions a runner. Acting as an IdP, it then issues a signed ID token (i.e., OIDC). The machine will later use this token to identify itself when attempting to gain authorization to access protected resources throughout the build lifecycle.

Understanding OIDC Claims

As mentioned above, the ID token is a JWT that contains values called claims. Down the line, the identity federation will assess these claims to determine whether the incoming token grants access to a requested resource. Generally speaking, claims provide essential information about the authentication event and the authenticating user.

Required claims include the information listed in Table 1.

iss The token issuer (the IdP)
sub The token’s subject identifier
aud The expected audience
exp Token’s expiration time
iat Issuance time

Table 1. The required claims as defined by the OpenID Connect Core 1.0 specification.

Additional claims can convey the following information:

  • User attributes (e.g., email, name)
  • Context-specific information (e.g., repository details, pipeline data)
  • Role-based access control (RBAC) attributes

These claims form the foundation of trust between the IdP and relying applications, enabling user authentication and authorization decisions.

The Risks of OIDC Misconfigurations

OIDC misconfigurations can be critical, as we've just learned. OIDC's role is to ultimately safeguard our potentially valuable resources. Therefore, if OIDC is misconfigured at any of its points (either the authentication or authorization), an attacker can potentially abuse misconfigurations and access resources with the same permissions as authorized users.

This is particularly concerning in CI environments, where build systems typically have broad access to sensitive resources and systems like the organization’s cloud environment or back-office software. A single misconfiguration could potentially expose multiple downstream resources to unauthorized access.

Therefore, proper OIDC configuration requires careful attention to both the authentication and authorization components, as a weakness in either can compromise the entire security model.

OIDC Misconfigurations

When examining OIDC misconfigurations and their potential exploits, we can see that the authorization phase is the Achilles' heel of CI-based OIDC implementations.

As Figure 3 shows, the CI vendor serves as both the IdP and the machine provisioner. This dual role means the authentication happens automatically when the CI vendor creates a runner.

This architectural design has an important implication. Every CI runner that supports OIDC automatically receives an identity token signed by the vendor. However, this is true not just for our runners, but for every user of that CI platform. In other words, any customer of the same CI vendor can obtain machine-identity tokens bearing the vendor's signature.

From a security standpoint, this means that any other customer of the CI/CD vendor automatically satisfies the authentication requirements of your OIDC configuration. This is precisely why authorization becomes our most sensitive security control. While not inherently vulnerable, it is susceptible to misconfigurations that can have severe consequences.

To understand these architectural implications, let's examine common OIDC misconfigurations and their potential impact.

OIDC Misconfiguration #1: Missing or Permissive Identity Federation Policies

A critical OIDC misconfiguration occurs when identity federation policies are either missing or too permissive. This happens when policies exist but fail to enforce meaningful validation on the OIDC token claims.

We can observe this in two main scenarios:

  • Overly permissive conditions, such as accepting any aud claim value or asserting the existence of a sub claim
  • Validating claims that are always true within the given context, such as checking if the sub claim starts with repo when all tokens from that issuer inherently have this prefix

These scenarios, shown in Figure 4, demonstrate how the default or seemingly valid configurations might offer no real security guarantees as they fail to properly validate the token's claims.

Screenshot of computer code editor using key conditions like "StringLike" and "StringEquals" to specify allowed actions.
Figure 4. Lax/lack of assertions in the identity federation.

For further information on this topic, please consult the following videos:

Exploiting Lax Federation With PPE

Combining poisoned pipeline execution (PPE) with lax OIDC federation policies allows attackers to escalate privileges within organizations that rely on overly broad trust relationships. This attack exploits remote code execution (RCE) vulnerabilities in a CI/CD pipeline to obtain OIDC tokens that meet the lax federation requirements, potentially granting unauthorized access to sensitive resources.

Let's examine how this works in practice with a real-world scenario.

Imagine an organization with two repositories, each having a distinct security posture and purpose:

  • Repository A: This is a standard development project with a CI/CD pipeline vulnerable to PPE. This vulnerability might initially appear low-risk, as the repository has limited permissions and no direct access to sensitive resources. The vulnerability could be as simple as a script injection flaw in a build step.
  • Repository B: This is a critical production repository that manages sensitive cloud resources via OIDC authentication. The security issue arises from the OIDC federation configuration for Repository B's cloud resources. Although Repository B's pipeline is secure, its federation policy, using the pattern repo:my_org/* is overly permissive. This broad access pattern, likely chosen for convenience, allows any repository within the organization to potentially meet the federation requirements. This creates a significant security risk.

The attack flow proceeds as follows:

  • Exploit the PPE vulnerability in Repository A's pipeline
  • Execute arbitrary code in the compromised CI/CD environment
  • Obtain the ID token from the exploited machine. This token now has a sub claim of the format repo:my_org/repo_A:...
  • Use the fraudulently obtained token to access Repository B's cloud resources by claiming the identity due to the lax identity policy that grants access to any repository in the organization

This attack demonstrates why granular OIDC federation policies are crucial. A single vulnerable pipeline, even in a seemingly low-risk repository, combined with broad federation patterns can compromise your entire security boundary.

Organizations should implement strict, repository-specific federation policies. Avoid relying on organization-wide patterns or patterns derived from user input, as these significantly increase the risk of unauthorized access.

OIDC Misconfigurations #2: User Side - Relying on User-Input Claims

A dangerous OIDC misconfiguration occurs when identity federation policies trust claims that end users can manipulate. While these claims are legitimately part of the OIDC token, their values should not be used for critical security decisions since they originate from user-controlled inputs.

A classic example is trusting the workflow claim in GitHub Actions OIDC tokens. While this claim exists in the token and is signed by GitHub, its value is simply derived from the workflow filename. This is a parameter that any user in GitHub can create and by this gain access to the resource as well. Basing access decisions on such claims is equivalent to letting users write their own permissions.

Other examples might include:

  • The branch name (ref claim): An attacker could create a branch with a name that matches a privileged access pattern, thereby gaining unauthorized access to resources protected by that pattern
  • The environment name: Similar to the branch name, an attacker could manipulate the environment name to escalate privileges
  • A specific aud value: The aud value is mostly predictable or user-controllable, it can be spoofed to bypass authentication checks

The key issue isn't about the validity of these claims. They are all properly validated by the IdP. Rather, it's about relying on claims whose values other users of the same platform can freely choose.

For a comprehensive analysis of GitHub Actions OIDC claims and their safety assessment, we've created a reference project. This project provides a detailed breakdown of each claim's safety for identity federation, helping you make informed decisions about which claims to trust in your OIDC configurations.

A table with six columns labeled "#, Claim Name, Safe to be asserted solely, Safe for custom sub formats, Comment." The entries include technical terms related to GitHub. Green check marks indicate safety in respective columns.
Figure 5. The GitHub OIDC utils repository, listing the custom claims.

OIDC Misconfigurations #3: Risks of Custom Sub Claims

While studying user-input claims in OIDC, we discovered a security implication regarding the custom sub claim feature. This feature, intended to provide flexibility, allows users to construct their sub claim using various ID token claims. However, this flexibility can inadvertently introduce security risks.

Although designed to enhance security by providing granular control over token validation, the custom sub claim feature can be misused. For example, GitHub's implementation allows users to construct their sub claim using any available claim, regardless of its origin or security implications. This can inadvertently expose sensitive resources.

Consider two scenarios that highlight this risk:

  • User-controllable claims: If a repository owner sets their custom sub to only include the value of the workflow claim, they're essentially validating user-controlled input (as previously explained) and are vulnerable. (This fact is true for other claims as well and not unique to the workflow claim.)
  • Claim ordering sensitivity: The order of claims in the custom sub becomes security-critical. This is because if a user-controllable claim is placed at the beginning of the substring, an attacker can potentially manipulate it to mimic a legitimate subclaim. For instance:
    • Safe: repo:org_name/repo_name:workflow:my_workflow
    • Unsafe: workflow:my_workflow:repo:org_name/repo_name

The second example format (Unsafe) is vulnerable because an attacker could create a workflow named my_workflow:repo:org_name/repo_name and set their OIDC sub format to workflow. This generates a token with a sub claim of workflow:my_workflow:repo:org_name/repo_name and allows the attacker to gain a token that mimics that of the target.

Note that the workflow claim used for the above example is not the only unsafe claim and there are more that one needs to be aware of.

For users of the custom sub claim feature, we've developed a tool called GitHub OIDC Utils that can help organizations to assess their sub claim format for this type of misconfiguration. The tool highlights custom claims that attackers can abuse. Consult the project's documentation for usage instructions.

Screen displaying computer code and command line outputs related to GitHub repository settings and token configurations, with text in green on a black background.
Figure 6. The GitHub OIDC utils command-line interface.

OIDC Misconfigurations #4: Vendor-Side Credential Handling

Let's look at an interesting case from CircleCI's initial OIDC implementation that demonstrates how vendor-side misconfigurations can impact customers' security.

Our investigation into CircleCI's OIDC implementation revealed unexpected behavior in fork-based pull requests. During a fork pull request, the CI naturally runs in the target repository's context. As a result, CircleCI would generate OIDC tokens containing the target’s identity and their repository information, and then it would provide them to the fork's workflow. This effectively grants fork owners the same level of access as the target repository.

This meant that anyone could:

  • Fork any public repository using CircleCI
  • Submit a Pull Request
  • Obtain OIDC tokens with the target repository's identity
  • Access any resources configured to trust these tokens

After reporting this security issue to CircleCI, they resolved this vulnerability by disabling OIDC token generation in fork workflows by default. Tokens are now generated only when explicitly enabled via the Pass Secrets to Forked Builds setting.

Text box displaying an informational message about settings for forked builds for CircleCI, indicating where to find options under Project Settings > Advanced.
Figure 7. CircleCI’s documentation regarding forks and OIDC post-finding.

This case serves as an excellent example of how vendor implementations are also prone to misconfigurations when setting up OIDC as the CI vendor.

Conclusion

OIDC in CI represents a significant advancement in securing CI/CD pipelines by eliminating the need for stored credentials. OIDC can help to reduce the impact in instances like the recent tj-actions/changed-files incident, where pipeline secrets were printed to the logs. However, our research reveals several critical security implications that organizations need to consider when implementing OIDC authentication in their CI environments.

The key findings from our investigation demonstrate that:

  • The dual role of CI vendors as both runner provisioners and IdPs creates unique security considerations
  • Authorization configurations are particularly prone to misconfigurations for OIDC in the context of CI
  • Lax policies sometimes equal vulnerable policies
  • User-controlled claims and custom configurations require careful validation

Looking ahead, as organizations increasingly adopt OIDC for CI/CD security, we anticipate these challenges will become more prevalent. The combination of PPE vulnerabilities with permissive OIDC policies particularly highlights the need for defense-in-depth approaches.

For organizations implementing OIDC in CI environments, we recommend:

  • Using repository-specific federation rules instead of organization-wide patterns
  • Implementing strict claim validation, especially for user-controllable claims
  • Regularly auditing OIDC configurations, focusing on federation policies and custom claim formats
  • Following CI security best practices to prevent PPE vulnerabilities from being exploited via OIDC

Palo Alto Networks Protection and Mitigation

For existing customers, we have updated our Infrastructure as Code (IaC) policies to be able to identify these types of OICD misconfigurations, and to alert the user if any are detected.

As customers are upgraded from Prisma Cloud to Cortex Cloud, they can benefit from all existing protections. For example, the screenshot in Figure 8 below demonstrates the tool detecting a claim format that could be utilized for fraudulent purposes.

Screenshot of the Prisma Cloud interface showing details of a scan. There are multiple panes that include issues, resources, timestamps and more.
Figure 8. Prisma Cloud IaC scanner in action.

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: 00080005045107

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.

CircleCI’s Response

CircleCI prioritizes providing customers with default settings that make it intuitive to restrict access to all jobs on our platform.

At the time Palo Alto Networks Unit 42 researchers first reported their findings to CircleCI, CircleCI’s default offering was an OIDC environment variable for all authorized CircleCI jobs, requiring additional action by the customer to grant or deny access. No vulnerabilities were identified by our customers.

On June 13, 2023, CircleCI introduced the ability to exclude OIDC tokens from forked builds by default. This default setting locks down the permission to invoke, which forces the customer to take an action if they want to share the access more broadly. For those customers who wish to allow OIDC tokens in forked builds, CircleCI has provided documentation that explains how to do this:

CircleCI advises all customers to employ the best practices of managing identity and access roles outside of their environmental variables.

References

Evolution of Sophisticated Phishing Tactics: The QR Code Phenomenon

Executive Summary

Since late 2024, Unit 42 researchers have observed attackers using several new tactics in phishing documents containing QR codes. One tactic involves attackers concealing the final phishing destination using legitimate websites' redirection mechanisms. Another tactic involves attackers adopting Cloudflare Turnstile for user verification, enabling them to evade security crawlers and convincingly redirect targets to a login page. We found that some of these phishing sites are specifically targeting the credentials of particular victims, suggesting pre-attack reconnaissance.

In traditional phishing attacks, attackers use obvious links or buttons in phishing documents. Attackers have begun embedding phishing URLs into QR codes, a technique known as QR code phishing or quishing. This strategy entices recipients to scan the codes with their smartphones, which can lead them to unknowingly access phishing sites and expose their credentials to theft.

Our telemetry shows these phishing attacks have been widespread across the U.S. and Europe. The attacks are also impacting various industries, including the medical, automotive, education, energy and financial sectors.

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

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, Social Engineering, Credential Harvesting

QR Code Phishing

A QR code is a machine-readable, scannable image capable of storing various types of information. It can contain numbers, text or a URL. To interact with these images, people use their smart devices’ camera applications to interpret the code. The camera app typically assists in opening URLs in a browser or dialing a phone number if the QR code contains such information.

Figures 1 and 2 show that these QR code phishing attacks are spoofed to look like electronic signature documents generated through Docusign or Adobe Acrobat Sign. These are not legitimate documents generated by either service. Embedding phishing URLs within QR codes makes it more difficult for traditional scanning engines to extract the actual URL from phishing documents.

A screenshot of an email notifying the recipient to review and sign a document. The email includes a scannable QR code for quick access to the document and a reminder not to share the secure link or QR code with others. The email layout is simple, with text predominantly in black on a white background. Some information is redacted.
Figure 1. A QR code phishing email spoofing a notification prompting the recipient to sign a fake DocuSign document.
Image displaying an Adobe Acrobat Sign logo with text reading 'All parties finished' and QUOTE AGREEMENT. Below is a black QR code for scanning, accompanied by text about using a smartphone to access document review and a note on pending quote approval. Some information is redacted.
Figure 2. A QR code in a PDF impersonating Adobe Acrobat Sign.

These phishing documents instruct potential victims to use their smartphones to scan the QR code, consequently raising the likelihood of them directly accessing the phishing URL on their personal devices. Personal devices often have weaker security controls than corporate devices, and accessing the URL on a personal device could bypass corporate security measures like email gateways and web filters.

Screenshot of a Microsoft document titled 'and Payroll Update for 2025', with the first part redacted. It includes a congratulatory message for work performance and mentions a raise. There is an instruction to select the appropriate response box.
Figure 3. Phishing attempt impersonating company payroll update.

It is common for attackers to theme phishing documents around topics that would entice people to access the material without exercising due caution, such as payroll or HR announcements (Figure 3). To lower users' guard, attackers often include company logos, HR email addresses or dates in the document to make the phishing content closely resemble official documents. While these tactics are not new, we are observing more sophisticated tricks in current phishing campaigns.

Phishing URL Redirection

Analysis of the URLs extracted from the QR codes in these campaigns reveals that attackers typically avoid including URLs that directly point to the phishing domain. Instead, they often use URL redirection mechanisms or exploit open redirects on legitimate websites, as shown in Table 1. By using URL redirection, attackers can surreptitiously redirect users to malicious websites while masking the true destination of the phishing link.

Full URL Extracted From QR code Redirect to Phishing URL
hxxp://{legit_domain}/ViewSwitcher/SwitchView?mobile=False&returnUrl=hxxps://ebjv[.]com[.]au/filesharer hxxps://ebjv[.]com[.]au/filesharer
hxxps://{legit_domain}/redirect/head/?u=hxxps://docuusign[.]statementquo[.]com/ey8YO?e={user_email} hxxps://docuusign[.]statementquo[.]com/ey8YO?e={user_email}

Table 1. Examples of phishing URLs that exploit legitimate websites for URL redirection.

This method of URL redirection for phishing has been prevalent for years. Therefore, many people are taught to carefully examine the full URL to avoid clicking on phishing links. However, when the URL is accessed via a QR code, people can only view the domain name through their smart device’s camera application, making suspicious URLs more likely to appear legitimate.

Figure 4 shows that phishing URLs extracted from QR codes abuse Google redirects.

Screenshot of a URL highlighting a phishing attempt, with annotations identifying parts of the link such as "random texts" and "user email" with the email redacted. The URL uses the domain "google.com" as part of its misleading format. Random text is highlighted in a yellow box.
Figure 4. Phishing URL that abuses Google redirects.

These redirects enable legitimate websites to seamlessly redirect users to external pages while maintaining the original source. Attackers have taken advantage of this functionality to create more convincing phishing URLs.

To further deceive targets, attackers include random or meaningless text in the Google redirect URL, effectively obscuring the destination phishing URL. This poses a challenge for people attempting to verify the redirect destination on their smart devices when scanning QR codes.

Google states that, if you report only an open redirector, they won't file a bug unless its impact goes beyond phishing. When we contacted them regarding this post, they added the following clarification:

Open redirectors take you from a Google URL to another website chosen by whoever constructed the link. Some members of the security community argue that these redirectors aid phishing, because users may be inclined to trust the mouse hover tooltip on a link and then fail to examine the address bar once the navigation takes place.

Our take on this is that tooltips are not a reliable security indicator, and can be tampered with in many ways. For this reason, we invest in technologies to detect and alert users about phishing and abuse instead. More generally, we hold that a small number of properly monitored redirectors offers fairly clear benefits and poses very little practical risk.

Phishing Operations

Based on our investigation of recent QR code phishing attacks, we can summarize typical phishing operations into three key steps:

  • Redirection
  • Human verification
  • Credential harvesting

Redirection entails directing the target to a phishing site upon scanning the QR code. By exploiting open redirects, attackers can use multiple redirects to ultimately guide their target to the destination phishing site.

Using multiple redirects obfuscates the attack, increasing the complexity for security crawlers. It also conceals the infrastructure of the phishing site, providing attackers with better detection evasion.

With human verification, attackers exploit legitimate websites’ need to authenticate users as a way to defend against automated attacks such as web scraping and distributed denial-of-service (DDoS) attacks. Legitimate websites commonly use human verification mechanisms such as Captcha Verification Questions to validate that visitors are humans and not bots.

Attackers often integrate human verification within the multiple redirects they employ. We have observed a trend of recent QR code phishing attacks incorporating Cloudflare Turnstile as a means of human verification, as shown in Figure 5.

Notification message reading 'Success!' with a checkmark icon, followed by the Cloudflare logo. Text below states, 'Running browser security checks for your protection.'
Figure 5. Human verification during attackers’ multiple redirects, using a tool designed not to mandate direct human interaction to proceed.

Cloudflare Turnstile offers a free subscription. The key benefit of this human verification technique to attackers is that it does not mandate direct human interaction to proceed.

Threat actors often abuse, take advantage of or subvert legitimate products for malicious purposes. This does not imply that the legitimate product is flawed or malicious.

We also found that attackers set up redirects to legitimate login pages or Google 404 error pages when human verification mechanisms block access. This helps avoid detection of phishing infrastructure when security crawlers try to access these pages.

The final step is credential harvesting, where attackers collect credentials or sensitive information provided by victims on fake login pages. These fake login pages are often designed to mimic legitimate service providers, such as Microsoft 365, or may display the victim’s company logo.

In QR code phishing, the phishing URL often incorporates the user's account or email address. Consequently, when targets encounter the fake login page, they may see their account or email address is already populated as shown in Figures 6 and 7. This eliminates the need for them to re-enter this information. As a result, the target may only be prompted to input their passwords, creating an illusion of familiarity and legitimacy to further deceive them into divulging their credentials.

Screenshot of a spoofed SharePoint verification page requesting to verify identity to receive and download a PDF file. Includes a Microsoft logo at the bottom. The email address required to download has been redacted.
Figure 6. Fake Sharepoint page with pre-populated user email.
Spoofed Microsoft login screen displaying a prompt to enter a password to verify sensitive information, with a "Sign in" button and a "Forgot password?" link visible.
Figure 7. Fake Microsoft 365 login page with pre-populated user account information.

It is surprising and concerning that attackers can selectively harvest credentials based on a targeted list of victim names. The fact that fake login pages reject arbitrary credentials and display error messages (as shown in Figure 8) suggests a sophisticated level of targeting and customization in these phishing attacks. Attackers using such tactics are likely focused on specific individuals or organizations, and they’ll tailor their efforts to maximize the success rate of credential harvesting.

Spoofed Microsoft login screen displaying an error message stating 'We couldn't find an account with that username. Try another account.'
Figure 8. Error message to reject arbitrary credentials.

Conclusion

Phishing attacks and social engineering tactics remain significant threats to users, and it is evident that these tactics have evolved over time.

Our research highlights several key observations of attacker’s activities:

  • Using QR codes in phishing documents to disguise malicious URLs
  • Exploitating open redirects to complicate attack analysis
  • Incorporating human verification within redirects

These evolving tactics challenge both security detection mechanisms and user awareness. Attackers’ increasing use of QR codes in phishing highlights the need for improved security awareness training and technical solutions that can detect and block these threats.

Palo Alto Networks Protection and Mitigation

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

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: 00080005045107

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

PDFs:

  • b6130b45131035bec8d9b0304e934f2db0ee092ccaa709c3c2e8dd93770527bb
  • e2cdd7eb0ea24c22d1e3dfea557a5a47dfdcd7c6b00b05bd5d099e0c8633ac25
  • fa38f31ed09774cfd2627bff376c27c44611b842b96f3215b0a491805d525a40
  • 0209e93d568da3cd33f7af9e8733dd6eb56b3957b19622126f5115f36c2433dd
  • 6963820a6dadba2779a4b3999c5fde88faf8cf2dfa55d032b307217d9a80b77c
  • a4d40396bc437933a7f097e3ba997c91c82a5f516a719f6181ca4d51fa85a7aa
  • 1c3be2037b2a7b36311ef8fbcaa416ecb250dc20f5881570e8373e6e7f8237b1
  • 8ea80304722e4285987b66dd8c74853b8a1474f585d7e24dc7616be4265d0d82
  • cbc5c6edb34ca898ca55f166ec64b23b057f9d8e8859c6fe9c9065bb42991f5b
  • 46897a4edb500df17e32ccee8a3134e3a15db387dd0492d8e110200d8cb57b60
  • 3f2a3cc1216bfc6d1aa6d1b75150350da86a3a8c9c5b014c4b5f7ca62935c88c
  • e682612a533382ddc188f547b37d93fd3f2de8ac7d5fd5f76eb92a22849109aa
  • 6a0c8d59d5d0b2bd44d81a3f3e20bcd6c515ca6bd30c3bf090bccc4049276276
  • 6472293c24554bf52772a9f8543fe7ae973f1d5b4795ccc14940beeddcba118e
  • 9fe76bad7fa4f45ef49e720dde442f31f4c1847c7322ec09c09c5dd851f4de38
  • 56d3e1daddd87a2454084a4687d6c245b3a3b2f2010d705d2b1983c0e87a5509
  • 1bd8cace9e338eacdd9e41b55c594404483e1a1860d1946f612ecd21a6a7e5e5
  • 3d66c093763eef0aa1b7c31242516d8d56e8fbe178f0915063045a6f85e61399
  • 389ba4f794b66abe4fde0ede57450abb63ba1a3cd43940925762f206b03e1bea
  • 0e03f873f1fb44e2d9f8ba29c80158f23735bb2ef819feb99f5623e933d752e9
  • 0d0d4cd198de3a8b5af74fbebfc4c657609570157f8f961499433d0d5f748e7c
  • 8c744eadec25b92de4ada45cdbc5e4c3507195127b2ed2f8450a7435b50b1f25
  • 1737819220920abfa1d2201c0986df84b6570cbbc8d1aa96245151ed95c5992d
  • b39855bd43bf45aff70da6fbd918789b17ff58d9c6764cc40db9aec4ecb79cc0
  • de158906c855857d435635ebfd1ac97a6715b0a890f536aafcf55c601585f751
  • 07fec0a55956f66f20888e21f72a01c043b1c02a141c07988a6313099526c796
  • 891abde147f30c6dfd791f7f2f7cb081f5474f4f1392f670ed55a6d6cd3f14a2
  • bdcfe5bf6eba8f59248739e1634bc43d50f5c55efbb7412c3b41e94f1a313771
  • 5a5134dfed0d47d23073547ace40ff63be0b3138d835d6d5b0a5c5c3e1aa3d8e
  • 2f38a598fd49256691c707198c546ab84ddeafedbe72c60a9d03364263820d25
  • 3e8a9620823039b938b662d6285330baca7f3930e790faeaf4e4b95dd3c02427
  • bc5e4ad38e324d742af28a2302bc6f59ec5f603f69b72bec7149b2cfbb50d980

Phishing URLs:

  • hxxps://ebjv[.]com[.]au/filesharer
  • hxxps://a1892279[.]nhubiubuniunuion[.]workers[.]dev
  • hxxps://docuusign[.]statementquo[.]com/ey8YO?e=
  • hxxps://fa8ea903[.]nhubiubuniunuion[.]workers[.]dev/
  • hxxp://dhzyxo[.]promptexpression[.]com/?e=
  • hxxps://docusignelectronic[.]courtappdirectory[.]com/6PkvL/?e=
  • hxxps://storage[.]cloudcourtdoc[.]com/wsTtv?e=
  • hxxps://fbl[.]5jbl2j[.]com/P6ThlTUUTfoKMgwqFKuQ/
  • hxxps://docdxsiga[.]goodbreadtrucklng[.]com/gbkrV/
  • hxxps://Docxxdoct[.]goodbreadtrucklng[.]com/U6bXM/
  • hxxps://wtcg[.]rolixanorn[.]ru/n7cLGYDs/
  • hxxps://dmcomunicacaovisual[.]com/m/?c3Y9bzM2NV8xX3NwJnJhbmQ9UjFKVU9YUT0mdWlkPVVTRVIwNjAxMjAyNVUwMzAxMDYzOQ==N0123N
  • hxxps://advitya-heights[.]com/m/?c3Y9bzM2NV8xX25vbSZyYW5kPU9Ya3piRFU9JnVpZD1VU0VSMDYwMTIwMjVVMjUwMTA2NTA=N0123N
  • hxxps://clases[.]pastorluiscastro[.]com/m/?c3Y9bzM2NV8xX25vbSZyYW5kPVVrcGhRMFE9JnVpZD1VU0VSMDYwMTIwMjVVMjUwMTA2NTA=N0123N
  • hxxps://htbilisim[.]com/m/?c3Y9bzM2NV8xX3NwJnJhbmQ9V2tVNWFuWT0mdWlkPVVTRVIwNjAxMjAyNVUwMzAxMDYzOQ==N0123
  • hxxps://www[.]magneticosrmn[.]com/m/?c3Y9bzM2NV8xX3NwJnJhbmQ9T0hwWFUxZz0mdWlkPVVTRVIwNjAxMjAyNVUwMzAxMDYzOQ==N0123N
  • hxxps://vk[.]hrewatecea[.]ru/0Jrsf/
  • hxxps://gracious-tranquility-production[.]up[.]railway[.]app/fa910c532fc9c990/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9[.]eyJrZXkiOiJmYTkxMGM1MzJmYzljOTkwIiwiaWF0IjoxNzMzOTQ2NjQ0fQ[.]GDYykGf3tTA6K0GSiSvl01y_U0zveiKk9jmR_B3jTEw
  • hxxps://web-ofisi[.]com[.]tr/yeni/T6epXbk4ck8zZNXyS5wyRzTbm43LOM1gR49#

Additional Resources

 

 

Cloud Threats on the Rise: Alert Trends Show Intensified Attacker Focus on IAM, Exfiltration

Executive Summary

The attacks against cloud-hosted infrastructure are increasing, and the proof is in the analysis of security alert trends. Recent research reveals that organizations saw nearly five times as many daily cloud-based alerts at the end of 2024 compared to the start of the year. This means attackers have significantly intensified their focus on targeting and breaching cloud infrastructure.

These alerts aren’t simply noise. We’ve seen the greatest increases in high severity alerts, meaning indicators of attacks are successfully targeting critical cloud resources as explained in Table 1.

Cloud Resource Why It’s Critical
Identity and access management (IAM) Leaked credentials can open the door to an organization’s cloud infrastructure.
Storage Can contain sensitive organizational or customer data.
Virtual machines Often connected to additional internal services, offering lateral movement opportunities to attackers.
Containers Container host exploitation can allow attackers to run malicious containers.
Serverless Serverless functions are designed for singular automated purposes. Remote command line executions should not occur.

Table 1. Criticality of certain cloud resources.

Of particular note, attackers frequently targeted serverless IAM tokens resulting in remote command-line usage. These are significant because they can be used to gain access to an organization’s larger cloud environment. As part of the increase of cloud alerts, there were three times as many remote command-line access events utilizing identity access and management (IAM) tokens, and credentials that are used by cloud serverless functions.

We also identified other upward trends in alerting:

  • An 116% increase in IAM-based “impossible travel event” alerts (i.e., login events from distant geographic areas within a narrow time window)
  • A 60% increase in IAM application programming interface (API) requests from outside regions for compute resources (cloud virtual machine)
  • A peak 45% increase in the number of cloud snapshot exports during November 2024
  • A 305% increase in the number of suspicious downloads of multiple cloud storage objects

Identity is the defense perimeter of cloud infrastructure. Attackers target IAM tokens and credentials as they hold the keys to the cloud kingdom, allowing attackers to move laterally, escalate their permissions and perform additional malicious operations. The rise in the number of access attempts and usage of sensitive IAM service accounts means attackers across the globe have their sights set on cloud resources.

Attackers target cloud storage services as they often contain sensitive data. We saw a notable increase in the number of suspicious cloud storage object downloads and image snapshot exports. Suspicious cloud storage object download alerts trigger when a single IAM-based identity downloads a large number of storage objects within a narrow time window. This can signify malicious operations such as ransomware or extortion. Image snapshots are targeted by attackers as snapshots can contain sensitive data regarding cloud infrastructure and IAM credentials that could allow the attacker to escalate permissions and move laterally within a victim cloud environment.

These examples illustrate the immediate need to protect cloud environments, not solely with foundational cloud security posture management (CSPM) tools, but in cooperation with tools that detect and prevent malicious runtime operations as they occur.

By deploying Cortex Cloud’s runtime cloud security tooling — also called Cloud Detection and Response (CDR) — security teams can identify and prevent malicious events within cloud environments.

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

Related Unit 42 Topics Cloud Cybersecurity Research

Cloud Attacks at Scale

In a recent Unit 42 post, we published details of a ransomware and extortion campaign that directly targeted exposed environment variable files. The campaign’s threat actor successfully harvested over 90,000 credentials from 110,000 targeted domains. More worryingly, they also harvested nearly 1,200 cloud IAM credentials. These credentials allowed the threat actor to successfully perform extortion attacks against multiple organizations.

This operation highlights an opportunity to discuss the security mechanisms that are in place to protect organizations. Specifically, this allows us to determine how to employ both posture management and runtime monitoring security solutions seamlessly. This allows organizations to build a cloud security defense perimeter that is sufficiently robust, and capable of facing these new waves of attackers.

During the investigation for this article, we discovered that the average total number of cloud alerts experienced by an organization increased by 388% in 2024. These alerts originated from both posture management and runtime monitoring detection operations.

Although alerts with “informational” severity did account for the majority of alerts, it is extremely important to highlight that the most significant change was in the number of high severity alerts. This classification of alert saw an increase of 235% during 2024. Medium and low severity alerts also increased by 21% and 10%, respectively.

What These Trending Alerts Signify

The changes we observed in the number of alerts align with our 2024 State of Cloud-Native Security Report, which found that 71% of organizations attribute increased vulnerability exposures to accelerated deployments. Furthermore, 45% of those organizations report a rise in advanced persistent threat (APT) attacks over the last year.

A case in point is Microsoft’s recent research on Storm-2077, a China-based cloud threat actor group (CTAG) that employs complex cloud IAM credential harvesting techniques to obtain and to maintain access to victim cloud environments. It quickly becomes apparent that both cloud posture management and runtime security monitoring must function as a single unit to perform adequate protection from the next phase of threats in cloud environments. The Background section below provides additional information on posture management and runtime monitoring detections.

A key mission for cloud defenders is to design and deploy a cloud security platform that will improve detection capabilities. This allows administrators not only to detect misconfigurations and vulnerabilities, but also to collect and analyze the runtime events within cloud environments. Such a platform provides defenders with better visibility and enables quicker response time when dealing with alerts.

While the ability to identify and detect malicious or suspicious cloud events has increased across the industry, so has the complexity of threat actors’ offensive cloud operations. For example, in January 2024, the average cloud environment saw only two alerts for the remote command-line usage of a serverless function IAM token. This stayed consistent throughout the year. However, by December 2024, the average cloud environment saw more than 200 of those same alerts – a worrying signal of increased activity. As shared in the Leaked Environment Variables article, this runtime operation is exactly what occurred during that malicious extortion event.

Further evidence supporting this trend includes the following:

  • An 116% rise in impossible travel alerts relating to cloud identities
  • A 60% increase in the number of compute workload API calls occurring from outside of that instance’s cloud region
  • A 45% increase in the number cloud snapshot exports
  • A 305% increase in the number of suspicious downloads of multiple cloud storage objects

Both of these alert findings strongly indicate that the prime objective of CTAGs is targeting, collecting and using a cloud IAM token or credential. This also indicates that attackers will use these tokens or credentials for potentially malicious operations.

Background

Cloud security posture management (CSPM) tools form the foundation of cloud security. Their operations center on guardrail control monitoring to ensure that cloud environments maintain secure configurations and are free from vulnerabilities and misconfigurations.

Posture management monitoring is traditionally based on time-specific security scanning of a cloud environment’s resources and configurations. Alerts are triggered when a new or modified cloud resource appears to pose potential security risks.

For example, an alert will be triggered if an IAM policy is overly permissive and allows access to other cloud resources. It will also be triggered if a cloud compute instance or serverless function contains vulnerabilities or misconfigurations.

Posture management scanning operations are performed on a routine schedule, often hourly or daily. Some CSPM security tools allow for the monitoring of cloud platform auditing logs as well, which can assist in detecting suspicious activity as it occurs within a cloud service platform (CSP). It is critical that organizations configure their CSPM platform to collect the audit logs from their third-party cloud-based software-as-a-service (SaaS) applications to ensure visibility.

CDR tools provide runtime monitoring detections by collecting, identifying and even preventing operations that occur during a particular event. By collecting the logs from cloud compute instances, CSP logging resources and third-party cloud SaaS applications, CDR security tools can identify, alert on and prevent malicious cloud events.

Examples of these operations include the execution of an API request against a cloud platform or cloud application such as:

  • Creating new cloud users or service accounts
  • Attaching IAM policies to new or established IAM users or roles
  • Establishing network connections from a Tor exit node or VPN host

In contrast to posture management tools, runtime monitoring tools continuously monitor the cloud environment and often require a dedicated agent to maintain visibility of the cloud resources. When an agent is installed, cloud runtime monitoring security tools allow for the detection — and even prevention — of malicious cloud operations as they occur.

High Severity Alert Trends

We have observed a clear increase in the number of alerts in 2024, correlating with the rise in attacks on cloud environments.

High severity cloud alerts increased by 235% throughout 2024. The largest single-month spike (281%) occurred in May, and we noted the most substantial increase in these alerts (204%, 247% and 122%) in August, October and December, as shown in Figure 1.

Line graph showing monthly fluctuation rates by percentage ranging from -100% to 200% with peaks in April, July, October, and December, and troughs in February, June, and September. Palo Alto Networks | UNIT 42 logo lockup at the bottom.
Figure 1. High severity alert trends for 2024.

Top 10 High Alerts

A closer look at the top 10 most frequent daily high severity alerts reveals a high number of alerts pertaining solely to runtime-focused events. These alerts are triggered by a singular event or a sequence of connected events. This necessitated near real-time analysis or, in some instances, real-time analysis for detection.

Table 2 below shows that the remote command-line usage of the serverless IAM tokens is an event that requires real-time log analysis to detect and potentially to prevent. Conversely, the most frequent high severity alert, “cloud storage delete protection disabled,” can be detected and mitigated with a CSPM tool.

Alert Name Runtime or Posture Control Average Daily Count
Remote command line usage of serverless token Runtime 24.68
An identity performed a suspicious download of multiple cloud storage objects Runtime 21.09
Cloud Storage Delete Protection Disabled Posture and Runtime 20.19
Abnormal Allocation of compute resources in a high number of regions Posture and Runtime 11.11
A Kubernetes node service account was used outside the cluster from non-cloud IP Posture 11
Abnormal Suspicious allocation of compute resources in multiple regions Posture and Runtime 10
Multiple cloud snapshots export Runtime 9.33
Remote command line usage of serverless role Runtime 7.79
Unusual allocation of multiple cloud compute resources Posture and Runtime 7.73
Abnormal Unusual allocation of compute resources in multiple regions Posture and Runtime 6.42

Table 2. High severity alerting by average occurrence.

To ensure the protection of cloud storage objects within a storage container whose delete protection has been disabled, we highly recommend deploying a CDR tool. These tools can detect and prevent any cloud storage objects from being deleted as a result of a ”protection disabled” event.

Other notable high severity alerts include multiple cloud snapshot exports and suspicious usage of a service account IAM. Both of these are key indicators of malicious activity within a cloud environment.

Examples of malicious operations that could trigger several of these alerts are cloud-focused extortion or ransomware events. These types of events can only be leveraged by first disabling cloud storage protections, such as delete protection and automatic backups. Once these protections are removed, malicious actors can delete or exfiltrate cloud storage container objects, increasing the likelihood of a successful extortion operation.

Some of these high severity alerts could also be triggered by the compromise of exposed or vulnerable serverless or compute instance resources. Specifically in terms of the remote command-line usage of a serverless IAM token, serverless functions are designed to operate autonomously and independently.

Remote or unauthorized usage of a serverless function's IAM token indicates compromise and potential lateral movement within the cloud environment. The same type of event could indicate the malicious usage of a service account IAM token. Given that service account IAM tokens are typically intended for a single purpose, any abnormal usage of that token should be considered suspicious.

Medium Severity Alert Trends

Unlike the end-of-year high severity alert spike, we saw a sustained spike in medium severity alerts mid-2024. This spike included an initial 186% and subsequent 24% increase, before a downward trend through December, as Figure 2 shows.

Line graph showing monthly fluctuation rates by percentage ranging from 0% to 3% with a trough in January through March and rising in April where it peaks in May-June, then falls to slightly lower through the rest of the year. Palo Alto Networks | UNIT 42 logo lockup at the bottom.
Figure 2. Medium severity alert trends for 2024.

Top 10 Medium Alerts

The top 10 medium severity alerts, shown in Table 3 below, differ from the top 10 high severity alerts listed in Table 2 above. The key difference is that for all but one of the top 10 medium severity alerts, the events can only be detected by performing some form of runtime protection analytics.

The “unusual high-volume data transfer” event can be triggered using traditional CSPM detections of cloud resources. However, like the high severity “cloud storage delete protection disabled” event discussed above, a CDR tool would be better able to detect this unusual volume transfer event as it was occurring. It could also identify the types of files and their cloud storage file or directory locations. These details provide security teams with the most desired resources to perform their jobs: time, and knowledge.

Alert Name Runtime or Posture Control Average Daily Count
An IAM identity attempted multiple actions on resources that were denied Runtime 80
A compute-attached identity executed API calls outside the instance's region Runtime 36.32
Attempted cloud application access from unusual tenant Runtime 21.69
An identity performed a suspicious download of multiple cloud storage objects from multiple buckets Runtime 18.66
Impossible travel by a cloud compute identity Runtime 18.65
Unusual storage high-volume data transfer Runtime 15
Kubernetes service account activity outside the cluster from non-cloud IP Runtime 12.15
A cloud application performed multiple actions that were denied Runtime 12.02
Multiple cloud snapshots export Runtime 10
Suspicious identity downloaded multiple objects from a backup storage bucket Runtime 9.68

Table 3. Medium severity alerting by average occurrence.

Several of the alerts listed in Table 3 could indicate that malicious actors are targeting cloud resources such as Kubernetes service accounts outside of the cluster or from a non-cloud IP address. These two alerts in particular might indicate that the Kubernetes cluster authentication tokens have been compromised, as service account IAM tokens are designed for a singular purpose. Any operation using these credentials from outside of the cluster — or outside of the known cloud environment — should be considered suspicious activity and should be mitigated.

Another alert that is important to highlight is exporting multiple cloud snapshots. While there can be a legitimate use case for this type of event — such as th​​e deployment of snapshots or an external backup — threat actors also export snapshots. Cloud snapshots can contain sensitive information, making them a common target of malicious operations.

What Organizations Can Do

There are several steps that organizations can implement to better protect themselves against malicious cloud operations:

  • Implement effective CDR runtime monitoring
    • Deploy a CDR cloud security for all of your cloud environments
    • Ensure that all mission-critical cloud endpoints have runtime enabled agents to detect compute and container runtime operations
    • Ensure runtime cloud audit log monitoring is available from your CSP providers
    • Ensure that your integrated cloud SaaS applications collect:
      • Identity providers (IdP)
      • CI/CD integrations
      • Source code repositories
      • Ticketing platforms
  • Place limits on CSP regions in which compute and serverless functions are allowed to operate
    • It is common practice for threat actors to create cloud resources within foreign CSP regions to perform a basic form of operation obfuscation
  • Identify and prevent IAM service accounts from performing operations outside of their intended functions
    • Following least-privilege architecture design for IAM credentials can greatly assist in combating lateral movement and privilege escalation operations if an IAM credential is compromised
  • Ensure that cloud storage versioning and encryption are in place for all cloud storage containers
    • Versioning and encryption are free configurations for every cloud storage container from each of the three major cloud service providers
    • These two features also significantly increase the difficulties that threat actors will encounter when trying to steal your valuable, sensitive information

If in doubt, remember that CDR runtime monitoring defenses must be present to effectively combat the majority of threats faced by cloud environments.

Conclusion

CDR runtime monitoring is a critical aspect of maintaining a secure-cloud, hybrid-cloud and multi-cloud environment. As the trending high and medium severity alert data discussed in this article demonstrate, there was a 388% increase in the average number of alerts that cloud environments witnessed during 2024.

A significant number of these alerts are the direct result of the detection of runtime operations, which cannot be detected with posture management (CSPM) tools alone. CDR tools provide cloud runtime detection capabilities, enabling the detection of malicious events occurring on cloud compute instances, container hosts or serverless functions.

Given the increasing threats targeting cloud environments, the only real defense for these environments is to require cloud-based agents for publicly exposed and critical cloud endpoints, CSP audit logging and cloud third-party SaaS applications. Using a CDR analytics tool allows defenders to collect, detect and prevent the execution of malicious operations that can affect any of these resources. The combination of runtime monitoring, analysis and response for cloud resource event logging is essential to ensure that malicious operations are not allowed to function within cloud environments.

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: 00080005045107

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.

References

GitHub Actions Supply Chain Attack: A Targeted Attack on Coinbase Expanded to the Widespread tj-actions/changed-files Incident: Threat Assessment (Updated 4/2)

Executive Summary

Update April 2: Recent investigations have revealed preliminary steps in the tj-actions and reviewdog compromise that were not known until now. We have pieced together the stages that led to the original compromise, providing insights into other impacted GitHub organizations and users.

We discovered the first steps that appear to have been taken in this multi-layered attack flow. The attackers obtained initial access by taking advantage of the GitHub Actions workflow of SpotBugs, a popular open-source tool for static analysis of bugs in code. This enabled the attackers to move laterally between SpotBugs repositories, until obtaining access to reviewdog.

According to our research, the attack started in November 2024, but only came to light months later. Our ongoing research sheds light on this attack as a whole, revealing a larger scope of impact and longer attack period than were previously reported. Jump to our Update section to read the full details.

Update March 20: The recent compromise of the GitHub action tj-actions/changed-files and additional actions within the reviewdog organization has captured the attention of the GitHub community, marking another major software supply chain attack. Our team conducted an in-depth investigation into this incident and uncovered many more details about how the attack occurred and its timeline. These attackers compromised continuous integration/continuous delivery (CI/CD) pipelines of thousands of repositories, putting them at risk.

Our team also discovered that the initial attack targeted Coinbase. The payload was focused on exploiting the public CI/CD flow of one of their open source projects (agentkit) probably with the purpose of leveraging it for further compromises. However, the attacker was not able to use Coinbase secrets or publish packages.

After this initial attack, we believe the same actor moved on to the larger attack that has since gained widespread attention globally. Our investigations also reveal that the attacker began preparing several days before reports surfaced, eventually affecting specific versions of tj-actions/changed-files and putting a significant number of repositories at risk.

This incident underscores how attackers can abuse third-party actions or dependencies to compromise software supply chains, potentially resulting in unauthorized access, data breaches and code tampering.

Overview of the Attack

GitHub Actions is a CI/CD platform that helps users automate their development pipeline. Individual GitHub actions can become reusable workflow components that other pipelines can utilize. The tj-actions/changed-files GitHub action was recently compromised, allowing attackers to access sensitive workflow secrets that relied on this action. This GitHub action was used by over 23,000 GitHub repositories.

The compromise was first identified on March 14, 2025, when security researchers detected suspicious activity made by the action. The attackers injected a payload that dumped the CI/CD runner’s memory, exposing sensitive environment variables and secrets directly to the workflow logs.

A lead provided by Adnan Khan suggested that the compromise of the tj-actions/changed-files action originated in the compromise of a repository belonging to another GitHub organization: reviewdog/action-setup. We can now confirm that tj-actions/changed-files was compromised because it used the tj-actions/eslint-changed-files action, which relied on reviewdog/action-setup as a dependency. Further investigation revealed that additional actions belonging to the reviewdog organization were hijacked as well. By March 20, the maintainers of both tj-actions and reviewdog had applied the necessary security measures, and mitigated the threat.

Recommended Mitigations

Our recommendations focus on detection and prevention steps from the perspective of the consumers of the compromised tj-actions/changed-files action, and actions belonging to the reviewdog organization. The community should learn from the compromise of these actions and their hosting repositories.

The detailed mitigations and recommended actions below include immediate steps for affected users, such as:

  • Identifying usage
  • Reviewing workflow logs to identify leaked tokens and secrets
  • Rotating secrets
  • Investigating malicious activity

We also share ways to make long-term security improvements related to this issue, as well as information on how Palo Alto Networks cloud security products can assist with protecting against this and similar security 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 Supply Chain, GitHub

Overview of the Attack Flow

First Things First: Let’s Talk About tj-actions and reviewdog

Somewhere between March 10 and March 14, 2025, an attacker successfully pushed a malicious commit to the tj-actions/changed-files GitHub repository. This commit contained a Base64-encoded payload shown in Figure 1, which prints all of the credentials that were present in the CI runner’s memory to the workflow’s log.

Screenshot of a computer code editor displaying code with color-coded syntax. The code includes an asynchronous function named 'updateFeatures.'
Figure 1. The malicious snippet that was introduced to tj-actions/changed-files.

The attacker was able to add the malicious commit (0e58ed8) to the repository by using a GitHub token with write permissions that they obtained previously. The attacker disguised the commit to look as if it was created by renovate[bot] — a legitimate user.

The commit was then added to a legitimate pull request that was opened by the real renovate[bot] and automatically merged, as configured for this workflow. These steps enabled the attacker to infect the repository, without the activity being detected. Once the commit was merged, the attacker pushed new git tags to the repository to override its existing tags, making them all point to the malicious commit in the repository.

From that point of compromise, the attacker impacted every GitHub workflow run that depended on the tj-actions/changed-files action.

On March 14, 2025, the attack on tj-actions/changed-files was detected by StepSecurity’s researchers, who reported the incident to the maintainers of the tj-actions organization. As soon as details of the incident were published, the GitHub community started patching workflows and repositories to mitigate the attack.

On March 16, Adnan Khan shared his research, pointing to the compromise of another GitHub organization — reviewdog. Adnan hypothesized that in the original compromise, the attacker leveraged a workflow configured in the tj-actions/changed-files repository that was using another action belonging to the same organization: tj-actions/eslint-changed-files.

In turn, the tj-actions/eslint-changed-files action directly depended on the reviewdog/action-setup action, and used it in its runtime as a composite action. This implied that consumers of the tj-actions/eslint-changed-files action were compromised once it ran, as this action automatically executed the malicious code residing in the compromised reviewdog/action-setup action.

When the tj-actions/eslint-changed-files action was executed, the tj-actions/changed-files CI runner’s secrets were leaked, allowing the attackers to steal the credentials used in the runner, including a Personal Access Token (PAT) belonging to the tj-bot-actions GitHub user account.

Adnan followed up his statement by sharing details of a suspicious commit that he identified in reviewdog/action-setup: f0d342.

Adnan also pointed out that reviewdog uses an auto-invite mechanism. This mechanism automatically invites GitHub users who contributed to the reviewdog organization to be a part of it, granting them write permission to its repositories. The maintainer of reviewdog later agreed that this mechanism may indeed have been the entry point of the attacker to the reviewdog organization.

From our inspection of reviewdog/action-setup, it appeared to us that the f0d342 commit was introduced to the repository by an attacker — probably the same actor who attacked tj-actions. However, with more information and help from the maintainer of reviewdog, haya14busa, we are able to identify that what was actually pushed are git tags — not commits.

Summarizing what we’ve gathered by now, we can state the following:

  • A token with write access to the reviewdog organization was leaked (or maybe a contributor went rogue) and this token was used to compromise both of the tj-actions repositories mentioned above.
  • As tj-actions/changed-files depend on reviewdog/action-setup, we can assume that reviewdog was compromised prior to tj-actions.

In the next section, we shed light on the techniques that were used by the attacker to introduce stealthy commits to these repositories and provide detail about the impacts that followed.

Deep Analysis

While both the initial and subsequent compromises appear to be similar at first glance, they have some differences.

In the tj-actions/changed-files infection, we saw that the attacker infected the index.js file via a “legitimate” pull request. In order to infect this file, the attacker must have had a token with write permission to the repository. Without this, they wouldn’t have been able to push the impersonated commit (0e58ed8).

We now know that they obtained this capability using the PAT that they previously acquired by infecting reviewdog/action-setup, which in turn poisoned tj-actions/changed-files’s workflow. In addition to the pull request infiltration, the attacker used the token to update the existing git tags of the tj-actions/changed-files repository, making all tags point to the malicious 0e58ed8 commit.

This eventually led to code execution in the CI runners of any GitHub action or workflow using this action, and referencing it by one of these tags.

We assume that although the attacker had a GitHub token with write permission to the repository, they preferred to disguise their malicious commit by impersonating a valid user in a valid pull request — a technique called “commit impersonation.”

This impersonation technique was published more than a decade ago. You can find more information about it in this repository.

In the initial infection, on reviewdog/action-setup, we observed that although there was no pull request infiltration or visibly malicious commit, an update was made that caused the git tags to point to a malicious commit (thank you again, haya14busa!). This implied, again, that the attacker had obtained a GitHub token with write permission to this repository as well.

This educated assumption still leaves us with some important questions:

  • How were the malicious commits introduced to the reviewdog/action-setup repository?
  • And if we can’t find any traces of branches or pull requests, where did they come from?

GitHub Forks

GitHub forks are a common version control system (VCS) feature that are used extensively worldwide for legitimate purposes, but they can also be used in a darker fashion.

After a user forks a repository in GitHub, they can add their commits to the fork. These commits are added to the “fork network” and can be referenced from the original repository.

When browsing to these commits, they appear within the original repository, but show a dangling commit warning (Figure 2).

Screenshot of a GitHub interface showing a commit in the reviewdog/action-setup repository.
Figure 2. Dangling commit in the reviewdog/action-setup repository.

This means that a malicious actor could abuse the forking functionality to introduce arbitrary commits to a forkable GitHub repository, even if the attacker doesn’t have write permission. And to spice things up, if such forks are deleted and the exact commit SHA values from the fork are not known, these commits will be untraceable and impossible to identify.

With these facts in mind, we started to suspect that forks had been involved in this attack. Deeper investigation revealed that our suspicion was correct.

Infecting reviewdog

When we looked for forks of either of the compromised repositories, we weren’t able to detect any suspicious instances. This indicated that either GitHub deleted the instances because they were involved in malicious activity, or that something else took place.

To unravel this conundrum, we utilized our custom tools and capabilities, and discovered the following:

  • On 2025-03-11, 17:06:12 (UTC) a user named iLrmKCu86tjwp8 forked the reviewdog/action-setup repository. When we looked for the user, we found that it had vanished and no longer existed in GitHub. This immediately raised our suspicions.
  • Within their fork, we saw that this user had pushed 13 commits containing various payloads. Some were identical to the malicious payload found in commit 0e58ed8 at reviewdog/action-setup and some were “cleanup” commits, like 8d73381.

We also saw that this user forked the reviewdog/action-typos repository on 2025-03-11, 17:21:52 (UTC), and pushed another 15 commits containing various payloads. However, since this user was deleted, we were unable to directly access the fork and its commits.

This is where we were able to use the fork network functionality in our favor. Working under the assumption that the attacker created a fork, we understood that their commits should be available under reviewdog‘s repository — and indeed they were.

The Indicators of Compromise section towards the end of this article provides the list of all the commits the user created in their fork in order to later infect the original repository.

When inspecting the commits, we observed that the attacker prepared the infection of reviewdog/action-setup, and also prepared reviewdog/action-typos to point to the malicious commits.

The infection itself contained variations of the snippet shown below in Figure 3 to collect victim credentials when the runner script was executed.

Screenshot of code with syntax highlighted in different colors.
Figure 3. The malicious code snippet in the reviewdog/action-setup repository.

In addition to this finding, from the logs of reviewdog we learned that the attacker pushed new tags to point to the malicious commits. This made us wonder why the attacker used this approach specifically, and it didn’t take us long to realize the following. Git tag changes that are pushed to GitHub are not recorded in the GitHub audit log for organizations and repositories using GitHub’s free tier.

This means that by using a shadow commit from a deleted fork and pushing a git tag that is not saved in the audit log, an attacker can almost completely evade detection.

The following points summarize our analysis of the reviewdog infection:

  • The attacker’s preparations commenced on March 11, 2025, at 17:06:12 (UTC), and the attack was detected three days later
  • The attacker is well aware of the forking features and knows that they can use commits coming from a fork within the repository’s legitimate codebase
  • The attacker used a token with write permission to push git tags to the repository and stay undetected by introducing the commits via the fork method

As we now understood that the malicious commits were introduced to the reviewdog repositories via forks, we were faced with another question: Why couldn’t we see their traces?

Hiding GitHub Users

Although we are fairly confident about our above conclusions, this section will remain a hypothesis that GitHub can either confirm or refute.

We believe that when the iLrmKCu86tjwp8 user was registered, it used a legitimate email, as standard GitHub users do. Later, after introducing the shadow commits, the user changed this email to a disposable/anonymous email that is disallowed by GitHub’s policy.

In such cases, GitHub will flag the account and hide it from the public. This includes hiding every interaction and action that the user performed on the GitHub platform.

We hypothesize that the user performed this email change in order to cause GitHub to clean their traces and account, making it much more difficult to trace their actions and identity.

More Forks and More Dummy Users

When we looked for the forks of tj-actions/changed-files, we found two other suspicious users:

  • 2ft2dKo28UazTZ
  • mmvojwip

Both of these accounts were also deleted from GitHub.

When we inspected the behavior of the 2ft2dKo28UazTZ user, we saw that although it forked the tj-actions/changed-files, it was used differently. Unlike the iLrmKCu86tjwp8 user, 2ft2dKo28UazTZ was used to test the creation and deletion of git tags. Namely v39 and v47, as shown in Figure 4.

Screenshot of a table displaying event logs, including columns for event type, actor login, repository name, date created, reference, and reference type. Notable column entries include types such as DeleteEvent, CreateEvent, and ForkEvent.
Figure 4. The 2ft2dKo28UazTZ user experimenting with git tag creations.

While we know that eventually the actor overrode all of the git tags of tj-actions/changed-files, we noticed that here, the actor targeted two specific git tags:

  • v39
  • v47

The third user that was identified, mmvojwip, forked tj-actions/changed-files as well, but did not interact in any way with its fork.

To clear things up before we move on, let’s summarize the last two sections:

  1. The attacker used three dummy accounts to perform the preparations and testing: iLrmKCu86tjwp8, 2ft2dKo28UazTZ and mmvojwip
  2. After using the accounts, we hypothesize that the attacker made GitHub flag their accounts and clean up their traces

Revealing the Connection to Coinbase

When we searched for what activities the 2ft2dKo28UazTZ and mmvojwip users performed, we noted that they had created the following forks:

  • 2025-03-12 15:28:44 → 2ft2dKo28UazTZ forks coinbase/onchainkit
  • 2025-03-12 15:29:04 → 2ft2dKo28UazTZ forks coinbase/agentkit
  • 2025-03-12 15:32:02 → 2ft2dKo28UazTZ forks coinbase/x402
  • 2025-03-13 20:36:02mmvojwip forks coinbase/agentkit
  • 2025-03-13 21:04:58mmvojwip forks coinbase/agentkit again

We kept looking and saw that both of these users made changes to their forks of coinbase/agentkit, but not to the other two repositories, so we focused on coinbase/agentkit. Having discovered that the actor forked these repositories before the large attack on tj-actions/changed-files took place, we suspected that Coinbase might have been the actual target (or one target) of the campaign.

When we browsed to the coinbase/agentkit repository, we saw that it is labeled as a “framework for easily enabling AI agents to take actions onchain.”

When we further inspected the activity of 2ft2dKo28UazTZ within its fork of coinbase/agentkit, we saw that it was mainly creating pull requests from its own branches to itself. It was updating the .github/workflows/changelog.yml file or experimenting with releasing the nightly-20250311 tag.

When we looked in coinbase/agentkit we didn’t find any indications of a compromise in the nightly-20250311 tag, but oddly, we found that the changelog.yml file was actually deleted by the maintainer on March 14. Although it was deleted, we could see that the workflow referenced v39 of tj-actions/changed-files, which is the exact same tag the actor was fiddling with in their own fork. This also strengthened our suspicion that the attacker had targeted Coinbase.

As observed in the initial attack, the commits were introduced to the repository via a fork, meaning that we could see them inside the coinbase/agentkit repository. After identifying these commits, we saw that throughout the changes in 2ft2dKo28UazTZ’s coinbase/agentkit fork, they updated and alternated the references of tj-actions/changed-files to one of the following SHA values:

  • fbc2c5ebe64389f297a7808025379f77133f1292
  • e1e36574b3af1ddaab74f5e69505d8836bf12f52
  • ce4a123414f9fffa959d1f329c4749da83c4bf10
  • c17ac4b5c1cb901a7ccddf00ac9722b8e2725345

When we attempted to access these SHAs in tj-actions/changed-files we reached a dead end. They had all been deleted.

The full commits list of the 2ft2dKo28UazTZ user can be found below in the Indicators of Compromise section.

At this point, we know that:

  • 2ft2dKo28UazTZ experimented with the modification of the changelog.yml file in coinbase/agentkit that was using v39 of tj-actions/changed-files, and tested the creation of the nightly-20250311 tag
  • Either the legitimate maintainer or an actor with a leaked token deleted the changelog.yml file from the coinbase/agentkit repository

Given that we didn’t find any other open ends for the 2ft2dKo28UazTZ user, we moved on to the third user that we found.

A Smoking Gun

At this point in our investigations, we started looking into the actions of the mmvojwip user, while also fetching the deleted workflow logs of the changelog.yml workflow in coinbase/agentkit via the GitHub API.

In the same way as described in the initial compromise, the user created a fork with their changes.

The full list of commits is provided in the Indicators of Compromise section, but three commits in particular stood out:

All of these commits changed the reference of tj-actions/changed-files to or from SHA 6e6023c01918b353229af0881232f601a4cc8365. When we accessed that commit, we saw that it was another dangling commit as shown in Figure 5. This time, it was impersonating (or abusing) the github-actions[bot].

Screenshot of a GitHub repository page showing a commit detail, including lines of code added and removed, with a message stating the commit does not belong to any branch and may belong to a fork outside of the repository.
Figure 5. tj-actions/changed-files with newly-discovered impersonated malicious commit.

It is important to note that at this point, the actor had write permissions to the tj-actions/changed-files repository and could push arbitrary commits or branches, impersonating any user and staying under the radar.

When we looked into the payload of this commit, we found a payload that was yet to be revealed. This payload demonstrates the connection between the actor, tj-actions/changed-files and coinbase/agentkit as shown in Figure 6.

Screenshot showing a GitHub repository page with code changes in a JS file highlighted.
Figure 6. A malicious commit spear-targeting coinbase/agentkit inside the tj-actions/changed-files repository.

The details in this commit prove that the attacker was looking specifically for the Coinbase repository.

At this point, we approached Coinbase and also started searching for the commit inside the workflow logs of coinbase/agentkit, to see whether their workflow had pulled the malicious SHA. It wasn’t long before we found our answer as shown in Figure 7.

Screenshot of a computer terminal displaying a series of log entries with timestamps, detailing actions related to permission checks, downloads, and updates related to GitHub repositories.
Figure 7. coinbase/agentkit pulling and executing the malicious SHA targeted at Coinbase.

We also identified that this workflow was executed with write-all permissions in the repository, allowing sensitive actions to be performed, possibly allowing the introduction of malicious code into the coinbase/agentkit repository’s codebase.

At this point, we can state the following:

  • The attacker created a campaign targeted at Coinbase
  • The attacker obtained a GitHub token with write permissions to the coinbase/agentkit repository on March 14, 2025, 15:10 UTC, less than two hours before the larger attack was initiated against tj-actions/changed-files
  • We don’t know whether other organizations were spear-targeted in the same fashion
  • We are yet to tell whether the deletion of the changelog.yml file inside coinbase/agentkit is the result of a compromised token, or whether the maintainer deleted this workflow due to a security report
  • Although the payloads collected sensitive information, but as far as we know, they did not contain more severe operations such as remote code execution or reverse shell actions typically associated with malicious actors

Contacting Coinbase

On March 19 at 18:28, we emailed the Coinbase maintainer who deleted the changelog.yml workflow to ascertain whether the maintainer removed the workflow on their own initiative, and if they were aware of the leak.

By 19:15 the maintainer replied that indeed they had removed the workflow following a security report and had remediated the attack.

We followed up by sharing more details of our findings with Coinbase, which stated that the attack was unsuccessful at causing any damage to the agentkit project, or any other Coinbase asset.

Affected Repositories

To provide a visual representation of the potential impact of this attack, we constructed an actions dependency tree for reviewdog/action-setup, which was the nucleus of this event. To create the tree shown in Figure 8, we searched for all the actions dependent on reviewdog/action-setup, and those that depend on the dependent actions recursively up to three levels.

Each node represents an action. The actions in the innermost circle all depend on reviewdog/action-setup directly as a composite action, or indirectly by using it in their workflows.

Inside each node are a number of repositories (actions and workflows) that directly depend on the action. Figure 8 also includes the sum of dependent repositories in each level.

These are the potentially affected repositories and projects of the entire campaign. Each level expands significantly as more repositories are affected.

The actual dependent numbers are much higher, because:

  • The figure only contains public repositories
  • It has partial results due to search limitations
  • It does not include actions that have no public dependents

The figure was created a few days after the attack, and as such it does not contain the projects that have removed the vulnerable actions. This demonstrates that the impact at the time of the attack was even larger.

Diagram showing a Dependency Tree with nodes labeled as reviewdog/action-setup and various numbers, connected by lines indicating the level of dependencies at four levels. The total direct dependents count for each level is displayed: Level 0 has 3,047, Level 1 has 4,941, Level 2 has 70,538, and Level 3 has 159,986.
Figure 8. Actions dependency tree showing where Coinbase depends on tj-actions/changed-files that appears on the second level.

The concept of exploiting the GitHub Actions dependency chain was demonstrated in previous research by our team.

Conclusions and Summary as of March 20, 2025

While Coinbase’s response effectively remediated the attack on their own organization, the community has yet to determine whether other organizations were subject to targeted attacks or whether there are additional aspects to the full picture of the campaign.

There remain several open questions, such as:

  • The motivations of the attacker who triggered the widespread impact on tj-actions
  • How the token for reviewdog/action-setup was leaked
  • The reason an initially targeted attack turned into a large-scale and less stealthy campaign
  • The reason the attacker printed to logs rather than undertaking more damaging actions

Below, we provide the full timeline according to our investigations, and the full list of commits that were made by the three users that we identified during the research.

We would like to commend Coinbase on their security practices, and their cooperation regarding our inquiries during the course of our research. Coinbase also demonstrated a swift response to the event and implemented mitigations within a short timeframe.

We would also like to thank the maintainers of tj-actions and reviewdog for their help in our investigation.

Update: April 2, 2025

On March 18, the maintainer of reviewdog published a security advisory, followed by two clarifications regarding the various known parts of the attack thus far. In this update, we share the updated attack path, newly-found IoCs, and additional names of impacted GitHub organizations and repositories that led to the eventual compromise of tj-actions.

Chronologically, this update relates to the prequel to the attack on tj-actions and covers the events that took place prior to what we have described so far. For ease of reading, please note that the following details represent a tracing-back process that will eventually help us to explain the complete timeline of this compromise.

Reviewdog’s Compromise

We now know that reviewdog was compromised due to a reviewdog maintainer’s leaked PAT.

For reference purposes, and in order to keep the maintainer’s identity private, we will refer to the maintainer as RD_MNTNR (short for reviewdog maintainer) from now on.

At the time of the attack, RD_MNTNR's PAT had sufficient permissions to push tags to the reviewdog/action-setup repository. This allowed the attacker to override the v1 tag in the repository and point it to the malicious commit (b833eecd) that originated in a fork. By doing this, the attacker impacted any consumers of the v1 tag of the reviewdog/action-setup repository and everything else revealed in our article up to this point. Having discovered this, we can now ask the following question:

  • How did the attackers get RD_MNTNR's PAT?

SpotBugs

While RD_MNTNR was an active maintainer in reviewdog, this maintainer was also taking an active part in other open-source projects, one of which was spotbugs. According to its description: “SpotBugs is FindBugs' successor. A tool for static analysis to look for bugs in Java code.” As a Java ecosystem tool, the spotbugs organization maintains repositories for maven plugins, sonar and more.

We now know that RD_MNTNR's PAT was leaked by the attacker from the spotbugs/spotbugs repository. The attacker pushed a malicious GitHub Actions workflow file to the spotbugs/spotbugs repository, creating a malicious workflow run in the context of the repository. The attacker used this malicious workflow to leak all spotbugs/spotbugs secrets, which included RD_MNTNR's PAT. By reviewing the IoCs and speaking to the maintainers of the involved repositories, we estimate that this PAT had access to both spotbugs/spotbugs and to reviewdog/action-setup.

The malicious commit and the workflow itself is shown below in Figure 9.

A screenshot with color-coded syntax of a workflow that includes a public key.
Figure 9. Malicious workflow in spotbugs/spotbugs.

By examining the workflow, we saw that it reacted to any push to the branch hewrkbwkyk. Once running, the workflow stringified all the available secrets, encrypted them with AES (symmetric encryption) and encrypted the symmetric key using a hard-coded RSA public key (asymmetric encryption). This ensured that the encrypted leaked secrets and their encryption key could only be decrypted and read by the attacker. The workflow then continued to upload this data as a workflow artifact, which the attacker could later download.

Returning to the attack flow, as stated above, the attacker was able to push this workflow to the spotbugs/spotbugs repository. When browsing to the spotbugs/spotbugs activity log, we saw the IoC shown in Figure 10 below.

Screenshot of GitHub repository 'spotbugs' showing activity where a user deleted a branch named 'herwkbwyk' 20 days ago, after a commit titled 'Test Commit' with hash f5434e3.
Figure 10. spotbugs/spotbugs activity log.

The branch was created and deleted within one second (2025-03-11T10:52:22 UTC to 2025-03-11T10:52:23 UTC). This triggered a GitHub Actions run for the pushed changes, specifically for the malicious workflow, leaving barely any traces.

Summarizing this part, we now know that:

  • RD_MNTNR’s PAT was stored as a secret in spotbugs/spotbugs and it had access to both spotbugs/spotbugs and reviewdog/action-setup
  • The attacker leaked RD_MNTNR’s PAT using a malicious workflow pushed to spotbugs/spotbugs and later abused it for the reviewdog attack
  • The attacker somehow had an account with write permission in spotbugs/spotbugs, which they were able to use to push a branch to the repository and access the CI secrets.

This, then, leads to another question:

  • How did the attacker obtain write permission to spotbugs?

JurkaOfAvak

When browsing to the commit that the attacker used in order to introduce the malicious workflow to spotbugs/spotbugs, we discovered that it was created by the user jurkaofavak, which was subsequently deleted. This commit is shown in Figure 11.

Screenshot of a GitHub repository showing a commit update to the "spotbugs" project. The commit includes changes to various files as indicated in a split-view format with one side showing code differences and the other displaying a YAML file with configuration settings.
Figure 11. Commit f5434e in spotbugs/spotbugs.

When we looked for other activities performed by this user, we found none. This suggests that jurkaofavak was another malicious user that the attacker created in order to perform a specific action. But with that said, we still had to understand how jurkaofavak obtained write access to spotbugs/spotbugs.

Further investigation led us to the following:

  • The user jurkaofavak was invited to the spotbugs/spotobugs repository as a member by one of the spotbugs/spotbugs maintainers

Specifically, jurkaofavak was added as a member to the spotbugs/spotbugs repository on 2025-03-11T10:50:16 UTC, just two minutes prior to pushing the malicious branch and workflow. We obtained evidence of this invitation using internal tools and this was later verified by the spotbugs/spotbugs maintainer.

To keep this compromised maintainer’s identity private, we refer to them as SPTBGS_MNTNR (short for spotbugs maintainer) from now on.

As the details unfold, let’s review our findings:

  • The attacker pushed a branch with a malicious workflow into spotbugs/spotbugs by creating a disposable user called jurkaofavak
  • jurkaofavak had write permission in spotbugs/spotbugs, as they were a member in that repository
  • The attacker somehow obtained the PAT of SPTBGS_MNTNR, which allowed the attacker to invite jurkaofavak to be a member of spotbugs/spotbugs

Now we have yet another question: How did the attacker obtain the PAT of SPTBGS_MNTNR?

The Initial Leak

Our tracing-back process was now bringing us closer to the initial leak that enabled this entire attack chain. Following our new discoveries, we reached out to SPTBGS_MNTNR. We would like to thank SPTBGS_MNTNR for their cooperation and conscientious response to this incident.

In our communication with SPTBGS_MNTNR, the maintainer filled us in on some additional details:

  • On Friday March 21, GitHub Support contacted SPTBGS_MNTNR regarding malicious activity conducted on SPTBGS_MNTNR's behalf
  • A few hours later, haya14busa (owner of reviewdog) also contacted SPTBGS_MNTNR with a report of suspicious activity
  • GitHub supplied SPTBGS_MNTNR with their audit log from March 11, for further inspection
  • SPTBGS_MNTNR then immediately rotated all of their tokens and PATs, to revoke and prevent further access by the attackers

When we looked for suspicious activity associated with the spotbugs organization, we noted that a fork followed by a pull request, was made to the spotbugs/sonar-findbugs repository by another deleted user: randolzfow. Our communication with SPTBGS_MNTNR confirmed that this indeed was the pull request that was used to leak their PAT.

Surprise! Pull_request_target

On 2024-11-28T09:45:13 UTC SPTBGS_MNTNR modified one of the spotbugs/sonar-findbugs workflows to use their own PAT, as they were having technical difficulties in a part of their CI/CD process. This change is shown in Figure 12.

Screenshot of a code editing interface showing a comparison of code changes between two files, highlighted in green and red to indicate additions and deletions respectively.
Figure 12. Modification of a spotbugs/sonar-findbugs workflow to use a PAT.

On 2024-12-06 02:39:00 UTC, the attacker submitted a malicious pull request to spotbugs/sonar-findbugs, which exploited a GitHub Actions workflow that used the pull_request_target trigger.

For those unfamiliar with the risks involved in using the pull_request_target trigger in GitHub Actions, this is a GitHub Actions workflow trigger that allows workflows running from forks to access secrets, which may lead to a poisoned pipeline execution attack (PPE).

The pull request payload modified the repository's mvnw file, which was later used during the CI’s invocation.

We have confirmed with SPTBGS_MNTNR that the PAT that was used as a secret in this workflow was the same PAT that later invited jurkaofavak to the spotbugs/spotbugs repository.

These realizations finally seemed to answer all of the questions that had been cropping up throughout the course of this chain of events and our investigation. Figure 13 shows the malicious pull request.

Screenshot of a GitHub repository named 'spotify/sonar-findbugs' displaying a closed issue in the Code tab, with code highlighted in green.
Figure 13. Malicious pull request in spotbugs/sonar-findbugs targeting the mvnw file.

Attack Flow Summary

Now that the above was laid out, we could map the full attack from its inception. This is demonstrated visually in Figure 14.

  • The attackers abused a workflow in the spotbugs/sonar-findbugs repository
    • This workflow used the pull_request_target trigger to leak the PAT of a spotbugs maintainer
    • This PAT also had access to spotbugs/spotbugs
  • After obtaining the spotbugs maintainer’s PAT, the attackers created and invited a disposable, malicious user (jurkaofavak) to be a member in the spotbugs/spotbugs repository
  • jurkaofavak pushed a branch with a malicious workflow that triggered a GitHub Actions run and immediately deleted the branch
    • The malicious workflow invocation in spotbugs/spotbugs leaked the PAT of a reviewdog maintainer; in this case, a maintainer of both spotbugs/spotbugs and reviewdog/action-setup
    • The leaked PAT had permissions to both of these repositories
  • The attacker used the reviewdog maintainer’s stolen PAT to override reviewdog/action-setup’s v1 tag, causing it to point to a malicious commit that was done in a fork by the malicious user iLrmKCu86tjwp8
  • After this, tj-actions/changed-files’s CI workflow was invoked
    • This workflow uses the tj-actions/eslint-changed-files GitHub action as a pipeline dependency, which in turn depends on and runs the malicious code at reviewdog/action-setup
    • The malicious code stole a GitHub token that had write permission to tj-actions/changed-files
  • Using this token, the attacker overrode a tag in tj-actions/changed-files, making it point to a malicious commit done in a fork by the malicious user mmvojwip, specifically targeting the coinbase/agentkit repository
  • Next, coinbase/agentkit’s CI workflow executed, consuming the malicious tag from tj-actions/changed-files and leaking the credentials to the attacker
  • Coinbase was alerted by a third-party researcher that its CI was consuming malicious code, and it removed the vulnerable workflow
  • The attacker overrode all tags in tj-actions/changed-files, making them point to a malicious commit, resulting in all workflow secrets being printed to the log by consumers of tj-actions/changed-files
Flowchart by Unit 42 illustrating potential security vulnerabilities in a software development workflow, including stages where secrets might be exposed to attackers, such as through logs or during code review steps. The diagram includes nodes and directional arrows showing the sequence of events leading to data exposure.
Figure 14. Attack flow from start to finish. Icon source: Andrean Prabowo on Flaticon.

Followups and Open Questions

As a responsible maintainer of other projects in the open-source community, SPTBGS_MNTNR raised their concerns with us regarding the potential for further impact on other projects that they maintain. Although SPTBGS_MNTNR was not able to detect any further impact caused by their leaked PAT, we continue to investigate SPTBGS_MNTNR’s audit logs. We’re also auditing organizations and repositories that SPTBGS_MNTNR contributes to, to make sure that the attackers did not achieve further lateral movement capabilities.

In general, the whole attack flow as it unfolds leaves us with some unknowns. For instance, there is a three-month gap between when the attackers leaked SPTBGS_MNTNR’s PAT and when they abused it.

We know the attacker specifically targeted Coinbase, and coinbase/agentkit's workflow started using tj-actions/changed-files only on March 7. As such, one possible hypothesis is that the attackers monitored the projects dependent on the tj-actions/changed-files and waited for an opportunity to compromise a high-value target.

Given the attacker's modus operandi of multiple attack stages, stealthy operations and attempts to erase all traces of malicious activity, we still have a mystery to solve. Having invested months of effort and after achieving so much, why did the attackers print the secrets to logs, and in doing so, also reveal their attack?

We continue to investigate, and will provide further updates as they become available.

Events Timeline

This timeline is based on available information. All times are UTC+0.

Date: November 28, 2024
Time Action
09:45:13 SPTBGS_MNTNR added their own PAT to spotbugs/sonar-findbugs
Date: December 6, 2024
Time Action
02:39:00 The attacker leaks SPTBGS_MNTNR's PAT from spotbugs/sonar-findbugs
Date: March 7, 2025
Time Action
20:04:00 Coinbase maintainer creates a workflow in the coinbase/agentkit repository, which depends on v39 of tj-actions/changed-files
Date: March 11, 2025
Time Action
17:06:12 Fork of reviewdog/actions-setup by iLrmKCu86tjwp8, setup and preparations
17:21:52 Fork of reviewdog/actions-typos by iLrmKCu86tjwp8, setup and preparations
18:17:20 Last recorded interaction of the user iLrmKCu86tjwp8 with the reviewdog/actions-setup fork
18:17:53  Last recorded interaction of the user iLrmKCu86tjwp8 with the reviewdog/actions-typos fork
18:42:09 Push in reviewdog/actions-setup of the “v1” tag to b833eecdf13c615cd60d5dede6f6593a4b3b4376 (malicious)
20:31:49 Force push in reviewdog/actions-setup of the “v1” tag to 3f401fe1d58fe77e10d665ab713057375e39b887 (clean)
Date: March 12, 2025
Time Action
15:28:44 Fork of coinbase/onchainkit by 2ft2dKo28UazTZ without any further actions
15:29:04 Fork of coinbase/agentkit by 2ft2dKo28UazTZ, followed by setup and preparations
15:32:02 Fork of coinbase/x402 by 2ft2dKo28UazTZ without any further actions
16:54:44 Fork of tj-actions/changed-files by 2ft2dKo28UazTZ, followed by setup and preparations
Date: March 13, 2025
Time Action
02:08:59 Last recorded interaction with the fork of tj-actions/changed-files by 2ft2dKo28UazTZ
17:55:11 Last interaction with the fork of coinbase/agentkit by 2ft2dKo28UazTZ
20:36:02 Fork of coinbase/agentkit by mmvojwip, followed by setup and preparations
Date: March 14, 2025
Time Action
13:49:00 Last recorded interaction with the fork of coinbase/agentkit by mmvojwip
15:10:00 Coinbase executes a malicious version of tj-actions/changed-files and leaks a token with write permissions
16:37:00 Coinbase maintainer removes the vulnerable workflow of coinbase/agentkit from the repository
16:57:00 Push event in tj-actions/changed-files, replacing all the tags with malicious commits

Indicators of Compromise

Commits Made by User iLrmKCu86tjwp8:

reviewdog/action-setup

  1. https://github.com/reviewdog/action-setup/commit/0f176b316e1d41a945e574fc2ba76b0dc752d585
  2. https://github.com/reviewdog/action-setup/commit/96be5a72d8adac89200e08658f69273912fe4783
  3. https://github.com/reviewdog/action-setup/commit/61902a2b3c982d3551ad219bb0ff22f3663e44de
  4. https://github.com/reviewdog/action-setup/commit/f966d8d897bc8033657b8e77da56a988029ce8c7
  5. https://github.com/reviewdog/action-setup/commit/909ace6b17fc4045030e55f5ac27ca99f276ae80
  6. https://github.com/reviewdog/action-setup/commit/454c8a19a12cde77505464d7e4549500c8ac68d0
  7. https://github.com/reviewdog/action-setup/commit/04d5b6d4c18c06d7df6edabf914d0ded986c3a87
  8. https://github.com/reviewdog/action-setup/commit/81796e43b6348d628e3e739a910d50704a5292c1
  9. https://github.com/reviewdog/action-setup/commit/8d73381aa1c2ccd12c8ddcfefa47aeb1443e67e3
  10. https://github.com/reviewdog/action-setup/commit/c27af8180030e1f3d0434473731f030dc1849edf
  11. https://github.com/reviewdog/action-setup/commit/efa6ce46bcaa8751ad223e44be7977798c909304
  12. https://github.com/reviewdog/action-setup/commit/143a52c0d919c1a69bdeafeab564650f6939a2b3
  13. https://github.com/reviewdog/action-setup/commit/31b1df0e735ad8511fd7df3be8cf9351d8cb4de7

reviewdog/action-typos

  1. https://github.com/reviewdog/action-typos/commit/26f36301be817815fbcb896d2c85e89f04b17df4
  2. https://github.com/reviewdog/action-typos/commit/9bb460e92befdbb6506d2e643ae06c8b50205f97
  3. https://github.com/reviewdog/action-typos/commit/75b5741c6bd9de9815741a40a41844598d409e7b
  4. https://github.com/reviewdog/action-typos/commit/f33bbbbf1282af26b285a9a131e0bd43ca355e79
  5. https://github.com/reviewdog/action-typos/commit/3a06be07e9c02ee1c5fede46928b6031d8d2383c
  6. https://github.com/reviewdog/action-typos/commit/6db74f2d6b0600b8e38cf24b18fda283217e5ffb
  7. https://github.com/reviewdog/action-typos/commit/1d10399139bd16e69ed2b7dbfda38735ea1cf324
  8. https://github.com/reviewdog/action-typos/commit/3b9482055ba84ea8761eed6b3b9ecf9e79692a55
  9. https://github.com/reviewdog/action-typos/commit/6c7b129ed2bbb59ed684c3847a587f4f4e94eaf8
  10. https://github.com/reviewdog/action-typos/commit/cb6e155e9dec580de71f0fe89f832d2d9932997b
  11. https://github.com/reviewdog/action-typos/commit/eb183376a83bdc6ecfc8168b22ffa6e2b1a9cb6e
  12. https://github.com/reviewdog/action-typos/commit/5db6a72f3984e847a2a7d2a25169ca5e849798da
  13. https://github.com/reviewdog/action-typos/commit/16c5092f4eb672004001d9bcdc0cf693fb76c1b4
  14. https://github.com/reviewdog/action-typos/commit/1368857b9c9a47ba08727409ae9fbdeeba8a590a
  15. https://github.com/reviewdog/action-typos/commit/48fbacf68b808429af544d0d7ebd90a5b4cec642

Commits Made by User 2ft2dKo28UazTZ

  1. https://github.com/coinbase/agentkit/commit/0723a75a67a1de4b1b1c6cd66a8cab551023fc30
  2. https://github.com/coinbase/agentkit/commit/868213ddd4dad8b24a3cb716a6ccc9f89e10d087
  3. https://github.com/coinbase/agentkit/commit/8a269616e225e93b8f74d0eb4a86be041a493a76
  4. https://github.com/coinbase/agentkit/commit/0723a75a67a1de4b1b1c6cd66a8cab551023fc30
  5. https://github.com/coinbase/agentkit/commit/71f4822157821d0998d4a0f8e9e849cdcce9bdd2
  6. https://github.com/coinbase/agentkit/commit/18b3e737f9449d94d73fad0bca718ba677676ac7
  7. https://github.com/coinbase/agentkit/commit/7a7432e65a8666e4b04695f7c1ef03dfca75ad0b
  8. https://github.com/coinbase/agentkit/commit/1ca37970d73ee40c173725de97fc8696aac93aa1
  9. https://github.com/coinbase/agentkit/commit/bbbb1c63ceae1e7fb40054bb763f407dc200b37d
  10. https://github.com/coinbase/agentkit/commit/2161165ec14fcb9d985970c353e17e84794fd694
  11. https://github.com/coinbase/agentkit/commit/823bd75199f474ea7abdbe3a5debf9825c490156
  12. https://github.com/coinbase/agentkit/commit/9cefe659a770b8d32ffe5f08f44de6456d9592af
  13. https://github.com/coinbase/agentkit/commit/c00af6911bf03512d130462b6b7fe6a286f7ec98

Commits Made by User mmvojwip

  1. https://github.com/coinbase/agentkit/commit/8edc60f030035f377780f421431a7ac66828253d
  2. https://github.com/coinbase/agentkit/commit/b3a1c722b2aed7fa3e373fb04861826a7a00d0aa
  3. https://github.com/coinbase/agentkit/commit/db25249e859d0259011a2f820ec75b5d1047c99b
  4. https://github.com/coinbase/agentkit/commit/b39e2d4c31bc786b3a93ea832da887debfee1fc1
  5. https://github.com/coinbase/agentkit/commit/a3bbd802082446e36b8976de78a7727e71638e36
  6. https://github.com/coinbase/agentkit/commit/faf8d9d8b35369541d38f8d087d71e92cbeadd6b

Commits Made by User jurkaofavak

  1. https://github.com/spotbugs/spotbugs/commit/f5434e31b6259b4e08684618a305bae127b6d784

Malicious Pull Request

  1. https://github.com/spotbugs/sonar-findbugs/pull/1116

Mitigations and Recommended Actions

Immediate Steps for Affected Users

  • Identify usage: Search for the tj-actions/changed-files action and other actions mentioned above in your repositories to determine whether and where it has been used.
  • Review workflow logs: Examine past workflow runs for evidence of secret exposure double-encoded in Base64 text, especially if the logs are public.
  • Rotate secrets: Revoke and regenerate any credentials that may have been exposed. Ensure that all API keys, access tokens and deployment credentials are refreshed.
  • Investigate malicious activity: If you encounter any signs that the compromised action has been executed, investigate further for any signs of malicious activity.

Long-Term Security Improvements

  • Govern third-party services in use: Implement vetting procedures to ensure external actions receive approval before being integrated into workflows.
  • Implement strict Pipeline-Based Access Controls (PBAC): Reduce the permissions granted to GitHub Actions workflows to the minimum necessary. Use fine-grained and short-lived tokens instead of long-term and broadly scoped secrets.
  • Pin GitHub actions: Instead of referencing GitHub actions by tag or branch (e.g., @v3 or @main), pin actions to a full-length commit SHA-1 hash to ensure that the code cannot be changed by a malicious actor.

To learn more about protecting your Version Control Systems (VCS) and CI/CD systems, we recommend reaching out to the OWASP Top 10 CI/CD Security Risks project.

The tj-actions/changed-files compromise underscores the risks inherent in CI/CD pipelines, and those posed by third-party dependencies. As adversaries increasingly target these environments to gain quick access to production assets, organizations must adopt a security-first approach when incorporating external tools into their workflows.

The likelihood of supply chain attacks can be significantly reduced by implementing strict security measures, such as:

  • Pinning dependencies
  • Using verified actions
  • Adopting PBAC

Teams must prioritize security and take proactive steps to safeguard their automation pipelines against potential threats.

Palo Alto Networks Protections and Mitigations

For existing customers, Prisma Cloud identifies executables and GitHub actions that are executed in their pipelines. The product identifies tools used by the organization, allowing customers to readily find whether the vulnerable action is in use, and in which pipelines. Customers can also implement out-of-the-box policies to protect against associated risks, as detailed below.

As customers are upgraded from Prisma Cloud to Cortex Cloud, they can benefit from all existing protections, enhanced with the ability for users to allow or restrict the usage of tools running in their pipelines, and to track deployment of forbidden tools – as shown below in Figure 9.

Cortex Cloud screenshot showing a Supply Chain Tools panel and associated actions.
Figure 9. Identifying all uses of a malicious Github Action in Cortex Cloud.

Through various out-of-the-box policies designed to identify vulnerable areas within CI/CD environments, customers can help prevent similar future attacks, and reduce the impact of a potential breach.

Relevant Out-of-the-Box CI/CD Policies for Palo Alto Networks Customers

Palo Alto Networks customers should refer to the following policies in their environments, and mitigate the issues in accordance with the recommendations provided in each policy.

  • Unpinned GitHub actions: Unpinned GitHub actions are mutable. This allowed the attackers to push a malicious version of the tj-actions/changed-files action as an existing tag, thereby introducing poisoned code that could be executed in consumers’ pipelines – even if the attacker did not change the tag’s version. Any consumer using an unpinned version of this action could be vulnerable to this malicious code execution, if the compromised version is executed.
  • Unrestricted usage of GitHub actions allowed in the repository/across the organization: Allowing all GitHub actions to be used in the repository regardless of their author exposes the organization to the risk of a malicious actor taking control over an action’s repository, as happened in the recent breach. GitHub allows restricting allowed actions solely to Enterprise actions, preventing the execution of external actions.
  • Excessive GitHub actions pipeline permissions on the repository: When a pipeline is executed, GitHub creates a short-lived GITHUB_TOKEN for interacting with the repository. If permissions granted to the GITHUB_TOKEN are not defined in the pipeline’s YAML file, the pipeline’s default permissions are set to either read and write (default setting in older repositories) or read repository contents for all scopes, without considering the specific requirements of the workflow.

Another security concern is when either read-all or write-all permissions are defined in a pipeline, as this grants the GITHUB_TOKEN permissions across all scopes. As the GITHUB_TOKEN was leaked from memory in the attack, attackers who gained access to a GitHub Actions pipeline with excessive permissions could take full advantage and exploit the permissive GITHUB_TOKEN.

  • GitHub actions access cloud providers using insecure long-term credentials: Long-term credentials that are intended for use by GitHub Actions workflows to authenticate to a cloud provider account are stored on GitHub as a secret. This increases the impact of credential theft, as stolen credentials can be used long after a workflow run is complete.

GitHub supports the OpenID Connect (OIDC) authentication protocol to replace long-term credentials with short-lived access tokens. Using OIDC, the GitHub Actions workflow can request a short-lived token directly from the cloud provider; this token expires automatically when the workflow run ends.

In addition, OIDC allows more granular control over how secrets can be used. For example, it is possible to filter access to tokens when the request originates in specific protected branches or environments.

Palo Alto Networks Offers Comprehensive Protections Against Future Vulnerabilities in Code

Cortex Cloud Application Security helps customers build secure apps and stop threats before they emerge. By unifying code, pipeline, runtime, application context and third-party findings within a single risk, policy and automation engine, teams get the visibility and control that they need to prevent issues at the source. Cortex Cloud Application Security combines context-aware, AI-based prioritization with a prevention-first approach to empower teams to accelerate secure deployments. This helps organizations to identify the security gaps in their environments, and to mitigate and reduce the impact of the most significant threats.

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: 00080005045107

Updated March 21, 2025, at 7:25 a.m. PT to clarify language around forking and pull requests. 

Updated March 21, 2025, at 3:05 p.m. PT to add row to timeline table under March 14. 

Updated April 2, 2025, at 12:13 p.m. PT to add substantial update section of new findings and add to the timeline table as well as IoCs.