AI Security

Four AI Stack Vulnerabilities, and What They Share

MLflow CVE-2026-64849, Vanna.AI CVE-2024-5565, mcp-remote CVE-2025-6514 and the Slack AI exfiltration, compared. None of the four is a model bug.

RG&AK
Cybersecify
7 min read

Four widely discussed AI stack vulnerabilities between 2024 and 2026 share one property: none of them is a model bug. MLflow CVE-2026-64849 is a server-side request forgery in a webhook delivery path. Vanna.AI CVE-2024-5565 is code execution because generated Python was run. mcp-remote CVE-2025-6514 is operating system command injection from an unsanitised OAuth value. The Slack AI exfiltration was indirect prompt injection reaching a retrieval layer that did not enforce channel permissions. Three are ordinary application security bugs that happen to live in AI infrastructure, and all four are found by testing sinks and boundaries rather than prompts.

Key Findings:

  • Three of the four are not AI vulnerabilities in any technical sense. No model, prompt or inference path appears anywhere in the MLflow or mcp-remote records.
  • MLflow CVE-2026-64849 carries a CVSS v3.1 base score of 9.3, sits in the CISA Known Exploited Vulnerabilities catalog, and was published by CERT-In as CIVN-2026-0416 on 20 August 2026 at Critical severity.
  • Vanna.AI CVE-2024-5565 is CWE-94 with a CVSS 3.1 base score of 8.1, assigned by JFrog as CVE Numbering Authority. The advisory’s own mitigation is to disable the code generation path for untrusted input, not to filter the input.
  • mcp-remote CVE-2025-6514 scores CVSS 9.6 and affects versions 0.0.5 through 0.1.15. Version pinning closes the largest share of MCP risk for the smallest effort.
  • The Slack AI exfiltration never received a CVE identifier, because it was handled as a product behaviour rather than a software defect. A vulnerability programme keyed only to CVE feeds would not have seen it.
  • A test plan built around jailbreak payloads finds none of the four. The findings live at sinks, at fetch boundaries and in retrieval authorization.

This round-up is written by Rathnakara GN, who leads penetration testing at Cybersecify, with Ashok Kamat. Each entry analyses a publicly disclosed issue using the published record. We did not test any of this software and we have no client relationship to any of it.

The four, side by side

MLflow CVE-2026-64849Vanna.AI CVE-2024-5565mcp-remote CVE-2025-6514Slack AI exfiltration
ClassServer-side request forgeryCode execution (CWE-94)OS command injectionIndirect prompt injection into a retrieval layer
SeverityCVSS v3.1 9.3CVSS 3.1 8.1CVSS 9.6No CVE assigned
Is a model involved?NoOnly as the source of the textNoYes, as the reader of planted instructions
Where the bug livesWebhook delivery pathThe execution sinkAn OAuth parameterRetrieval layer authorization
Found byStandard web testingScoping that follows generated text to its sinkStandard API testingTesting the retrieval layer’s permission model
Public trackingNVD, CISA KEV, CERT-In CIVN-2026-0416NVD, JFrog as CNAJFrog Security ResearchResearcher disclosure only

The table is the argument. Read down the “Is a model involved?” row and the case for treating AI security as a separate discipline gets weaker, not stronger. Read down the “Found by” row and the practical conclusion appears: most of this is reachable with test cases that existed before large language models did, provided somebody scoped the AI surface into the engagement.

1. MLflow CVE-2026-64849: validate the string, fetch somewhere else

A URL was validated once, as text, and then handed to an HTTP client that followed a redirect and resolved the hostname again. The check and the use looked at two different destinations.

The published record names two different files, which is the whole story. Per NVD, the validator in mlflow/utils/validation.py checked the original URL, while the delivery code in mlflow/webhooks/delivery.py followed redirects and re-resolved the hostname without pinning the validated address. The validator was correct about the string it inspected. It was never consulted about the address the socket actually reached.

This is a time-of-check-to-time-of-use bug rather than a validation bug, and that distinction changes the fix. Improving the string validation does nothing. Pinning the resolved address that was validated is the fix.

If your product accepts a URL from a user and fetches it later, you have this shape somewhere: webhooks, callbacks, link previews, image imports, PDF rendering, avatar fetching. The matching test case is public and already written, as OWASP WSTG v4.2 test WSTG-INPV-19, whose common filter bypass section names registering a domain that resolves to a loopback address.

