NNabeel Hassan

Blog · August 26, 2026 · 9 min read

Can Someone Talk Your AI Voice Agent Into Doing Something It Shouldn't?

By Nabeel HassanAI Engineer · ICPC World Finalist

TL;DR: People worry that someone will jailbreak their AI voice agent into saying something embarrassing. That is the least expensive thing that can happen. The real risk is that the agent has capabilities, and a caller with nothing but a phone and some patience gets to aim them: reading back another customer's details, cancelling appointments that are not theirs, getting a transfer or a text sent to a number they chose, or simply dialling four hundred times overnight. None of that is fixed in the prompt. It is fixed by scoping what the tools can physically do, treating caller ID as a hint rather than an identity, and putting every authorization decision in deterministic code the model cannot talk its way past.

The first time a client asked me "can someone hack this thing?", I gave a bad answer. I talked about the model, refusals and guardrails, because that is where the conversation usually goes. That framing is backwards.

A voice agent is not risky because it can be persuaded to say odd things. It is risky because it can do things. It reads from a CRM, writes to a calendar, sends texts, transfers calls, and triggers automations that touch systems the caller can never see. Every one of those is reachable from a payphone by anyone who knows the number. The attack surface is not the prompt. It is the list of capabilities you gave it, and the prompt is only the thing standing in front of them.

So this is the security pass I now run on every agent before it takes a live call.

Start by writing down what the agent can actually do

Before any threat modelling, list the agent's real capabilities in plain language. Not the intent list. The verbs.

For a typical receptionist agent I ship, that list is something like: look up a contact, read back an appointment, create an appointment, cancel or reschedule one, send an SMS, transfer the call to a human, and drop a payload into n8n that touches the CRM.

Now read that list as an attacker rather than as a builder. Every verb becomes a question. Look up whose contact? Cancel whose appointment? Send an SMS to which number? Transfer to what destination, chosen by whom?

Most agents I have reviewed fail at this step, before anything clever happens. The lookup tool accepts a phone number as a parameter, the model fills it from what the caller said, and the agent reads back somebody else's appointment to whoever asks in a confident voice. Nobody attacked anything. The capability was simply unscoped.

Caller ID is a hint, not an identity

The most useful habit from building agents across clinics, vet practices and estate agents is to key records on the caller's phone number, because names get transcribed several ways for the same person and the number is the one identifier the call already knows.

That is correct for record keeping and wrong for authorization, and it took me a while to hold both ideas at once. Caller ID can be spoofed. It is also routinely shared: a family phone, a practice reception line, a partner returning a call. So the number is a good guess at who is calling and a terrible proof of it.

The way I resolve that in practice is a split by consequence. Anything low-stakes can lean on the number alone: greeting a known caller by name, offering their usual appointment type, resuming a conversation. Anything that exposes stored data or changes a record asks for one thing the caller should know and the number does not reveal, usually a date of birth or the appointment date itself, checked in the automation rather than judged by the model.

And there is a category I keep off the phone entirely. In the medical work especially, some requests do not get a self-service path at all, no matter how well the caller verifies. They route to a human, because the cost of being wrong once is not worth the convenience of automating it.

The prompt is not a security boundary

You can tell an agent never to reveal its instructions, never to discuss other customers, never to make exceptions. Those lines are worth writing. They are not a control.

I think about it the way I think about client-side validation: useful for shaping normal behaviour, useless against anyone deliberately pushing on it, and never the thing you rely on. A model can be talked into a lot when the caller is patient, claims authority, invents an emergency, or asks the same thing six different ways until one phrasing lands.

So the rule I build to is: if it would be a problem for the model to do it, the model must not be able to do it.

That means scoping tools rather than instructing the agent:

Those last two are the ones people skip, and they are the ones that carry direct financial risk. An agent that will text or transfer to an arbitrary number is a relay somebody else can use at your expense.

The injection that actually worries me is second-hand

Direct prompt injection over the phone is real but clumsy. Somebody reads instructions at your agent, and the worst realistic outcome is usually a leaked system prompt or an off-script answer. Embarrassing, rarely expensive.

The version I take more seriously is indirect. Agents do not only read their prompt. They read a knowledge base, and they read CRM fields: contact notes, custom fields, previous call summaries, form submissions from your website. Some of that content is written by people outside the business, and all of it lands inside the model's context looking exactly like everything else.

If a web form's "how can we help?" box flows into a CRM note, and that note is fed into the next call as caller context, then anybody with the form URL can write text that the agent will read as though the business wrote it. That is a much quieter path than shouting at the agent live.

