<?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: Abdul Rehman</title>
    <description>The latest articles on DEV Community by Abdul Rehman (@abdul_rehman_90cb34d3a146).</description>
    <link>https://dev.to/abdul_rehman_90cb34d3a146</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%2F4218608%2F7461b6bd-fe6e-43a8-8333-d5a242795e1e.png</url>
      <title>DEV Community: Abdul Rehman</title>
      <link>https://dev.to/abdul_rehman_90cb34d3a146</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/abdul_rehman_90cb34d3a146"/>
    <language>en</language>
    <item>
      <title>Claude Code for VS Code 2.1.313 backdoor: how to check your machine and clean up</title>
      <dc:creator>Abdul Rehman</dc:creator>
      <pubDate>Sat, 31 Oct 2026 08:15:04 +0000</pubDate>
      <link>https://dev.to/abdul_rehman_90cb34d3a146/claude-code-for-vs-code-21313-backdoor-how-to-check-your-machine-and-clean-up-55k8</link>
      <guid>https://dev.to/abdul_rehman_90cb34d3a146/claude-code-for-vs-code-21313-backdoor-how-to-check-your-machine-and-clean-up-55k8</guid>
      <description>&lt;p&gt;Security firm Phorion published an advisory on October 30, 2026 saying that release 2.1.313 of Claude Code for VS Code, as served through the Cursor Marketplace, carried a hidden backdoor. Cursor has pulled the release, and the advisory says the NPM and VS Code versions of 2.1.313 were pulled too. Uninstalling the extension does not remove what it installed. Phorion is the only primary source so far, so every technical detail below is its finding.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the code did
&lt;/h2&gt;

&lt;p&gt;Phorion found an extra block of code inserted at the top of &lt;code&gt;extension.js&lt;/code&gt;. Because it sat above everything else, it ran as soon as Node loaded the file, before the extension's &lt;code&gt;activate&lt;/code&gt; function and without any prompt.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;A spare login key.&lt;/strong&gt; It appended an Ed25519 SSH key labelled &lt;code&gt;svc-telemetry&lt;/code&gt; to &lt;code&gt;~/.ssh/authorized_keys&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A tunnel that dials out.&lt;/strong&gt; It opened an SSH connection to &lt;code&gt;134.209.82[.]225&lt;/code&gt; on port 22 as user &lt;code&gt;tunnel&lt;/code&gt;, with a reverse tunnel (&lt;code&gt;-R *:0:localhost:22&lt;/code&gt;), so the attacker's server could reach your own SSH service. The key it used was stored at &lt;code&gt;$TMPDIR/.stk_&lt;/code&gt; plus 10 hex characters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A beacon.&lt;/strong&gt; It sent one HTTP POST to &lt;code&gt;/beacon&lt;/code&gt; on port 8099 of the same address with your hostname, username, platform, CPU architecture, Git email, public IP and the names of up to 40 environment variables matching KEY, TOKEN, SECRET, PASS, AWS or GCP.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why removing the extension is not enough
&lt;/h2&gt;

&lt;p&gt;Per Phorion, it installed persistence on every major desktop system, and it retries the connection every 60 seconds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;macOS:&lt;/strong&gt; a LaunchAgent at &lt;code&gt;~/Library/LaunchAgents/com.apple.sysmond.plist&lt;/code&gt;, plus &lt;code&gt;~/.config/.smt&lt;/code&gt; and &lt;code&gt;.smtk&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Linux:&lt;/strong&gt; an &lt;code&gt;@reboot&lt;/code&gt; cron entry.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Windows:&lt;/strong&gt; a scheduled task named &lt;code&gt;SysMon&lt;/code&gt;, or a &lt;code&gt;sysmon.cmd&lt;/code&gt; file in the Startup folder.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to check
&lt;/h2&gt;

&lt;p&gt;Run these on any machine that had 2.1.313 installed in Cursor or VS Code:&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="nb"&gt;grep &lt;/span&gt;svc-telemetry ~/.ssh/authorized_keys
&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-la&lt;/span&gt; ~/Library/LaunchAgents/com.apple.sysmond.plist ~/.config/.smt&lt;span class="k"&gt;*&lt;/span&gt; 2&amp;gt;/dev/null
crontab &lt;span class="nt"&gt;-l&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; @reboot
&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-la&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$TMPDIR&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;/.stk_&lt;span class="k"&gt;*&lt;/span&gt; /tmp/.stk_&lt;span class="k"&gt;*&lt;/span&gt; 2&amp;gt;/dev/null
ps aux | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s2"&gt;"autossh|ssh .*tunnel@"&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="nb"&gt;grep&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows, look for the &lt;code&gt;SysMon&lt;/code&gt; task in Task Scheduler and &lt;code&gt;sysmon.cmd&lt;/code&gt; in the Startup folder. Phorion also lists the SHA-256 of the backdoored &lt;code&gt;extension.js&lt;/code&gt; (&lt;code&gt;ecb58cb29078d9646ad1dcdbe51526f2d9cfea06be5fb2ab183e8ecc3ab6bf15&lt;/code&gt;) and the key fingerprint (&lt;code&gt;SHA256:0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk&lt;/code&gt;). In SSH logs, a login from &lt;code&gt;127.0.0.1&lt;/code&gt; or &lt;code&gt;::1&lt;/code&gt; using the &lt;code&gt;svc-telemetry&lt;/code&gt; key means someone came back through the tunnel.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cleanup, in Phorion's order
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Stop the retry loop and kill any SSH or &lt;code&gt;autossh&lt;/code&gt; processes it started.&lt;/li&gt;
&lt;li&gt;Remove the LaunchAgent, &lt;code&gt;~/.config/.smt&lt;/code&gt; and &lt;code&gt;.smtk&lt;/code&gt; (or the cron entry, scheduled task or &lt;code&gt;sysmon.cmd&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Delete the &lt;code&gt;svc-telemetry&lt;/code&gt; line from &lt;code&gt;~/.ssh/authorized_keys&lt;/code&gt; and remove &lt;code&gt;/tmp/.stk_*&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Confirm Remote Login is off on macOS.&lt;/li&gt;
&lt;li&gt;Rotate credentials if SSH was enabled or you suspect an inbound login.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One addition: if the beacon could have listed token or cloud key names from your environment, rotate those keys too.&lt;/p&gt;

&lt;p&gt;Phorion also notes a logic bug on macOS: without admin rights, &lt;code&gt;systemsetup -getremotelogin&lt;/code&gt; errors but still reports success, so the step that would switch on Remote Login was skipped. The outbound beacon is unaffected, so do not treat that as a free pass.&lt;/p&gt;

&lt;p&gt;The original on SyntaxRadar adds a FAQ on whether the extension is safe now and how to vet AI coding extensions: &lt;a href="https://syntaxradar.com/radar/claude-code-extension-vscode-backdoor" rel="noopener noreferrer"&gt;https://syntaxradar.com/radar/claude-code-extension-vscode-backdoor&lt;/a&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>vscode</category>
      <category>ai</category>
      <category>devtools</category>
    </item>
  </channel>
</rss>