Full analysis: validate-then-fetch SSRF in MLflow.

2. Vanna.AI CVE-2024-5565: the sink, not the prompt

Vanna.AI turns a natural language question into a SQL query. It also asked the model to write the Python charting code for the answer, and then ran that code. So a question could become a program.

Nothing about the model was broken. The security decision sat one layer below it, where generated text was handed to an execution call with nothing in between.

The useful generalisation is about sinks. Any product where model output reaches an interpreter, a shell, a query engine, a template or a browser has this shape, whatever the model is. Text-to-SQL products usually carry two sinks: the generated query, which teams defend, and the generated chart or template or export step, which gets missed.

In OWASP Top 10 for LLM Applications terms, prompt injection is the entry and Improper Output Handling is what makes it matter. Full analysis: Vanna.AI CVE-2024-5565.

3. mcp-remote CVE-2025-6514: an MCP server is ordinary software

Operating system command injection via an unsanitised OAuth authorization endpoint value, CVSS 9.6, affecting mcp-remote versions 0.0.5 through 0.1.15, disclosed by JFrog Security Research.

The specific bug is a patching problem. The general lesson is an inventory problem. A Model Context Protocol server is ordinary software running on your network with a tool surface attached, so it carries every ordinary software risk plus a new one: the tools it exposes are actions an agent can be persuaded to take.

The most common cause of MCP incidents we see is unmanaged drift on a community server that was fine at install and changed at a later version. Pin every version in your MCP inventory. It is the highest-value hour available to most teams shipping agent features this quarter.

Depth: MCP server pentest methodology and the MCP server pentest checklist.

4. Slack AI: the one with no CVE

In August 2024, researchers at PromptArmor showed that Slack AI could be made to surface content from private channels the requesting user had no access to. The attacker needed no elevated privileges and never touched the victim. They posted text in a public channel, and the assistant later read that text as instructions while answering somebody else’s unrelated question.

Slack first described the underlying behaviour as intended, then investigated the composed scenario and deployed a patch.

Two things make this the most instructive of the four. First, the impact was an authorization failure: private channel content reached a party with no authorization to see it, which is a permission model problem wearing a prompt injection costume. Second, there is no CVE, because it was treated as product behaviour rather than a defect. Any vulnerability management programme keyed purely to CVE feeds was structurally blind to it.

Full analysis: Slack AI data exfiltration through indirect prompt injection.

What this means for a test plan

The four entries point at three passes that are cheap to run and would have caught all of them.

  1. Enumerate the sinks. Every place model output reaches an interpreter, a shell, a query engine, a template, a browser or an HTTP client. Treat each as an untrusted input boundary regardless of how trustworthy the model is.
  2. Enumerate the fetches. Every place the system fetches a URL a user supplied. Check whether the address that was validated is the address that gets connected to.
  3. Test the retrieval layer’s authorization. Whether the assistant can read content the requesting user cannot, and what happens when planted content is in scope of a retrieval.

None of the three requires a model specialist. All three require that the AI surface was scoped into the engagement in the first place, which is the failure we see most often: an agent feature shipped after the last pentest and was never added to the scope.

Our layer-by-layer approach is in how to pentest an AI agent, and the attack patterns are in prompt injection attack patterns.

For Indian teams

CERT-In published the MLflow issue as vulnerability note CIVN-2026-0416 on 20 August 2026 at Critical severity. For an Indian engineering team, a CERT-In note is a nationally recognised reference to attach to an out-of-cycle upgrade request, which is often what moves a patch from next quarter into this sprint.

Keep it separate from the other CERT-In obligation. The vulnerability notes are advisory. The April 2022 directions carry an incident reporting duty with a six-hour clock, covered in the CERT-In six-hour rule. One is information, the other is a deadline.

Where to go from here

Corrections and updates

We publish corrections rather than editing them away, so a reader who acted on an earlier version can see what changed. Some entries record a change in the source document itself, others record our own error. Dates are our review dates, not the source's change date.

Our aim is to keep this accurate and current. Every entry above is sourced from the public record. If something here is wrong, or a source has moved since we read it, tell us and we will review it against the source and say what we decide. Our corrections policy explains how.

