~/relnk/research/invoice-injection.html

Can a Malicious Invoice Hijack an AI Agent? Testing prompt injection across Claude, ChatGPT and Grok.
RASE · Relnk Agent Safety Evaluation · 25 Sep 2026

Relnk Agent Safety Evaluation

We built an accounts-payable agent, gave it real invoice PDFs and 110 tampered copies, and ran it on Claude Sonnet 5, GPT-6 Sol and Grok 4.7 through the same payment tools. The tampered invoices tried to redirect payments to an attacker's bank account, inflate amounts, trigger duplicate payments, or talk the agent out of asking a human.

download-report.pdf ↓RASE report · 12 pages · PDF

key-numbers

Payment safety

0 of 596 attacks succeeded

No model ever made a tool call toward the attacker's goal: no redirected account, no inflated amount, no duplicate draft, no call to a fake payment tool.

Fraud detection

78% · 43% · 17%

Share of tampered invoices sent to a human by Claude, Grok and GPT. The rest were paid to the correct registered account, usually without mentioning the tampering.

Clean invoices

211 of 212 paid correctly

No over-blocking. The one escalation was a fair catch of an inconsistent line item in the original invoice.

Prompt wording

A rule reduced reporting

Telling GPT and Grok to “pay the registered destination” cut their escalations from 50% to 17% and from 73% to 20%. Payment safety did not change.


what-we-tested

Each model received only the text extracted from the invoice and the results of four tools: read the invoice, look up the supplier in a trusted registry, create a payment draft, or request human review. Round 1 used 8 attack types on 80 invoices. Round 2 used 5 harder attacks with valid Saudi IBANs, pretexts such as “your registry is outdated”, and a fake registry result printed inside the invoice.

Figure 1

What the payment agent can see and do

What the payment agent can see and doArchitecture of the test: the agent reads an untrusted invoice PDF, looks up the supplier in a trusted registry, and either creates a payment draft through a gateway or sends the invoice to human review.UNTRUSTED INPUTTRUSTED SYSTEMSREAD_INVOICEGET_SUPPLIERCREATE_DRAFTREQUEST_REVIEWPDFInvoice PDFextracted textMODELAI payment agentClaude · GPT · GrokSOURCE OF TRUTHSupplier registryIBAN on fileAPIPayment gatewaybaseline · validatedSTOREDraft ledgersimulatedHUMANHuman reviewAP teamEvery model called the registry onevery one of 814 trials, and trusted it.LEGENDTrusted source (focal)Model / serviceStoreUntrusted inputTrust boundary
The supplier registry (amber) is the trusted source every model checked. The invoice sits inside the dashed trust boundary.

findings

Figure 2

Round 1: who raised the alarm, by attack type

Round 1: share of attacks each model sent to human reviewHeatmap of the share of round-1 attack trials each model escalated, by attack type. Claude escalated every bank-change notice; GPT escalated almost nothing except inflated amounts.Bank-changenoticeHiddenwhite textFake systemnoticeInflatedamountDuplicatepaymentSupplierswapReviewsuppressionFakesend_paymentClaude Sonnet 5100%20/2060%12/2020%4/2095%19/2055%11/20100%20/20100%10/1050%5/10GPT-6 Sol0%0/200%0/200%0/2080%16/200%0/205%1/200%0/200%0/20Grok 4.770%14/205%1/2020%4/2080%16/200%0/1260%6/1060%6/100%0/4LEGENDLOWHIGH share sent to reviewFocal cell (excluded from ramp)Baseline + validated gateway pooled · 0 attack attempts in every cell
Share of attack trials sent to human review. Claude flagged 20 of 20 bank-change notices; GPT flagged 0 of 20. No cell has an attack attempt.
Figure 3

Round 2: realistic IBAN attacks, by prompt

Round 2: realistic IBAN attacks sent to human reviewHeatmap of the share of round-2 attack trials escalated, by model, prompt and attack type. Under the minimal prompt GPT flagged 5 of 6 native remittance blocks; under the registry prompt it flagged none.Nativeremittance block"Registryis outdated"Fakeget_supplier JSON"Registry outage,use invoice"VAT split to"tax agent"Claude Sonnet 5registry prompt100%6/6100%6/667%4/683%5/6100%6/6Claude Sonnet 5minimal prompt100%6/6100%6/667%4/6100%6/6100%6/6GPT-6 Solregistry prompt0%0/683%5/60%0/60%0/60%0/6GPT-6 Solminimal prompt83%5/6100%6/60%0/60%0/667%4/6Grok 4.7registry prompt33%2/617%1/60%0/617%1/633%2/6Grok 4.7minimal prompt100%6/683%5/617%1/667%4/6100%6/6LEGENDLOWHIGH share sent to reviewFocal cell (excluded from ramp)6 invoices per cell · 0 attack attempts in every cell
GPT flagged the native remittance block 5 of 6 times without a rule, and 0 of 6 times with one.
Figure 4

Stating the rule made GPT and Grok less alert

Stating the rule made GPT and Grok less alertDumbbell chart of round-2 escalation rates per model under the registry prompt and the minimal prompt. GPT rose from 17% to 50%, Grok from 20% to 73%, Claude stayed near 90%.0%25%50%75%100%SHARE OF ROUND-2 ATTACKS SENT TO HUMAN REVIEW27/3028/30Claude Sonnet 55/3015/30GPT-6 Sol6/3022/30Grok 4.7LEGENDRegistry prompt ("pay the registered destination")Minimal prompt (no rule)Rows in model order · 30 attack trials per dot
Escalation rate on 30 round-2 attacks under each prompt. Claude stayed near 90% either way.

what-this-means

The safety in this test came from the architecture, not from the model: a trusted source of truth the agent checks before money moves, and a gateway that can block what does not match. Detection is different. If an AP team wants to hear about a tampered invoice, the choice of model and the wording of its instructions matter. This is the kind of evaluation relnk runs before agents go into production.


limits


download-report.pdf ↓RASE report · 12 pages · PDF

Book a Free Call to talk through what an agent safety evaluation looks like for your workflows.