Two things keep it contained. First, keep externally-written content out of instruction space: caller notes go in as clearly labelled data the agent may summarise, never as configuration it may follow. Second, and more reliably, the tool scoping above means that even a fully persuaded agent cannot reach anything it was not already allowed to reach. Containment beats detection here, because you can enumerate capabilities and you cannot enumerate phrasings.

The caller who is not attacking, just pushing

Most bad calls are not attacks. They are people escalating: claiming to be staff, claiming an emergency, insisting they were promised something, getting angry.

This is not really a security problem, it is a design one, and it is why I write the handoff rules before the happy path. An agent under sustained pressure should not be improvising a decision about whether to make an exception. It should be exiting to a human with the context attached.

I make that explicit in the flow. Repeated refusal on the same request, any claim of internal authority, and any hint of an emergency are all transfer triggers, not persuasion problems. The agent's job is to be pleasant and unmovable, and to get a person on the line quickly when it cannot help. That is also better service than a firm refusal in a loop.

Cost and volume are part of the threat model

Nothing above covers the dullest attack: dialling the agent repeatedly. Every call costs telephony, speech and model spend, and a few hundred overnight calls is a real invoice.

Basic controls handle nearly all of it. Concurrency caps at the platform, a per-number rate limit for repeat callers in a short window, and spend alerts that reach a human before month end rather than after. The number layer itself gets the same treatment, so forwarding, transfers and outbound registration are reviewed rather than assumed.

Recordings and transcripts are a data store

The part clients forget is that a voice agent generates sensitive data by design. Recordings, transcripts and extracted fields sit across the voice platform, the automation layer, the CRM, and often a dashboard. That is four systems holding customer conversations.

So the review covers who has access to each system, how long recordings are retained and whether that is deliberate, whether the disclosure the caller hears matches what actually happens, and whether debug logs are quietly holding personal data because a workflow was easier to build that way. That last one is the most common finding, including in my own early builds.

Red-team it before launch

I run a short scripted pass on every agent, in the same spirit as the failure testing on the automation layer:

The pass is a success when nothing you tried had anywhere to go, not when the agent refused politely. Refusal is behaviour. Scope is the control.

The honest summary I give clients

Yes, someone can talk to your agent in bad faith, and no, you cannot prompt your way out of that. What you can do is make the worst outcome boring: an agent that gets confused, says something off-script, and still cannot read a stranger's record, cancel a booking that is not theirs, text a number they chose, or spend your money at scale.

That is achievable with unglamorous work in the layer behind the model, which is where most of the engineering on a serious agent lives anyway.


I build production AI voice agents and the automation, CRM and telephony layer behind them for founders across the US, UK and Europe. More about my work here, or book a call.

FAQ

Can an AI voice agent be hacked or jailbroken over the phone?

It can certainly be talked into going off script, and no prompt wording fully prevents that. But the damage depends entirely on what the agent is able to do, not on what it can be persuaded to say. If the agent can look up any record by a phone number the caller supplies, transfer to a destination spoken during the call, or text an arbitrary number, then a persuasive caller has real leverage. If those capabilities are scoped so the lookup only ever uses the number the call arrived from, transfers only reach a fixed list of internal destinations, and texts only go to the verified number on the record, then the worst realistic outcome is an agent that sounds confused. Containment beats detection, because you can enumerate capabilities and you cannot enumerate phrasings.

Is caller ID enough to verify who is calling an AI receptionist?

No. Caller ID is the right key for record keeping, since the number is the one identifier a call already knows and names get transcribed several different ways for the same person, but it is not proof of identity. Numbers can be spoofed, and phones are routinely shared between family members, colleagues and reception desks. I split by consequence: low-stakes personalisation can lean on the number alone, anything that exposes stored data or changes a record asks for one additional detail the number does not reveal and checks it in the automation rather than in the model, and the highest-risk requests get no self-service path at all and route straight to a human.

What is indirect prompt injection in a voice agent?

It is when hostile text reaches the model through content the business itself stores rather than through the caller's speech. Agents read knowledge base articles, contact notes, previous call summaries and web form submissions, and some of that content is written by people outside the business. If a website form's free-text box flows into a CRM note that is fed into the next call as caller context, anybody with that form URL can write text the agent reads as though the business wrote it. Two defences contain it: keep externally-written content clearly labelled as data the agent may summarise rather than configuration it may follow, and scope the tools so that even a fully persuaded agent cannot reach anything it was not already allowed to reach.

Building something in this space?

I take on AI-agent, automation and product work directly — scoped fast, shipped fast.

Book a discovery call →

Keep reading