Frequently Asked Questions

What do the four best-known AI stack vulnerabilities of 2024 to 2026 have in common?

None of them is a model bug. MLflow CVE-2026-64849 is a server-side request forgery caused by validating a URL as a string and then fetching it with a client that re-resolved the hostname. Vanna.AI CVE-2024-5565 is code execution caused by passing model-generated Python to an execution call. mcp-remote CVE-2025-6514 is operating system command injection from an unsanitised OAuth authorization endpoint value. The Slack AI exfiltration was indirect prompt injection reaching a retrieval layer that did not enforce channel permissions. Three of the four are ordinary application security bugs that happen to live in AI infrastructure, and the fourth is an authorization failure in a retrieval path. Every one of them is found with test cases that predate large language models, which is why an AI pentest that only tests the prompt misses all four.

Is MLflow CVE-2026-64849 an AI vulnerability?

No, and the distinction is practical rather than pedantic. MLflow CVE-2026-64849 carries a CVSS v3.1 base score of 9.3, sits in the CISA Known Exploited Vulnerabilities catalog, and was published by India's CERT-In as vulnerability note CIVN-2026-0416 on 20 August 2026 at Critical severity. No model, prompt or inference path appears anywhere in the bug. It is a server-side request forgery in a machine learning platform's webhook delivery path: the validator checked the original URL while the delivery code followed a redirect and re-resolved the hostname without pinning the validated address. It is found with OWASP WSTG v4.2 test case WSTG-INPV-19, which is a standard web test. Calling it an AI vulnerability sends teams looking in the wrong place.

What is the validate-then-fetch pattern and why does it keep appearing?

Validate-then-fetch is a time-of-check-to-time-of-use bug in which a URL is validated as text and then handed to an HTTP client that resolves the hostname again and follows redirects. The check and the fetch look at two different destinations, so a validator can be completely correct about the string it inspected and still allow a request to an internal address. It keeps appearing because the two halves usually live in different files, written at different times by different people, and neither file looks wrong on its own. Any product that accepts a URL from a user and fetches it later has this shape: webhooks, callbacks, link previews, image imports, PDF rendering and avatar fetching. The fix is to pin the resolved address that was validated, rather than to improve the string validation.

What was the Vanna.AI vulnerability actually about?

Output handling, not prompt filtering. Vanna.AI is an open source Python library that turns a natural language question into a SQL query, and it also asked the model to write the Python charting code for the answer and then ran that code. CVE-2024-5565 was published on 31 May 2024, classified as CWE-94, Improper Control of Generation of Code, with a CVSS 3.1 base score of 8.1 assigned by JFrog as the CVE Numbering Authority. In OWASP Top 10 for LLM Applications terms, prompt injection is how it starts and Improper Output Handling is what makes it matter. The dangerous line is the sink rather than the prompt: remove or isolate the execution step and the same injection produces a bad chart instead of a bad outcome. The advisory's own mitigation is to disable the code generation path for untrusted input.

What is CVE-2025-6514 and does it affect us?

CVE-2025-6514 is an operating system command injection in mcp-remote, triggered by an unsanitised OAuth authorization endpoint value, with a CVSS score of 9.6, affecting versions 0.0.5 through 0.1.15, disclosed by JFrog Security Research. It affects you if you run mcp-remote at an affected version, which is a version pinning question rather than an architectural one. The broader point for anyone operating Model Context Protocol servers is that an MCP server is ordinary software on your network with a tool surface attached, so it inherits every ordinary software risk plus a new one. The most common cause of MCP incidents we see is unmanaged drift on a community server that was fine at install and changed later, which is why pinning versions is the highest-value hour available to most teams.

Was the Slack AI data exfiltration a CVE?

No, and that matters for how you track this class. In August 2024 researchers at PromptArmor showed that Slack AI could be made to surface content from private channels the requesting user had no access to. The attacker needed no elevated privileges and never interacted with the victim. They posted text in a public channel, and the assistant later read that text as instructions while answering somebody else's unrelated question. Slack initially described the underlying behaviour as intended, then investigated the composed scenario and deployed a patch. Because it was treated as a product behaviour rather than a software defect, there is no CVE identifier to track, which means a vulnerability management programme keyed only to CVE feeds would never have seen it.

