<?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: couch potato</title>
    <description>The latest articles on DEV Community by couch potato (@couch_potato).</description>
    <link>https://dev.to/couch_potato</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3999516%2F18a8cf39-4b92-4827-93c7-0245026af474.png</url>
      <title>DEV Community: couch potato</title>
      <link>https://dev.to/couch_potato</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/couch_potato"/>
    <language>en</language>
    <item>
      <title>Malware spread across my 3 git repos during Copilot agent sessions — Void Dokkaebi campaign, TronGrid C2, and an open question about AI coding agents</title>
      <dc:creator>couch potato</dc:creator>
      <pubDate>Sat, 27 Jun 2026 21:28:34 +0000</pubDate>
      <link>https://dev.to/couch_potato/malware-spread-across-my-3-git-repos-during-copilot-agent-sessions-void-dokkaebi-campaign-4nj7</link>
      <guid>https://dev.to/couch_potato/malware-spread-across-my-3-git-repos-during-copilot-agent-sessions-void-dokkaebi-campaign-4nj7</guid>
      <description>&lt;p&gt;&lt;em&gt;TL;DR: Found malicious code (Void Dokkaebi campaign, TRON blockchain C2) spread across 3 of my repos on macOS. All infected commits happened during VS Code Copilot agent sessions. Still determining if that's coincidence or the delivery mechanism. Here's how to check your own projects.&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  What I found
&lt;/h3&gt;

&lt;p&gt;Three files infected across three repos in one VS Code workspace:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Backend&lt;/strong&gt; → &lt;code&gt;routes/user.js&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend A&lt;/strong&gt; → &lt;code&gt;tailwind.config.js&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend B&lt;/strong&gt; → &lt;code&gt;tailwind.config.js&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All committed under my identity. All bundled inside meaningful multi-file commits. All pointing to &lt;code&gt;api.trongrid.io&lt;/code&gt; (TRON blockchain) as C2, with &lt;code&gt;eval()&lt;/code&gt; execution of decoded payloads.&lt;/p&gt;

&lt;p&gt;This matches the Void Dokkaebi campaign documented by Trend Micro — a DPRK-attributed threat actor that specifically targets JS developers, injects code into config files, and spoofs commits under the victim's identity.&lt;/p&gt;

&lt;h3&gt;
  
  
  The part that isn't in the report
&lt;/h3&gt;

&lt;p&gt;Every single infected commit was made during &lt;strong&gt;an active VS Code Copilot agent session&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The Trend Micro report's documented mechanism involves an attacker with remote access running a commit-tampering script (&lt;code&gt;temp_auto_push.bat&lt;/code&gt;). That's possible here too, maybe using something similar for macOS — but the agent sessions raise other possibilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prompt injection&lt;/strong&gt;: A malicious instruction embedded in a workspace file could have manipulated the agent into writing attacker-controlled code into other files during a legitimate task&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extension context poisoning&lt;/strong&gt;: A compromised VS Code extension could contribute malicious content into Copilot's context window invisibly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Organic propagation&lt;/strong&gt;: The agent, reading broadly across the workspace, may have spread already-injected code into other files incidentally&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I can't currently rule any of these out. The agent session timing may also be pure coincidence — multi-file meaningful commits are exactly what agent sessions look like, which is precisely what makes them good camouflage regardless of mechanism.&lt;/p&gt;

&lt;h3&gt;
  
  
  Check for unknown running node process
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; ps aux | &lt;span class="nb"&gt;grep &lt;/span&gt;node
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It should list only known process that you've started from a known file location.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scan your projects
&lt;/h3&gt;

&lt;p&gt;Check for long obfuscated code in places it shouldn't be,&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;routes/*.js&lt;/li&gt;
&lt;li&gt;*.config.js/ts/mjs..etc eg., tailwind.config.js, vite.config.mjs.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;_Detection scripts attached below. _&lt;/p&gt;

&lt;h3&gt;
  
  
  Especially check if:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You use Copilot agent or another agentic coding tool across a multi-repo workspace&lt;/li&gt;
&lt;li&gt;You've ever cloned a repo from a recruiter or technical assessment&lt;/li&gt;
&lt;li&gt;You work with multiple JS projects open simultaneously, in VS Code.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  If you find it
&lt;/h3&gt;

&lt;p&gt;Stop committing from that machine, assume everything is touched.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Revoke all tokens (GitHub, npm, SSH keys, cloud providers)&lt;/li&gt;
&lt;li&gt;Reset all secrets in that project. &lt;/li&gt;
&lt;li&gt;Notify your repo collaborators 

