cd /news/ai-agents/decided-is-not-enforced-two-advisori… · home › topics › ai-agents › article
[ARTICLE · art-168027] src=dev.to ↗ pub= topic=ai-agents verified=true sentiment=↓ negative

Decided Is Not Enforced: two advisories, one pattern

Two security advisories disclosed in the past two weeks share a common failure pattern: controls that decide correctly but are not enforced at execution. In DBHub (fixed in 0.22.6), a read-only SQL validator parsed statements differently than MySQL and MariaDB, allowing a payload like `SELECT 1--1;DROP TABLE victim` to pass the check while the database executed the DROP; in LangGraph (CVE-2026-118668, fixed in langgraph-api 0.15.0), a JavaScript/TypeScript Store authorization handler's namespace rewrite was not carried across the runtime boundary, letting ordinary users read, overwrite or delete other users' Store data. A developer has filed two adjacent test probes (#688) against the red-team-blue-team-agent-fabric harness, with truth tables merged in #689.

by read2 min views1 publishedNov 11, 2026

Two advisories in the last two weeks have the same shape.

DBHub, which exposes databases to AI agents (GHSA-j656-3hf2-fvjc, fixed in 0.22.6). Read-only mode is the control operators use to let an assistant read a database without changing it. DBHub split the SQL, checked each statement, then sent the original string to MySQL or MariaDB with multipleStatements: true. Its parser treats -- as the start of a comment. MySQL and MariaDB only do when whitespace, a control character or the end of the line follows:

SELECT 1--1;DROP TABLE victim

DBHub saw one SELECT and passed the check. The database ran SELECT 1 - -1 and then dropped the table. The advisory names the realistic path: prompt injection in content the assistant reads.

LangGraph (GHSA-4hm6-w6qq-w73v / CVE-2026-118668, fixed in langgraph-api 0.15.0). A JavaScript or TypeScript Store authorization handler rewrote the requested namespace to restrict each user to their own data. The server did not carry that change across the runtime boundary, so an ordinary user could read, overwrite or delete another user's Store data.

In both cases the decision was correct. The check passed the right statements. The handler returned the right namespace. What ran was something else.

A decision that nobody enforces is a log entry, not a control.

This is the gap between where a control decides and where an action executes. The two read different inputs, or the decision never reaches the executor. Neither shows up in a review of the policy, because the policy is fine.

Nothing in the harness catches either one directly.

The closest tests are adjacent, meaning the same class through a different mechanism:

APB-001 | Approval Bound to Its Arguments: what was approved must be what executes, tested at the approval layer rather than a SQL validator.WT-002 | Read-Only Ingestion Still Executes the Sink: a read-only path that still runs something, reached through repository config rather than SQL.ACSH-001 | Deny Honored: an agent must honor a valid DENY, which tests an agent consuming an external decision, not a server applying its own handler's result. Two probes, filed as #688:

-- without trailing whitespace, conditional comments, stacked statements) to a tool that claims read-only mode. Then check the database state, not the tool's answer. Both need what the rest of the suite needs: a positive control, so a tool that refuses everything cannot pass. The truth tables for both are written and merged (#689); the probes come next.

Where does your agent's database tool validate SQL: before the driver sees the string, or on exactly the statements the driver executes?

── more in #ai-agents 4 stories · sorted by recency
── more on @dbhub 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/decided-is-not-enfor…] indexed:0 read:2min 2026-11-11 · —