Why does an AI pentest that only tests the prompt miss these?

Because three of the four vulnerabilities here have no prompt in them at all, and the fourth is an authorization failure in the retrieval layer rather than a filtering failure at the input. A test plan built around jailbreak attempts and prompt injection payloads will find neither the SSRF in a webhook delivery path, nor the command injection in an OAuth parameter, nor the execution sink that runs generated code. Our AI agent testing methodology treats the agent as four layers: the model, the planning loop, the tool calls, and memory and state. The interesting findings cluster at the tool call boundary and in memory, which is where untrusted content meets a privileged action. Prompt testing is one layer of four, and on its own it is the layer least likely to produce a finding that changes anything.

What should we test first if we are shipping an AI feature this quarter?

Start at the sinks, because the sinks are where a prompt becomes a consequence. List every place model output reaches an interpreter, a shell, a query engine, a template, a browser or an HTTP client, and treat each one as an untrusted input boundary. Then list every place your system fetches a URL that a user supplied, and check whether the address that was validated is the address that gets connected to. Then check the authorization boundary of any retrieval layer, meaning whether the assistant can read content the requesting user cannot. Those three passes would have caught the Vanna.AI class, the MLflow class and the Slack AI class respectively, and none of them requires a model specialist.

Does CERT-In publish AI and machine learning vulnerability notes for Indian teams?

Yes, and it is a useful lever that Indian teams under-use. CERT-In published MLflow CVE-2026-64849 as vulnerability note CIVN-2026-0416 on 20 August 2026 at Critical severity. For an Indian engineering team, a CERT-In note is a nationally recognised reference to attach to an out-of-cycle upgrade request, which is frequently the difference between a patch shipping this sprint and next quarter. CERT-In also runs a separate incident reporting obligation under its April 2022 directions, which is a different mechanism from the vulnerability notes and carries its own six-hour clock. Knowing which of the two you are dealing with matters, because one is advisory and the other is a reporting duty with a deadline.

How do we keep track of vulnerabilities in AI components we did not write?

Three things, in increasing order of effort. Maintain an inventory of AI and machine learning components with pinned versions, which includes MCP servers, model serving platforms, vector databases, orchestration libraries and anything that turns model output into an action. Subscribe to the vendor advisories and the CVE feed for each, and for Indian teams add CERT-In vulnerability notes. Then accept that feeds will not cover everything, because the Slack AI exfiltration never received a CVE identifier and a feed-only programme would have missed it entirely. That last gap is the argument for periodic testing rather than purely reactive patching: some of this class arrives as a research disclosure or a product behaviour change rather than as a numbered record.

Do we need a separate AI pentest, or does our web and API pentest cover this?

It depends which of the four classes you care about, and the honest answer is that a good web and API test covers more of this than vendors selling AI-specific testing usually admit. The MLflow class is a web SSRF and a standard web test finds it. The mcp-remote class is command injection in a parameter and a standard API test finds it. The Vanna.AI class sits at the boundary: a tester has to know that generated text reaches an execution call, which is a scoping question rather than a skill question. The Slack AI class needs testing of the retrieval layer's authorization behaviour, which is genuinely different work. Scope the agent surface explicitly and you get both; assume your web test covers the agent because the agent is on the web and you get neither.

What does Cybersecify test on an AI or MCP engagement?

We treat the agent as four layers and test the boundaries between them: the model, the planning loop, tool calls, and memory and state. In practice most findings cluster where untrusted content reaches a privileged action, which means tool call authorization, output handling at every sink, the retrieval layer's permission model, and the MCP server inventory including versions and OAuth configuration. We also run the ordinary web and API test cases against the surrounding application, because three of the four vulnerabilities on this page are ordinary web bugs living in AI infrastructure. Testing is led by Rathnakara GN, who holds the OSCP and an M.Sc in Cyber Security, and both founders work on every engagement.

Security questions, worries, or not sure what to use?

Cybersecify is a founder-led penetration testing firm for AI and SaaS startups. Tell us what you are weighing and we will give you a straight answer. Ask the team or book a free 30-minute call.

Share this article
AI securityMCPprompt injectionSSRFCVELLM securitysupply chain

Spotted something wrong on this page? Facts change and we get things wrong. Tell us and we will check it. We publish corrections on the page rather than editing quietly.