Skip to content
Where text you do not control enters
Public Preview

Prompt injection: sources and the three-property gate

Explains where uncontrolled text enters a Duale AI Task and the three-property gate that determines when to add a check before an external action.

This page covers untrusted text sources, the three-property gate for external actions, risk-reduction strategies, and Duale AI's enforced bounds.

  • Sources of untrusted text entering a Task.
  • The three-property gate for external actions.
  • Strategies to remove one property and reduce risk.
  • Duale AI enforced bounds on Tasks and resources.

Summaries were generated by AI.

A Task can read text you do not control that tries to steer its work. Identify where that text enters, which boundaries Duale AI enforces, and which controls your application must add.

Where text you do not control enters

Each source below can reach the model as ordinary text when the Task uses it. You wrote none of it at the moment the model reads it.

SourceWritten by
A document in a LibraryWhoever produced the document
A search-result title or extractA publisher and the upstream search system
A web page fetched during Web researchWhoever runs that site
Content returned by an SDK ToolYour code, and whatever your code read
Content returned by an MCP ToolThe remote MCP server and what it read
A model-facing MCP Tool definitionThe remote MCP server; your Connection name adds Source context
The output of a program the model wroteThe program
Earlier model output in the TaskThe model, possibly acting on any of the above
Requests and final answers of earlier Tasks of the same Agent IdentityEarlier users of your application, and the model in those Tasks

An MCP Tool definition reaches the model before any Tool Call. Its name, title, description, Source context, and input schema can influence Tool selection and proposed arguments. Tool Results and the other sources above can enter the Task history and influence later model turns. Text that steers the model early in a Task can therefore keep steering it until the Task ends. Text that one user wrote can also reach a later Task of the same Agent Identity, including a Task for another user.

Prompt injection remains possible

Duale AI does not identify and remove embedded instructions before it gives extracted text to the model. Extraction can change the format or omit content; it is not a security filter.

Current language models do not enforce a security boundary between instructions and data. The UK NCSC article Prompt injection is not SQL injection (opens in a new tab) recommends deterministic safeguards that constrain actions and reduce the remaining risk and impact. OWASP Top 10 for LLM Applications 2025 (opens in a new tab) lists prompt injection as LLM01.

One rule follows:

Treat every retrieved passage, search extract, fetched page, remote Tool definition, remote Tool Result, and earlier Task as content you do not control. Put deterministic controls in your SDK Tool, the remote system, or a separate authorized process.

A system instruction saying “do not delete records” is a preference. A check in the system that owns deletion is a control. If you cannot add that control to a remote MCP server, expose the protected operation through an SDK Tool or a separate acting process. Secure integration shows the pattern.

Duale AI publishes no measured prompt-injection resistance rate. Your assessment must also cover the model providers you select, the SDK Tools you write, the MCP servers you configure, and every external service those Tools call.

Three properties together trigger this gate

Prompt injection can alter an answer even without sensitive-data access or an external action. Ask the three questions below about the Tasks of one Agent Identity, with the Tools and access they can use. Together they identify when to put a human decision or deterministic check before an external action:

  1. Do they read content you do not control?
  2. Can they reach data that matters?
  3. Can they change something outside Duale AI, or send a message?
When to add a check before an external actionAsk three questions about the Tasks of one Agent Identity. Do they read content you do not control? Can they reach data that matters? Can they change something outside Duale AI or send a message? If all three answers are yes, add a deterministic check or a human decision before the action. If any answer is no, this gate is not required, although prompt injection can still change an answer.

When one Agent Identity serves several users, its Tasks always have the first property, because they can read earlier Tasks of other users.

Code Execution can add the first and the third property. The output of a program the model wrote is text you do not control, and a run with network access can read or change external systems and send data out. The model chooses network access for each run, so treat Tasks that can use Code Execution as having the third property.

Removing one property removes the need for this specific external-action gate. It does not eliminate prompt injection or a separate legal, financial, or business approval requirement.

If the Tasks of an Agent Identity need all three properties, add the gate before they acquire the last one.

Remove one property instead

You can also remove one property:

MoveWhat changes
Split the work across independent capability boundariesOne Task reads content you do not control; a separate authorized process independently validates or approves a constrained proposal before it acts
Narrow the GrantAn Agent Identity that cannot reach the sensitive Library loses property two
Make the Tool propose rather than actThe Tool writes a proposal record; a separate process executes accepted proposals
Use one Agent Identity for each user or trust boundaryEarlier Tasks of other users stop being a source of text you do not control
  • Move
    Split the work across independent capability boundaries
    What changes
    One Task reads content you do not control; a separate authorized process independently validates or approves a constrained proposal before it acts
  • Move
    Narrow the Grant
    What changes
    An Agent Identity that cannot reach the sensitive Library loses property two
  • Move
    Make the Tool propose rather than act
    What changes
    The Tool writes a proposal record; a separate process executes accepted proposals
  • Move
    Use one Agent Identity for each user or trust boundary
    What changes
    Earlier Tasks of other users stop being a source of text you do not control

The third move also stays safe when the same Tool request is delivered twice.

What Duale AI bounds

Duale AI limits Task duration, delegated work, model turns, resource reach, Code Execution, and file ingestion. These limits reduce the possible impact of unsafe content. They do not authorize an External Effect, provide a per-request Tool allowlist, recall work already sent out, or undo an Effect. Use one deadline for each Task and What one code run can do state the bounds, and Stop the Task you intend to stop explains what Stop ends.

Page access owns the browser and network boundary for fetched web content. Code Execution owns the state, network modes, and request limits of a code run. Tenant access policies and credential lifecycle own credential reach and revocation. MCP Connections owns the shared remote account and whole-catalog boundary.

Apply the three-property gate above. Secure integration covers authorization, human approval when required, repeat safety, and reconciliation.

Return to Security to place this threat model in the lifecycle of one Task.