FortiGuard Labs has analyzed malicious software packages detected from November 2024 to the present, identifying various techniques used to exploit system vulnerabilities. This analysis provides insights into the evolving threat landscape and emerging attack methods. FortiGuard Labs leverages our proprietary, AI-driven OSS malware detection system to track and examine these threats. By reviewing the tactics observed—such as low-file-count packages designed to evade detection, command overwrite techniques, and typosquatting—this report outlines key trends and their potential impact on system security.
Since November 2024, Fortinet's automated threat detection platform has identified multiple malicious software packages, revealing various attack techniques used to exploit system vulnerabilities. These analyses show that attackers are employing methods such as obfuscation and install scripts to bypass traditional security measures. This report provides an overview of the identified threats and the techniques observed, reinforcing the importance of robust detection and security strategies in software environments.
FortiGuard Labs' analysis has identified a range of techniques used by attackers to compromise systems, including both well-known and less common methods:
While not necessarily malicious on its own, the majority of detected malicious packages (1,082) exhibit a low file count, often containing minimal code designed to evade detection while enabling exploits such as data theft, unauthorized access, or system compromise. Common indicators include command overwrites, where attackers modify installation commands to introduce malicious code or bypass security, suspicious behavior flagged by machine learning systems due to anomalous patterns, and obfuscation techniques like base64 encoding or encryption to conceal harmful payloads. These tactics combine to create lightweight, evasive threats that are challenging to detect but capable of significant damage.
While not all install scripts are malicious, threat actors often use them to silently deploy harmful code during installation, sometimes bypassing security checks. These scripts can modify the standard installation process to execute harmful actions without the user’s knowledge. For example, an install script may include HTTP POST requests for data exfiltration, suspicious API calls like https.get or https.request to communicate with external servers, and hardcoded URLs, such as Discord webhooks, for receiving stolen data. These actions suggest the script is setting up a backdoor or preparing the system for further malicious activities, highlighting the need for careful scrutiny of installation scripts to detect and mitigate potential threats.
Packages lacking a repository URL raise concerns about their legitimacy and transparency, as they often lack clear provenance or accountability, which is typical of malicious software. Without a public repository, verifying the source, tracking development, or assessing potential security issues is difficult. Malicious actors may avoid repositories to evade scrutiny and prevent code inspection, reducing the chances of detection. A missing repository URL, combined with other red flags like suspicious APIs or URLs, increases the likelihood that the package is designed for exploitation, data theft, or other malicious activities.
Suspicious URLs are a key indicator of potentially malicious packages, as they are often used to download additional payloads or establish communication with command-and-control (C&C) servers, giving attackers control over infected systems. These URLs may appear legitimate, disguising their harmful intent to evade detection. Common tactics include using shortened or dynamic URLs, hosting malicious content on trusted platforms, or disguising payloads as safe files. In 974 packages, such URLs are linked to the risk of data exfiltration, further malware downloads, and other malicious actions. It is crucial to scrutinize and monitor external URLs in package dependencies to prevent exploitation.
While essential for software functionality, APIs can be weaponized by malicious actors to perform harmful activities. In 681 detected cases, suspicious APIs like https.get and https.request were used to exfiltrate data, enable command-and-control (C&C) communication, or obscure malicious intent. These APIs may send sensitive information to remote servers or allow remote control of compromised systems. In one example, the use of https.get and https.request in index.js suggests data exfiltration or communication with external sources, a common tactic in malware. Combined with other red flags, such as suspicious URLs, these API calls indicate the potential for malicious or compromised projects.
Recently discovered malicious Python packages AffineQuant-99.6, amzn-aws-glue-ml-libs-python-6.1.5, and amzn-awsglue-6.1.4, exploit the setup.py file to silently collect system information, including the MAC address, hostname, username, and current directory, and sends this data to remote servers controlled by the attacker. The script uses system commands (getmac for Windows, ifconfig for Linux/macOS) to retrieve the MAC address, base64-encoded it, and send it to hidden URLs. A custom installation process using setuptools to override the installation routine ensures the malicious payload runs after the package is installed. This type of attack has been identified in multiple packages and highlights the risk developers face when installing packages from untrusted sources—potentially leading to stolen credentials, system data, and further attacks. To protect themselves, developers should install packages only from trusted sources, review package content before installation, use virtual environments to isolate installs, scan for vulnerabilities with security tools, and keep dependencies up to date.
A malicious script (seller-admin-common_6.5.8, seller-rn-mng-lib_6.5.8. ) is designed to secretly collect sensitive information from a victim’s machine and send it to an external server via a Discord webhook. Upon execution, the script retrieves the internal IP address of the victim’s machine and fetches the external IP address by making an HTTPS request to an online API. It also gathers system details, such as the hostname, username, DNS servers, home directory, and application information. This collected data is then bundled into a JSON object and sent to the attacker’s server, where it can be accessed for further malicious purposes. The combination of internal and external IP addresses, DNS settings, and user details makes the attack highly invasive, enabling attackers to track the victim’s machine and potentially exploit the information for further attacks. Using a Discord webhook adds a layer of stealth, allowing the attacker to collect the stolen data without raising suspicion, making this type of data harvesting ideal for gathering intelligence or executing more targeted cyberattacks.
A recently identified malicious JavaScript code found in the package xeno.dll_1.0.2 utilizes obfuscation techniques to disguise its true intentions. Upon installation, it logs keystrokes to capture private information such as passwords and credit card details, which are then encrypted and sent to a remote server controlled by the attacker. Additionally, the script installs a backdoor that provides remote access with elevated privileges, giving the attacker full control of the system. The backdoor also collects system-specific data, such as the operating system version, installed applications, and network configuration, and sends it to the attacker’s server for future exploitation.
Disguised as a legitimate service, the attacker’s server makes the malicious activity harder to detect. This stealthy combination of keylogging and remote access allows the attacker to steal sensitive data and conduct further attacks, posing a significant threat to the victim's privacy and system integrity.
The data from FortiGuard Labs’ analysis reveals a diverse array of malicious packages, showcasing the wide range of tactics used by cybercriminals. From simple low-file-count packages to complex, multi-layered attacks that involve combining files, network code, and process execution, attackers are leveraging increasingly sophisticated methods to breach systems.
As cybersecurity threats evolve, it’s crucial for organizations and individuals to stay informed about the latest threats. Proactive defense measures such as regular system updates, advanced threat detection, and user education on identifying suspicious activity are essential in mitigating these growing risks.
Stay vigilant and protect your systems from these emerging threats.
FortiGuard AntiVirus detects the malicious files identified in this report as:
AffineQuant-99.6/main.py : Python/Agent.EBC2!tr
affineQuant-99.6: Python/Agent.EBC2!tr
amzn-aws-glue-ml-libs-python-6.1.5/setup.py: Python/Agent.D31D!tr
amzn-aws-glue-ml-libs-python-6.1.5:Python/Agent.D31D!tr
amzn-awsglue-6.1.4/setup.py: Python/Agent.8960!tr
Amzn-awsglue-6.1.4: Python/Agent.8960!tr
seller-admin-common_6.5.8/index.js: JS/Agent.409D!tr
Seller-admin-common_6.5.8: JS/Agent.409D!tr
seller-rn-mng-lib_6.5.8/index.js: JS/Agent.409D!tr
Seller-rn-mng-lib_6.5.8: JS/Agent.409D!tr
xeno.dll_1.0.2/index.js: JS/Agent.B3EF!tr
Xeno.dll_1.0.2: JS/Agent.B3EF!tr
The FortiGuard AntiVirus service is supported by FortiGate, FortiMail, FortiClient, and FortiEDR. Customers running current AntiVirus updates are protected.
The FortiGuard Web Filtering Service detects and blocks the download URLs cited in this report as Malicious.
The FortiDevSec SCA scanner detects malicious packages, including those cited in this report that may operate as dependencies in users' projects in test phases, and prevents those dependencies from being introduced into users' products.
If you believe these or any other cybersecurity threat has impacted your organization, please contact our Global FortiGuard Incident Response Team.
Package/file name |
Sha256 |
Detection |
affineQuant-99.6/main.py |
a7ba9a1eef84ae8dad8ed328c41fe4346df402a003ff7cef5e7cbd592c29f4de |
Python/Agent.EBC2!tr |
affineQuant-99.6 |
8fe3eee65782c61111354a0a2a58da04901c7b416d3b7634aa605e1939dde531 |
Python/Agent.EBC2!tr |
amzn-aws-glue-ml-libs-python-6.1.5/setup.py |
2420fa98a183da4153e4de00e401efa19c62fe9ed631d980315b0b719221aec4 |
Python/Agent.D31D!tr |
amzn-aws-glue-ml-libs-python-6.1.5 |
05e9226714f29fbe526820d35c8011f86297444ec581d16d60b38bb55b20fa91 |
Python/Agent.D31D!tr |
amzn-awsglue-6.1.4/setup.py |
ba0ac1985fb931110899402ce44f11c5d75161cb69ff3d0e9357000ef631a2e1 |
Python/Agent.8960!tr |
amzn-awsglue-6.1.4 |
351bd6e977884f050bdb348239cfd20e0cc9b9a7a6aa3b3aa21e3bed0b072afe |
Python/Agent.8960!tr |
seller-admin-common_6.5.8/index.js |
3fe14fc83121fdc05efdcc0c1c4d532ca501644a952399b27a6e1bdd6cfed2b7 |
JS/Agent.409D!tr |
seller-admin-common_6.5.8 |
3fe14fc83121fdc05efdcc0c1c4d532ca501644a952399b27a6e1bdd6cfed2b7 |
JS/Agent.409D!tr |
seller-rn-mng-lib_6.5.8/index.js |
920da0917dbf7ead5531406b324de83656c90a39176f5377c123fe36d257668b |
JS/Agent.409D!tr |
seller-rn-mng-lib_6.5.8 |
673db52c28aac71f8cf80ee1718b8ea98e1f8e0b3f1293da15fd26c4e6343927 |
JS/Agent.409D!tr |
xeno.dll_1.0.2/index.js |
6a68848e118ec280d01a1dc989e8d67ca10b3f14aab98eb87a23b340c863fdcf |
JS/Agent.B3EF!tr |
xeno.dll_1.0.2 |
973a87cc0baa17c53a17467e188d82241458f7ff1e70e920014eaf2bacbe3a07 |
JS/Agent.B3EF!tr |