Agents that can sign
AI agent wallet security
AI agent wallet security is the review of an agent that can sign. We follow a tool call until it becomes a transaction, and we check the session key, the spend limit, the EIP-7702 delegation, the approval prompt, and where the key is stored.
prompt reviewed
Published session-wallet report
What we review
- Tool calls
- Transactions
- Session keys
- Spend limits
- EIP-7702 delegation
- Approval prompts
- Key storage
What is AI agent wallet security?
It is the review of an agent whose tools can sign or send a transaction. The quote is fixed after we read which tools can sign, what they can spend, and where the keys are stored.
We follow the path in three steps:
The tool call:
the arguments the model can set, and the transaction those arguments build.
The authority:
the session key, the EIP-7702 delegation, the spend limit, and the approval prompt before a signature.
The key:
where it is stored, which process can use it, and what a compromised host can sign.
What we review when an agent can sign
The engagement covers each of these. The published ZeroDev Bastion report below records the findings in Bastion.sol, BastionFactory.sol, and types/Structs.sol.
A tool call that becomes a transaction
The function the model is allowed to call, the transaction it builds, and the fields the model can fill in.
Session keys
Which key or operator a session grants, which calls that grant can make, and how long the grant lasts.
Spend limits
The amount a signer approved, the asset it covers, and the calls that can move more than that amount.
EIP-7702 delegation
Code an account delegates to, a chain id of 0 that derives a second session, and what that code can then sign and send.
Approval prompts
The screen a person sees before a signature, and whether the agent can satisfy that prompt on its own.
Key storage
The wallet, enclave, or environment that holds the key, and which process on the agent host can ask it to sign.
Published report
Inside the ZeroDev Bastion report
The published ZeroDev Bastion report covers Bastion.sol, BastionFactory.sol, and types/Structs.sol. It records 7 findings. The session-key SDK is out of scope. The recommended patches were not merged to master when the report was published.
- HIGH-01checkSig permissionless replay refills allowanceHigh (opens the report in a new tab)
- HIGH-02same (v,r,s) plus mutated Approval overwrites operatorHigh (opens the report in a new tab)
- MED-01caller-chosen _chainId writes a second spendable rowMedium (opens the report in a new tab)
- LOW-01uncapped Call.value on the session hostLow (opens the report in a new tab)
- LOW-02validateUserOp ignores missingAccountFundsLow (opens the report in a new tab)
- INFO-01native 7702 auth accepted as checkSigInformational (opens the report in a new tab)
- INFO-02RIP-7212 layout mismatchInformational (opens the report in a new tab)
Check our work before you send code
How every finding is graded
Critical
Funds or safety, exploitable as scoped.
High
Serious, less immediate than critical.
Medium
Bounded loss or a broken assumption that does not yet have an exploit path in scope.
Low
Defense in depth.
Informational
An observation with no security impact as scoped.
Questions about AI agent wallet security
What is AI agent wallet security?
AI agent wallet security is the review of an agent that can sign. We trace the tool that builds a transaction, the session key or delegation that allows it, the spend limit, the approval prompt, and the place the key is stored.
What does it mean when an agent can sign?
A tool the model can call is able to produce a signature or submit a transaction. The review covers that tool's arguments, the session key, the EIP-7702 delegation, the spend limit, the approval prompt, and key storage.
When does a tool call become a transaction?
When the tool builds, signs, or submits a transaction from arguments the model can set. We trace that path from the tool schema to the signature and the spend limit on the call.
What does the ZeroDev Bastion report show?
7 findings in Bastion.sol, BastionFactory.sol, and types/Structs.sol. The two High findings are checkSig permissionless replay refills allowance, and same (v,r,s) plus mutated Approval overwrites operator. A caller-chosen _chainId writes a second spendable row, and native 7702 auth accepted as checkSig is recorded as informational. The session-key SDK is out of scope. The recommended patches were not merged to master when the report was published.
How is the quote set?
The quote is fixed after we read the scope: which tools can sign, what they can spend, and where the keys are stored.
Scope the review
Have the signing agent reviewed
Tell us which tools can sign, what they can spend, and where the keys are stored. We reply within two business days with a plan and a fixed quote.
Related services
- sysusrModelTool
prompt reviewed
AI security audits
Agents, tool calling, and the systems around the model.
- mintswapliqadmin
contract reviewed
Smart contract audit
The contracts a wallet signature can reach.