&lt;ul&gt;
&lt;li&gt;Inform all who have cloned / forked the infected code.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Still collecting data. Drop a comment if you've seen this — especially if you were also using agentic coding tools when it happened. That's the specific data point I'm trying to gather.&lt;br&gt;
Detection scripts + full writeup in &lt;a href="https://github.com/Potat0-0/marauders-map/tree/main" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; and &lt;a href="https://medium.com/@potatocouch729/i-found-north-korean-dprk-malware-hiding-in-my-tailwind-config-js-45af2283742c?sk=fb3831f30d6e942e604362bc92cc622f" rel="noopener noreferrer"&gt;Medium&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>javascript</category>
      <category>vscode</category>
      <category>ai</category>
    </item>
    <item>
      <title>I found North Korean malware in my tailwind.config.js — here's the 5-minute scan to check your own machine</title>
      <dc:creator>couch potato</dc:creator>
      <pubDate>Wed, 24 Jun 2026 15:47:28 +0000</pubDate>
      <link>https://dev.to/couch_potato/i-found-north-korean-malware-in-my-tailwindconfigjs-heres-the-5-minute-scan-to-check-your-own-1nnh</link>
      <guid>https://dev.to/couch_potato/i-found-north-korean-malware-in-my-tailwindconfigjs-heres-the-5-minute-scan-to-check-your-own-1nnh</guid>
      <description>&lt;p&gt;&lt;code&gt;tailwind.config.js&lt;/code&gt; and similar config files load and execute at build time in most modern frameworks — meaning code placed there runs with whatever environment access your build process has, often including CI/CD secrets. They are also the files reviewers' eyes slide right past, because "config file" doesn't read as "executable code" to most developers, even though it is.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cross-posted from my Medium series on a real Void Dokkaebi-style infection. Full writeup and incident response details linked at the end. Scripts are on GitHub.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;I found obfuscated JavaScript in my &lt;code&gt;tailwind.config.js&lt;/code&gt;. Not in a dependency, not in &lt;code&gt;node_modules&lt;/code&gt; — in the config file, committed with my github account. &lt;strong&gt;All commits found&lt;/strong&gt; in three different repositories, &lt;strong&gt;under my own identity&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcuewco3necep7zw6pjh6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcuewco3necep7zw6pjh6.png" alt="A hidden obfuscated code block in unsuspecting tailwind.config.js" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Potat0-0/marauders-map/blob/main/iocs/tailwind.config.js" rel="noopener noreferrer"&gt;Sample infected file&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I ran Malwarebytes on it, more than once, pointed directly at the file. Nothing. macOS's own built-in security didn't flag it either. It was built well enough that the tools whose entire job is catching this didn't.&lt;/p&gt;

&lt;p&gt;A Void Dokkaebi-style infection (the DPRK-linked threat group also tracked as Famous Chollima / UNC5342) with a JSON-RPC beacon calling &lt;code&gt;api.trongrid.io&lt;/code&gt; every 30 seconds, reading my environment variables, looking for crypto wallet credentials. &lt;strong&gt;I found three infected file locally, then six unexplained processes running in production.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This post is the "run this now" version. Full investigation, deobfuscation steps, and incident response timeline are in the linked post.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run this right now (takes under 5 minutes)
&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. Check for processes you don't recognize&lt;/span&gt;
ps aux | &lt;span class="nb"&gt;grep &lt;/span&gt;node

&lt;span class="c"&gt;# 2. Scan for encoded payload blobs&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="nt"&gt;--include&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"*.js"&lt;/span&gt; &lt;span class="nt"&gt;--include&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"*.ts"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s2"&gt;"[A-Za-z0-9+/]{200,}={0,2}"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;--exclude-dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;node_modules &lt;span class="nt"&gt;-l&lt;/span&gt;

&lt;span class="c"&gt;# 3. Check your config files for code that shouldn't be there&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-rn&lt;/span&gt; &lt;span class="s2"&gt;"function&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;eval&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;btoa&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;atob&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;setInterval&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;setTimeout"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  tailwind.config.js next.config.js vite.config.js &lt;span class="se"&gt;\&lt;/span&gt;
  webpack.config.js babel.config.js 2&amp;gt;/dev/null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;If any of these return something you didn't put there: stop, don't push, don't deploy, kill the process, rotate your secrets. (And if you're killing processes that respawn, &lt;code&gt;watch -n 5 'ps aux | grep node'&lt;/code&gt; to keep an eye on it.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I still don't have a confirmed entry vector — that part of the investigation is ongoing. &lt;/p&gt;

&lt;p&gt;I built out a full detection suite from this incident — process scanners, encoded-string detectors, a composite Void Dokkaebi pattern scan. All in the &lt;a href="https://github.com/Potat0-0/marauders-map/tree/main/scripts" rel="noopener noreferrer"&gt;/scripts&lt;/a&gt; folder:&lt;/p&gt;

&lt;p&gt;🔗 GitHub: &lt;a href="https://github.com/Potat0-0/marauders-map" rel="noopener noreferrer"&gt;github.com/Potat0-0/marauders-map&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you find this useful, a star helps other devs find it. If you've seen a similar infection — especially commits under your own identity, especially on macOS — I'd genuinely like to compare notes. I filed a &lt;a href="https://www.reddit.com/r/AskNetsec/s/UnCcPPk5cK" rel="noopener noreferrer"&gt;Security StackExchange thread&lt;/a&gt; that's becoming a collection point for similar reports.&lt;/p&gt;

&lt;p&gt;Full writeup, and incident response details -&amp;gt; &lt;a href="https://medium.com/@potatocouch729/i-found-north-korean-dprk-malware-hiding-in-my-tailwind-config-js-45af2283742c?sk=fb3831f30d6e942e604362bc92cc622f" rel="noopener noreferrer"&gt;Medium Post&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>security</category>
      <category>cryptocurrency</category>
    </item>
  </channel>
</rss>
