Skip to content

Discussion: runtime preflight skill for Bankr wallet actions (companion to PR #388) #389

Description

@opengrid1

Opening this as a discussion alongside #388 so the Bankr team has a non-code thread to weigh in on scope, naming, and how this layer should sit beside existing controls.

TL;DR

Why this complements aeon-skill-security-scan
aeon-skill-security-scan catches malicious skills statically. It cannot catch the chain where every installed skill is clean but one obeys an instruction smuggled in via fetched content (tweet, RSS, DM, on-chain memo). That chain ends in a wallet drain. Fleet Watcher closes it by inspecting the proposed wallet action synchronously, before it reaches api.bankr.bot.

What gets blocked (live-verified)

  • Override-prior prompt injection (NFKC-normalised + unicode-escape decoded so \u0069gnore-style evasion doesnt help)
  • Fake Bankr domains from Bankr own security docs (bankr-claim.xyz, bankrbot.io, bankr-airdrop*, …)
  • Unlimited token approvals
  • EIP-712 / permit / permit2 / signTypedData originating from fetched content
  • Pause-then-drain and control-bypass language
  • Leaked bk_ keys appearing inside untrusted content
  • Intent mismatch (visible prompt = read, proposed action = write)
  • Destinations on the maintained public drainer feed (scam-sniffer + MEW darklist, refreshed every 6h)

Each BLOCK includes a remediation line that mirrors Bankr own incident-response order: Pause → Revoke → Rotate → Audit → Unpause.

Security properties

  • Read-only. Fleet Watcher never sees the agent bk_ key.
  • Matched substring is operator-visible in evidence but never echoed in the public reason field — no reflected-secret risk.
  • Rate-limited: 600 req/min global + 30 req/min per distinct payload fingerprint, 16 KB body cap. Per-IP avoided deliberately (shared proxies collapse them).
  • ALLOW verdicts are not persisted server-side; only BLOCK is.
  • Fail-closed by default in the SDK.

What wed like from the Bankr team

  1. Adversarial review of the pattern library and public endpoint.
  2. Decision on merging Add fleet-watcher: runtime prompt-injection + wallet-hijack preflight #388 so the skill is installable through the standard catalog.
  3. A pointer from Bankr own security docs would reach every agent dev who reads them.
  4. Optional: co-maintain the drainer-feed allowlist.
  5. Optional: an x-bankr-verified response header on api.bankr.bot would let the SDK detect spoofed upstreams.

Threat model: https://github.com/Goblin-rush/fleet-watcher/blob/main/threat_model.md

Happy to iterate on naming, scope, or pattern coverage. Everything MIT — if you would rather fork and host internally, the self-host instructions are in the README.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions