Open Source ·
VeloraDEX SDK installed macOS backdoor
@velora-dex/sdk 9.4.1 was published directly to npm with no matching source commit. Importing it fetched a macOS backdoor and registered launchctl persistence.
On April 7, 2026, an attacker pushed a malicious release of @velora-dex/sdk, the JavaScript toolkit used to integrate with the VeloraDEX decentralized exchange, directly to npm without ever touching the corresponding GitHub repository. The compromised version, 9.4.1, was a registry-only attack: developers reviewing the project's default branch would have seen nothing wrong.
Aikido researcher Charlie Eriksen reported the package on the project's GitHub tracker, and StepSecurity published a teardown. The diff in the tarball was small. package.json carried the version bump, and dist/index.js gained three prepended lines that base64-decoded a shell command and ran it through child_process.exec() as soon as application code imported the SDK. The command used curl to pull install.sh from 89.36.224.5, suppressing all output.
On macOS, the script created ~/Library/Application Support/com.apple.Terminal/, fetched either an ARM64 or Intel build of a binary named profiler from the same host, made it executable, and registered it as a persistent user service through launchctl submit -l zsh.profiler. The naming borrowed from Apple's own bundle conventions to blend into a developer laptop.
The trigger here was not an npm lifecycle hook. Passing --ignore-scripts, a common defense against malicious postinstall payloads, did nothing, because the malicious code ran at require('@velora-dex/sdk') time. StepSecurity told downstream operators to pin to 9.4.0 or earlier, remove the launchctl service and the dropped binary, and rotate any secret reachable from an affected machine.
Appendix · Affected releases
- StepSecurity identified 9.4.0 and earlier as safe versions; 9.4.1 was the compromised registry-only release.
- npm's retained chronology shows 9.4.2 was published at 2026-04-07T22:25:50.515Z, about three hours after 9.4.1; its dist/index.js is byte-identical to the safe 9.4.0 file.
References
- @velora-dex/sdk Compromised on npm: Malicious Version Drops macOS Backdoor via launchctl Persistencestepsecurity.io
- SDK 9.4.1 compromised on npmgithub.com
- @velora-dex/sdk 9.4.1 loaded a macOS MINIRAT backdoor on import - Corgeacorgea.com
- Malicious VeloraDEX SDK Compromises Developer Machines via npm - Security Onlinesecurityonline.info
- StepSecurity analysis workflow run metadata for @velora-dex/sdk 9.4.1api.github.com
- Expired velora-dex-sdk-tarballs artifact metadataapi.github.com
- Exact workflow that packed and archived @velora-dex/sdk 9.4.1 and 9.4.0raw.githubusercontent.com
Source record: oss/attacks/velora-dex-sdk/meta.yaml