Built with the Ledger Agent Stack · independent project

Your AI agent will be hijacked.
Your hardware won't be fooled.

An autonomous treasury agent gets prompt-injected live. It assembles a payment to an address you never chose. Watch the malicious transaction die on the device screen — because the hardware is the one thing the agent can't talk its way past.

FAILSAFE
agent working…
◂ rejectSpeculos · Nano S+approve ▸
  1. goal: pay 0.005 ETH to ACME Supplies
  2. fetch invoice.html …
  3. ⚠ hidden instruction in page: “payee changed”
  4. agent obeys → recipient = 0xBAD0…0BAD
  5. handoff to hardware gate
  6. ✓ rejected on device — funds safe

scenario loop — the live, signing version is below

the lethal trifecta

A secret in an .envfile can't protect an agent that can be convinced.

Reading a file or fetching a page looks harmless — until the agent holding the keys gets hijacked mid-task. Intelligence and action live in software, which is copyable and corruptible. Control has to live somewhere software can't reach.

Intelligence
The model can be talked into anything

An LLM follows the most convincing instruction it sees. A poisoned web page or invoice can carry one. It has no notion of which text is trusted.

Action
The agent acts on what it read

Give the model tools — fetch, prepare a transaction, sign — and a hijack stops being a wrong answer and becomes a wrong wire transfer. A leaked API key is just copied and reused.

Control
The hardware doesn’t take instructions

The private key never leaves the device. Every transfer must be confirmed on a screen the agent can’t draw on and can’t click. Compromised software still can’t move funds.

live console

Run the attack yourself

Same goal in both scenarios: pay the vendor. One reads a clean invoice. The other reads a poisoned one. Watch where the transaction lands — and what happens at the device.

DEMO · no deviceagent: scripted

agent: idle. Run a scenario to start.

trusted displayDemo render
No device connected
Start Speculos (see runbook)

DEMO mode — agent + UI work. Signing needs Speculos (see runbook).

proof of use

Real signing, on the emulated device.

The proof clip is recorded in LIVE mode, against Speculos. Drop the capture into public/proof.mp4 (or a GIF) and it renders here.

public/proof.mp4
legit approve → real signature · attack reject → blocked
  1. 01Start Speculos with the Ethereum app
  2. 02Run: pay vendor → review on device → approve
  3. 03Capture the r/s/v signature + tx hash
  4. 04Run: poisoned invoice → recipient is 0xBAD0…0BAD
  5. 05Reject on device → verdict banner fires