TXTBOOK Campaign Targets T-Bank With 993 Malicious npm Packages and a Sliver Implant

Summary
CloudSEK details TXTBOOK, a dependency-confusion campaign that published 993 malicious npm packages mimicking T-Bank’s private namespace. The packages can execute a Sliver implant, delivered through DNS TXT records, if resolved inside the bank’s network.
Key points
- The campaign’s 993 npm packages reconstruct T-Bank’s private package namespace; CloudSEK attributes 850 names directly to the bank.
- A loader checks for T-Bank infrastructure before contacting attacker-controlled command-and-control servers, indicating targeting of the bank’s internal network.
- Packages execute code on import, while a native loader rebuilds the next-stage executable from numerous DNS TXT records.
- The final stage is a Sliver implant with extensive remote-access capabilities, including execution, credential and memory-related functions, lateral movement, and tunneling.
- The campaign evolved through publishing waves, changing execution methods and varying payloads; npm removals were followed by renewed publishing.
- CloudSEK advises organizations to scope private package names so they cannot resolve from public registries, investigate listed packages in lockfiles, and hunt for the reported DNS and cryptographic indicators.
Article Details
- Attack Vectors
- Dependency confusion through public npm packages that reproduce T-Bank's private package names. CloudSEK identified 993 packages, but reported no evidence that a target build successfully resolved or executed them.
- The earlier PyPI delivery installs a path-configuration file that executes at interpreter startup. npm variants execute through an appended entry-point call on import or, in some version bands, a postinstall hook.
- The loader reconstructs a native executable from several hundred sequentially numbered DNS TXT records rather than downloading a binary over HTTP.
- The second-stage loader checks whether victim infrastructure resolves before contacting attacker infrastructure, restricting execution to an environment consistent with the target's internal network.
- The delivered Sliver implant provides extensive remote-access and post-exploitation capabilities, with encrypted HTTPS beacons routed through Cloudflare Workers.
- Later package versions vary payloads and loader filenames per package and assemble infrastructure names from string fragments, reducing the effectiveness of hash and whole-hostname matching.
- Defensive Notes
- Enforce registry scoping so private package names cannot fall through to public registries; package blocklists alone do not address dependency confusion.
- Compare the reported malicious package inventory with internal packages and lockfiles. The article recommends treating a listed package in a lockfile as a compromise and rotating credentials available to the affected build environment.
- Block identified attacker staging and C2 infrastructure, and hunt for sequentially numbered DNS TXT lookups that reconstruct executable content. The supplied content does not expose the staging or C2 hostname lists.
- Do not block or sinkhole the loader's target-gate hostnames: the article explicitly identifies them as victim infrastructure.
- Detect package entry points requiring randomized underscore-prefixed modules inside swallowed try/catch blocks, and inspect runtime hostname assembly from array fragments.
- Use recovered minisign server keys and transport encoder fingerprints to cluster samples across infrastructure changes.
- Review public code, configuration, and documentation for disclosures of private package and service names; reserve publicly inferable internal package names where appropriate.
- Flag npm publishing accounts with twelve-character lowercase alphanumeric usernames and identical mailbox local parts at web-library.net.
- Account for analysis limitations: the Windows loader reflectively maps a still-packed payload without decompression, producing a failed load that can obscure the implant's capabilities.
- The article reports that Linux implants retain cryptographic keys in plaintext, enabling offline decryption of captured server-to-implant traffic for those builds.
Indicators of compromise
| Type | Indicator | Context |
|---|---|---|
| DOMAIN | web-library[.]net | CloudSEK identifies this as the disposable mailbox domain used by 153 operator-controlled npm accounts publishing malicious packages. |
MITRE ATT&CK
T1001.002 · SteganographyOne C2 encoder embeds encrypted beacon bytes in the pixels of a structurally valid PNG image.T1021.004 · SSHThe implant's recovered capability inventory includes a complete SSH client for lateral movement; actual lateral movement was not reported.T1027 · Obfuscated Files or InformationLoader hostnames are XOR-obfuscated or assembled from fragments; Windows and macOS implant string literals are encrypted and reconstructed at runtime.T1027.002 · Software PackingThe Windows third-stage payload is packed, and the reflective loader fails because it does not decompress the payload before mapping it.T1071.001 · Web ProtocolsThe Sliver implant sends HTTPS beacons to its C2 infrastructure through a Cloudflare Workers front end.T1090.001 · Internal ProxyThe implant's recovered capability inventory includes a SOCKS proxy and port forwarding; operational use was not reported.T1105 · Ingress Tool TransferThe loader retrieves payload fragments through hundreds of DNS TXT records and reconstructs a native executable.T1113 · Screen CaptureReflection metadata indicates that the delivered Sliver implant includes screenshot-capture capability; its use against a victim was not demonstrated.T1132.001 · Standard EncodingPer-request C2 transport encoders include custom unpadded Base64 and lowercase hexadecimal.T1195.001 · Compromise Software Dependencies and Development ToolsThe operator publishes malicious packages under T-Bank's private dependency names to induce build systems to resolve them from public registries.T1480 · Execution GuardrailsThe loader resolves target-owned infrastructure before contacting C2 and proceeds only when a target-gate entry answers.T1497.001 · System ChecksThe sample checks hypervisor indicators, disk enumeration, and physical memory, and reportedly self-terminates in five commercial sandboxes.T1497.003 · Time Based ChecksThe analysis environment uses full hardware virtualization to satisfy the sample's timing checks.T1573.002 · Asymmetric CryptographyThe implant seals beacons to the operator's age public key and receives responses encrypted to its own key pair.T1574.002 · DLL Side-LoadingRecovered command-message metadata indicates compiled-in DLL sideloading capability, not observed victim execution.T1620 · Reflective Code LoadingThe loader allocates memory and manually parses executable headers to reflectively map its payload.
Vendors
Products
Linuxa hardcoded target gate. Its obfuscated hostname table decodes to nine entries on Windows, macOS and Linux ARM64 alike, of which three are victim infrastructure: the group's Nexus artifact repository, its LinuxmacOSloader carries a hardcoded target gate. Its obfuscated hostname table decodes to nine entries on Windows, macOS and Linux ARM64 alike, of which three are victim infrastructure: the group's Nexus artifact repository,Microsoft WindowsThe loader carries a hardcoded target gate. Its obfuscated hostname table decodes to nine entries on Windows, macOS and Linux ARM64 alike, of which three are victim infrastructure: the group's Nexus artifact repository,npmAn operator has spent the summer of 2026 publishing malicious packages to the public npm registry under names that belong to somebody else. Not names resembling popular libraries, which is the usual pattern, but thePyPIpattern, but the internal package names of one company. We track the activity as TXTBOOK. It began on PyPI, moved into npm with its execution trigger rebuilt for the new ecosystem, and now runs to 993 npm packages.
Tools
Countries
Industries
BankingRussian financial group now trading as T-Bank. The names cover the group's BNPL product, its business banking platform, its analytics client libraries, and the proprietary counterparts of its own published openFinancial ServicesOnline bettingA small secondary cluster of online betting names is present in the same advisory data. It is four packages out of 993, none of which were held in our corpus, and it is reported here as an observation rather than aPayment processing