Menu

Star on GitHub · 3.2k
All posts
Case Studies

When one endpoint method forgets the authorization check

The smallest finding from this engagement, and the most ordinary — the kind of bug that predates AI entirely. One method on the chat endpoint checked who was asking. Another, right next to it, didn't.

A hand throwing a KILL SWITCH lever — know the thread ID, kill the run: an unauthenticated agent/stop with no ownership check

About these case studies. Every finding in this series is a real vulnerability CyberStrike discovered in a live penetration test. Customer names, hostnames, and any detail that could identify the target have been removed under the confidentiality agreement that governs the engagement. The technique, the impact, and the lesson are exactly as we found them — only the target is deliberately unidentifiable.

The same engagement that produced an RCE through the agent’s execute tool and an SSRF in the document fetch also produced its smallest finding — and its most ordinary. This one has nothing to do with AI being clever or dangerous. It’s a missing authorization check, the kind of bug that predates chatbots by thirty years. It’s here because it shows where these bugs actually live.

Severity: LOW · CVSS 3.7 · CWE-862 (missing authorization) · vector: request body.

CyberStrike finding card — LOW severity missing authorization on the agent/stop method, CWE-862, with the target host redacted

What we found

The chat endpoint multiplexes several methods: agent/run starts a run, agent/suggest offers completions, agent/stop cancels a run in flight. The first two verify the caller — a session, a tenant, an ownership check. agent/stop verifies nothing.

It cancels an active run identified only by a client-supplied threadId. No cookies, no session, no institutionId, no check that the run belongs to the caller. Send someone else’s threadId and their run stops — even across sessions, even across tenants.

What it can and can’t do

This is a LOW, and it behaves like one. We rate it honestly:

  • It can interrupt another user’s in-flight AI run — a targeted nuisance, one run at a time.
  • It can’t read data, change data, or stop runs in bulk. Exploitation needs the specific threadId, and thread IDs aren’t broadcast — an attacker has to learn one (a leaked log, a referrer, a shared link, a chatty client) before they can cancel that run.

So the real-world bite is small, and CVSS 3.7 is the right number. We’re not going to dress it up.

Why it’s worth fixing anyway

The interesting part isn’t the impact — it’s the shape. Authorization wasn’t missing from the endpoint. It was missing from one method on it. run and suggest check ownership; stop doesn’t. That inconsistency is exactly where authorization bugs hide: the check is implemented per-handler, and one handler got added or refactored without it. Nothing looks wrong until someone enumerates the methods and tries each one cold.

The fix is boring and correct:

  • Enforce ownership on every method that acts on a run, in shared middleware — not per-handler. When the check lives in one place that all methods pass through, “add a new method” can’t quietly mean “forget the check.”
  • Bind threadId to its owning session and tenant, and reject any stop (or any other action) for a run the caller doesn’t own.

The pattern

Line the three findings up and they’re the same question answered in the wrong place three times. The execute-tool RCE put the trust boundary inside the model. The document-fetch SSRF put it in a denylist instead of an allowlist. This one applied it to some methods and not others. Every time, “is this caller allowed to do this?” was decided somewhere other than where it had to be — and the least glamorous version is the one you’ll find most often.

Found by CyberStrike — AI-powered security testing. Target and identifying details withheld under NDA.

Keep reading

More from on call

View all posts
A server-rack door ajar with a key left in the lock — when a tool call becomes a shell: authenticated RCE via an AI agent tool
case-studiesOct 18, 2026

Authenticated RCE through an AI agent's execute tool

During a real penetration test, any signed-in member could get a product's built-in AI assistant to run shell commands on the server — not through an exploit chain, but by asking. The model's refusal to run 'sensitive' commands looked like a control. It wasn't.

A robotic arm reaching out to grab a server — point it at a URL and it fetches: server-side request forgery through an AI chat's document-by-URL fetch
case-studiesOct 18, 2026

SSRF through an AI chat's document-by-URL fetch

Same product, a smaller bug with a longer reach. The AI chat let any member attach a document by URL — and the server fetched almost any URL they gave it. LiteLLM blocked the scary targets, so we rate it honestly: a MEDIUM, not a headline.

A tall stack of CVE reports beside one flagged page — 200 CVEs, five that matter: real risk scoring through one MCP server
productOct 17, 2026

CVE MCP: 41 tools, 11 sources, real risk scoring

A scan drops 200 CVEs on your desk. CVSS alone can't tell you which five matter. cve-mcp pulls severity, exploitation probability, active-exploitation status and weaponization into one MCP server, and scores what's actually urgent.

Get the next post in your inbox

One email a month with new posts, product updates and the odd postmortem worth reading. Unsubscribe in one click.