Scope: agents registered under three.ws Card v1 on the ERC-8004 Identity, Reputation, and Validation registries. For general site security contact info, see /.well-known/security.txt.
This document enumerates abuse vectors specific to three.ws registration and lists the current mitigation (or marks it open).
A user pins someone else's GLB to IPFS and registers it as their agent.
- Mitigation: card requires
model.license(SPDX or URL). Validators MAY refusepassfor cards withlicense: "unknown". DMCA takedown contact published in security.txt. Registry never serves the file directly — it points at IPFS. - Status: partial. License is declarative, not verified. Open: perceptual-hash blocklist for known stolen assets.
Card uses https:// model.uri and operator swaps the GLB after registration.
- Mitigation:
model.sha256is mandatory;<three-d-agent-badge>and the resolver verify hash on every load. A swap surfaces asunverified. Spec SHOULD prefersipfs://for prevention. - Status: mitigated for clients that verify; clients that ignore the badge are out of scope.
A site renders its own green pill claiming verification without checking.
- Mitigation: the trust signal is the on-chain validation attestation from an allow-listed validator (see VALIDATORS.md) — not the badge UI. Consumers verify against ValidationRegistry directly or via the resolver.
- Status: mitigated by design.
A validator's signing key leaks; attacker signs pass for malicious agents.
- Mitigation: validator keys are dedicated, not personal wallets (per VALIDATORS.md). Compromise →
removeValidator(address). Past attestations from that validator SHOULD be treated as expired from the removal block onward by any indexer / resolver. - Status: policy in place; key custody is each validator's responsibility. Open: support EIP-712 attestations with explicit expiry timestamps so leaked keys self-expire.
Attacker mints many agents and posts inflated ReputationRegistry scores for a target.
- Mitigation: ReputationRegistry already enforces one score per (reviewer, agent). Beyond that, the recommended reputation surface for v1 is measured signals from validators (render success, load p95, A2A handshake), not user thumbs-up. See 3D_AGENT_CARD.md §"Reputation".
- Status: partial. The on-chain primitive is sybil-resistant per-pair but not per-identity. Open: weight reviews by reviewer's own validation history.
Attacker mints thousands of agents to spam discovery surfaces.
- Mitigation: registration costs gas — Base mainnet is the primary chain for this reason. The optional gasless path via paymaster is rate-limited per wallet/IP at the paymaster layer, not on-chain.
- Status: mitigated on mainnet; paymaster rate limits are operational, not specified here.
Pinned GLB is dropped by all gateways; card now points at dead content.
- Mitigation: the registration flow pins via the platform pinning service (
api/pinning/[action].js) — Pinata whenPINATA_JWTis set, with web3.storage and Filebase as alternative providers (src/pinning/). Validators MUST re-fetch on every attestation; a dropped file produces afailonmanifest-integrity, demoting the agent. - Status: mitigated during validator runs. Long-term: optional Filecoin deal storage for "permanent" tier agents.
A registered agent's GLB contains illegal or platform-violating content.
- Mitigation: pre-pin moderation hook in the registration UI (open). Post-registration takedowns happen at the gateway / discovery layer — the chain entry persists but the agent is hidden from
/exploreand the resolver returns403 BLOCKED. - Status: OPEN. No moderation hook is wired in src/erc8004/register-ui.js yet. This is the highest-priority gap before opening public registration.
Attacker compromises three.ws and serves a malicious badge bundle that lies about verification.
- Mitigation: badge source is open in src/erc8004/badge.js; embedders SHOULD self-host or pin to a known SRI hash. Resolver responses are signed (open) so a tampered response can be detected client-side.
- Status: partial. SRI guidance documented; resolver signing is open.
Identity NFT owner updates tokenURI to point at a new card with different model.sha256.
- Mitigation: every card update is an on-chain event. Indexers SHOULD show the version chain via the optional
previousVersionfield. Consumers MAY pin to a specific card CID rather than following the livetokenURI. - Status: mitigated by design;
previousVersionadoption is encouraged.
Security issues: see public/.well-known/security.txt. For validator misconduct, open a public issue tagged validator-dispute.
- Identity / Reputation / Validation registry owner is currently the deployer EOA. Migrate to a 3-of-5 Safe on Base before opening public registration.
- Validator allow-list changes go through a PR + on-chain
addValidator/removeValidatorcall from the owner. Post-Safe migration, allow-list changes require multisig approval.