APT38's New Game: Targeting Devs with Fake Coding Challenges

February 18, 2026Crimson7 Research Team
threat intelligenceAPTsupply chain

The Evolution of Social Engineering: in Software Supply Chains

North Korea's APT38 (also tracked as Lazarus Group and BlueNoroff) has refined its approach to compromising software developers. Rather than relying on traditional phishing campaigns, the group now operates through carefully crafted GitHub profiles, fake recruiter personas on LinkedIn, and seemingly legitimate coding challenges distributed as part of "job interviews."

How the Attack Works

The campaign follows a consistent pattern:

  1. Initial Contact - A recruiter profile reaches out via LinkedIn or Twitter with an attractive job opportunity at a known tech company or well-funded startup.
  2. The Coding Challenge - After brief correspondence, the target receives a GitHub repository containing a "take-home coding challenge." The repo looks legitimate, with a proper README, test files, and a standard project structure.
  3. Hidden Payload - Buried within the project dependencies or obfuscated inside a helper module, the malicious code executes during npm install or when running the test suite.
  4. Exfiltration - The payload establishes persistence and begins harvesting credentials, SSH keys, cloud tokens, and cryptocurrency wallet data.

Technical Indicators

The malicious packages typically exhibit several telltale characteristics:

  • Preinstall/postinstall scripts that execute obfuscated JavaScript
  • Base64-encoded payloads split across multiple seemingly innocent utility files
  • Dynamic imports that only trigger when environment checks pass (checking for macOS, presence of certain directories)
  • C2 communication disguised as legitimate API calls to cloud services
// Example obfuscated loader pattern
const _0x4f2a = require('./utils/helper');
const _config = Buffer.from(_0x4f2a.init(), 'base64').toString();
eval(_config);

Defensive Recommendations

Organizations and individual developers should implement the following measures:

  • Sandbox coding challenges - Never run untrusted code on your primary development machine. Use disposable VMs or containers.
  • Audit dependencies - Before running npm install, review the package.json for unfamiliar packages and check for install scripts.
  • Verify recruiter identities - Cross-reference recruiter profiles across multiple platforms. Check company career pages directly.
  • Monitor for credential theft - Implement alerts for unusual SSH key usage, new OAuth app authorizations, and unexpected cloud API access patterns.
  • Use read-only credentials - When possible, store sensitive tokens in hardware security keys or credential managers that require explicit approval for access.

Broader Implications

This campaign highlights a fundamental tension in the software industry: the open, collaborative nature of development platforms like GitHub creates opportunity for threat actors who are patient enough to build convincing personas. As the line between legitimate open-source contribution and social engineering blurs, organizations must adapt their security awareness training to address these developer-specific threat vectors.

The financial motivation behind APT38's operations - estimated to have stolen over $2 billion in cryptocurrency - ensures this campaign will continue to evolve. Security teams should share indicators of compromise and suspicious recruiter interactions through trusted intelligence-sharing communities.