9 verified findings from 1 run · the settled record for this UTC day, in the classic brief order.
Criticality
Kind
Topic
Region
TL;DR · the day in one read
01Elastic Security Labs: a Brazilian banking-fraud toolkit defeats Chromium's extension-integrity check by extracting the browser's own signing keys from memory. Elastic Security Labs tracked REF9334, a Brazilian-banking-focused operation active across seven campaigns since May 2025, whose KREMLIN toolkit recovers Chromium's App-Bound encryption key directly from browser process memory, uses it to forge the HMACs and hashes Chromium's Secure Preferences integrity mechanism requires, and manually installs a malicious extension into the browser profile exactly as if a user had approved it through the Chrome Web Store, with no user interaction and no visible warning. The toolkit resolves its payload configuration through an Ethereum smart contract and abuses a legitimate SentinelOne binary for DLL sideloading. →
02Huntress: a fake Lenovo driver installs a working, private certificate authority into a victim's own trust store, able to fake 'clean' VirusTotal lookups. A Huntress researcher was targeted post-conference by a fake CoinDesk executive persona over a legitimate Google Doc carrying a zero-click reconnaissance sidebar, in a chain that abused three code-signing certificates. The most novel component is a payload that hollows MsBuild.exe, generates its own self-signed certificate authority impersonating Google Trust Services, installs it into the system root store, and adds a hosts-file entry plus a firewall rule so a local proxy can answer the machine's VirusTotal lookups over fully validating HTTPS with fabricated results. The CA's private key sits on disk, so a trusted certificate can be minted for any domain. →
03Huntress lays out why no single VSS event, on its own, ever justifies an alert. Huntress documents three classes of Volume Shadow Copy Service abuse it detects (pre-ransomware shadow-copy deletion, quiet NTDS.dit theft via a purpose-created shadow copy, and shadow-copy size/configuration manipulation) and the event-correlation logic needed to separate each from routine RMM and backup-agent VSS housekeeping, which performs the identical raw API calls constantly. A worked incident shows PsExec, vssadmin create shadow and an attempted cover-up correlating into a single escalation no individual step would justify alone. →
AFPA, France's national public adult vocational-training agency, confirmed a potential extraction of identity, address and possibly phone-number data on up to 1.7 million people after the handles xMetah and Cybernox claimed 971,420 and 1,732,811 records a day apart in mid-September 2026, figures FrenchBreaches warns must not simply be summed (Cyberattaque.org, 2026-09-19 · Clubic, 2026-09-20 · FrenchBreaches, 2026-09-19). AFPA says its first investigations found the potential extraction linked to a flaw in a third-party-hosted accommodation-management tool outside its own information system, a link it words cautiously, and it has neither confirmed the insecure direct object reference Cybernox describes nor established whether both datasets come from one environment (Clubic, 2026-09-20 · Cyberattaque.org, 2026-09-19). It is relevant as a European public agency exposed through a vendor-hosted administrative tool.
According to AFPA, the hacked application contained people's identity and address, and possibly their phone number, but "a priori" no banking data or Social Security number. (translated from French)
This tool 'is hosted by a third-party vendor and is external to our information system, so there was, a priori, no impact on AFPA's own services and information systems.' (translated from French)
Clubic
AFPA now confirms that a data extraction potentially took place and states that the incident could affect up to 1.7 million people. (translated from French)
AFPA's statement is hedged: its first investigations found a "potential" data extraction that it links to a flaw in a vendor-hosted accommodation-management tool, and it has not established whether the two claimed datasets were taken from a single environment (Clubic, 2026-09-20). The entry previously said AFPA had traced the extraction to that flaw and that both claims pointed to it.
Elastic Security Labs has tracked REF9334, a Brazilian-banking-focused operation, across seven campaigns since May 2025 (Elastic Security Labs, 2026-09-14). Its toolkit, KREMLIN, a name the malware's own author chose; Elastic states nothing about the operation is actually Russian: Portuguese-language lures and code comments, and Ethereum transaction timestamps its executive summary describes as clustering during São Paulo working hours, its technical analysis separately finds only a small minority of transactions falling in late-night hours, none extending into early morning, and reasons this is more consistent with operators working late than waking before dawn, corroborating rather than contradicting the same São Paulo conclusion, instead point to Brazil. KREMLIN's infection chain begins with an obfuscated, multi-stage JavaScript loader (trivially de-obfuscated by an LLM, per Elastic) that checks sandbox indicators such as desktop file count and WMI process count before decoding a second stage via certutil and downloading Node.js to run it. That second stage installs persistence disguised as a scheduled task named "MicrosoftNodeRuntimeUpdater," then queries an Ethereum smart contract for three configuration parameters: a main module URL, a .NET RunPE injector hidden as Base64-encoded JPEG data, and a legitimate SentinelOne SentinelMemoryScanner.exe binary abused for DLL sideloading, a technique Symantec first documented in a separate Seedworm intrusion. The main C++ installer resolves NTDLL syscall numbers indirectly, by correlating export names against the .pdata exception-directory RUNTIME_FUNCTION table rather than parsing Nt*/Zw* stubs directly, and runs extensive sandbox and analysis-tool checks (process-name blacklists, a hardcoded username blacklist, CPU/RAM thresholds, a deliberately-unregistered-domain network canary, and VMware/VirtualBox artifact checks) before proceeding.
The extension-installation step is the toolkit's most technically striking element, documented in detail by Synacktiv's "Phantom Extension" research and rarely seen deployed in the wild: KREMLIN waits for the browser to close, or for the user to idle for two minutes and then force-terminates it if still open, then relaunches the browser under a debugger specifically to catch the LOAD_DLL_DEBUG_EVENT for chrome.dll or msedge.dll, scans that module's memory for a string cross-reference to OSCrypt.AppBoundProvider.Decrypt.ResultCode to locate and read the in-memory App-Bound encryption key via ReadProcessMemory, and separately recovers the legacy DPAPI-protected OSCrypt key from Local State. Using the recovered keys plus a seed extracted from resources.pak, a sibling file in the Chrome installation directory, KREMLIN regenerates the legacy HMAC and the newer OSCrypt-encrypted SHA-256 hash that Chromium's Secure Preferences integrity mechanism requires, then manually copies the extension's files into the browser profile and edits Secure Preferences directly (enabling developer mode, registering the extension under extensions.settings.<id>, and writing the forged protection.macs values) installing the extension exactly as if a user had approved it through the Web Store, with no user interaction and no visible warning. Elastic disrupted over 1,500 infections by registering the operation's network-canary kill-switch domain.
Triage: extensions are routinely installed and removed through the Web Store's own mechanism, so an extension's mere presence is not the signal; the discriminator is provenance: an extension entry in Secure Preferences with no matching Web Store installation event, or extensions.settings entries whose protection.macs values were written outside a normal browser-update or user-installation flow.
Malicious browser extensions bypass Chromium integrity mechanisms by manipulating Secure Preferences and regenerating required HMACs and App-Bound encrypted hashes.
KREMLIN uses a documented technique rarely observed in malware: it manually copies the extension into the browser's profile directories and registers it in the Secure Preferences file.
Threat Command temporarily disrupted over 1,500 (and counting) infections in this reported campaign by registering the network canary (kill switch) domain
A Huntress researcher was targeted after DEFCON by an X account impersonating a CoinDesk marketing executive, who sent a legitimate Google Doc carrying a custom Google Apps Script sidebar (Huntress Labs, 2026-08-19 · Huntress Labs, 2026-09-15). The sidebar runs client-side with no OAuth consent prompt, and merely opening the document while signed in, with no click or download, was enough for it to report the viewer's public IP address, geolocation, browser and whether a MetaMask, Phantom, Tron or Solana wallet extension was installed, beaconing every action through the Telegram API (Huntress Labs, 2026-09-15). A fake "decryption failure" overlay then delivered OS-specific ClickFix instructions, each offering a choice between pasting a command or downloading a file manually (Huntress Labs, 2026-09-15). On macOS, the pasted command launched a piped zsh chain that never delivered a payload in Huntress's testing, because the fetched URL looped through redirects. The manual download led to a disk image bundling its own Gatekeeper-bypass instructions and password prompt, which delivered a confirmed AMOS-family stealer harvesting browser, crypto-wallet, Telegram, Apple Notes, cookie and login-keychain data, plus a LaunchDaemon-installed backdoor capable of arbitrary remote commands and of turning the host into a SOCKS5 proxy (Huntress Labs, 2026-08-19 · Huntress Labs, 2026-09-15). On Windows, one path launched an encoded PowerShell command that fetched a loader, which pulled down three further payloads that were offline by the time Huntress looked but already on VirusTotal (Huntress Labs, 2026-09-15). The other told the victim to update a "Google API Connector", an application signed with a certificate belonging to a small Norwegian company (stolen or fraudulently issued) and deployed through Microsoft's ClickOnce feature, the first of three abused code-signing certificates in the campaign (Huntress Labs, 2026-08-19 · Huntress Labs, 2026-09-15).
Contradiction: Huntress's two pieces assign the Windows paths differently. The 2026-08-19 write-up says the update button launches the ClickOnce installer and the manual path shows ClickFix-style instructions with an encrypted PowerShell script (Huntress Labs, 2026-08-19). The 2026-09-15 recap assigns ClickOnce to the manual download and the encoded PowerShell command to the ClickFix lure (Huntress Labs, 2026-09-15).
In a later message, the same actor sent a second document link, this time via DropBox DocSend, that routed macOS victims to another host serving the same AMOS payload and told Windows victims to install a DocSend-branded desktop installer signed with a second stolen certificate, from Discord Inc., whose signature did not validate (Huntress Labs, 2026-08-19). The installer's DocSend flow was a non-functional distraction: a five-screen fake onboarding carousel using genuine Dropbox marketing pages that installed nothing. Huntress reconstructed the sample's command-and-control registration protocol from its bundled @sentry/electron module and queried the live infrastructure of a sibling campaign directly (Huntress Labs, 2026-09-15), recovering three payload archives this way: NetSupport Manager, a TLS-intercepting local proxy and a Ledger-wallet implant. Each was downloaded encrypted, launched detached and hidden, then relaunched twenty seconds later with an elevation request. The first, NetSupport Manager, is a legitimate remote-monitoring tool reconfigured to redirect data to attacker infrastructure and disable its own chat, connect and disconnect alerts, and it carries persistence for all three payloads: a kernel-mode keyboard-filter driver, a Windows service, a Winlogon modification and its own registered COM object (Huntress Labs, 2026-08-19). The third, the Ledger-wallet implant, reuses the second payload's disguise and technique.
The most novel component is that second payload, the TLS-intercepting local proxy. Disguised as a Lenovo driver package and signed with a genuine stolen Lenovo certificate, the third abused code-signing certificate, it hollows MsBuild.exe, generates its own self-signed certificate authority presenting itself as "Google Trust Services CN=WR3", issues a www.virustotal.com leaf certificate from it, installs the CA into the system root store, adds a hosts-file entry pointing www.virustotal.com at the local machine and creates a local-proxy firewall rule (Huntress Labs, 2026-08-19). VirusTotal lookups from the host then reach a local proxy that answers over fully validating HTTPS and can block them or return fabricated results. VirusTotal was the only target Huntress observed, but the CA's private key is written to disk, so a trusted certificate can be minted for any domain at will (Huntress Labs, 2026-08-19). A Huntress researcher named crypto-wallet domains and antivirus update signals as targets the operator could intercept the same way (Huntress Labs, 2026-09-15). Because the certificate authority is regenerated per infected host, blocking a specific certificate thumbprint achieves nothing. The interception process dies at reboot, but the installed root CA, the hosts-file entry and the firewall rule persist (Huntress Labs, 2026-09-15).
Triage: a locally-installed root CA is not automatically malicious, since some legitimate enterprise MDM and TLS-inspection proxies do this deliberately. The discriminator is provenance: a root CA your own PKI or MDM inventory does not recognize as provisioned by it, especially one impersonating a well-known public CA's name, is the signal; one your MDM issued is not.
VIEW is the one worth sitting with. Opening the document while signed in, clicking nothing, and downloading nothing, was enough to report the viewer's IP address, location, browser, and whether they were running a crypto wallet extension.
It hollowed MsBuild.exe and imported only kernel32, ultimately establishing what Jon called "purpose-built and working public key infrastructure on your machine."
Because the CA was regenerated per host, blocking a single certificate thumbprint does nothing.
Huntress published its fuller technical write-up on 2026-08-19 and the webinar recap on 2026-09-15, an interval of 27 days rather than the 33 days first stated (Huntress Labs, 2026-08-19; Huntress Labs, 2026-09-15). Both publication dates, and every technical claim resting on them, are unchanged.
Huntress describes the rogue certificate authority's use only against VirusTotal lookups, as a capability: the hosts-file entry redirects www.virustotal.com to the local proxy (Huntress Labs, 2026-08-19). Because the authority's private key sits on disk, a trusted certificate can be minted for any domain, and crypto-wallet sites and antivirus update checks are what a Huntress researcher said the operator could intercept, not observed targets (Huntress Labs, 2026-08-19 · Huntress Labs, 2026-09-15). Huntress's two pieces also assign the ClickOnce installer and the PowerShell command to different Windows paths (Huntress Labs, 2026-08-19 · Huntress Labs, 2026-09-15). The lure was a legitimate Google Doc carrying the attacker's custom Apps Script sidebar, not a compromised document (Huntress Labs, 2026-09-15), and the certificate authority is generated fresh on every host (Huntress Labs, 2026-08-19).
SentinelLabs hunted its telemetry for the FLATROOF (also known as macOS.Gaslight) and ROOFDECK macOS backdoors first disclosed in April 2026's USD 292 million LayerZero/KelpDAO cryptocurrency theft, and found an unrelated victim carrying the same implants: a small India-based IT-services provider with no cryptocurrency exposure, compromised through a single Apple Silicon MacBook belonging to a DevOps engineer (SentinelOne SentinelLabs, 2026-09-18). The lure follows DPRK's established "Contagious Interview" pattern: fake job-interview GitHub repositories themed as infrastructure-engineering coding challenges each carry a weaponized .terraform.lock.hcl pointing to a typosquatted, attacker-controlled Terraform provider registry impersonating HashiCorp's own naming. Because Terraform treats the lockfile's declared provider source as authoritative, running terraform init against the poisoned lockfile causes Terraform itself to download and execute the attacker's provider module in place of the genuine HashiCorp one. SentinelLabs cannot prove how this victim's backdoors were delivered: both were on disk by March 18, and the victim cloned a lure repository only on April 13 (SentinelOne SentinelLabs, 2026-09-18).
On the victim host, both backdoors sat dormant on disk from March 18 to March 29, 2026, then launched the moment the developer opened a specific Cursor IDE workspace: the Cursor process itself spawned both implants directly, which began beaconing to their command-and-control servers within two seconds, before FLATROOF stripped the macOS quarantine attribute from ROOFDECK and set its executable bit moments later, a Gatekeeper bypass. FLATROOF is a Rust ARM64 backdoor supporting shell, kill, upload and stop commands, paired with a Python data-harvesting module that pulls Chrome/Brave/Firefox/Safari data, Terminal history, installed-application lists, ps aux output, system_profiler output and a raw copy of login.keychain-db, exfiltrated via a hardcoded Telegram bot. ROOFDECK is the more capable second-stage implant: on first run it queries a public Nostr relay-status API plus a hardcoded relay list, searches Nostr relays for an operator profile matching a configured public key, and reads that profile's "website" field as its live command-and-control URL, a decentralized dead-drop resolver that survives takedown of any single C2 domain. A third stage later replaced both original implants and beaconed intermittently to a separate C2 until 2026-06-01, the last beacon in SentinelLabs' collected telemetry (SentinelOne SentinelLabs, 2026-09-18).
Triage: developers legitimately run terraform init against new or unfamiliar repositories constantly, so the command itself is not the signal: the discriminator is the lockfile's declared provider source pointing to a domain that is not registry.terraform.io or a known private registry the organization operates.
Unlike the previous high-profile victim, this target was a much smaller organization in the IT services industry.
When the victim runs terraform init with the weaponized lockfile in place, Terraform treats the custom provider as the source of truth, resulting in Terraform downloading and executing the malicious provider modules.
When found, it reads the website field of the profile and uses that as its C2 URL.
SentinelLabs cannot prove how this victim's backdoors were delivered: both were on disk by March 18 and ran from March 29, while the victim cloned a lure repository only on April 13 (SentinelOne SentinelLabs, 2026-09-18). The weaponized Terraform lockfile is the campaign's documented delivery method for its lure repositories, not this victim's proven initial access (SentinelOne SentinelLabs, 2026-09-18).
Zscaler ThreatLabz reports a July 2026 campaign that it suspects is TraderTraitor, citing substantial overlap in tactics and targeting but no code, infrastructure or cryptographic links sufficient for attribution with high confidence, in which a Go-built Terraform provider that poses as an AWS provider executes malicious code the moment Terraform loads the plugin: it writes a run-once marker in the temporary directory, downloads a Bash loader from a lookalike of a HashiCorp domain, starts it through a detached sh -c child and keeps behaving like a normal provider (Zscaler ThreatLabz, 2026-10-08). The loader runs on macOS, Linux and Windows with a Unix-like shell, picks a payload by operating system and CPU architecture and recovers an encrypted executable appended after a marker in a file named like a web font; on macOS it removes the quarantine attribute and applies an ad-hoc signature (Zscaler ThreatLabz, 2026-10-08). The delivered FLATROOF is a Rust backdoor with Telegram Bot API, GitHub-polling and HTTP-webhook command channels, persistence as a service on Linux, a zlogout entry on macOS and a registry entry on Windows, and Python stealers for browser data, cookies, keychain or Credential Manager entries, shell history and wallet-extension data; it drops ROOFDECK, which finds its server through a local configuration, then an RSA-signed Pastebin dead drop, with Nostr profile metadata only as the fallback, so its order of resolvers differs from the Nostr-first behaviour SentinelLabs describes above (Zscaler ThreatLabz, 2026-10-08). Zscaler does not know how the provider reached the victim, and notes that SentinelLabs independently reported related activity with weaponized Terraform projects (Zscaler ThreatLabz, 2026-10-08).
The telemetry that follows from the provider path is the Terraform provider plugin process making an HTTPS download from a host that is not the Terraform registry, writing a script to the temporary directory and starting it through sh -c; Zscaler advises restricting untrusted Terraform providers, verifying provider checksums and monitoring unexpected process activity (Zscaler ThreatLabz, 2026-10-08).
Kaspersky's Global Emergency Response Team documents a NightEagle (also tracked as APT-Q-95) campaign, active since at least 2023 and previously focused on Asian targets, now confirmed against organizations in Russia (Kaspersky Securelist, 2026-09-16). In most incidents, initial access used compromised VPN credentials, with connections originating from IP addresses in the Russian segment linked to Cloudflare WARP tunnels, as well as from European VPS ranges. On Microsoft Exchange servers the group deploys the GhostContainer backdoor, a .NET assembly that incorporates the Neo-reGeorg tunnel, an exploit component for CVE-2020-0688, and the GhostWebShell class from the ysoserial utility; Kaspersky could not determine how the backdoor reached the servers but assesses with high confidence that delivery reused a technique it had already documented: extracting Exchange's own ASP.NET machine keys, then overwriting the VIEWSTATE framework parameter and injecting a payload into it to launch the backdoor in memory. Once running, the backdoor evades detection by patching addresses in amsi.dll and ntdll.dll, blinding both the Antimalware Scan Interface and Windows Event Logging.
For network access, NightEagle abuses Microsoft's own legitimate dev-tunnels feature (*.devtunnels.ms), a service meant to publish local developer web services to the internet, to expose port 3389 (RDP) outward on the compromised host, then layers rdp2tcp, a public RDP-virtual-channel TCP tunneling tool, inside that RDP session, a combination Kaspersky states lets the group maintain network access using legitimate services, without opening any additional suspicious port. Payload archives staged on GitHub contain files named to mimic legitimate Adobe, 1C and TrueConf software, unrelated to the archive names (Kaspersky Securelist, 2026-09-16). For lateral movement and privilege escalation, NightEagle exploited CVE-2019-0708 (BlueKeep) in one incident to create and elevate a local account into the Administrators and Remote Desktop Users groups, used Impacket's atexec to set scheduled netsh portproxy rules for internal port forwarding, and requested Kerberos tickets carrying a non-standard Forwardable/Proxiable/Renewable flag combination. After obtaining an account with sufficient privileges, the group attempted DCSync, replicating the Domain-Password object from Active Directory by impersonating the domain controller (Kaspersky Securelist, 2026-09-16).
Triage: Microsoft dev-tunnels traffic to *.devtunnels.ms is legitimate on developer workstations running Visual Studio or the Dev Tunnels CLI; the discriminator is the host class: a production server, domain controller, or non-developer endpoint establishing an outbound dev-tunnels connection has no legitimate reason to do so.
We have now identified attacks by the group targeting businesses in Russia.
This is a legitimate Microsoft mechanism that allows local web services to be published for internet access on ..devtunnels.ms domains. The attackers used this tunneling capability to expose port 3389 (RDP) on the compromised system.
In one incident, they exploited a well-known RDP implementation vulnerability, CVE-2019-0708 (BlueKeep). They used the vulnerable mechanism to create a local account on the system and add it to the Administrators and Remote Desktop Users groups.
The attackers also requested Kerberos tickets with a non-standard combination of flags (Forwardable, Proxiable, Renewable) and attempted to replicate the Domain-Password object from the Active Directory database to impersonate the domain controller (a technique known as DCSync) after obtaining an account with sufficient privileges.
Kaspersky reports that NightEagle attempted DCSync, replicating the Domain-Password object after it obtained a sufficiently privileged account, and exploited BlueKeep in one incident to create a local administrator (Kaspersky Securelist, 2026-09-16). It does not describe BlueKeep leading to the DCSync attempt. For CVE-2020-0688 it says only that the GhostContainer backdoor carries an exploit for it, and it could not determine how the backdoor was delivered (Kaspersky Securelist, 2026-09-16).
Investigating a separate, Qilin-affected environment, Cisco Talos found three Python post-exploitation scripts in the operator's own staging directory that it assesses with medium-to-high confidence were generated with AI assistance rather than hand-written: deadman.py, a time-triggered wiper deployed via Group Policy Object; veeam_kill.py, which stops, disables and destroys Veeam backup infrastructure; and deploy_locker.py, a mass-deployment launcher for the ransomware payload itself (Cisco Talos, 2026-09-17). Talos's basis for the AI-generation call is stylistic rather than a direct admission or watermark: veeam_kill.py's main() function divides execution into four numbered stages, each carrying a comment and a progress-log line held to a uniform level of detail, and deadman.py's do_gpo function shows the same evenly-commented, staged structure, a pattern Talos found consistent across the scripts and consistent with specification-style docstrings rather than typical hand-written incident-response or red-team tooling. The operator's own bash history additionally references a local tool named llm_chatbot, which Talos cites as corroborating evidence for AI involvement in the scripting workflow.
Talos identified several characteristics in Python scripts found in an open directory used by Qilin that suggest, with medium-to-high confidence, that scripts may have been generated using AI
Figure 17 shows an excerpt from "veeam_kill.py", a Python script designed to stop, disable, and destroy Veeam backups. As shown in Figures 17 and 18, the main() function clearly divides the overall process into four stages, labeled "Step 1" through "Step 4," with comments and progress logs provided at a consistent level of detail for each step.
Cisco Talos recovered an exposed open directory believed to belong to an operator associated with the ransomware-as-a-service brand The Gentlemen, and reconstructed a six-phase attack chain from the directory's own shell command history (Cisco Talos, 2026-09-17). The operator first built a pivot platform using Chisel, Ligolo-ng and SSH tunnels, then ran nmap and masscan against externally exposed hosts and internal services once inside, then used NetExec to enumerate SMB shares, host information, LDAP and computer information in Active Directory; Talos assesses the operator may also have used RustHound/BloodHound-related tools (a Rust BloodHound collector) to collect domain users, groups, computers, administrative privileges and trust relationships for attack-path analysis. For initial footholds against public-facing applications, the actor tried to exploit CVE-2025-24799 with a PoC and sqlmap to pull user information from the database, an unauthenticated SQL injection in GLPI's inventory endpoint fixed in GLPI 10.0.18 (GLPI, 2025-03-18), and separately downloaded and ran a cPanel/WHM authentication-bypass PoC. Toward the domain controller, the command history shows attempted exploitation of CVE-2020-1472 (Zerologon) and the MS17-010 vulnerabilities alongside NTLM-relay tooling via Responder. Separately, for lateral movement once inside the network, the operator used NetExec and Impacket to attempt authentication against SMB, LDAP, RDP and WinRM across multiple hosts.
The credential-theft step is the chain's most distinctive detail: rather than dumping credentials from a live, monitored domain controller, the operator mounted a backup share over CIFS, installed libguestfs-tools, qemu-utils and nbd-client to inspect the Windows filesystem inside VHDX backup images, copied out ntds.dit, SAM and SYSTEM, and ran Impacket's secretsdump.py offline against the extracted files (Cisco Talos, 2026-09-17). The VHDX backup files themselves, not just the small credential-dump output, were compressed with zstd, split into 256MiB chunks and uploaded concurrently (up to 16 files at a time) to Wasabi cloud storage via rclone, with the operator visibly reconfiguring transfer settings mid-exfiltration to improve speed and reliability. Command and control ran on the open-source AdaptixC2 post-exploitation framework, and Russian-language script comments plus Cyrillic-keymap mistyping in the operator's own bash history (whoami, ls, ip a, clear, exit typed on a Russian keyboard layout) indicate to Talos the possibility that a Russian-speaking individual was involved. Talos notes that The Gentlemen is suspected to be led by individuals based in Russia, which it says further supports the connection to the group (Cisco Talos, 2026-09-17).
Triage: legitimate backup-verification and disaster-recovery testing also mount VHDX images and inspect their contents, so the mount event alone is not the signal, the discriminator is the immediate follow-on: secretsdump.py or an equivalent credential-extraction tool run against files copied from that mount, on a host or account that has no operational reason to be doing backup verification.
Talos identified open directory infrastructure believed to have been used by a threat actor associated with The Gentlemen. During our investigation, we observed numerous tools used to support ransomware operations.
In Phase 6, involving information collection and exfiltration, the threat actor mounted a backup share via CIFS at /mnt/Backup and inspected the Windows file system within VHDX backups. The command history records the installation of libguestfs-tools, qemu-utils, and nbd-client, the creation of directories such as /mnt/vhdx, and the copying of ntds.dit, SAM, and SYSTEM. The actor then used Impacket's secretsdump.py to extract credentials and password hashes from the collected ntds.dit and SAM files, saving the results as "ntds.txt" and "SAM.txt".
Talos describes the actor's use of the GLPI SQL injection CVE-2025-24799 as an attempt, with a PoC and sqlmap to retrieve user information from the database, and reports no outcome (Cisco Talos, 2026-09-17), so the flaw is not recorded as exploited. GLPI fixed it in 10.0.18 (GLPI, 2025-03-18). Talos presents the Russian-language traces as indicating the possibility of a Russian-speaking operator, and the group's leadership in Russia as suspected rather than established (Cisco Talos, 2026-09-17).
Huntress lays out three distinct classes of Volume Shadow Copy Service (VSS) abuse it detects, and the correlation logic each requires to separate it from benign RMM- and backup-agent housekeeping that performs the identical raw create/delete API calls constantly (Huntress Labs, 2026-09-14). The first and most familiar class, MITRE ATT&CK's Inhibit System Recovery, is pre-ransomware shadow-copy deletion, most commonly via vssadmin.exe but achievable through several other services and binaries, so a detection that anchors only on the vssadmin.exe process image misses variants. The second, less commonly discussed class is credential access by proxy: rather than running credential-dumping tools live against a monitored host, an attacker creates a shadow copy specifically in order to pull the NTDS.dit Active Directory database out of the static snapshot, a materially quieter path than direct extraction. The third class is shadow-copy size or configuration manipulation as ancillary tradecraft.
Huntress's own detection logic fires on the raw VSS event plus its surrounding context rather than the event in isolation: for deletions, it inspects how the deletion occurred, accounting for the non-vssadmin paths; for creations, it looks for pairing with lateral-movement indicators and credential-harvesting commands appearing before or after the VSS event within a correlation window, rather than judging the creation alone. A worked incident illustrates the method: PsExec spawned a SYSTEM-level shell on a domain controller, the operator enumerated active RDP sessions, ran vssadmin create shadow (the NTDS.dit-theft pattern) then, a few minutes later, attempted to delete the shadow copies to cover their tracks, an attempt endpoint antivirus blocked and flagged, while DNS enumeration against at least one additional host appeared in the same window. Huntress states no single step in that sequence would have justified escalating alone; the lateral-movement-then-VSS-creation-then-credential-harvesting-attempt correlation is what does.
Triage: a shadow copy being created or deleted is one of the most common legitimate Windows operations (routine RMM tooling and backup agents do it constantly) so the raw event carries almost no signal by itself. The discriminator is context: lateral-movement activity and credential-harvesting-adjacent commands appearing in the same time window as the VSS event is what separates an attacker's shadow-copy abuse from a backup agent's routine housekeeping.
Rather than running credential-dumping tools directly against a live, monitored system, an attacker can spin up a shadow copy and quietly pull the NTDS.dit file (the Active Directory database) out of it.
PsExec was used to spawn SYSTEM-level command shell processes on a domain controller. From there, the attacker enumerated active Remote Desktop sessions, then ran vssadmin create shadow, a technique commonly used to pull credentials out of the NTDS.dit database without touching it directly. A few minutes later, the attacker tried to cover their tracks by deleting the shadow copies they'd just created; that attempt was blocked and flagged by endpoint antivirus.
An independent researcher, publishing on Detect FYI / Medium and syndicated in full via malware.news, demonstrates on a self-owned SAP NetWeaver AS ABAP 7.52 lab that SAP's Security Audit Log (SAL) carries no event type or field for OS-level "external command" execution launched via transactions SM49/SM69 or over RFC, a structural gap in the log's schema, not a misconfiguration that can be turned on (Detect FYI, 2026-09-20). External commands run through the sapxpg helper process as the <sid>adm OS-owner account, and the researcher found that most Linux-applicable SAP-delivered command definitions accept additional runtime parameters, so the binary actually executed at runtime can differ entirely from the one an administrator defined; demonstrated by using a find-with--exec command definition to run /usr/bin/id instead of its intended target. On the interactive SM49 path, the SAL records only a generic "Transaction SM49 started" event, with no command, binary or parameter data, even with every audit class enabled. On the RFC path, the SAL at best records an "RFC call" event naming only the invoked function module (SXPG_COMMAND_EXECUTE), never the command or its arguments. Only the background-job path (SM36) records the full command and its output, and it does so in the job log rather than the Security Audit Log.
OS-level auditd is the only source that sees the full argument vector on every path, via the sapxpg parent-process chain (SAP work process → sapxpg → target binary), but the researcher flags three practical failure modes: the -a task,never audit rule, which some SUSE/SLES builds ship active and others omit entirely, silently suppresses execve auditing for new tasks; runtime auditctl changes do not survive reboot unless persisted under /etc/audit/rules.d/; and a bare execve rule is noisy unless filtered on a ParentImage ending in sapxpg, since that name matches both the SAP work-process binary and the SAP Host Agent's own sapxpg (the latter running as root). Because the SAL always knows the SAP user but never the command, and auditd always knows the command but only the OS account, the researcher recommends bridging the two by time-correlating the SAL's SAP-user timestamp (or, on the background path, simply reading the self-sufficient job log) against the auditdexecve record within a tight window to reconstruct the full "this SAP user ran this OS command as <sid>adm" statement.
Triage: a sapxpg child process running a benign, expected command is routine SAP operation and not itself a signal. The researcher's recommended discriminator is content-based: a high-severity alert on any sapxpg-child command line carrying injection gadgets (-exec, an interpreter invocation, shell metacharacters) versus a lower-severity baseline rule matching any sapxpg child regardless of content, to establish what normal looks like in a given environment before tuning the higher-severity rule.
The only trace is a generic “Transaction SM49 started.” There is no event for the command, the binary, the parameters, the -exec payload, or the npladm context. A SIEM ingesting this log sees "a user opened SM49" and nothing more.
auditd tells you what ran but not which SAP user triggered it (every SAP-spawned command is uid=<sid>adm), while the SAL knows the SAP user but not the command.
2026-09-21T0410Z-intel· Sonnet 5 · window 24 h · 9 entries published
Verification loop closed at the 8-iteration cap (fail-open). Iteration 8 returned NEEDS_FIXES
(truth: 2, editorial: 1, advisory: 0); all three findings were remediated as recorded above and
tools/check_run.py reconfirmed 49 pass · 1 warn (the run's own runaway-duration telemetry fact,
non-fixable, disclosed above) · 0 fail immediately afterward. Per the loop's cap-with-fail-open rule,
no iteration 9 was spawned; this run publishes on the cap rather than on a confirmed double-CLEAN.
verification_residual_count (3) reflects iteration 8's own truth+editorial sum, not zero, the fixes
above are believed correct but were not re-verified by a fresh cold pass before publish, which is what
publishing on fail-open rather than double-CLEAN means in practice.
Verification & coverage notes
Runaway threshold exceeded (duration_seconds=12313, ~3.4h; check_run.py WARN). Cause: the verification loop ran the full 8-iteration cap, each iteration catching genuine, previously-unnoticed defects, several introduced by the prior iteration's own remediation (the conference-phishing entry's macOS payload-attribution swap, caught in iteration 5 after the document/certificate/payload structure was fixed across iterations 1-3; the Gentlemen entry's NetExec/RustHound scope error, introduced by iteration 6's own hedge-restoration fix and caught by iteration 7). No single iteration stalled past its 30-minute per-role cap; the cumulative wall-clock cost is the number of genuine correction rounds this run's initial composition needed, not a stalled sub-agent. The loop closed on the cap (fail-open) rather than a confirmed double-CLEAN; see the note at the end of the verification.iterations block. This is a run-caused, non-fixable-by-editing telemetry fact (elapsed time already happened) rather than a defect in any published entry; left for the quality audit to acknowledge per the zero-warning-discipline carve-out for a run's own telemetry facts.
Window: Standard class, gap_hours ≈ 15.0 (previous run 2026-09-20T1308Z-audit, started 2026-09-20T13:08:12Z), no catch-up/major-gap disclosure needed. Mechanical KEV sweep (tools/kev_window_diff.py) found zero CISA KEV additions in the window, independently corroborated by S1's own exhaustive sweep.
Coverage-backlog work (Phase 0 step 5b), six research items and one incident resolved. Yesterday's audit (2026-09-20T1308Z-audit) fully researched six PD-11(d) tradecraft items and one confirmed AFPA incident but hit its wall-clock cut before composing them. This run re-verified all seven live (fresh WebFetch of every primary, evidence quotes re-confirmed verbatim) and published them:
2026-09-21/the-gentlemen-open-directory-vhdx-backup-ntds-theft and 2026-09-21/qilin-ai-generated-wiper-locker-scripts-forensic-markers, split from the single Talos backlog row per the item-granularity rule (distinct actor, distinct victim environment within one primary source).
2026-09-21/afpa-third-party-accommodation-tool-data-extraction, this resolved TWO open backlog rows at once: the 2026-09-20-surfaced "AFPA confirmed" row and the 2026-09-16-surfaced row on the two competing xMetah/Cybernox criminal claims were treated as the same underlying event. AFPA's own AFP-quoted statement names "two hackers" claiming data "mercredi et jeudi" (Wednesday/Thursday); the verifier's iteration-1 pass flagged that Wednesday/Thursday falls on 2026-09-16/17, one day later than xMetah's own 2026-09-15 claim date (Cybernox's 2026-09-16 claim does land on the Wednesday). The published entry itself does not assert an exact day-of-week match (it says only that the two claims surfaced "within 24 hours of each other") so this is a same-incident judgment resting on the shared third-party tool, the 24-hour claim spacing and AFPA's own two-hackers framing, not on an exact calendar match; noted here rather than corrected as a published-entry defect, since the entry's own wording already avoids the overclaim.
One further backlog item, an independent researcher's SAP SM49/SM69 Security Audit Log blind-spot write-up surfaced fresh by this run's own S3 sweep (not a carried-forward row), published as 2026-09-21/sap-sm49-sm69-external-command-execution-blind-spot at reduced reliability (Admiralty F, no track record) given its single-blogger provenance, reached only via a syndication mirror after the true primary (detect.fyi) 403'd on every transport.
Verification catches during Phase 4 composition (main-agent deep-read, all fixed before publish):
CVE mislabeling in the Talos primary itself. Talos's tool-inventory paragraph names "exploit code targeting CVE-2025-2479, a SQL injection vulnerability", that CVE resolves on MITRE's CVE API to an unrelated WordPress plugin reflected-XSS flaw. The article's own Phase 3 narrative separately and correctly describes exploiting CVE-2025-24799 (GLPI unauthenticated SQLi, confirmed via the CNA record). Per PD-12 (the per-CVE authority wins over blog prose), the Gentlemen entry cites CVE-2025-24799 only and omits the mislabeled id entirely.
Two revoked ATT&CK ids in sub-agent-proposed mappings, caught against the pinned attack/enterprise-attack.json (v19.2) before publish: T1562.006 (NightEagle's AMSI/Event-Log tampering) → replaced with its survivor T1685; T1574.002 (REF9334/KREMLIN's DLL sideload) → replaced with its survivor T1574.001.
An ellipsis-spliced quote in the VSS-abuse findings (two sentences joined across an omitted middle clause) was caught by literal grep -F verification against the saved primary and replaced with the full, unspliced contiguous quote.
A DCSync id (T1003.006) misapplied to the Gentlemen entry: the Gentlemen chain extracts ntds.dit/SAM offline from a mounted VHDX backup, not via live DCSync (that is NightEagle's technique, correctly mapped there); corrected to T1003.002/T1003.003.
Registry hygiene: actor:jade-sleet's aliases (TraderTraitor, UNC4899, PUKCHONG) added per the SentinelLabs source's own alias statement; actor:cybernox's summary extended to note the AFPA financially-motivated episode alongside its earlier hacktivist framing.
Borderline drops:
borderline-drop: LMU Munich student enrollment-data breach — German state university, no Swiss home-region or primary-sector nexus, no global significance, no named TTP or actor plausibly targeting the profiled constituency; the breach-notification-timeliness angle is a general lesson, not a PD-11 breach-gate (a)-(d) clearance. (S2's finding; genuinely well-sourced but out of scope for this constituency.)
borderline-drop: Swiss Federal Council "Verordnung über die militärische Cyberabwehr" (MCAV) lead — S2 investigated a kleinreport.ch story with a genuinely in-window timestamp, but the linked admin.ch press release 404s and the linked PDF is the original 2019 explanatory report; single Admiralty-C source with unresolved novelty ambiguity, dropped per PD-1/PD-6 rather than risk a fabricated-novelty claim.
borderline-drop: Qilin leak-site claim against Touring Club Suisse (TCS) — bare leak-site listing only, no victim statement, no Admiralty A/B journalism despite a targeted multilingual search; fails PD-6 as it stands. Added as a new Open row on state/coverage_backlog.md (strong, fresh Swiss home-region nexus if corroborated) rather than dropped outright.
Single-source items (all verification: single-source, no national-CERT/victim carve-out applicable; each entry's own sourcing_note carries the detail): 2026-09-21/the-gentlemen-open-directory-vhdx-backup-ntds-theft, 2026-09-21/qilin-ai-generated-wiper-locker-scripts-forensic-markers, 2026-09-21/nighteagle-apt-q-95-ghostcontainer-devtunnels-rdp2tcp-dcsync, 2026-09-21/tradertraitor-terraform-lockfile-nostr-dead-drop, 2026-09-21/huntress-vss-abuse-detection-correlation-ntds-shadow-copy, 2026-09-21/conference-phishing-rogue-root-ca-mitm-persistence, 2026-09-21/ref9334-kremlin-chromium-secure-preferences-hmac-forge, 2026-09-21/sap-sm49-sm69-external-command-execution-blind-spot. 2026-09-21/afpa-third-party-accommodation-tool-data-extraction is multi-source, Clubic's AFP-quoted victim statement plus Cyberattaque.org/FrenchBreaches independently paraphrasing AFPA's own confirmation (not merely relaying the criminals' figures).
Deep-dive: none selected this run. No candidate met deep-dive selection criterion 1 (active in-the-wild exploitation with non-trivial exposure) or 2; several research pieces (Gentlemen, TraderTraitor, the rogue-CA phishing chain, REF9334/KREMLIN) would satisfy criterion 3 on technical depth alone, but none is clearly the single strongest pick over the others, and the closest category fits (supply-chain, apt-campaign) were both used within the prior 7 days per the rotation check, demoted rather than manufactured.
Correction to this run's own iteration-1 note: the notes previously flagged actor:gentlemen-raas-gentlekiller as an apparent unmerged duplicate of actor:thegentlemen. The verifier's iteration-2 pass caught this as wrong: the record already carries merged_into: "actor:thegentlemen", added three weeks earlier (2026-08-31T0411Z-intel); it was correctly tombstoned all along, and the main agent's own registry read simply stopped one line short of that field. No registry action needed; retracting the flag.
Coverage gaps: keycloak (dead RSS path); trustwave-spiderlabs/LevelBlue (dead feed path post-rebrand); flatt-security, mozilla-mfsa, edpb, netcraft (JS-rendered listings the current recipe can't see); ncc-research (redirects to a generic page); ic3.gov/fbi-cyber-alerts (/PSA resolves to a complaint-filing T&C page, not a PSA index; this has now recurred across multiple runs and may warrant a dedicated recipe review); cisa-advisories/cisa-directives listing pages (render as filter-form/nav shells with no visible per-item dates; cross-checked via the CISA KEV catalog instead, which stayed current); socradar (the plain bridge url subcommand returns a JS-empty shell; the jina reader recovered the real dated listing this run; recommend the source record require jina rather than plain url); franceinfo.fr and afpa.fr (403 / no dedicated press notice, AFPA's confirmation composed from Clubic's direct AFP quotation instead).
Essential-coverage: all essential-tier sources in S1's and S2's domains were attempted this run; no miss to disclose.