OceanAltOceanAlt
latest2026-07-177 min read

Attack Lab #3: Our Attribution Was Theater — Anyone Could Spend With Your Agent

The KYA gate checked whether an agent was attributed — never whether you are that agent. Real result: an attacker paid with the victim's agentId, zero credentials, 200 allow; and could overwrite the attributed entity, poisoning the audit chain. We added a seventh gate. Attribution without proof is theater.

OOceanAlt Editorial

Attack Lab · Episode 3. Last episode we said we'd go after attribution. Turns out: the foundation was empty.

Episode 1: six attacks, all blocked. Episode 2: we found we hadn't implemented daily cumulative limits, and added a sixth gate. This episode we went after Pillar 1 of the whole framework: Identity & Attribution (KYA).

It didn't hold. It collapsed harder than we expected.

The attack: I spend your money with your agent

Our KYA gate did one thing: check whether an agentId had been attributed to a KYC'd entity. Attributed → pass.

It never checked: are you that agent?

Real run, live gateway:

1) Victim attributes their own agent
   → attributed: Victim Corp (KYC'd)

2) Attacker (a completely different party) pays using the victim's agentId, zero credentials
   → 200 allow
   → the KYA gate's own words: "attributed: Victim Corp"

3) Attacker overwrites the victim's attributed entity
   → that agent now attributes to: "I am the attacker"

Step 2 is fatal: I need to know nothing but your agentId to spend against your mandate — while the KYA gate cheerfully assures you the payment is "attributed to Victim Corp."

Step 3 is worse: the attacker can point attribution at anyone. The audit chain is poisoned at the root — when you go looking for who to hold responsible, the log points at an innocent entity.

The root cause: authentication ≠ authorization

We conflated two questions:

  • "Does this identity exist?" (we did this)
  • "Are you this identity?" (we did not)

Doing only the first is checking at the door whether an ID card is genuine — without looking at whether the person holding it is the person on it.

Attribution without proof is theater. And Pillar 1 is the foundation of the entire RAP framework — if the foundation is theater, the five gates above it are decoration. That's an unpleasant sentence to write, and it's the most important conclusion here.

The patch: a seventh gate, KYA/Proof

Registration now issues a one-time credential (agentSecret), and every later call must present it:

  • Paying without it / with a mismatch → blocked at KYA/Proof
  • Updating an already-attributed agentId → requires the original credential, else refused (no attribution tampering)

After the patch, the same three attacks:

| Attack | Before | After | |---|---|---| | Pay with someone else's agentId (no credential) | 🔴 200 allow | ✅ 403 at KYA/Proof | | Overwrite another's attributed entity | 🔴 succeeded | ✅ refused | | Legitimate holder pays with credential | 200 | ✅ 200 (no false positive) |

That last row matters just as much: after a fix, legitimate traffic must still pass. A gate that kills good payments eventually gets switched off.

Three lessons

1. The most basic layer is the one nobody checks. We spent real effort polishing limits, allowlists, intent matching — the things that look like security. Meanwhile "who are you" at the foundation was simply assumed. Attackers don't attack the part you polished.

2. "Attributed" can be a lie that comforts you. The dangerous thing isn't having no KYA — it's having a KYA that lies, because it makes you believe the check happened. People without a defense are careful. People who think they have one aren't.

3. We've now broken our own gateway three episodes running. Episode 1 read like good news. Episode 2 found a missing limit. Episode 3 found the foundation empty. This is exactly why the Attack Lab exists — if we don't attack ourselves, someone else will, and they won't tell us.

We publish every break, including the ugly ones. A standard's credibility doesn't come from claiming completeness — it comes from whether its authors publish the results when they break it themselves.

Next episode

We're going after the audit chain: can the log of a blocked attack be forged or erased?

Attack it yourself: oceanalt.com/firewall · Test with your own agent: integration guide

(OceanAlt Attack Lab · research note)

Provenance & status

Byline
OceanAlt Editorial
First published
2026-07-17
Last updated
2026-08-14
Source material
Source not labeled

Cite this piece

OceanAlt Editorial (2026). "Attack Lab #3: Our Attribution Was Theater — Anyone Could Spend With Your Agent". OceanAlt. https://oceanalt.com/en/articles/attack-lab-3-attribution-is-theater (accessed 2026-09-17)

This piece follows our editorial and fact-checking standards. Found an error? tell us — once verified, the correction will be published right here.

TRY IT · FREE, NO SIGNUP

Paste a payee address before you pay and see whether it's on a sanctions list, through a mixer, or tagged for fraud.

This judgement can sit inside your own product

One line of code; it touches neither your CSS nor your JS. The same pre-settlement judgement can appear in your articles, on your wallet's confirmation screen, or as an endpoint your agent calls before it pays.

The widget collects no reader identity. Integrating does not mean OceanAlt endorses your product, or any address on your page.