<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Tracenyx Blog]]></title><description><![CDATA[The Tracenyx engineering blog. We write about Kubernetes network security, Linux eBPF, Windows WFP , zero trust policy enforcement, and AI-powered observability]]></description><link>https://blog.tracenyx.ai</link><image><url>https://cdn.hashnode.com/uploads/logos/69d65cc5707c1ce7683c466b/8cfd9aaa-113c-4f74-a858-844dbbc17060.png</url><title>Tracenyx Blog</title><link>https://blog.tracenyx.ai</link></image><generator>RSS for Node</generator><lastBuildDate>Sun, 10 May 2026 02:26:40 GMT</lastBuildDate><atom:link href="https://blog.tracenyx.ai/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[How Zero Trust Egress Policy Contains a Supply Chain Attack — The Axios npm Case]]></title><description><![CDATA[April 2026 · Tracenyx Security Team

On March 31, 2026, engineers across the world woke up to a serious supply chain attack. Two versions of Axios — the JavaScript HTTP client with over 100 million we]]></description><link>https://blog.tracenyx.ai/axios-npm-supply-chain-zero-trust-egress</link><guid isPermaLink="true">https://blog.tracenyx.ai/axios-npm-supply-chain-zero-trust-egress</guid><category><![CDATA[Kubernetes]]></category><category><![CDATA[Security]]></category><category><![CDATA[supply chain]]></category><category><![CDATA[zerotrust]]></category><category><![CDATA[eBPF]]></category><dc:creator><![CDATA[Tracenyx Team]]></dc:creator><pubDate>Fri, 10 Apr 2026 00:58:49 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69d65cc5707c1ce7683c466b/a0e1218e-480a-4b09-964c-ecb7cf960b24.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>April 2026 · Tracenyx Security Team</em></p>
<hr />
<p>On March 31, 2026, engineers across the world woke up to a serious supply chain attack. Two versions of Axios — the JavaScript HTTP client with over 100 million weekly downloads — were found to contain malware. The attacker was a North Korean state-sponsored group. The blast radius was potentially enormous.</p>
<p>This post explains what happened, what it means for teams running workloads in Kubernetes, and — honestly — what Nyx can and cannot do about it.</p>
<hr />
<h2>What Happened</h2>
<p>The attacker compromised the npm account of the lead Axios maintainer and published two backdoored versions — <code>axios@1.14.1</code> and <code>axios@0.30.4</code> — within a 39-minute window. Both were tagged as <code>latest</code>, meaning any project running <code>npm install axios</code> without a pinned version automatically pulled the malicious package.</p>
<p>The attack chain was elegant and precise:</p>
<pre><code class="language-plaintext">npm install axios@1.14.1
  → pulls plain-crypto-js@4.2.1 (malicious dependency)
    → postinstall hook executes setup.js silently
      → contacts C2 at sfrclak.com:8000
        → downloads platform-specific RAT
          → Windows / macOS / Linux all targeted
</code></pre>
<p>No Axios source code was modified. The malicious behaviour lived entirely in a transitive dependency triggered automatically by npm's postinstall lifecycle. Traditional code review would not have caught it.</p>
<p>Microsoft Threat Intelligence attributed the attack to Sapphire Sleet, a North Korean state actor. Google Threat Intelligence Group tracks the same actor as UNC1069.</p>
<hr />
<h2>The Kubernetes Angle</h2>
<p>Most analysis of this attack focused on developer workstations and CI/CD pipelines — and rightly so, those are the primary targets. But if your Kubernetes cluster runs Node.js workloads that install npm packages as part of their build or startup process, the same attack surface exists inside your cluster.</p>
<p>Consider a common pattern:</p>
<pre><code class="language-plaintext">Kubernetes pod:
  → Node.js application
  → npm install runs at container build time
  → Malicious axios version pulled
  → Container image now contains RAT
  → Pod starts — RAT executes
  → RAT tries to beacon to sfrclak.com:8000
</code></pre>
<p>At this point, the malware is running inside your cluster. The question is: what happens next?</p>
<hr />
<h2>What Nyx Blocks — And What It Doesn't</h2>
<p>We want to be direct about this, because trust matters more than marketing.</p>
<h3>What Nyx cannot stop</h3>
<p>Nyx is a network policy engine. It operates at the network layer — Layer 3 and Layer 4. It does not inspect npm packages, analyse container images, or intercept process execution inside a pod (process-level visibility via eBPF syscall tracepoints is on our roadmap).</p>
<p>If a compromised Axios package is installed in your container image and the RAT executes, Nyx cannot prevent that execution. That is the job of image scanning tools (Trivy, Grype), supply chain security tools (Sigstore, SLSA), and endpoint detection tools.</p>
<h3>What Nyx stops cold</h3>
<p>This is where the story gets interesting.</p>
<p><strong>The C2 beacon.</strong> The RAT's first action after executing is to contact <code>sfrclak.com:8000</code> to receive commands and download second-stage payloads. Without a successful C2 connection, the RAT is inert.</p>
<p>With Nyx zero trust egress policy, every pod has an explicit list of approved outbound destinations. Anything not on that list is denied at the kernel level — eBPF on Linux, WFP on Windows.</p>
<pre><code class="language-yaml"># Example: payments service egress policy
apiVersion: nyx.tracenyx.io/v1alpha1
kind: NyxNetworkPolicy
metadata:
  name: payments-egress
  namespace: cloudmart-payments
