Canister Audit / aeon skill

Deep security audit of an Internet

Deep security audit of an Internet Computer Rust canister repo - detect an ic-cdk canister, model its invariants and trust boundaries first, run a Semgrep IC ruleset plus cargo-audit/osv (best-effort), then a bounded agentic pass that hunts a path breaking each invariant against the 12 canister-security pitfalls, triage, adversarially refute, prove a confirmed HIGH/CRITICAL with a PocketIC reproduction through the shared PoC gate, and route each finding through the shared responsible-disclosure machinery. The IC sibling of sc-audit; Rust canisters only.

CATEGORY Dev & CodeRUNS On demandUPDATED
Skill
Canister Audit canister-audit
Category
Dev & Code
Default schedule
On demand
Last updated

commit f2eee79
Source
aeonfun/aeon/skills/canister-audit/SKILL.md MIT licensed, one prompt file

What it does

Canister Audit is an aeon skill: Deep security audit of an Internet Computer Rust canister repo - detect an ic-cdk canister, model its invariants and trust boundaries first, run a Semgrep IC ruleset plus cargo-audit/osv (best-effort), then a bounded agentic pass that hunts a path breaking each invariant against the 12 canister-security pitfalls, triage, adversarially refute, prove a confirmed HIGH/CRITICAL with a PocketIC reproduction through the shared PoC gate, and route each finding through the shared responsible-disclosure machinery. The IC sibling of sc-audit; Rust canisters only. Like every aeon skill it is one SKILL.md prompt file that runs unattended on your own GitHub Actions, on a schedule or when you trigger it, and sends what it finds to Telegram, Discord, Slack or email.

Canister bugs are logic and economics on a message-passing model, not syntax. The high-value classes - anonymous-principal access, TOCTOU across await, callback-trap-after-mutation, unbounded storage/cycle-drain DoS, upgrade-safety - are what an agentic reviewer catches by reading the source and reasoning about who can call what and which invariant breaks across an await. No off-the-shelf static tool models them: vuln-scanner and sc-audit have zero IC-aware analysis (Slither is Solidity-only; osv/cargo-audit cover Rust dependency CVEs, not canister logic). This skill is that missing IC arm.

It is sc-audit with the EVM pieces swapped for IC pieces and the shared machinery reused unchanged: the PoC gate (command mode), disclosure routing, dedup ledger, coverage manifest, report shape, and the staging/allowlist pattern. The agentic source pass (§C5) is the reliable core and needs no toolchain; Semgrep and the PocketIC proof arm are best-effort extras, so a clean audit never depends on either succeeding.

Input: the var setting

Every aeon skill takes one optional text input, var, set in aeon.yml or typed in when you run it by hand. It picks the target or the mode for that run.

Target selector. Three forms:

  • `` (empty) -> auto-select the day's fresh feed target, audit only if it is a Rust IC canister, else exit clean. See §C1.
  • owner/repo -> audit that GitHub repo (e.g. dfinity/examples, a specific canister repo).
  • fixture:<name> -> local regression mode: audit the bundled fixture at skills/canister-audit/fixtures/<name>/ (e.g. fixture:token_vault). No fork, no dedup, no disclosure - a self-contained way to exercise the whole pipeline including the PocketIC proof arm. See §C1/§C2.

Scope: Rust canisters only (ic-cdk / candid). Motoko is out of scope for this skill. There is no on-chain-by-address mode - an IC audit operates on source (a canister's logic is not recoverable from its deployed wasm the way verified EVM source is).

What it needs

Besides the model you connected to aeon, Canister Audit uses the following. Add secrets as GitHub Actions secrets on your aeon repo, or in Aeon Connect.

  • GH_GLOBAL - optional secret, unlocks more data or features
  • RESEND_API_KEY - optional secret, unlocks more data or features
  • RESEND_FROM - optional secret, unlocks more data or features
  • RESEND_REPLY_TO - optional secret, unlocks more data or features

Install and run it

Easiest: open Aeon Connect, sign in with GitHub and turn on Canister Audit. No clone, no terminal. To add it to an existing aeon repo from a shell, run:

bin/add-skill aeonfun/aeon canister-audit

Then switch it on in aeon.yml (the default schedule is filled in):

skills:
  canister-audit: { enabled: true, schedule: "workflow_dispatch", var: "" }

New to aeon? Read the docs for how skills, schedules and memory fit together, or browse all skills.