The final published version of the malicious pdf-to-office npm package restructures its file layout and swaps its suspicious asar dependency for the benign-sounding pdf-lib in an apparent attempt to reduce scrutiny, while retaining the core wallet-patching payload. Armando identified this evasion attempt in v1.1.2, published April 7, 2025 -- six days after v1.0.2. The Exodus wallet patch (targeting version 25.13.3) is carried as a single 24.3 MB file named lib.js, embedded among legitimate-looking font and encoding files that mimic a real document processing library. The attacker dropped the explicit asar dependency but the patching capability persists.
Key Findings
- Malicious version: v1.1.2, published 2025-04-07; no clean version exists -- all four published versions are malicious
- Entry point: Import-time execution when the consuming project requires the package
- Targets: Windows -- carries the Exodus wallet v25.13.3 malicious bundle as a renamed file (
lib.js)
- Evasion: Package restructured with 27 files including font data, TypeScript definitions, and encoding JSON to mimic a legitimate PDF library; dependency changed from
asar (obviously wallet-related) to pdf-lib (plausibly a PDF library); the wallet patch file renamed from e_25_13_3.js to lib.js
- Detection: Script-JS.Trojan.SupplyChain, Archive-GZIP.Trojan.SupplyChain, Archive-TAR.Trojan.SupplyChain, Text.Trojan.SupplyChain
Package Background
The package presents itself as "A lightweight npm library for converting PDF files to Office." In v1.1.2, the attacker replaced the four-to-six file structure of earlier versions with a 27-file layout that includes font data in compressed JSON format (Helvetica, Courier, Times, Symbol), TypeScript type definitions, and utility modules -- all consistent with what a real PDF library might contain. The declared dependency is now pdf-lib rather than , removing the most obvious tell of earlier versions. The package was published by npm account , which has no source repository and no other legitimate packages. Total downloads across all versions are 348; the package has been removed from the npm registry.