<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Nouman Ijaz</title>
    <description>The latest articles on DEV Community by Nouman Ijaz (@noumantechdeveloper).</description>
    <link>https://dev.to/noumantechdeveloper</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3861818%2F3cdfdb22-ca2b-4171-b5af-81f520e67fa5.png</url>
      <title>DEV Community: Nouman Ijaz</title>
      <link>https://dev.to/noumantechdeveloper</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/noumantechdeveloper"/>
    <language>en</language>
    <item>
      <title>Hello DEV! I'm Nouman — CyberSecurity Student &amp; Fullstack Developer from Pakistan 🇵🇰</title>
      <dc:creator>Nouman Ijaz</dc:creator>
      <pubDate>Tue, 21 Apr 2026 04:37:17 +0000</pubDate>
      <link>https://dev.to/noumantechdeveloper/hello-dev-im-nouman-cybersecurity-student-fullstack-developer-from-pakistan-4h06</link>
      <guid>https://dev.to/noumantechdeveloper/hello-dev-im-nouman-cybersecurity-student-fullstack-developer-from-pakistan-4h06</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Hey DEV Community! 👋&lt;/span&gt;

My name is &lt;span class="gs"&gt;**Nouman**&lt;/span&gt; and I'm a &lt;span class="gs"&gt;**CyberSecurity &amp;amp; Digital Forensics student**&lt;/span&gt; 
and &lt;span class="gs"&gt;**Fullstack Developer**&lt;/span&gt; from Pakistan.

&lt;span class="gu"&gt;## What I Do&lt;/span&gt;

I sit at the intersection of two worlds:
&lt;span class="p"&gt;
-&lt;/span&gt; 🔐 &lt;span class="gs"&gt;**Security**&lt;/span&gt; — studying real-world attacks, CVEs, digital forensics, 
  malware analysis, and penetration testing
&lt;span class="p"&gt;-&lt;/span&gt; 💻 &lt;span class="gs"&gt;**Development**&lt;/span&gt; — building fullstack web applications with 
  JavaScript, React, Node.js, Python, and PHP

&lt;span class="gu"&gt;## Why I Joined DEV&lt;/span&gt;

I want to write content that bridges the gap between &lt;span class="gs"&gt;**developers**&lt;/span&gt; 
and &lt;span class="gs"&gt;**security professionals**&lt;/span&gt; — because most developers don't think 
about security, and most security folks don't write clean code.

That gap is exactly where the biggest vulnerabilities live.

&lt;span class="gu"&gt;## What I'm Writing About&lt;/span&gt;

My first article is already live:

👉 &lt;span class="ge"&gt;**&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;How North Korea Poisoned the npm Package You Use Every Day: 
The Axios Supply Chain Attack (2026)&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;#&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="ge"&gt;**&lt;/span&gt;

Coming next:
&lt;span class="p"&gt;-&lt;/span&gt; Windows TCP/IP Wormable Bug CVE-2026-33827 — Explained
&lt;span class="p"&gt;-&lt;/span&gt; How to Build a Secure Login System Beyond Just Passwords
&lt;span class="p"&gt;-&lt;/span&gt; Digital Forensics Tools Every Student Should Know

&lt;span class="gu"&gt;## Let's Connect&lt;/span&gt;

If you're into:
&lt;span class="p"&gt;-&lt;/span&gt; Cybersecurity &amp;amp; ethical hacking
&lt;span class="p"&gt;-&lt;/span&gt; Secure fullstack development
&lt;span class="p"&gt;-&lt;/span&gt; Digital forensics &amp;amp; incident response
&lt;span class="p"&gt;-&lt;/span&gt; CTF challenges

