Contagious Interview Campaign Uses VS Code Tasks to Deliver BeaverTail and Invisible Ferret

Summary
Researchers describe a Contagious Interview campaign that uses VS Code tasks in cloned repositories for infection and persistence, delivering BeaverTail and Invisible Ferret malware that steals credentials, browser data and crypto-wallet information.
Key points
- The campaign targets software engineers through fake recruiter or freelance-project lures, then directs them to clone a repository and open it in VS Code.
- A .vscode/tasks.json file runs commands when the folder opens, after the user trusts the repository, establishing the reported infection and persistence mechanism.
- The loaders deliver BeaverTail, which reportedly targets crypto-wallet extensions and files, browser credentials, cookies, local storage and macOS keychain data.
- The campaign also downloads Invisible Ferret, a Python malware component that the researchers say uses 64 nested layers of base64 reversal and zlib compression before delivering a backdoor and browser credential stealer.
- The researchers identified 13 campaign versions across 27 GitHub users and 11 payloads; they report that VS Code task files were used as far back as April 2025 and more widely in recent weeks.
- The article attributes the campaign to North Korean actors and reports that the operators used Vercel-hosted loaders and a C2 at 146.70[.]41[.]188; the researchers asked Vercel, GitHub and Atlassian to remove related resources.
Article Details
- Attack Vectors
- The campaign targets software engineers through fake recruiter or freelance-project approaches, then asks them to clone a repository and inspect its code.
- A repository's .vscode/tasks.json runs a platform-specific shell command when the victim trusts the repository and opens its folder in Visual Studio Code.
- The initial loader downloads further scripts and BeaverTail and Invisible Ferret payloads from campaign infrastructure.
- Defensive Notes
- Treat unfamiliar repositories and their .vscode/tasks.json files as potentially dangerous; inspect task commands before trusting repository authors or opening the folder in Visual Studio Code.
- Monitor for unexpected shell or command execution triggered by Visual Studio Code folder-open tasks, and for downloads from the listed campaign infrastructure.
- The article reports credential, session-cookie, browser data, crypto-wallet data, and macOS keychain theft; review potentially affected credentials and wallet material if exposure is suspected.
Indicators of compromise
| Type | Indicator | Context |
|---|---|---|
| DOMAIN | ip-api-check-nine[.]vercel[.]app | Host queried by a loader to retrieve the next-stage payload. |
| DOMAIN | isvalid-region[.]vercel[.]app | Campaign loader host identified for a variant. |
| DOMAIN | test-assesment-kk37hvtef-mahs-projects-03bae667[.]vercel[.]app | Listed in the article's campaign indicators. |
| DOMAIN | test-assesment-self[.]vercel[.]app | Listed as campaign-related infrastructure for a variant. |
| DOMAIN | vscode-bootstrapper[.]vercel[.]app | Campaign infrastructure listed for a loader variant. |
| DOMAIN | vscode-config[.]vercel[.]app | Campaign loader host listed for a Contagious Interview variant. |
| DOMAIN | vscode-helper171[.]vercel[.]app | Campaign infrastructure listed for loader variants. |
| DOMAIN | vscode-load-config[.]vercel[.]app | Campaign infrastructure listed for a loader variant. |
| DOMAIN | vscode-setup[.]vercel[.]app | Campaign-controlled Vercel host serving platform-specific first-stage loaders and subsequent malware files. |
| IPV4 | 146[.]70[.]41[.]188 | Reported C2 and payload host for BeaverTail and Invisible Ferret; the article says it is a known DPRK C2 server. |
| SHA256 | 54a5c5cb16bdd482bd4147200557d3a94e413f9e9aebbf4818e76f16331bc6dc | Hash of a BeaverTail sample associated with the petshop sample. |
| SHA256 | 869bce2efa60b60dab1e0fe8c9d94cfbd6476f4393f79564c4de26ec689dc64d | Hash of a BeaverTail sample associated with the Coin-ICO variant. |
| SHA256 | ebfaff5c2e9b709c1337e06a756f7ee69fc29d319a27adaafe73eb84d8a43b61 | Hash of a BeaverTail sample associated with the thirdweb-skill-test variant. |
| SHA256 | ef12b15466255fafda6225a557cce780baa6b1c98adcf111f5567e4b3ecc0e14 | Hash of the Invisible Ferret Python sample. |
| URL | hxxp[:]//146[.]70[.]41[.]188:1224/client/7/701 | URL used to download the Invisible Ferret Python malware. |
| URL | hxxp[:]//146[.]70[.]41[.]188:1224/uploads | BeaverTail exfiltration endpoint receiving stolen files. |
| URL | hxxp[:]//vscode-setup[.]vercel[.]app/settings/bootstraplinux?flag=1 | Loader URL used to download the Linux bootstrap script. |
| URL | hxxp[:]//vscode-setup[.]vercel[.]app/settings/env?flag=1 | Loader URL used to download the next-stage env-setup.js script. |
| URL | hxxps[:]//ip-api-check-nine[.]vercel[.]app/icons/701 | Loader URL returning the BeaverTail payload, which the script evaluates. |
| URL | hxxps[:]//vscode-setup[.]vercel[.]app/settings/linux?flag=1 | Campaign URL used by the Visual Studio Code task to retrieve the Linux first-stage loader. |
| URL | hxxps[:]//vscode-setup[.]vercel[.]app/settings/mac?flag=1 | Campaign URL used by the Visual Studio Code task to retrieve the macOS first-stage loader. |
| URL | hxxps[:]//vscode-setup[.]vercel[.]app/settings/windows?flag=1 | Campaign URL used by the Visual Studio Code task to retrieve the Windows first-stage loader. |
MITRE ATT&CK
T1005 · Data from Local SystemBeaverTail collects local browser data, wallet files, LevelDB databases, and macOS keychain databases.T1027 · Obfuscated Files or InformationInvisible Ferret is described as using 64 nested layers of reversed Base64 and zlib compression to obfuscate its payload.T1041 · Exfiltration Over C2 ChannelBeaverTail sends collected files to its server using a multipart HTTP POST to the reported uploads endpoint.T1059.003 · Windows Command ShellThe Windows task uses curl and pipes the downloaded content to cmd.T1059.004 · Unix ShellThe task runs shell commands, including curl or wget piped to a shell, to download and execute loaders on Linux and macOS.T1059.006 · PythonThe campaign downloads and executes Invisible Ferret, a Python-based malware dropper.T1059.007 · JavaScriptA JavaScript loader uses axios to retrieve and evaluate the next-stage payload.T1105 · Ingress Tool TransferLoaders download successive scripts and payloads from campaign hosts, including BeaverTail and Invisible Ferret components.T1204.002 · Malicious FileVictims are induced to trust and open a cloned project repository, triggering its Visual Studio Code task.T1539 · Steal Web Session CookieThe malware steals session cookies, which the article says can support account takeover.T1555.001 · KeychainThe article reports theft of macOS keychain databases.T1555.003 · Credentials from Web BrowsersThe malware steals credentials and data from browser profiles, including data associated with named browsers.