Back to Intelligence

Qubole Cross-Account AWS Breach & Contagious Interview npm Poisoning: OTX Pulse Analysis — Cloud + Supply Chain Detection Pack

SA
Security Arsenal Team
November 10, 2026
7 min read

Two distinct but operationally convergent campaigns surfaced in the latest OTX pulse cycle. The first, "Trusted by Default", documents a threat actor abusing IAM credentials stolen from Qubole's AWS account (805246085872) to assume integration roles inside customer environments between October 14–26, 2026. The actor leveraged two IAM users and a rotating VPN infrastructure (Sweden, Romania, Belgium egress nodes) to enumerate S3 buckets, RDS instances, and IAM resources before exfiltrating data. The second pulse, "Contagious Interview", tracks a North Korea-nexus operation using a fake company called AccuraSoftHire to lure software developers via Indeed, Glassdoor, and LinkedIn. Victims receive take-home coding assignments containing poisoned npm packages that establish persistence, harvest cryptocurrency wallets, and exfiltrate source code and credentials.

Objective overlap: Both campaigns exploit trusted relationships (cloud vendor integrations / hiring workflows) to bypass perimeter controls. The Qubole actor seeks bulk cloud data; the DPRK group seeks developer credentials, crypto assets, and long-term supply chain footholds inside technology and finance firms. Treat both as credential-theft-driven intrusions with high dwell-time potential.

Threat Actor / Malware Profile

Qubole Cross-Account Abuser (Cloud-Native Actor)

  • Distribution: Legitimate AWS AssumeRole calls using compromised Qubole IAM user credentials.
  • Payload Behavior: Post-exploitation reconnaissance (s3:ListBuckets, rds:DescribeDBInstances, iam:ListUsers, iam:GetAccountSummary), followed by S3 object exfiltration via CLI/SDK. TruffleHog was likely used by defenders for post-breach secret scanning, but the actor also hunts for exposed credentials in code repos.
  • C2 Communication: No classic C2; actor uses anonymizing VPN endpoints (45.83.220.211, 185.209.199.73, 57.129.54.120, 89.37.63.175) as source IPs for AWS API calls.
  • Persistence: Temporary IAM access keys created inside victim accounts; malicious inline policies attached to existing roles for backup access.
  • Anti-Analysis: Relies on living-off-the-cloud techniques (native AWS API abuse), making process-based EDR blind. VPN rotation and use of legitimate Qubole role ARNs bypass basic geo-fencing.

Contagious Interview (DPRK Nexus — Lazarus Subgroup)

  • Distribution: Spear-phishing via LinkedIn/InMail and job platforms; victims directed to accurasofthire.com for "camera driver" setup or coding tests.
  • Payload Behavior: Malicious npm packages (typosquatted or hijacked dependencies) execute post-install scripts that fetch second-stage payloads from accurasofthire.com/camera-driver/setup-{os}. Final payload includes BeaverTail (JavaScript stealer) or InvisibleFerret (Python backdoor) depending on OS.
  • C2 Communication: HTTPS beaconing to accurasofthire.com/notification-settings-win?download=1 and hardcoded IP 103.179.142.155. Uses blockchain dead-drop for resilience in some variants.
  • Persistence: macOS LaunchAgents, Linux cron jobs, Windows Registry Run keys (HKCU\Software\Microsoft\Windows\CurrentVersion\Run) with innocuous names like CameraHelper.
  • Anti-Analysis: Payloads check for VM artifacts (specific MAC prefixes, low RAM), delay execution, and use AES-encrypted strings for C2 domains. Packages are often signed with stolen code-signing certs.

IOC Analysis