...then hit follow — I'd love to grow together here. 🙌
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="err"&gt;*&lt;/span&gt;Currently learning: Advanced Digital Forensics, Malware Analysis, 
Cloud Security, and React security best practices.&lt;span class="err"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>welcome</category>
      <category>cybersecurity</category>
      <category>java</category>
      <category>webdev</category>
    </item>
    <item>
      <title># How North Korea Poisoned the npm Package You Use Every Day: The Axios Supply Chain Attack (2026)</title>
      <dc:creator>Nouman Ijaz</dc:creator>
      <pubDate>Tue, 21 Apr 2026 04:15:55 +0000</pubDate>
      <link>https://dev.to/noumantechdeveloper/-how-north-korea-poisoned-the-npm-package-you-use-every-day-the-axios-supply-chain-attack-2026-3n47</link>
      <guid>https://dev.to/noumantechdeveloper/-how-north-korea-poisoned-the-npm-package-you-use-every-day-the-axios-supply-chain-attack-2026-3n47</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; — On March 31, 2026, North Korean state-sponsored hackers (UNC1069 / Sapphire Sleet) compromised the &lt;code&gt;axios&lt;/code&gt; npm package — used in &lt;strong&gt;80% of all cloud environments&lt;/strong&gt; with over &lt;strong&gt;100 million weekly downloads&lt;/strong&gt; — and deployed a cross-platform backdoor called WAVESHAPER.V2 for three hours. If you use axios, read this now.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Package That Runs the Internet
&lt;/h2&gt;

&lt;p&gt;Before we talk about the attack, let's appreciate the target.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;axios&lt;/code&gt; is not just another npm package. It is the most widely used JavaScript HTTP client in existence. If you've built a React app, a Next.js project, a Node.js API, or virtually any modern JavaScript application — you've almost certainly used it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;axios
&lt;span class="c"&gt;# Downloaded ~100 million times per week&lt;/span&gt;
&lt;span class="c"&gt;# Present in ~80% of cloud and code environments&lt;/span&gt;
&lt;span class="c"&gt;# One of the top 10 npm packages of all time&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now imagine that package was weaponized by a nation-state actor at midnight on a Sunday. That's exactly what happened.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Timeline: 3 Hours That Shook the Ecosystem
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~2 weeks before  → UNC1069 social engineers axios maintainer Jason Saayman
March 30, 2026   → Attacker gains access to maintainer's npm account
March 31, 00:21 UTC → Malicious axios v1.14.1 and v0.30.4 published to npm
March 31, 00:45 UTC → Sophos detects activity in customer telemetry
March 31, 09:49 PM ET (prior) → Huntress SOC flags wt.exe on multiple endpoints
March 31, ~03:20 UTC → Malicious packages removed from npm registry
Total exposure window: ~3 hours
Estimated victims: ~3% of axios userbase, 135+ endpoints confirmed by Huntress
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three hours. That's all it took for a package present in hundreds of thousands of codebases to become a global attack vector.&lt;/p&gt;




&lt;h2&gt;
  
  
  How the Attack Was Executed
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1 — Social Engineering the Maintainer
&lt;/h3&gt;

&lt;p&gt;This was not a brute-force attack. It was a carefully crafted human deception.&lt;/p&gt;

&lt;p&gt;According to axios maintainer &lt;strong&gt;Jason Saayman&lt;/strong&gt; in his post-mortem, the attackers approached him posing as the founder of a legitimate, well-known company. They had:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cloned the founder's &lt;strong&gt;likeness and identity&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Created a &lt;strong&gt;fully branded Slack workspace&lt;/strong&gt; with plausible channels&lt;/li&gt;
&lt;li&gt;Shared real LinkedIn posts to build credibility&lt;/li&gt;
&lt;li&gt;Scheduled a &lt;strong&gt;Microsoft Teams call&lt;/strong&gt; with him&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When Saayman joined the Teams call, the attackers displayed a technically plausible error message and prompted him to download a native app. When he refused, they asked him to run a &lt;code&gt;curl&lt;/code&gt; command in Terminal. When that also failed, they went dark — but they had already compromised his account weeks earlier through prior interaction.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"They had channels where they were sharing LinkedIn posts. The Slack workspace was thought out very well." — Jason Saayman, axios maintainer&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Step 2 — Account Takeover &amp;amp; Token Abuse
&lt;/h3&gt;

