Threat Summary
AlienVault OTX pulse “Contagious Interview - One Interview Away From Infection” describes a social-engineering-led intrusion campaign that weaponizes the developer hiring pipeline. The operation uses a fraudulent front company, AccuraSoftHire, recruiter personas on LinkedIn, and job postings on legitimate platforms such as Indeed and Glassdoor to reach software engineers in technology and finance organizations. Candidates are pushed into take-home coding assignments that include poisoned npm dependencies and staged downloads from accurasofthire.com paths masquerading as notification settings and camera-driver setup for Windows, macOS, and Linux.
The collective behavior is consistent with the publicly reported Contagious Interview pattern: developer targeting, interview-themed pretexts, malicious package execution during build/test, cross-platform payload delivery, cryptocurrency theft, and suspected North Korea-aligned attribution. The important enterprise concern is not only endpoint compromise; it is supply-chain adjacency. A developer workstation often holds source code, cloud tokens, CI/CD secrets, package registry credentials, SSH keys, browser session material, and signing access. One infected candidate laptop or contractor machine can become a route into repositories, artifact pipelines, and customer-facing production systems.
The pulse’s infrastructure is compact but operationally useful: one IPv4 address, one primary domain, and several URL paths that reveal staging logic. The presence of /camera-driver/setup-win, /setup-mac, and /setup-linux indicates platform-specific payload routing. The /notification-settings-win?download=1 URL suggests a Windows download trigger under a benign settings-themed lure. Tags such as blockchain dead drop imply resilient C2 or payload pointer retrieval where transaction data, wallet metadata, or chain-hosted content is used as a lookup layer rather than a classic hardcoded beacon alone.
Threat Actor / Malware Profile
The OTX pulse lists the adversary as Unknown, but campaign tags reference north korea attribution and the lure design aligns with DPRK-nexus activity tracked by multiple vendors under names such as Contagious Interview, WageMole-related social engineering, and developer-focused fake recruiter operations. Treat attribution as probabilistic, not evidentiary, and prioritize behavior-based detection.
Distribution method: recruiters approach targets through job boards and identity-verified LinkedIn profiles, move conversation to interview logistics, then deliver a coding exercise. The repository or archive contains an npm project whose install, build, test, or postinstall flow executes attacker-controlled JavaScript. Supporting payloads may be fetched from the fake employer domain under driver or notification paths to appear compatible with interview “camera check” requirements.
Payload behavior: expected actions include package execution during npm install or npm test, environment reconnaissance, theft of browser credentials and cookies, collection of SSH private keys, cloud CLI tokens, .npmrc, .git-credentials, GitHub/GitLab tokens, crypto wallet data, and exfiltration to C2. In developer environments, the payload may also attempt to modify lockfiles, add malicious dependencies, or persist through project-level scripts that run whenever the victim resumes work.
C2 communication: the confirmed indicators center on HTTP/S to accurasofthire.com and IPv4 103.179.142.155. URL paths indicate handler and staging endpoints: /camera-driver/ack, /camera-driver/setup-win, /setup-mac, /setup-linux, and /notification-settings-win?download=1. The “blockchain dead drop” tag suggests defenders should also monitor for DNS, HTTPS, or Web3/RPC lookups used to resolve updated C2 material after initial infection.
Persistence mechanism: likely mechanisms include malicious npm lifecycle scripts, shell profile modification, LaunchAgents on macOS, scheduled tasks or Run-key persistence on Windows, systemd user services on Linux, and repo-local persistence where the poisoned project re-executes on reopen. For this pulse, the most defensible detection hypothesis is persistence adjacent to developer workflows rather than kernel-level stealth.
Anti-analysis techniques: expected checks include interview-context gating, platform-specific branching by user agent or OS, delayed execution until build/test, geofencing or recruiter-target filtering, obfuscated JavaScript in package tarballs, base64 or chunked payload assembly, and retrieval of second-stage instructions from dead-drop resolvers to reduce static IOC value.
IOC Analysis
The pulse contains 8 indicators: one IPv4, one domain, and six URLs. There are no file hashes in this sample, so hash blocking alone is insufficient. SOC teams should operationalize the domain and URL paths as high-confidence web controls while treating the IP as supporting infrastructure for retro hunting, because DPRK-style operations rotate hosting quickly and may place multiple campaigns behind one VPS.
Recommended operationalization:
- Domain/URL: block
accurasofthire.comat DNS sinkhole, secure web gateway, proxy, EDR network containment, and email/URL rewriting layers. Alert on path regexes for/camera-driver/and/notification-settings-wineven if the domain changes. - IPv4: add
103.179.142.155to firewall egress deny and threat-intel watchlists; search NetFlow, proxy, DNS, TLS SNI, and EDR network events for 30-90 days. - Behavior: detect Node/npm child processes spawning shells, curl, wget, PowerShell, osascript, or unexpected outbound HTTPS shortly after
npm installin interview repos. - Tooling: decode URL paths and user agents in proxy/Zeek/Suricata logs; use EDR process lineage for npm/node ancestry; use YARA on extracted package tarballs; use Sigma for endpoint behavior; use Sentinel KQL for Microsoft environments.
Detection Engineering
---
title: Suspicious npm Lifecycle Script Spawns Shell or Downloader
id: 9f1b7b10-5b8c-4a0c-9a3c-0c2f7d5a1a01
status: experimental
description: Detects node/npm lifecycle execution that spawns shells, downloaders, or script interpreters consistent with poisoned take-home interview packages.
author: Security Arsenal
logsource:
category: process_creation
product: windows
detection:
selection_parent:
ParentImage|endswith:
- '\node.exe'
- '\npm.exe'
- '\npm.cmd'
- '\npx.cmd'
- '\pnpm.exe'
- '\yarn.exe'
selection_child:
Image|endswith:
- '\powershell.exe'
- '\pwsh.exe'
- '\cmd.exe'
- '\wscript.exe'
- '\cscript.exe'
- '\mshta.exe'
- '\curl.exe'
- '\wget.exe'
- '\bitsadmin.exe'
- '\certutil.exe'
condition: selection_parent and selection_child
falsepositives:
- Legitimate build tooling
- Developer automation
level: high
tags:
- attack.execution
- attack.t1059
- attack.t1190
- attack.t1609
date: 2026/11/11
---
title: AccuraSoftHire Fake Interview Infrastructure Connection
id: 7c8a2f61-52c5-4c0a-8d5e-8ab4f6f10b22
status: experimental
description: Detects network or DNS access to AccuraSoftHire fake interview staging infrastructure and path patterns from OTX pulse.
author: Security Arsenal
logsource:
category: network_connection
product: windows
detection:
selection_domain:
DestinationHostname|contains:
- 'accurasofthire.com'
selection_ip:
DestinationIp:
- '103.179.142.155'
selection_path:
Image|endswith:
- '\node.exe'
- '\npm.exe'
- '\npm.cmd'
- '\powershell.exe'
- '\curl.exe'
- '\wget.exe'
- '\chrome.exe'
- '\msedge.exe'
- '\firefox.exe'
condition: (selection_domain or selection_ip) and selection_path
falsepositives:
- Threat research
- Sanctioned red team validation
level: critical
tags:
- attack.command_and_control
- attack.t1071
- attack.t1102
date: 2026/11/11
---
title: Browser Credential and Crypto Wallet Access After Node Execution
id: 4c8e0e2e-8ba1-4d5d-a7f5-6cf2aa1d93aa
status: experimental
description: Detects node/npm-launched processes accessing browser credential stores, wallet files, SSH keys, cloud tokens, npmrc, or git credential files.
author: Security Arsenal
logsource:
category: file_event
product: windows
detection:
selection_process:
Image|endswith:
- '\node.exe'
- '\npm.exe'
- '\npm.cmd'
- '\powershell.exe'
- '\cmd.exe'
selection_target:
TargetFilename|contains:
- '\AppData\Local\Google\Chrome\User Data\'
- '\AppData\Local\Microsoft\Edge\User Data\'
- '\AppData\Roaming\Mozilla\Firefox\Profiles\'
- '\.ssh\'
- '\.aws\credentials'
- '\.azure\'
- '\.config\gcloud\'
- '\.npmrc'
- '\.git-credentials'
- '\Login Data'
- '\Cookies'
- '\Local State'
- '\wallet.dat'
- '\Exodus\'
- '\Electrum\'
- '\MetaMask\'
condition: selection_process and selection_target
falsepositives:
- Developer credential helper tools
- Browser sync utilities
level: high
tags:
- attack.credential_access
- attack.t1555
- attack.t1552
- attack.collection
- attack.t1005
date: 2026/11/11
let lookback = 14d;
let badDomain = "accurasofthire.com";
let badIp = "103.179.142.155";
let pathRx = @"(camera-driver/(ack|setup-(win|mac|linux))|notification-settings-win\?download=1)";
union isfuzzy=true
(DeviceNetworkEvents
| where TimeGenerated >= ago(lookback)
| where RemoteUrl has badDomain or RemoteIP == badIp or RemoteUrl matches regex pathRx
| project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, RemoteUrl, RemoteIP, RemotePort, ActionType),
(DeviceProcessEvents
| where TimeGenerated >= ago(lookback)
| where ProcessCommandLine has_any (badDomain, badIp, "camera-driver", "notification-settings-win")
or (InitiatingProcessFileName in~ ("node.exe","npm.exe","npm.cmd","npx.cmd","pnpm.exe","yarn.exe")
and FileName in~ ("powershell.exe","pwsh.exe","cmd.exe","curl.exe","wget.exe","mshta.exe","wscript.exe","cscript.exe","bitsadmin.exe","certutil.exe"))
| project TimeGenerated, DeviceName, AccountName, FileName, ProcessCommandLine, InitiatingProcessFileName, InitiatingProcessCommandLine, FolderPath),
(DeviceFileEvents
| where TimeGenerated >= ago(lookback)
| where InitiatingProcessFileName in~ ("node.exe","npm.exe","npm.cmd","powershell.exe","cmd.exe")
| where FolderPath has_any (@"\AppData\Local\Google\Chrome\User Data\", @"\AppData\Local\Microsoft\Edge\User Data\", @"\.ssh\", @"\.aws\", @"\.azure\", @"\.config\gcloud\", @"\.npmrc", @"\.git-credentials", "MetaMask", "Exodus", "Electrum", "wallet.dat", "Login Data", "Local State")
| project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, FolderPath, FileName, ActionType)
| sort by TimeGenerated desc
$ErrorActionPreference = 'SilentlyContinue'
$Lookback = (Get-Date).AddDays(-14)
$Indicators = @('accurasofthire.com','103.179.142.155','camera-driver','notification-settings-win')
Write-Host '[*] Checking network connections for AccuraSoftHire indicators...'
Get-NetTCPConnection | Where-Object { $_.RemoteAddress -eq '103.179.142.155' } | Select-Object LocalAddress,LocalPort,RemoteAddress,RemotePort,State,OwningProcess
foreach ($p in Get-Process node,npm,powershell,cmd,curl,wget,chrome,msedge,firefox -ErrorAction SilentlyContinue) {
try {
$cmd = (Get-CimInstance Win32_Process -Filter "ProcessId=$($p.Id)").CommandLine
if ($cmd -and ($Indicators | Where-Object { $cmd -like "*$_*" })) {
Write-Host "[!] Suspicious process: PID=$($p.Id) Name=$($p.ProcessName) Cmd=$cmd"
}
} catch {}
}
Write-Host '[*] Reviewing recent DNS cache for domain hits...'
Get-DnsClientCache | Where-Object { $_.Entry -like '*accurasofthire.com*' -or $_.Data -eq '103.179.142.155' } | Select-Object Entry,RecordName,RecordType,Status,Data
Write-Host '[*] Checking developer credential stores touched recently...'
$paths = @(
"$env:LOCALAPPDATA\Google\Chrome\User Data",
"$env:LOCALAPPDATA\Microsoft\Edge\User Data",
"$env:APPDATA\Mozilla\Firefox\Profiles",
"$env:USERPROFILE\.ssh",
"$env:USERPROFILE\.aws\credentials",
"$env:USERPROFILE\.npmrc",
"$env:USERPROFILE\.git-credentials"
)
foreach ($path in $paths) {
if (Test-Path $path) {
Get-ChildItem $path -Recurse -Force -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -ge $Lookback -or $_.LastAccessTime -ge $Lookback } | Select-Object FullName,LastWriteTime,LastAccessTime,Length
}
}
Write-Host '[*] Checking persistence locations...'
Get-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Run','HKLM:\Software\Microsoft\Windows\CurrentVersion\Run' | Select-Object PSPath,PSChildName,Property
Get-ScheduledTask | Where-Object { $_.Actions.Execute -match 'node|npm|powershell|cmd|curl|wget' -and $_.TaskPath -notlike '\Microsoft*' } | Select-Object TaskName,TaskPath,State,Actions
Write-Host '[*] Searching recent package folders for suspicious lifecycle scripts...'
Get-ChildItem "$env:USERPROFILE\Downloads","$env:USERPROFILE\Desktop","$env:USERPROFILE\source","$env:USERPROFILE\repos" -Recurse -Filter package.json -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -ge $Lookback } | ForEach-Object {
$j = Get-Content $_.FullName -Raw | ConvertFrom-Json
$scripts = @($j.scripts.PSObject.Properties.Value) -join ' ; '
if ($scripts -match 'curl|wget|powershell|certutil|bitsadmin|Invoke-WebRequest|postinstall|preinstall|node -e') {
Write-Host "[!] Suspicious package.json: $($_.FullName) Scripts=$scripts"
}
}
Response Priorities
Immediate: Block accurasofthire.com, all listed URL paths, and 103.179.142.155 at DNS, proxy, firewall, and EDR. Search proxy, DNS, TLS SNI, NetFlow, browser history, and EDR network telemetry for the domain and paths for at least 30-90 days. Quarantine any machine with matching connections, especially developer endpoints and contractor laptops. Preserve package.json, package-lock.json, npm cache, node_modules metadata, downloads, recruiter chat artifacts, and process lineage before cleanup.
24h: Treat as credential-compromise risk even though this pulse is infrastructure-heavy. Rotate credentials for affected users: GitHub/GitLab/Bitbucket, npm tokens, package registry scopes, cloud CLI credentials, AWS/Azure/GCP keys, SSH private keys, VPN, SSO sessions, browser cookies, password-manager unlock state, and cryptocurrency wallets. Revoke active sessions and OAuth grants; require phishing-resistant MFA re-enrollment. Audit repository commits, package publishes, CI pipeline runs, artifact uploads, and new deploy keys since first exposure.
1 week: Harden the hiring and developer workflow. Require isolated sandboxes or disposable VMs for take-home coding tests; prohibit npm install on corporate endpoints for candidate projects; enforce egress filtering for build systems; enable npm audit plus lockfile integrity review but do not rely on audit alone; block lifecycle scripts by default in CI for untrusted code; segment developer VLANs; deploy canary tokens in SSH keys, cloud credentials, npmrc, and wallet files; add detections for node spawning shells/downloaders and for browser credential access after package execution.
Related Resources
Security Arsenal Incident Response Managed SOC & MDR Services AlertMonitor Threat Detection From The Dark Side Intel Hub
Is your security operations ready?
Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.