ability-analysis
Trigger Pattern Always (Aptos Move) - foundational security check - Inject Into Breadth…
Trigger EXTERNAL_LIB flag detected (protocol uses third-party Move dependencies) - Used by Breadth agents, depth-external
$ npx -y skills add PlamenTSV/plamen --skill dependency-audit --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/dependency-auditContext preview
The summary Claude sees to decide when to auto-load this skill.
Trigger EXTERNAL_LIB flag detected (protocol uses third-party Move dependencies) - Used by Breadth agents, depth-external
name: "dependency-audit" description: "Trigger EXTERNAL_LIB flag detected (protocol uses third-party Move dependencies) - Used by Breadth agents, depth-external"
> **Trigger**: EXTERNAL_LIB flag detected (protocol uses third-party Move dependencies) > **Used by**: Breadth agents, depth-external > **Covers**: Third-party library security, upgrade policy risks, critical function correctness, transitive dependency chains
Audit third-party Move dependencies for security risks. Aptos protocols commonly depend on external math libraries, utility modules, and protocol SDKs. Unlike EVM (where dependencies are compiled into the contract), Move dependencies are on-chain modules that can be independently upgraded. A dependency upgrade can silently change the behavior of the audited protocol.
Parse `Move.toml` for all dependencies. Categorize each:
| # | Dependency | Source | Category | Upgrade Policy | Revision Pinned? | |---|-----------|--------|----------|---------------|-----------------| | 1 | AptosFramework | aptos-framework repo | FRAMEWORK | Framework governance | {rev hash or branch} | | 2 | AptosStd | aptos-framework repo | FRAMEWORK | Framework governance | {rev hash or branch} | | 3 | AptosToken | aptos-framework repo | FRAMEWORK | Framework governance | {rev hash or branch} | | 4 | {third_party_lib} | {git URL} | THIRD_PARTY | {compatible/immutable/unknown} | {YES: rev=abc123 / NO: branch=main} | | 5 | {sub_module} | local path | IN_SCOPE | N/A (part of audit) | N/A |
**Categories**:
**MANDATORY PARSE**: Read `Move.toml` (and any sub-package `Move.toml` files) for: 1. `[dependencies]` section entries 2. `git = "..."` URLs - identify the source repository 3. `rev = "..."` - pinned revision hash (safe) vs `branch = "main"` (dangerous) 4. `local = "..."` - in-scope sub-modules
For each THIRD_PARTY dependency:
| Dependency | On-Chain Address | Upgrade Policy | Can Upgrade Without Protocol Knowledge? | Risk Level | |-----------|-----------------|---------------|----------------------------------------|-----------| | {lib} | {0x...} | immutable | NO | LOW | | {lib} | {0x...} | compatible | YES - publisher can add functions, change logic | HIGH | | {lib} | {0x...} | unknown | VERIFY ON-CHAIN | ASSESS |
**Check for each `compatible` dependency**: 1. Can the dependency publisher add new friend declarations (giving new modules access to internal state)? 2. Can the dependency publisher change function implementations (same signature, different logic)? 3. Can the dependency publisher add new public functions that interact with stored state? 4. Does the audited protocol store any state that the dependency module can access? 5. Is there a governance/multisig controlling the dependency's publisher address?
**Severity**: If a `compatible` third-party dependency can be upgraded to change behavior of functions the protocol calls, AND the protocol has no way to detect or prevent this -> minimum MEDIUM finding.
**Pinning check**: If `Move.toml` uses `branch = "main"` instead of `rev = "abc123"`:
For each function called from a THIRD_PARTY dependency:
| # | Called Function | From Module | Parameters | Return Type | Frequency | Impact If Wrong | |---|---------------|-------------|-----------|-------------|-----------|----------------| | 1 | {lib::func()} | {our_module} | {params} | {return} | {every tx / periodic / init only} | {describe} |
For each critical function (called frequently OR high impact if wrong):
**Overflow/underflow check**: 1. Does the function handle multiplication overflow? (e.g., `a * b` where both are u64 - can overflow) 2. Does it handle division by zero? 3. Does it use intermediate u128 for precision in u64 arithmetic? 4. **Bit shift safety**: Does it use `<<` or `>>`? If so, is the shift amount bounded to < 64 (for u64) or < 128 (for u128)? Unbounded bit shifts are a known attack vector (historical exploit: bit shift overflow in a custom shift helper allowed minting tokens from minimal liquidity).
**Edge case check**: | Input | Expected Output | Actual Output | Correct? | |-------|----------------|---------------|----------| | 0 | {expected} | {verify} | YES/NO | | 1 | {expected} | {verify} | YES/NO | | MAX_U64 | {expected: revert or handled} | {verify} | YES/NO | | MAX_U128 | {expected} | {verify} | YES/NO |
**Specification check**:
For each third-party function call:
| Call | Trusts Dependency To | What If Dependency Lies/Breaks | Detection? | |-----|---------------------|-------------------------------|-----------| | {lib::get_price()} | Return accurate price | Protocol uses wrong price → fund loss | {sanity check present?} | | {lib::sqrt(x)} | Return correct sqrt | Wrong math → accounting error | {no detection} |
**Check**: Does the protocol validate the RETURN VALUE of third-party calls? Or does it blindly trust the result?
If no validation AND high impact -> FINDING.
Check whether third-party dependencies have their own dependencies:
###
Autonomous Web3 security auditor for Claude Code and OpenAI Codex CLI. Orchestrates 18-100 AI agents across 40+ phases to produce audit reports with verified PoC exploits — for smart contracts and L1 node-client infrastructure.
Repo: PlamenTSV/plamen
Trigger Pattern Always (Aptos Move) - foundational security check - Inject Into Breadth…
Trigger Pattern Always (Aptos Move) - Move VM aborts on shift = bit width - Inject Into…
Trigger Protocol has privileged roles (admin, operator, governance, resource account owner) -…
Trigger Pattern MONETARY_PARAMETER flag (required) - Inject Into Breadth agents (merged via…
Trigger Pattern Any external module interaction detected in attack_surface.md - Inject Into…