agents/skills/evm/semi-trusted-roles/SKILL.md
Type Thought-template (instantiate before use) - Research basis Insider threat modeling, keeper/bot abuse vectors
npx skillsauth add plamentsv/plamen semi-trusted-rolesInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Type: Thought-template (instantiate before use) Research basis: Insider threat modeling, keeper/bot abuse vectors
onlyBot|onlyOperator|onlyKeeper|BOT_ROLE|OPERATOR_ROLE|KEEPER_ROLE|
hasRole.*BOT|hasRole.*OPERATOR|hasRole.*KEEPER|automated|keeper
For each permitted action, ask:
Timing Abuse:
Parameter Abuse:
Sequence Abuse:
Omission Abuse:
Scenario A: Timing Attack
1. {ROLE_NAME} monitors mempool for user transaction {USER_ACTION}
2. {ROLE_NAME} front-runs with {ROLE_ACTION}
3. User's transaction executes with worse conditions
4. Impact: {TIMING_IMPACT}
Scenario B: Parameter Attack
1. {ROLE_NAME} calls {ROLE_FUNCTION} with {MALICIOUS_PARAMS}
2. Parameters are not validated against {EXPECTED_CONSTRAINTS}
3. Impact: {PARAM_IMPACT}
Scenario C: Key Compromise
1. {ROLE_NAME} private key is compromised
2. Attacker can call: {ROLE_FUNCTIONS}
3. Maximum extractable value: {MAX_DAMAGE}
4. Recovery options: {RECOVERY_PATH}
Critical insight: Don't just analyze how the role can harm users -- analyze how USERS can exploit predictable role behavior.
Predictability Analysis:
Scenario D: User Exploits Keeper Timing
1. User observes that {ROLE_NAME} executes {ROLE_ACTION} at predictable times
2. User positions themselves before {ROLE_ACTION} (front-running the keeper)
3. {ROLE_ACTION} executes, changing state
4. User benefits from known state change
5. Impact: {USER_EXPLOIT_IMPACT}
Scenario E: User Griefs Role Preconditions
1. {ROLE_FUNCTION} has precondition: {PRECONDITION}
2. User can manipulate state to violate {PRECONDITION}
3. {ROLE_NAME} calls {ROLE_FUNCTION}, which reverts
4. System enters degraded state (no keeper actions possible)
5. Impact: {GRIEF_IMPACT}
Scenario F: User Forces Suboptimal Role Action
1. {ROLE_NAME} must choose between options based on state
2. User manipulates state to make worst option appear best
3. {ROLE_NAME} (following honest behavior) chooses suboptimal path
4. User profits from forced suboptimal execution
5. Impact: {SUBOPTIMAL_IMPACT}
Scenario G: Same-Chain Rate Staleness via Discrete Updates
1. Protocol's exchange rate only updates when {ROLE_NAME} acts (discrete updates)
2. Between role actions, rate is stale -- does not reflect accumulated value
3. User monitors for {ROLE_NAME} pending transaction
4. User enters at stale rate (favorable), {ROLE_NAME} executes, rate updates
5. User exits at updated rate (or holds appreciating position)
6. Impact: {RATE_ARBIT_IMPACT}
Note: This differs from cross-chain staleness. This applies when the rate is stale ON THE SAME CHAIN because updates only happen on specific role actions (compounding, rebalancing, harvesting), not on every user interaction.
For each function callable by {ROLE_NAME}:
| Function | Preconditions | User Can Manipulate? | Grief Impact | |----------|--------------|---------------------|--------------| | {func} | balance > 0 | YES - withdraw all | Keeper stuck | | {func} | cooldown passed | NO - time-based | N/A | | {func} | threshold met | YES - partial withdraw | Delayed execution |
Generic Rule: Any admin/keeper function precondition that depends on user-manipulable state is potentially griefable.
MANDATORY: Use Slither (list_functions with role modifiers, analyze_modifiers) to enumerate ALL privileged functions. Do NOT rely on manual scanning -- manual scanning misses functions. Validate your count against the Slither output.
Extend griefability analysis beyond the semi-trusted role to ALL admin/privileged functions:
For each function callable by DEFAULT_ADMIN_ROLE or equivalent:
| Function | Preconditions | External State Dependency? | User Can Manipulate? | Grief Impact | |----------|--------------|---------------------------|---------------------|--------------| | {admin_fn} | {preconditions} | YES/NO | YES/NO | {impact if griefed} |
Enumeration completeness check:
list_functions count for role-restricted functions: {N}Specific checks:
RULE: If ANY admin function has a user-griefable precondition -> severity >= MEDIUM if it blocks critical protocol operations.
{CONTRACTS} -- Contracts to analyze
{ROLE_NAME} -- Specific role (BOT_ROLE, OPERATOR, etc.)
{ROLE_FUNCTIONS} -- Functions this role can call
{USER_ACTION} -- User action that could be front-run
{ROLE_ACTION} -- Role action used in attack
{TIMING_IMPACT} -- Impact of timing attack
{MALICIOUS_PARAMS} -- Harmful parameter values
{EXPECTED_CONSTRAINTS}-- What params should be validated against
{PARAM_IMPACT} -- Impact of parameter attack
{MAX_DAMAGE} -- Maximum extractable value
{RECOVERY_PATH} -- How to recover from compromise
| Field | Required | Description | |-------|----------|-------------| | role_permissions | yes | Functions callable by role | | timing_vectors | yes | Timing-based abuse opportunities | | parameter_vectors | yes | Parameter-based abuse opportunities | | omission_vectors | yes | Harm from inaction | | user_exploit_vectors | yes | How users can exploit the role | | max_damage | yes | Worst-case damage assessment | | mitigations | yes | Existing protections | | finding | yes | CONFIRMED / REFUTED / CONTESTED / NEEDS_DEPTH | | evidence | yes | Code locations with line numbers | | step_execution | yes | Status for each step |
CRITICAL: You MUST report completion status for ALL steps. Both directions (role->user AND user->role) are equally important.
| Step | Required | Completed? | Notes | |------|----------|------------|-------| | 1. Inventory Role Permissions | YES | | | | 2. Analyze Within-Scope Abuse | YES | | | | 3. Model Attack Scenarios (A,B,C) | YES | | | | 4. Assess Mitigations | YES | | | | 5. Model User-Side Exploitation (D,E,F) | YES | | MANDATORY -- never skip | | 6. Precondition Griefability Check | YES | | MANDATORY -- never skip | | 6b. Admin Function Griefability | YES | | MANDATORY -- never skip |
After Step 4 (Assess Mitigations):
After Step 5 (User-Side Exploitation):
TOKEN_FLOW_TRACING.md for token-related griefing vectorsAfter Step 6 (Precondition Griefability):
**Step Execution**: checkmark1,2,3,4,5,6 | (no skips for this skill)
OR if incomplete:
**Step Execution**: checkmark1,2,3,4 | ?5,6(user exploitation not analyzed)
**FLAG**: Incomplete analysis -- requires depth review (missing reverse direction)
development
Prepare Solidity projects for a security audit — test coverage, test quality, NatSpec docs, code hygiene, dependency health, best-practice enforcement, deployment readiness, and project documentation checks. Generates a scored Audit Readiness Report and optionally runs static analysis. Trigger on: "prepare for audit", "audit readiness", "pre-audit check", "audit prep", "NatSpec check", or any request to review a Solidity codebase before a security review.
development
Launch the Plamen deterministic Web3 security audit pipeline
development
Run the Plamen smart-contract audit wizard in Codex
testing
Launch the Plamen deterministic L1 infrastructure audit pipeline