Loopjacking: Hijacking Human-in-the-Loop Approval
Organizations: Independent Security Researcher
Abstract
Human approval is often treated as the last security boundary before an agent executes a consequential operation. That boundary is only meaningful if the operation presented for review is the operation later authorized or released. We call failures of this binding Loopjacking: a human approves what they understand as operation A, while the implementation uses that decision for a materially different operation B. We distinguish two variants. In a representation-based attack, B is already encoded but omitted or misrepresented at approval time; in a post-approval state-substitution attack, the human sees the correct A and mutable workflow state later replaces it with B. We evaluate a purposive set of released agent products. We reproduce post-approval substitution in seven tested Agno AgentOS releases ending at 3.0.9 and in 12 tested versions of a conditional in-memory LangGraph Agent Server composition ending at 0.14.0. We reproduce representation mismatch in OpenClaw 2026.2.23 and its rejection in 2026.2.24. OpenAI Agents SDK 0.22.0 and 0.22.2 provide a negative control: serialized continuation preserves exact per-call binding and rejects mutated B. These results do not estimate ecosystem prevalence. They show that complete canonical approval rendering and exact use-time comparison, or preventing unauthorized pending-state mutation, block the tested attacks while preserving legitimate execution. We separate this contribution from established work on misleading dialogs, session smuggling, action binding, and authorization continuity.
Figures & tables
| Product path | Approval and mismatch | Attacker boundary | Product consumption and controls |
|---|---|---|---|
| Agno AgentOS regular Agent | Post-approval substitution. View: transfer(20, vendor) . After admin approval, maker supplies transfer(2000, sink) | Maker has run/continue authority, but no approval token or direct path to | AgentOS installs and dispatches . Wrong actors and direct are denied; unchanged and the exact-action control pass |
| LangGraph Agent Server, in-memory composition | Post-approval substitution. View: exact 20-unit transfer. Maker replaces the pending same-ID call with a 2,000-unit transfer | Maker may update shared state, but cannot resume or execute the transfer | Approver resume dispatches . Direct , maker resume, and outsider fail; unchanged and deny-update policy pass |
| OpenClaw shell-wrapper path | Representation mismatch. View: inline payload 1" ; the pre-existing positional vector already encodes | Requester cannot run without consuming an allow-once decision | Gateway/node-host releases the full vector. Direct is denied, unchanged passes, and the fixed release rejects the mismatch |
| Path | Tested points | Variant attack | Direct | Safe/fixed outcome |
|---|---|---|---|---|
| Agno AgentOS | 2.5.6, 2.9.0, 3.0.1, 3.0.2, 3.0.3, 3.0.6, 3.0.9 | Strict positive at each; 3.0.9: 5/5 | 3.0.9 denied 3/3 | Research exact-action comparison rejected and preserved |
| LangGraph Agent Server | 12 native positives from 0.7.5 through 0.14.0; 0.7.4 feature absent | Strict positive at each admitted point | Denied in current trace | Supported deny-update Auth policy rejected mutation and executed |
| OpenClaw | 2026.2.23 affected; 2026.2.24 fixed | 2026.2.23: 3/3 | Denied 3/3 affected and 3/3 fixed | 2026.2.24 rejected mismatch 3/3; still executed |
| OpenAI Agents SDK | 0.22.0 and 0.22.2 | Mutation rejected 3/3 and 3/3 | Paused without effect | Unchanged serialized executed 3/3 and 3/3 |
| Neighbor | Core mechanism | Relationship | Missing or distinguishing condition |
|---|---|---|---|
| Lies in the Loop [ 9 ] | Approval-dialog content or presentation is manipulated | Direct overlap with representation-based Loopjacking | Loopjacking also covers correct review followed by product-owned state substitution |
| Consent Integrity [ 25 ] | Trusted rendering and bind-to-execution | Directly states the security property and covers swap threats | This paper contributes product comparison and variant classification, not the property |
| Agent Session Smuggling [ 1 ] | A remote agent injects covert instructions into an active cross-agent session | Can deliver into a stateful workflow | Needs no action-specific human decision for or consumption of that decision for |
| Authorization Continuity [ 27 ] | Determines whether a live grant survives changes to agent state, delegation, or task phase | Closest general stale-grant model | Loopjacking requires the concrete human-approval-to-effect trace and reachable mismatch actor |
| AID-Guard [ 23 ] | Revalidates requests and provider state at commit, retry, and recovery | Direct overlap with post-admission mutation and repair | Not itself a product approval-hijacking instance |
| Memory poisoning [ 8 ] | Untrusted data persists and steers later behavior | Can supply or influence | Requires neither approval for nor reuse of its authority |
AI Agent Security
Artificial intelligence agent security studies attacks and safeguards for tool-using, persistent, and collaborative systems across digital and physical settings.
See all 508 papers