&lt;p&gt;Once the attackers had access, they:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Changed the maintainer email to an attacker-controlled address (&lt;code&gt;ifstap@proton.me&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Used a &lt;strong&gt;long-lived npm access token&lt;/strong&gt; to publish directly via the npm CLI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bypassed 2FA&lt;/strong&gt; entirely — because long-lived tokens don't require it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bypassed GitHub Actions OIDC&lt;/strong&gt; — because when both a token and OIDC credentials are present, npm uses the token
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Critically,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;publish&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;workflow&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;still&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;passed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;NPM_TOKEN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;alongside&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;OIDC&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;credentials&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;When&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;both&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;exist,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;npm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;uses&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;token&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;making&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;OIDC&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;protections&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;irrelevant&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"publish"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npm publish --access public"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is a critical architectural flaw in npm's security model that the attack exposed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3 — Malicious Dependency Injection
&lt;/h3&gt;

&lt;p&gt;The compromised axios versions (1.14.1 and 0.30.4) introduced a hidden dependency:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Inside&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;compromised&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;axios&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;package.json&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"dependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"plain-crypto-js"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"4.2.1"&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;←&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Malicious&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;injected&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;here&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;plain-crypto-js&lt;/code&gt; package was a trojanized dropper. Inside its &lt;code&gt;package.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"test"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"echo &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;Error: no test specified&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; &amp;amp;&amp;amp; exit 1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"postinstall"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"node setup.js"&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;←&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Executes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;automatically&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;npm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;install&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;postinstall&lt;/code&gt; hook is a legitimate npm feature used by many packages. The attackers weaponized it to silently execute malicious code &lt;strong&gt;without any user interaction&lt;/strong&gt; — just running &lt;code&gt;npm install&lt;/code&gt; was enough.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4 — Payload Delivery (WAVESHAPER.V2)
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;setup.js&lt;/code&gt; dropper (internally named &lt;strong&gt;SILKBELL&lt;/strong&gt; by Google's GTIG) performed OS detection and fetched platform-specific payloads from the C2 server at &lt;code&gt;sfrclak[.]com&lt;/code&gt; (IP: &lt;code&gt;142.11.206.73&lt;/code&gt;):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Payload Language&lt;/th&gt;
&lt;th&gt;Capabilities&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Windows&lt;/td&gt;
&lt;td&gt;PowerShell&lt;/td&gt;
&lt;td&gt;System recon, file enumeration, code execution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;macOS&lt;/td&gt;
&lt;td&gt;C++&lt;/td&gt;
&lt;td&gt;Directory enumeration, payload execution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Linux&lt;/td&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;td&gt;Remote access, lateral movement&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The backdoor, &lt;strong&gt;WAVESHAPER.V2&lt;/strong&gt;, was a fully functional RAT capable of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;System reconnaissance and environment fingerprinting&lt;/li&gt;
&lt;li&gt;File system enumeration&lt;/li&gt;
&lt;li&gt;Executing additional payloads remotely&lt;/li&gt;
&lt;li&gt;PE injection (Windows variant)&lt;/li&gt;
&lt;li&gt;Communicating via base64-encoded JSON beacons to evade SIEM detection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The C2 traffic was deliberately crafted to &lt;strong&gt;mimic legitimate npm registry traffic&lt;/strong&gt; using the prefix &lt;code&gt;packages.npm.org&lt;/code&gt; — a clever SIEM evasion technique, since &lt;code&gt;npm.org&lt;/code&gt; (not the actual npm registry) has belonged to the National Association of Pastoral Musicians since 1997.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Fake C2 traffic pattern designed to blend in:&lt;/span&gt;
&lt;span class="nx"&gt;POST&lt;/span&gt; &lt;span class="nx"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//packages.npm.org/product1/[OS-identifier]&lt;/span&gt;
&lt;span class="c1"&gt;// Looks like npm traffic. Is actually C2 communication.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Who Did This? Attribution Deep Dive
&lt;/h2&gt;

&lt;p&gt;Three major security organizations independently attributed this attack:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Organization&lt;/th&gt;
&lt;th&gt;Threat Actor Name&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google GTIG / Mandiant&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;UNC1069&lt;/td&gt;
&lt;td&gt;Active since 2018, financially motivated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Microsoft Threat Intelligence&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sapphire Sleet (aka CryptoCore, BlueNoroff, APT38)&lt;/td&gt;
&lt;td&gt;Focus: crypto, VC, blockchain&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sophos CTU&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;NICKEL GLADSTONE&lt;/td&gt;
&lt;td&gt;Identical forensic metadata and C2 patterns&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These are all names for the same North Korean state-sponsored group — an offshoot of &lt;strong&gt;BlueNoroff&lt;/strong&gt;, a unit under the Lazarus Group, which operates under North Korea's Reconnaissance General Bureau.&lt;/p&gt;

&lt;p&gt;Their primary mission: &lt;strong&gt;generate revenue for the North Korean regime&lt;/strong&gt;. The UN Panel of Experts estimated this group stole approximately &lt;strong&gt;$1.7 billion in cryptocurrency in 2024 alone&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The axios attack marks a significant strategic evolution: instead of targeting individual crypto wallets or exchanges, they're now targeting &lt;strong&gt;development infrastructure itself&lt;/strong&gt; — the tools developers use to build everything else.&lt;/p&gt;




&lt;h2&gt;
  
  
  Are You Affected? How to Check Right Now
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Check if you installed the compromised versions&lt;/span&gt;
npm list axios | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s2"&gt;"1&lt;/span&gt;&lt;span class="se"&gt;\.&lt;/span&gt;&lt;span class="s2"&gt;14&lt;/span&gt;&lt;span class="se"&gt;\.&lt;/span&gt;&lt;span class="s2"&gt;1|0&lt;/span&gt;&lt;span class="se"&gt;\.&lt;/span&gt;&lt;span class="s2"&gt;30&lt;/span&gt;&lt;span class="se"&gt;\.&lt;/span&gt;&lt;span class="s2"&gt;4"&lt;/span&gt;

&lt;span class="c"&gt;# Check your package-lock.json&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s1"&gt;'"axios".*"1\.14\.1|0\.30\.4"'&lt;/span&gt; package-lock.json

&lt;span class="c"&gt;# Check for the malicious dependency&lt;/span&gt;
npm list plain-crypto-js

&lt;span class="c"&gt;# Audit your full dependency tree&lt;/span&gt;
npm audit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;If you find axios 1.14.1 or 0.30.4:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Update to a clean version immediately&lt;/span&gt;
npm &lt;span class="nb"&gt;install &lt;/span&gt;axios@latest

&lt;span class="c"&gt;# Remove plain-crypto-js if present&lt;/span&gt;
npm uninstall plain-crypto-js

&lt;span class="c"&gt;# Check for the malicious binary on Windows&lt;/span&gt;
&lt;span class="c"&gt;# Look for: C:\ProgramData\wt.exe&lt;/span&gt;

&lt;span class="c"&gt;# Check C2 connections in your logs&lt;/span&gt;
&lt;span class="c"&gt;# IOC: sfrclak[.]com | 142.11.206.73&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Treat any system that installed either version as fully compromised.&lt;/strong&gt; Removing the package does not undo backdoor deployment — the RAT may already have established persistence.&lt;/p&gt;




&lt;h2&gt;
  
  
  Indicators of Compromise (IOCs)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Malicious packages&lt;/span&gt;
&lt;span class="s"&gt;axios@1.14.1&lt;/span&gt;
&lt;span class="s"&gt;axios@0.30.4&lt;/span&gt;
&lt;span class="s"&gt;plain-crypto-js@4.2.1&lt;/span&gt;

&lt;span class="c1"&gt;# Attacker-controlled email&lt;/span&gt;
&lt;span class="s"&gt;ifstap@proton.me&lt;/span&gt;

&lt;span class="c1"&gt;# C2 Infrastructure&lt;/span&gt;
&lt;span class="na"&gt;Domain&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sfrclak[.]com&lt;/span&gt;
&lt;span class="na"&gt;IP&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;     &lt;span class="s"&gt;142.11.206.73&lt;/span&gt;

&lt;span class="c1"&gt;# Malicious binary (Windows)&lt;/span&gt;
&lt;span class="s"&gt;C:\ProgramData\wt.exe&lt;/span&gt;

&lt;span class="c1"&gt;# SILKBELL dropper (setup.js) SHA256&lt;/span&gt;
&lt;span class="s"&gt;e10b1fa84f1d6481625f741b69892780140d4e0e7769e7491e5f4d894c2e0e09&lt;/span&gt;

&lt;span class="c1"&gt;# WAVESHAPER.V2 (PowerShell) MD5&lt;/span&gt;
&lt;span class="s"&gt;04e3073b3cd5c5bfcde6f575ecf6e8c1&lt;/span&gt;

&lt;span class="c1"&gt;# WAVESHAPER.V2 (SILKBELL) MD5&lt;/span&gt;
&lt;span class="s"&gt;7658962ae060a222c0058cd4e979bfa1&lt;/span&gt;

&lt;span class="c1"&gt;# C2 traffic pattern (SIEM evasion)&lt;/span&gt;
&lt;span class="s"&gt;packages.npm.org/product[1-4]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  The Bigger Security Lessons
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Lesson 1: The &lt;code&gt;postinstall&lt;/code&gt; Hook Is a Danger Zone
&lt;/h3&gt;

&lt;p&gt;The npm &lt;code&gt;postinstall&lt;/code&gt; lifecycle script executes automatically after every &lt;code&gt;npm install&lt;/code&gt;. It requires no user approval, no prompt, no confirmation. This is a &lt;strong&gt;systemic design issue&lt;/strong&gt; that has now been weaponized at scale.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Before installing any package, inspect its postinstall scripts&lt;/span&gt;
npm pack &lt;span class="o"&gt;[&lt;/span&gt;package-name] &lt;span class="nt"&gt;--dry-run&lt;/span&gt;
&lt;span class="nb"&gt;cat &lt;/span&gt;node_modules/[package]/package.json | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-A5&lt;/span&gt; &lt;span class="s1"&gt;'"scripts"'&lt;/span&gt;

&lt;span class="c"&gt;# Or use a tool like Socket.dev to scan before install&lt;/span&gt;
npx socket npm &lt;span class="nb"&gt;install &lt;/span&gt;axios
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Lesson 2: Long-Lived Tokens Are a Liability
&lt;/h3&gt;

&lt;p&gt;The attackers didn't need to crack any passwords. They used a &lt;strong&gt;long-lived access token&lt;/strong&gt; that bypassed all other security controls — 2FA, OIDC, hardware keys. All of it irrelevant.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Audit your npm tokens&lt;/span&gt;
npm token list

&lt;span class="c"&gt;# Revoke all tokens and rotate&lt;/span&gt;
npm token revoke &lt;span class="o"&gt;[&lt;/span&gt;token-id]

&lt;span class="c"&gt;# Use granular, short-lived tokens with publish restrictions&lt;/span&gt;
npm token create &lt;span class="nt"&gt;--read-only&lt;/span&gt;
npm token create &lt;span class="nt"&gt;--cidr&lt;/span&gt;&lt;span class="o"&gt;=[&lt;/span&gt;your-ci-ip-range]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Lesson 3: Social Engineering Targets Humans, Not Systems
&lt;/h3&gt;

&lt;p&gt;No technical control stopped this attack. The attacker defeated the human first. As security researcher Taylor Monahan put it, this evolution of targeting OSS maintainers is concerning because &lt;strong&gt;maintainers are the trusted root of the entire open-source supply chain&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Red flags the maintainer could have caught:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A video call that requires you to download a new app&lt;/li&gt;
&lt;li&gt;Being asked to run &lt;code&gt;curl&lt;/code&gt; commands during a meeting&lt;/li&gt;
&lt;li&gt;A meeting where the other party's video "doesn't work"&lt;/li&gt;
&lt;li&gt;An urgent request to publish or push code&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Lesson 4: Dependency Pinning Is Non-Negotiable
&lt;/h3&gt;

&lt;p&gt;Any project with &lt;code&gt;axios@^1.14.0&lt;/code&gt; or &lt;code&gt;axios@^0.30.0&lt;/code&gt; in &lt;code&gt;package.json&lt;/code&gt; would have &lt;strong&gt;automatically pulled the malicious version&lt;/strong&gt; on &lt;code&gt;npm install&lt;/code&gt; — because the &lt;code&gt;^&lt;/code&gt; caret allows minor version upgrades.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Vulnerable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;caret&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;allows&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;auto-upgrade&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1.14&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"dependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"axios"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^1.13.0"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Safer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;pin&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;exact&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;version&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"dependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"axios"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.13.0"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Better yet, use a lockfile (&lt;code&gt;package-lock.json&lt;/code&gt; or &lt;code&gt;yarn.lock&lt;/code&gt;) and &lt;strong&gt;commit it to version control&lt;/strong&gt;. Then use &lt;code&gt;npm ci&lt;/code&gt; instead of &lt;code&gt;npm install&lt;/code&gt; in CI/CD pipelines — it installs exactly what's in the lockfile.&lt;/p&gt;




&lt;h2&gt;
  
  
  What npm / GitHub Is Doing Now
&lt;/h2&gt;

&lt;p&gt;In response to this incident, GitHub announced:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mandatory short-lived tokens&lt;/strong&gt; for all packages with 1M+ weekly downloads, effective June 2026&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;"critical package" designation&lt;/strong&gt; for the top 500 most-depended-upon packages, requiring two-person publish approval&lt;/li&gt;
&lt;li&gt;Accelerated rollout of &lt;strong&gt;additional identity verification&lt;/strong&gt; for high-impact maintainers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are good steps — but they come after the fact.&lt;/p&gt;




&lt;h2&gt;
  
  
  Hardening Your Supply Chain: A Practical Checklist
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Use npm audit in CI/CD — fail the build on high severity&lt;/span&gt;
npm audit &lt;span class="nt"&gt;--audit-level&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;high

&lt;span class="c"&gt;# 2. Use Socket.dev or Snyk to scan for suspicious postinstall hooks&lt;/span&gt;
npx socket scan &lt;span class="nb"&gt;.&lt;/span&gt;

&lt;span class="c"&gt;# 3. Enable npm provenance attestations (verify package origin)&lt;/span&gt;
&lt;span class="c"&gt;# Check: https://docs.npmjs.com/generating-provenance-statements&lt;/span&gt;

&lt;span class="c"&gt;# 4. Use Dependabot or Renovate with pinned versions + PR review&lt;/span&gt;
&lt;span class="c"&gt;# Never auto-merge dependency updates without review&lt;/span&gt;

&lt;span class="c"&gt;# 5. Monitor your node_modules for unexpected binaries&lt;/span&gt;
find node_modules &lt;span class="nt"&gt;-name&lt;/span&gt; &lt;span class="s2"&gt;"*.exe"&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; &lt;span class="nt"&gt;-name&lt;/span&gt; &lt;span class="s2"&gt;"wt.exe"&lt;/span&gt; 2&amp;gt;/dev/null

&lt;span class="c"&gt;# 6. Block outbound connections from your build environment&lt;/span&gt;
&lt;span class="c"&gt;# Your npm install should NOT be making requests to unknown domains&lt;/span&gt;

&lt;span class="c"&gt;# 7. Use private npm mirrors or artifact caches (Verdaccio, Artifactory)&lt;/span&gt;
&lt;span class="c"&gt;# Gives you time to vet packages before they reach developers&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  The Uncomfortable Truth
&lt;/h2&gt;

&lt;p&gt;Every major JavaScript project in the world has &lt;code&gt;axios&lt;/code&gt; in its dependency tree. For approximately three hours on a Sunday night, every new &lt;code&gt;npm install&lt;/code&gt; in any project using &lt;code&gt;axios@^1.14.0&lt;/code&gt; was deploying North Korean malware.&lt;/p&gt;

&lt;p&gt;The malicious packages were removed within three hours. That sounds reassuring. But:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;3% of the axios userbase&lt;/strong&gt; downloaded the malicious versions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;135+ endpoints&lt;/strong&gt; were confirmed compromised by Huntress alone&lt;/li&gt;
&lt;li&gt;Any system that ran the installer is &lt;strong&gt;still compromised&lt;/strong&gt; even after the package was removed&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;full breadth of post-compromise activity&lt;/strong&gt; is still unknown&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As John Hultquist, Chief Analyst at Google GTIG, stated: &lt;em&gt;"Given the popularity of the compromised package, we expect it will have far-reaching impacts."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Supply chain attacks are not a future threat. They are happening right now, to the packages you install every day. The axios attack is a wake-up call for every developer to treat their dependency tree as a &lt;strong&gt;security-critical attack surface&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Audit your axios version immediately&lt;/strong&gt; — check for 1.14.1 or 0.30.4&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pin your dependencies&lt;/strong&gt; — stop using &lt;code&gt;^&lt;/code&gt; for critical packages&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rotate your npm tokens&lt;/strong&gt; — long-lived tokens are ticking time bombs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add &lt;code&gt;npm audit&lt;/code&gt; to your CI/CD pipeline&lt;/strong&gt; — make it a build gate&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Educate your team on social engineering&lt;/strong&gt; — the human is always the weakest link&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assume compromise if exposed&lt;/strong&gt; — removal of the package is not remediation&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  References &amp;amp; Further Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://cloud.google.com/blog/topics/threat-intelligence/north-korea-threat-actor-targets-axios-npm-package" rel="noopener noreferrer"&gt;Google GTIG Official Attribution Report&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.microsoft.com/en-us/security/blog/2026/04/01/mitigating-the-axios-npm-supply-chain-compromise/" rel="noopener noreferrer"&gt;Microsoft Security Blog — Mitigating the Axios Compromise&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.huntress.com/blog/supply-chain-compromise-axios-npm-package" rel="noopener noreferrer"&gt;Huntress — Full Technical Analysis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.securityweek.com/axios-npm-package-breached-in-north-korean-supply-chain-attack/" rel="noopener noreferrer"&gt;SecurityWeek — Attack Breakdown&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thehackernews.com/2026/04/unc1069-social-engineering-of-axios.html" rel="noopener noreferrer"&gt;The Hacker News — UNC1069 Social Engineering Details&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.sophos.com/en-us/blog/axios-npm-package-compromised-to-deploy-malware" rel="noopener noreferrer"&gt;Sophos CTU Analysis&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;If this post helped you, drop a ❤️ and share it with your team. Every developer in your organization should know about this. Follow me for more security deep-dives at the intersection of cybersecurity and software development.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;code&gt;#security&lt;/code&gt; &lt;code&gt;#javascript&lt;/code&gt; &lt;code&gt;#npm&lt;/code&gt; &lt;code&gt;#nodejs&lt;/code&gt; &lt;code&gt;#supplychain&lt;/code&gt; &lt;code&gt;#cybersecurity&lt;/code&gt; &lt;code&gt;#northkorea&lt;/code&gt; &lt;code&gt;#devto&lt;/code&gt; &lt;code&gt;#infosec&lt;/code&gt; &lt;code&gt;#webdev&lt;/code&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>javascript</category>
      <category>node</category>
    </item>
  </channel>
</rss>