spec:
  podSelector:
    matchLabels:
      app: payments
  policyTypes:
  - Egress
  egress:
  - decision: Allow
    toFqdn:
      matchName: api.stripe.com
    toPorts:
      port: 443
  - decision: Allow
    toFqdn:
      matchName: approved-storage.blob.core.windows.net
    toPorts:
      port: 443
  - decision: Deny
    toFqdn:
      matchPattern: "*"
</code></pre>
<p><code>sfrclak.com</code> is not on the approved list. The C2 beacon is blocked at the kernel before it leaves the node. The RAT cannot receive commands. The second-stage payload never downloads.</p>
<p>As the StepSecurity team noted in their analysis: <em>"If the C2 is unreachable, the chain silently fails — npm install still exits 0."</em> The malware runs but accomplishes nothing.</p>
<p><strong>Data exfiltration.</strong> Even if the RAT managed to establish persistence through some other channel, it needs to send data back. Filesystem enumeration results, running processes, harvested credentials — all need to leave your cluster. With Nyx egress policy, that data has nowhere to go.</p>
<p><strong>Lateral movement.</strong> A compromised frontend pod should never be able to reach your payments namespace, your database namespace, or your secrets. Nyx zero trust policy enforces this at the network level. Even a fully compromised pod is contained to the blast radius of its own namespace.</p>
<hr />
<h2>The FQDN Egress Point Deserves More Attention</h2>
<p>Traditional network firewalls work on IP addresses. Azure Blob Storage, AWS S3, and many other cloud services share IP ranges across thousands of customers. A firewall rule allowing <code>*.blob.core.windows.net</code> also allows an attacker's blob account on the same IP range.</p>
<p>Nyx enforces egress policy at the FQDN level by inspecting the TLS SNI header at the kernel. This means:</p>
<pre><code class="language-plaintext">approved-storage.blob.core.windows.net  → ✅ Allowed
attacker-storage.blob.core.windows.net  → ❌ Blocked

Same IP address. Different enforcement result.
</code></pre>
<p>This is not something a traditional firewall can do. It is what kernel-level SNI inspection enables — and it directly addresses the data exfiltration path that a RAT would use.</p>
<hr />
<h2>What You Should Do Right Now</h2>
<p>Regardless of Nyx, if you run Node.js workloads:</p>
<ol>
<li><p><strong>Check for the malicious versions</strong> — <code>axios@1.14.1</code> and <code>axios@0.30.4</code></p>
</li>
<li><p><strong>Check for RAT artifacts</strong> — <code>/tmp/ld.py</code> (Linux), <code>%PROGRAMDATA%\wt.exe</code> (Windows), <code>/Library/Caches/com.apple.act.mond</code> (macOS)</p>
</li>
<li><p><strong>Block the C2 domain</strong> — <code>sfrclak.com</code> and <code>142.11.206.73</code> at your perimeter</p>
</li>
<li><p><strong>Downgrade Axios</strong> — to <code>1.14.0</code> or <code>0.30.3</code> (last clean versions)</p>
</li>
<li><p><strong>Audit your CI/CD pipelines</strong> — for runs that installed the affected versions between March 31 00:21 UTC and 03:15 UTC</p>
</li>
<li><p><strong>Rotate credentials</strong> — if any pipeline was exposed during that window</p>
</li>
</ol>
<p>For your Kubernetes clusters specifically:</p>
<ol>
<li><p><strong>Review your egress policies</strong> — do your pods have default-allow egress? If so, any malware that executes can call home freely</p>
</li>
<li><p><strong>Implement FQDN-level egress control</strong> — know exactly what external endpoints each service is allowed to reach</p>
</li>
<li><p><strong>Check your Windows nodes</strong> — the RAT specifically targets Windows with a PowerShell backdoor — your Windows Kubernetes nodes are in scope</p>
</li>
</ol>
<hr />
<h2>The Broader Point</h2>
<p>Supply chain attacks are not going away. The Axios attack followed SolarWinds, XZ Utils, and dozens of others in a clear pattern — compromise a trusted dependency, achieve broad downstream reach, blend in with legitimate traffic.</p>
<p>The security community's response has rightly focused on supply chain hygiene: pin your dependencies, verify provenance, use SLSA attestation, scan your images.</p>
<p>But defence in depth matters. Even if malware gets in — and it will, eventually — zero trust network policy means it cannot call home, cannot move laterally, and cannot exfiltrate data. A RAT with no C2 connection is just dead code sitting in a container.</p>
<p>That is the layer Nyx provides. Not the only layer you need. But a critical one.</p>
<hr />
<h2>About Nyx</h2>
<p>Nyx is an AI-powered Kubernetes network security and observability platform built by Tracenyx. It enforces zero trust network policy at the kernel level — eBPF on Linux, WFP on Windows — from a single unified control plane.</p>
<p><a href="https://tracenyx.ai">Try Nyx free →</a><br /><a href="https://tracenyx.ai#contact">Contact us →</a></p>
<hr />
<p><em>IOCs referenced in this post:</em></p>
<ul>
<li><p><em>Malicious packages:</em> <code>axios@1.14.1</code><em>,</em> <code>axios@0.30.4</code><em>,</em> <code>plain-crypto-js@4.2.1</code></p>
</li>
<li><p><em>C2 domain:</em> <code>sfrclak[.]com</code></p>
</li>
<li><p><em>C2 IP:</em> <code>142.11.206[.]73</code></p>
</li>
<li><p><em>Attribution: Sapphire Sleet / UNC1069 (North Korea-nexus)</em></p>
</li>
<li><p><em>Sources: Microsoft Security Blog, Google Threat Intelligence Group, Elastic Security Labs, StepSecurity</em> EOF</p>
</li>
</ul>
]]></content:encoded></item></channel></rss>