Indicator TypeCountOperationalizationTooling
IPv44Block at egress firewall/WAF. Alert on any AWS API call from these IPs.AWS WAF, Palo Alto, Fortinet, Zeek
Domain/URL5DNS sinkhole + TLS inspection. Alert on accurasofthire.com resolution or HTTP GET to /camera-driver/*.Pi-hole, Cisco Umbrella, Suricata
File Hashes (MD5/SHA1/SHA256)3Import into EDR blocklists. Hunt for hash presence in npm_cache or %TEMP%.CrowdStrike, Microsoft Defender, VirusTotal Enterprise

Decoding: Use otx Python SDK or MISP to sync pulses daily. For AWS, enable GuardDuty with threat intel feeds; for endpoints, import hashes into LOLRMM detections. The MD5/SHA1/SHA256 triplet (086d4a83..., 1c7437da..., 65f06128...) represents a TruffleHog-compiled binary or malicious npm tarball — scan CI/CD pipelines and developer workstations.

Detection Engineering

YAML
---
title: Qubole Cross-Account IAM Role Assumption From Suspicious VPN
id: 1f3a8b2e-9c4d-4e6f-9a1b-3e5f7a9c2d1e
status: experimental
description: Detects AWS AssumeRole calls originating from known Qubole breach VPN IPs or unusual geographies for the Qubole integration role.
logsource:
  product: aws
  service: cloudtrail
  category: iam
detection:
  selection:
    eventSource: iam.amazonaws.com
    eventName: AssumeRole
    sourceIPAddress:
      - '45.83.220.211'
      - '57.129.54.120'
      - '185.209.199.73'
      - '89.37.63.175'
  condition: selection
falsepositives:
  - Qubole support engineers using VPN (verify with change management)
level: high
tags:
  - attack.t1078
  - attack.t1550
  - attack.t1098
---
title: Malicious npm Post-Install Script Execution - Contagious Interview
id: 4c7d9e1a-5b3f-4a8e-8c6d-2e1f9b7a4c8d
status: experimental
description: Detects execution of suspicious npm post-install scripts or child processes spawned by node/npm that match Contagious Interview TTPs.
logsource:
  category: process_creation
  product: windows
detection:
  selection_parent:
    ParentImage|endswith:
      - '\node.exe'
      - '\npm.cmd'
      - '\npm.exe'
  selection_child:
    Image|endswith:
      - '\powershell.exe'
      - '\cmd.exe'
      - '\curl.exe'
      - '\wget.exe'
    CommandLine|contains:
      - 'camera-driver'
      - 'notification-settings'
      - 'accurasofthire'
  condition: selection_parent and selection_child
falsepositives:
  - Legitimate build scripts (rarely spawn network tools)
level: critical
tags:
  - attack.t1195
  - attack.t1059
  - attack.t1071
---
title: Contagious Interview C2 Communication - BeaverTail / InvisibleFerret
id: 8e2f6a9c-1d3b-4e5f-9a7c-6b8d1e3f5a2c
status: experimental
description: Detects DNS or HTTPS requests to AccuraSoftHire C2 infrastructure or fallback IP.
logsource:
  category: dns
detection:
  selection_domain:
    query|contains:
      - 'accurasofthire.com'
  selection_ip:
    answer|contains:
      - '103.179.142.155'
  condition: selection_domain or selection_ip
falsepositives:
  - Security researchers investigating domain (allowlist SOC IPs)
level: high
tags:
  - attack.t1071.001
  - attack.t1102
KQL — Microsoft Sentinel / Defender
let QuboleVPNIPs = dynamic(["45.83.220.211","57.129.54.120","185.209.199.73","89.37.63.175"]);
let InterviewC2 = dynamic(["accurasofthire.com","103.179.142.155"]);
// Hunt 1: AWS API calls from Qubole breach VPNs (requires AWS CloudTrail ingestion)
CloudTrail
| where SourceIP in (QuboleVPNIPs)
| where EventName in ("AssumeRole","ListBuckets","GetObject","DescribeDBInstances")
| summarize Count=count() by SourceIP, UserIdentityArn, EventName, bin(TimeGenerated, 1h)
| order by Count desc;
// Hunt 2: Network connections to Contagious Interview C2
DeviceNetworkEvents
| where TimeGenerated > ago(7d)
| where RemoteUrl has_any (InterviewC2) or RemoteIP == "103.179.142.155"
| where InitiatingProcessFileName in~ ("node.exe","npm.exe","python.exe","powershell.exe")
| project TimeGenerated, DeviceName, RemoteUrl, RemoteIP, InitiatingProcessCommandLine, FileHash = InitiatingProcessSHA256;
// Hunt 3: Malicious file hash execution
DeviceProcessEvents
| where SHA256 in ("65f061281c9a712e9502793dc4c5035cae490b84da05f7d4223cefa65ad396e4")
   or MD5 in ("086d4a83181971e883c53a4c44f46da2")
| project TimeGenerated, DeviceName, FileName, FolderPath, ProcessCommandLine, AccountName;
PowerShell
# Security Arsenal — Contagious Interview + Qubole Artifact Hunt
# Run as Administrator on developer workstations & build servers
$ErrorActionPreference = 'SilentlyContinue'
Write-Host "[+] Starting hunt for Contagious Interview & Qubole abuse artifacts..." -ForegroundColor Cyan

# 1. Check for persistence in Registry Run keys
$RunKeys = @(
    'HKCU:\Software\Microsoft\Windows\CurrentVersion\Run',
    'HKLM:\Software\Microsoft\Windows\CurrentVersion\Run'
)
foreach ($Key in $RunKeys) {
    Get-ItemProperty $Key | ForEach-Object {
        $_.PSObject.Properties | Where-Object {
            $_.Name -notlike 'PS*' -and
            ($_.Value -match 'CameraHelper|npm|node|accurasoft')
        } | Select-Object @{N='Key';E={$Key}}, Name, Value
    }
}

# 2. Hunt for malicious file hashes in common staging dirs
$MaliciousHashes = @{
    'MD5'    = '086d4a83181971e883c53a4c44f46da2'
    'SHA1'   = '1c7437dac21630f53c0b888b50662c6487e23fd7'
    'SHA256' = '65f061281c9a712e9502793dc4c5035cae490b84da05f7d4223cefa65ad396e4'
}
$SearchPaths = @("$env:TEMP","$env:APPDATA\npm-cache","$env:LOCALAPPDATA\Temp","C:\Windows\Temp")
foreach ($Path in $SearchPaths) {
    if (Test-Path $Path) {
        Get-ChildItem $Path -Recurse -File -ErrorAction SilentlyContinue | ForEach-Object {
            $File = $_
            foreach ($Algo in $MaliciousHashes.Keys) {
                $Hash = (Get-FileHash $File.FullName -Algorithm $Algo).Hash
                if ($Hash -eq $MaliciousHashes[$Algo]) {
                    Write-Warning "[!] Malicious file detected: $($File.FullName) [$Algo]"
                    $File | Select-Object FullName, Length, LastWriteTime
                }
            }
        }
    }
}

# 3. Check active network connections to C2 IPs
$C2IPs = @('103.179.142.155','45.83.220.211','57.129.54.120','185.209.199.73','89.37.63.175')
Get-NetTCPConnection | Where-Object {$_.RemoteAddress -in $C2IPs} | Select-Object LocalAddress,LocalPort,RemoteAddress,RemotePort,State,OwningProcess,@{N='ProcessName';E={(Get-Process -Id $_.OwningProcess).ProcessName}}

# 4. Scan npm global cache for suspicious packages
$NpmCache = "$env:APPDATA\npm-cache"
if (Test-Path $NpmCache) {
    Get-ChildItem $NpmCache -Recurse -Filter package.json | ForEach-Object {
        $Content = Get-Content $_.FullName -Raw
        if ($Content -match 'postinstall|preinstall' -and $Content -match 'camera-driver|accurasoft') {
            Write-Warning "[!] Suspicious npm package: $($_.Directory.Name)"
        }
    }
}
Write-Host "[+] Hunt complete. Review warnings above and isolate affected hosts." -ForegroundColor Green

Response Priorities

Immediate (0–4h)

  • Block all listed IPv4 indicators at the egress firewall and AWS WAF.
  • Sinkhole accurasofthire.com and alert on any DNS resolution attempts.
  • Import MD5/SHA1/SHA256 hashes into EDR blocklists; scan developer workstations and CI/CD runners.
  • Force-disable any IAM roles or users in AWS account 805246085872 that are not actively monitored; rotate all associated access keys.

24h

  • Credential rotation: Assume all developer credentials, SSH keys, and cloud tokens on machines that executed the malicious npm package are compromised. Rotate GitHub/GitLab PATs, AWS keys, and crypto wallet seeds.
  • Identity verification: If any user was contacted by AccuraSoftHire recruiters on LinkedIn, verify employment claims via phone (do not trust LinkedIn identity badges alone).
  • Cloud audit: Review CloudTrail for AssumeRole events from the listed VPN IPs during Oct 14–26. Check for unauthorized IAM policy attachments or new access keys created in that window.

1 Week

  • Architecture hardening: Enforce IP whitelisting on all third-party AWS integration roles (Qubole, Snowflake, Databricks). Require ExternalId + MFA for cross-account access.
  • Supply chain controls: Implement npm package allowlisting or use a private registry (e.g., Azure Artifacts, JFrog Artifactory) that blocks post-install scripts by default. Scan all package-lock.json files against the provided hash list.
  • Detection-as-Code: Deploy the Sigma rules above to production SIEM and tune for false positives from legitimate Qubole support activity.

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.