@elizaos/skills 2.0.0-alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +126 -0
- package/dist/formatter.d.ts +44 -0
- package/dist/formatter.d.ts.map +1 -0
- package/dist/formatter.js +182 -0
- package/dist/frontmatter.d.ts +39 -0
- package/dist/frontmatter.d.ts.map +1 -0
- package/dist/frontmatter.js +105 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/loader.d.ts +33 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +362 -0
- package/dist/resolver.d.ts +18 -0
- package/dist/resolver.d.ts.map +1 -0
- package/dist/resolver.js +90 -0
- package/dist/types.d.ts +201 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +1 -0
- package/package.json +57 -0
- package/skills/1password/SKILL.md +70 -0
- package/skills/1password/references/cli-examples.md +29 -0
- package/skills/1password/references/get-started.md +17 -0
- package/skills/apple-notes/SKILL.md +77 -0
- package/skills/apple-reminders/SKILL.md +96 -0
- package/skills/bear-notes/SKILL.md +107 -0
- package/skills/bird/SKILL.md +224 -0
- package/skills/blogwatcher/SKILL.md +69 -0
- package/skills/blucli/SKILL.md +47 -0
- package/skills/bluebubbles/SKILL.md +131 -0
- package/skills/camsnap/SKILL.md +45 -0
- package/skills/canvas/SKILL.md +203 -0
- package/skills/clawhub/SKILL.md +77 -0
- package/skills/coding-agent/SKILL.md +284 -0
- package/skills/discord/SKILL.md +578 -0
- package/skills/eightctl/SKILL.md +50 -0
- package/skills/food-order/SKILL.md +48 -0
- package/skills/gemini/SKILL.md +43 -0
- package/skills/gifgrep/SKILL.md +79 -0
- package/skills/github/SKILL.md +77 -0
- package/skills/gog/SKILL.md +116 -0
- package/skills/goplaces/SKILL.md +52 -0
- package/skills/healthcheck/SKILL.md +245 -0
- package/skills/himalaya/SKILL.md +257 -0
- package/skills/himalaya/references/configuration.md +184 -0
- package/skills/himalaya/references/message-composition.md +199 -0
- package/skills/imsg/SKILL.md +74 -0
- package/skills/local-places/SERVER_README.md +101 -0
- package/skills/local-places/SKILL.md +102 -0
- package/skills/local-places/pyproject.toml +21 -0
- package/skills/local-places/src/local_places/__init__.py +2 -0
- package/skills/local-places/src/local_places/google_places.py +314 -0
- package/skills/local-places/src/local_places/main.py +65 -0
- package/skills/local-places/src/local_places/schemas.py +107 -0
- package/skills/mcporter/SKILL.md +61 -0
- package/skills/model-usage/SKILL.md +69 -0
- package/skills/model-usage/references/codexbar-cli.md +33 -0
- package/skills/model-usage/scripts/model_usage.py +310 -0
- package/skills/nano-banana-pro/SKILL.md +58 -0
- package/skills/nano-banana-pro/scripts/generate_image.py +184 -0
- package/skills/nano-pdf/SKILL.md +38 -0
- package/skills/notion/SKILL.md +172 -0
- package/skills/obsidian/SKILL.md +81 -0
- package/skills/openai-image-gen/SKILL.md +89 -0
- package/skills/openai-image-gen/scripts/gen.py +240 -0
- package/skills/openai-whisper/SKILL.md +38 -0
- package/skills/openai-whisper-api/SKILL.md +52 -0
- package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
- package/skills/openhue/SKILL.md +51 -0
- package/skills/oracle/SKILL.md +125 -0
- package/skills/ordercli/SKILL.md +78 -0
- package/skills/peekaboo/SKILL.md +190 -0
- package/skills/sag/SKILL.md +87 -0
- package/skills/security-ask-questions-if-underspecified/.claude-plugin/plugin.json +10 -0
- package/skills/security-ask-questions-if-underspecified/README.md +24 -0
- package/skills/security-ask-questions-if-underspecified/SKILL.md +85 -0
- package/skills/security-ask-questions-if-underspecified/skills/ask-questions-if-underspecified/SKILL.md +85 -0
- package/skills/security-audit-context-building/.claude-plugin/plugin.json +10 -0
- package/skills/security-audit-context-building/README.md +58 -0
- package/skills/security-audit-context-building/SKILL.md +297 -0
- package/skills/security-audit-context-building/commands/audit-context.md +21 -0
- package/skills/security-audit-context-building/skills/audit-context-building/SKILL.md +297 -0
- package/skills/security-audit-context-building/skills/audit-context-building/resources/COMPLETENESS_CHECKLIST.md +47 -0
- package/skills/security-audit-context-building/skills/audit-context-building/resources/FUNCTION_MICRO_ANALYSIS_EXAMPLE.md +355 -0
- package/skills/security-audit-context-building/skills/audit-context-building/resources/OUTPUT_REQUIREMENTS.md +71 -0
- package/skills/security-building-secure-contracts/.claude-plugin/plugin.json +10 -0
- package/skills/security-building-secure-contracts/README.md +241 -0
- package/skills/security-building-secure-contracts/SKILL.md +67 -0
- package/skills/security-building-secure-contracts/skills/algorand-vulnerability-scanner/SKILL.md +284 -0
- package/skills/security-building-secure-contracts/skills/algorand-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +405 -0
- package/skills/security-building-secure-contracts/skills/audit-prep-assistant/SKILL.md +409 -0
- package/skills/security-building-secure-contracts/skills/cairo-vulnerability-scanner/SKILL.md +329 -0
- package/skills/security-building-secure-contracts/skills/cairo-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +722 -0
- package/skills/security-building-secure-contracts/skills/code-maturity-assessor/SKILL.md +218 -0
- package/skills/security-building-secure-contracts/skills/code-maturity-assessor/resources/ASSESSMENT_CRITERIA.md +355 -0
- package/skills/security-building-secure-contracts/skills/code-maturity-assessor/resources/EXAMPLE_REPORT.md +248 -0
- package/skills/security-building-secure-contracts/skills/code-maturity-assessor/resources/REPORT_FORMAT.md +33 -0
- package/skills/security-building-secure-contracts/skills/cosmos-vulnerability-scanner/SKILL.md +334 -0
- package/skills/security-building-secure-contracts/skills/cosmos-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +740 -0
- package/skills/security-building-secure-contracts/skills/guidelines-advisor/SKILL.md +252 -0
- package/skills/security-building-secure-contracts/skills/guidelines-advisor/resources/ASSESSMENT_AREAS.md +329 -0
- package/skills/security-building-secure-contracts/skills/guidelines-advisor/resources/DELIVERABLES.md +118 -0
- package/skills/security-building-secure-contracts/skills/guidelines-advisor/resources/EXAMPLE_REPORT.md +298 -0
- package/skills/security-building-secure-contracts/skills/secure-workflow-guide/SKILL.md +161 -0
- package/skills/security-building-secure-contracts/skills/secure-workflow-guide/resources/EXAMPLE_REPORT.md +279 -0
- package/skills/security-building-secure-contracts/skills/secure-workflow-guide/resources/WORKFLOW_STEPS.md +132 -0
- package/skills/security-building-secure-contracts/skills/solana-vulnerability-scanner/SKILL.md +389 -0
- package/skills/security-building-secure-contracts/skills/solana-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +669 -0
- package/skills/security-building-secure-contracts/skills/substrate-vulnerability-scanner/SKILL.md +298 -0
- package/skills/security-building-secure-contracts/skills/substrate-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +791 -0
- package/skills/security-building-secure-contracts/skills/token-integration-analyzer/SKILL.md +362 -0
- package/skills/security-building-secure-contracts/skills/token-integration-analyzer/resources/ASSESSMENT_CATEGORIES.md +571 -0
- package/skills/security-building-secure-contracts/skills/token-integration-analyzer/resources/REPORT_TEMPLATES.md +141 -0
- package/skills/security-building-secure-contracts/skills/ton-vulnerability-scanner/SKILL.md +388 -0
- package/skills/security-building-secure-contracts/skills/ton-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +595 -0
- package/skills/security-differential-review/.claude-plugin/plugin.json +10 -0
- package/skills/security-differential-review/README.md +109 -0
- package/skills/security-differential-review/SKILL.md +220 -0
- package/skills/security-differential-review/commands/diff-review.md +21 -0
- package/skills/security-differential-review/skills/differential-review/SKILL.md +220 -0
- package/skills/security-differential-review/skills/differential-review/adversarial.md +203 -0
- package/skills/security-differential-review/skills/differential-review/methodology.md +234 -0
- package/skills/security-differential-review/skills/differential-review/patterns.md +300 -0
- package/skills/security-differential-review/skills/differential-review/reporting.md +369 -0
- package/skills/security-entry-point-analyzer/.claude-plugin/plugin.json +10 -0
- package/skills/security-entry-point-analyzer/README.md +74 -0
- package/skills/security-entry-point-analyzer/SKILL.md +251 -0
- package/skills/security-entry-point-analyzer/commands/entry-points.md +18 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/SKILL.md +251 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/cosmwasm.md +182 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/move-aptos.md +107 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/move-sui.md +87 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/solana.md +155 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/solidity.md +135 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/ton.md +185 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/vyper.md +141 -0
- package/skills/security-fix-review/.claude-plugin/plugin.json +13 -0
- package/skills/security-fix-review/README.md +118 -0
- package/skills/security-fix-review/SKILL.md +264 -0
- package/skills/security-fix-review/commands/fix-review.md +24 -0
- package/skills/security-fix-review/skills/fix-review/SKILL.md +264 -0
- package/skills/security-fix-review/skills/fix-review/references/bug-detection.md +408 -0
- package/skills/security-fix-review/skills/fix-review/references/finding-matching.md +298 -0
- package/skills/security-fix-review/skills/fix-review/references/report-parsing.md +398 -0
- package/skills/security-insecure-defaults/.claude-plugin/plugin.json +10 -0
- package/skills/security-insecure-defaults/README.md +45 -0
- package/skills/security-insecure-defaults/SKILL.md +117 -0
- package/skills/security-insecure-defaults/skills/insecure-defaults/SKILL.md +117 -0
- package/skills/security-insecure-defaults/skills/insecure-defaults/references/examples.md +409 -0
- package/skills/security-modern-python/.claude-plugin/plugin.json +10 -0
- package/skills/security-modern-python/README.md +58 -0
- package/skills/security-modern-python/SKILL.md +333 -0
- package/skills/security-modern-python/hooks/hooks.json +16 -0
- package/skills/security-modern-python/hooks/intercept-legacy-python.bats +388 -0
- package/skills/security-modern-python/hooks/intercept-legacy-python.sh +109 -0
- package/skills/security-modern-python/hooks/test_helper.bash +75 -0
- package/skills/security-modern-python/skills/modern-python/SKILL.md +333 -0
- package/skills/security-modern-python/skills/modern-python/references/dependabot.md +43 -0
- package/skills/security-modern-python/skills/modern-python/references/migration-checklist.md +141 -0
- package/skills/security-modern-python/skills/modern-python/references/pep723-scripts.md +259 -0
- package/skills/security-modern-python/skills/modern-python/references/prek.md +211 -0
- package/skills/security-modern-python/skills/modern-python/references/pyproject.md +254 -0
- package/skills/security-modern-python/skills/modern-python/references/ruff-config.md +240 -0
- package/skills/security-modern-python/skills/modern-python/references/security-setup.md +255 -0
- package/skills/security-modern-python/skills/modern-python/references/testing.md +284 -0
- package/skills/security-modern-python/skills/modern-python/references/uv-commands.md +200 -0
- package/skills/security-modern-python/skills/modern-python/templates/dependabot.yml +36 -0
- package/skills/security-modern-python/skills/modern-python/templates/pre-commit-config.yaml +66 -0
- package/skills/security-property-based-testing/.claude-plugin/plugin.json +9 -0
- package/skills/security-property-based-testing/README.md +47 -0
- package/skills/security-property-based-testing/SKILL.md +109 -0
- package/skills/security-property-based-testing/skills/property-based-testing/README.md +88 -0
- package/skills/security-property-based-testing/skills/property-based-testing/SKILL.md +109 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/design.md +191 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/generating.md +200 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/libraries.md +130 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/refactoring.md +181 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/reviewing.md +209 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/strategies.md +124 -0
- package/skills/semgrep-rule-creator/.claude-plugin/plugin.json +8 -0
- package/skills/semgrep-rule-creator/README.md +43 -0
- package/skills/semgrep-rule-creator/SKILL.md +168 -0
- package/skills/semgrep-rule-creator/commands/semgrep-rule.md +26 -0
- package/skills/semgrep-rule-creator/skills/semgrep-rule-creator/SKILL.md +168 -0
- package/skills/semgrep-rule-creator/skills/semgrep-rule-creator/references/quick-reference.md +203 -0
- package/skills/semgrep-rule-creator/skills/semgrep-rule-creator/references/workflow.md +240 -0
- package/skills/session-logs/SKILL.md +115 -0
- package/skills/sharp-edges/.claude-plugin/plugin.json +10 -0
- package/skills/sharp-edges/README.md +48 -0
- package/skills/sharp-edges/SKILL.md +292 -0
- package/skills/sharp-edges/skills/sharp-edges/SKILL.md +292 -0
- package/skills/sharp-edges/skills/sharp-edges/references/auth-patterns.md +252 -0
- package/skills/sharp-edges/skills/sharp-edges/references/case-studies.md +274 -0
- package/skills/sharp-edges/skills/sharp-edges/references/config-patterns.md +333 -0
- package/skills/sharp-edges/skills/sharp-edges/references/crypto-apis.md +190 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-c.md +205 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-csharp.md +285 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-go.md +270 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-java.md +263 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-javascript.md +269 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-kotlin.md +265 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-php.md +245 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-python.md +274 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-ruby.md +273 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-rust.md +272 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-swift.md +287 -0
- package/skills/sharp-edges/skills/sharp-edges/references/language-specific.md +588 -0
- package/skills/sherpa-onnx-tts/SKILL.md +103 -0
- package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
- package/skills/skill-creator/SKILL.md +370 -0
- package/skills/skill-creator/license.txt +202 -0
- package/skills/skill-creator/scripts/init_skill.py +378 -0
- package/skills/skill-creator/scripts/package_skill.py +111 -0
- package/skills/skill-creator/scripts/quick_validate.py +101 -0
- package/skills/slack/SKILL.md +144 -0
- package/skills/songsee/SKILL.md +49 -0
- package/skills/sonoscli/SKILL.md +46 -0
- package/skills/spec-to-code-compliance/.claude-plugin/plugin.json +10 -0
- package/skills/spec-to-code-compliance/README.md +67 -0
- package/skills/spec-to-code-compliance/SKILL.md +349 -0
- package/skills/spec-to-code-compliance/commands/spec-compliance.md +22 -0
- package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/SKILL.md +349 -0
- package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/COMPLETENESS_CHECKLIST.md +69 -0
- package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/IR_EXAMPLES.md +417 -0
- package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/OUTPUT_REQUIREMENTS.md +105 -0
- package/skills/spotify-player/SKILL.md +64 -0
- package/skills/static-analysis/.claude-plugin/plugin.json +8 -0
- package/skills/static-analysis/README.md +59 -0
- package/skills/static-analysis/SKILL.md +91 -0
- package/skills/static-analysis/skills/codeql/SKILL.md +315 -0
- package/skills/static-analysis/skills/sarif-parsing/SKILL.md +479 -0
- package/skills/static-analysis/skills/sarif-parsing/resources/jq-queries.md +162 -0
- package/skills/static-analysis/skills/sarif-parsing/resources/sarif_helpers.py +331 -0
- package/skills/static-analysis/skills/semgrep/SKILL.md +337 -0
- package/skills/summarize/SKILL.md +87 -0
- package/skills/testing-handbook-skills/.claude-plugin/plugin.json +8 -0
- package/skills/testing-handbook-skills/README.md +241 -0
- package/skills/testing-handbook-skills/SKILL.md +104 -0
- package/skills/testing-handbook-skills/scripts/pyproject.toml +8 -0
- package/skills/testing-handbook-skills/scripts/validate-skills.py +657 -0
- package/skills/testing-handbook-skills/skills/address-sanitizer/SKILL.md +341 -0
- package/skills/testing-handbook-skills/skills/aflpp/SKILL.md +640 -0
- package/skills/testing-handbook-skills/skills/atheris/SKILL.md +515 -0
- package/skills/testing-handbook-skills/skills/cargo-fuzz/SKILL.md +454 -0
- package/skills/testing-handbook-skills/skills/codeql/SKILL.md +549 -0
- package/skills/testing-handbook-skills/skills/constant-time-testing/SKILL.md +507 -0
- package/skills/testing-handbook-skills/skills/coverage-analysis/SKILL.md +607 -0
- package/skills/testing-handbook-skills/skills/fuzzing-dictionary/SKILL.md +297 -0
- package/skills/testing-handbook-skills/skills/fuzzing-obstacles/SKILL.md +426 -0
- package/skills/testing-handbook-skills/skills/harness-writing/SKILL.md +614 -0
- package/skills/testing-handbook-skills/skills/libafl/SKILL.md +625 -0
- package/skills/testing-handbook-skills/skills/libfuzzer/SKILL.md +795 -0
- package/skills/testing-handbook-skills/skills/ossfuzz/SKILL.md +426 -0
- package/skills/testing-handbook-skills/skills/ruzzy/SKILL.md +443 -0
- package/skills/testing-handbook-skills/skills/semgrep/SKILL.md +601 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/SKILL.md +372 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/agent-prompt.md +280 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/discovery.md +452 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/domain-skill.md +504 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/fuzzer-skill.md +454 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/technique-skill.md +527 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/tool-skill.md +366 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/testing.md +482 -0
- package/skills/testing-handbook-skills/skills/wycheproof/SKILL.md +533 -0
- package/skills/things-mac/SKILL.md +86 -0
- package/skills/tmux/SKILL.md +135 -0
- package/skills/tmux/scripts/find-sessions.sh +112 -0
- package/skills/tmux/scripts/wait-for-text.sh +83 -0
- package/skills/trello/SKILL.md +95 -0
- package/skills/variant-analysis/.claude-plugin/plugin.json +8 -0
- package/skills/variant-analysis/README.md +41 -0
- package/skills/variant-analysis/SKILL.md +142 -0
- package/skills/variant-analysis/commands/variants.md +23 -0
- package/skills/variant-analysis/skills/variant-analysis/METHODOLOGY.md +327 -0
- package/skills/variant-analysis/skills/variant-analysis/SKILL.md +142 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/codeql/cpp.ql +119 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/codeql/go.ql +69 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/codeql/java.ql +71 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/codeql/javascript.ql +63 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/codeql/python.ql +80 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/cpp.yaml +98 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/go.yaml +63 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/java.yaml +61 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/javascript.yaml +60 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/python.yaml +72 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/variant-report-template.md +75 -0
- package/skills/video-frames/SKILL.md +46 -0
- package/skills/video-frames/scripts/frame.sh +81 -0
- package/skills/voice-call/SKILL.md +45 -0
- package/skills/wacli/SKILL.md +72 -0
- package/skills/weather/SKILL.md +54 -0
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
## 6. Vulnerability Checklist (11 Patterns)
|
|
2
|
+
|
|
3
|
+
### 6.1 REKEYING ATTACK ⚠️ CRITICAL
|
|
4
|
+
|
|
5
|
+
**Description**: Missing validation of the `RekeyTo` transaction field allows attackers to change account authorization and bypass contract restrictions.
|
|
6
|
+
|
|
7
|
+
**Detection Patterns**:
|
|
8
|
+
```python
|
|
9
|
+
# VULNERABLE: No RekeyTo check
|
|
10
|
+
If(Txn.type_enum() == TxnType.Payment)
|
|
11
|
+
# Missing: Assert(Txn.rekey_to() == Global.zero_address())
|
|
12
|
+
|
|
13
|
+
# VULNERABLE: Inner transactions with user-controlled RekeyTo
|
|
14
|
+
InnerTxnBuilder.SetField(TxnField.rekey_to, Txn.accounts[1]) # User controlled
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**What to Check**:
|
|
18
|
+
- [ ] All transaction approval logic validates `Txn.rekey_to() == Global.zero_address()`
|
|
19
|
+
- [ ] Inner transactions in Teal v6+ do not use user-controlled RekeyTo
|
|
20
|
+
- [ ] Group transactions verify RekeyTo for all relevant txns
|
|
21
|
+
|
|
22
|
+
**Mitigation**:
|
|
23
|
+
```python
|
|
24
|
+
# SECURE: Validate RekeyTo field
|
|
25
|
+
Assert(Txn.rekey_to() == Global.zero_address())
|
|
26
|
+
|
|
27
|
+
# OR: Explicitly allow specific rekey target
|
|
28
|
+
Assert(Txn.rekey_to() == intended_address)
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**Tool Detection**: Tealer detector `unprotected-rekey` available
|
|
32
|
+
|
|
33
|
+
**References**: building-secure-contracts/not-so-smart-contracts/algorand/rekeying
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
### 4.2 UNCHECKED TRANSACTION FEE ⚠️ HIGH
|
|
38
|
+
|
|
39
|
+
**Description**: Smart signatures without fee validation allow users to set excessive fees, draining the sender's account balance.
|
|
40
|
+
|
|
41
|
+
**Detection Patterns**:
|
|
42
|
+
```python
|
|
43
|
+
# VULNERABLE: No fee check in smart signature
|
|
44
|
+
def approval_program():
|
|
45
|
+
return If(Txn.type_enum() == TxnType.Payment, Int(1), Int(0))
|
|
46
|
+
# Missing fee validation
|
|
47
|
+
|
|
48
|
+
# VULNERABLE: Unbounded fee
|
|
49
|
+
If(Txn.fee() <= some_large_value) # Still vulnerable
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**What to Check**:
|
|
53
|
+
- [ ] Smart signatures enforce `Txn.fee() == Global.min_txn_fee()`
|
|
54
|
+
- [ ] OR fee is explicitly set to 0 with fee pooling enabled
|
|
55
|
+
- [ ] No user control over transaction fee amounts
|
|
56
|
+
|
|
57
|
+
**Mitigation**:
|
|
58
|
+
```python
|
|
59
|
+
# SECURE: Force fee to zero (with fee pooling)
|
|
60
|
+
Assert(Txn.fee() == Int(0))
|
|
61
|
+
|
|
62
|
+
# OR: Enforce minimum fee only
|
|
63
|
+
Assert(Txn.fee() == Global.min_txn_fee())
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**References**: building-secure-contracts/not-so-smart-contracts/algorand/unchecked_transaction_fee
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
### 4.3 CLOSING ACCOUNT (CloseRemainderTo) ⚠️ CRITICAL
|
|
71
|
+
|
|
72
|
+
**Description**: Missing validation of `CloseRemainderTo` field allows attackers to drain entire account balance to arbitrary address.
|
|
73
|
+
|
|
74
|
+
**Detection Patterns**:
|
|
75
|
+
```python
|
|
76
|
+
# VULNERABLE: Payment without CloseRemainderTo check
|
|
77
|
+
If(Txn.type_enum() == TxnType.Payment)
|
|
78
|
+
# Missing: Assert(Txn.close_remainder_to() == Global.zero_address())
|
|
79
|
+
|
|
80
|
+
# VULNERABLE: Inner transaction with close field
|
|
81
|
+
InnerTxnBuilder.SetFields({
|
|
82
|
+
TxnField.type_enum: TxnType.Payment,
|
|
83
|
+
# Missing CloseRemainderTo validation
|
|
84
|
+
})
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**What to Check**:
|
|
88
|
+
- [ ] All payment transactions validate `Txn.close_remainder_to() == Global.zero_address()`
|
|
89
|
+
- [ ] OR explicitly allow specific close address
|
|
90
|
+
- [ ] Inner transactions do not set CloseRemainderTo unless intended
|
|
91
|
+
|
|
92
|
+
**Mitigation**:
|
|
93
|
+
```python
|
|
94
|
+
# SECURE: Validate CloseRemainderTo
|
|
95
|
+
Assert(Txn.close_remainder_to() == Global.zero_address())
|
|
96
|
+
|
|
97
|
+
# OR: Allow specific close target
|
|
98
|
+
Assert(Txn.close_remainder_to() == authorized_address)
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**References**: building-secure-contracts/not-so-smart-contracts/algorand/closing_account
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
### 4.4 CLOSING ASSET (AssetCloseTo) ⚠️ CRITICAL
|
|
106
|
+
|
|
107
|
+
**Description**: Missing validation of `AssetCloseTo` field enables transferring entire asset balance to arbitrary address.
|
|
108
|
+
|
|
109
|
+
**Detection Patterns**:
|
|
110
|
+
```python
|
|
111
|
+
# VULNERABLE: Asset transfer without AssetCloseTo check
|
|
112
|
+
If(Txn.type_enum() == TxnType.AssetTransfer)
|
|
113
|
+
# Missing: Assert(Txn.asset_close_to() == Global.zero_address())
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
**What to Check**:
|
|
117
|
+
- [ ] All asset transfer transactions validate `Txn.asset_close_to() == Global.zero_address()`
|
|
118
|
+
- [ ] OR explicitly specify allowed close target
|
|
119
|
+
- [ ] Inner asset transfers validate AssetCloseTo field
|
|
120
|
+
|
|
121
|
+
**Mitigation**:
|
|
122
|
+
```python
|
|
123
|
+
# SECURE: Validate AssetCloseTo
|
|
124
|
+
Assert(Txn.asset_close_to() == Global.zero_address())
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
**References**: building-secure-contracts/not-so-smart-contracts/algorand/closing_asset
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
### 4.5 GROUP SIZE CHECK ⚠️ HIGH
|
|
132
|
+
|
|
133
|
+
**Description**: Missing validation of `Global.group_size()` allows attackers to include multiple application calls in atomic group, executing operations multiple times.
|
|
134
|
+
|
|
135
|
+
**Detection Patterns**:
|
|
136
|
+
```python
|
|
137
|
+
# VULNERABLE: No group size validation
|
|
138
|
+
# Attacker can repeat call 10 times in single group
|
|
139
|
+
If(Gtxn[0].type_enum() == TxnType.Payment)
|
|
140
|
+
|
|
141
|
+
# VULNERABLE: Absolute indices without size check
|
|
142
|
+
Assert(Gtxn[2].sender() == Gtxn[0].sender()) # No group size validation
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**What to Check**:
|
|
146
|
+
- [ ] Atomic transaction logic validates `Global.group_size()` matches expected size
|
|
147
|
+
- [ ] Using absolute indices is paired with group size verification
|
|
148
|
+
- [ ] OR use relative indexing with ABI methods (Teal v6+)
|
|
149
|
+
|
|
150
|
+
**Mitigation**:
|
|
151
|
+
```python
|
|
152
|
+
# SECURE: Validate group size
|
|
153
|
+
Assert(Global.group_size() == Int(3)) # Exact size
|
|
154
|
+
# OR
|
|
155
|
+
Assert(Global.group_size() <= Int(3)) # Maximum size
|
|
156
|
+
|
|
157
|
+
# BETTER: Use ABI with relative indexing (Teal v6+)
|
|
158
|
+
@router.method
|
|
159
|
+
def method():
|
|
160
|
+
# Automatically handles group indexing
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
**Tool Detection**: Tealer detector `group-size-check` available
|
|
164
|
+
|
|
165
|
+
**References**: building-secure-contracts/not-so-smart-contracts/algorand/group_size_check
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
### 4.6 TIME-BASED REPLAY ATTACK ⚠️ MEDIUM
|
|
170
|
+
|
|
171
|
+
**Description**: Transactions with same `FirstValid`/`LastValid` but different hashes can be submitted multiple times without `Lease` field protection.
|
|
172
|
+
|
|
173
|
+
**Detection Patterns**:
|
|
174
|
+
```python
|
|
175
|
+
# VULNERABLE: Periodic payments without lease
|
|
176
|
+
def recurring_payment():
|
|
177
|
+
return Seq([
|
|
178
|
+
Assert(Global.latest_timestamp() >= next_payment_time),
|
|
179
|
+
# Missing Lease validation for replay protection
|
|
180
|
+
InnerTxnBuilder.Submit()
|
|
181
|
+
])
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
**What to Check**:
|
|
185
|
+
- [ ] Recurring/periodic transactions validate `Txn.lease()` field
|
|
186
|
+
- [ ] Lease field set to unique value per logical transaction
|
|
187
|
+
- [ ] Time-dependent operations have replay protection
|
|
188
|
+
|
|
189
|
+
**Mitigation**:
|
|
190
|
+
```python
|
|
191
|
+
# SECURE: Validate Lease field
|
|
192
|
+
Assert(Txn.lease() == expected_lease_value)
|
|
193
|
+
|
|
194
|
+
# OR: Use Lease for mutual exclusion
|
|
195
|
+
lease = Sha256(Concat(Bytes("prefix"), Txn.sender(), Itob(counter)))
|
|
196
|
+
Assert(Txn.lease() == lease)
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
**References**: building-secure-contracts/not-so-smart-contracts/algorand/time_based_replay_attack
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
### 4.7 ACCESS CONTROLS ⚠️ CRITICAL
|
|
204
|
+
|
|
205
|
+
**Description**: Missing access control checks on `UpdateApplication` and `DeleteApplication` operations allow unauthorized contract modifications.
|
|
206
|
+
|
|
207
|
+
**Detection Patterns**:
|
|
208
|
+
```python
|
|
209
|
+
# VULNERABLE: No access control on updates
|
|
210
|
+
program = Cond(
|
|
211
|
+
[Txn.application_id() == Int(0), on_creation],
|
|
212
|
+
[Txn.on_completion() == OnComplete.UpdateApplication, Int(1)], # Anyone can update!
|
|
213
|
+
[Txn.on_completion() == OnComplete.DeleteApplication, Int(1)], # Anyone can delete!
|
|
214
|
+
)
|
|
215
|
+
|
|
216
|
+
# VULNERABLE: Weak access control
|
|
217
|
+
If(Txn.on_completion() == OnComplete.UpdateApplication,
|
|
218
|
+
Int(1)) # Missing sender validation
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
**What to Check**:
|
|
222
|
+
- [ ] `UpdateApplication` checks `Txn.sender() == creator/admin`
|
|
223
|
+
- [ ] `DeleteApplication` checks `Txn.sender() == creator/admin`
|
|
224
|
+
- [ ] OR explicitly disable updates/deletes: `Return(Int(0))`
|
|
225
|
+
- [ ] OnComplete field validated for all application calls
|
|
226
|
+
|
|
227
|
+
**Mitigation**:
|
|
228
|
+
```python
|
|
229
|
+
# SECURE: Proper access control
|
|
230
|
+
is_creator = Txn.sender() == Global.creator_address()
|
|
231
|
+
|
|
232
|
+
program = Cond(
|
|
233
|
+
[Txn.application_id() == Int(0), on_creation],
|
|
234
|
+
[Txn.on_completion() == OnComplete.UpdateApplication, is_creator],
|
|
235
|
+
[Txn.on_completion() == OnComplete.DeleteApplication, is_creator],
|
|
236
|
+
)
|
|
237
|
+
|
|
238
|
+
# OR: Disable updates entirely
|
|
239
|
+
[Txn.on_completion() == OnComplete.UpdateApplication, Return(Int(0))],
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
**Tool Detection**: Tealer detector `update-application-check` available
|
|
243
|
+
|
|
244
|
+
**References**: building-secure-contracts/not-so-smart-contracts/algorand/access_controls
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
### 4.8 ASSET ID VERIFICATION ⚠️ HIGH
|
|
249
|
+
|
|
250
|
+
**Description**: Missing validation of `Txn.xfer_asset()` allows attackers to transfer wrong/worthless assets instead of expected tokens.
|
|
251
|
+
|
|
252
|
+
**Detection Patterns**:
|
|
253
|
+
```python
|
|
254
|
+
# VULNERABLE: No asset ID check
|
|
255
|
+
If(And(
|
|
256
|
+
Txn.type_enum() == TxnType.AssetTransfer,
|
|
257
|
+
Txn.asset_amount() >= required_amount,
|
|
258
|
+
# Missing: Txn.xfer_asset() == expected_asset_id
|
|
259
|
+
))
|
|
260
|
+
|
|
261
|
+
# VULNERABLE: User-provided asset ID
|
|
262
|
+
def swap(asset_id): # User controlled!
|
|
263
|
+
return If(Txn.xfer_asset() == asset_id, ...) # No validation
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
**What to Check**:
|
|
267
|
+
- [ ] All asset transfer validations include `Txn.xfer_asset() == expected_asset_id`
|
|
268
|
+
- [ ] Asset IDs stored in global state or hardcoded
|
|
269
|
+
- [ ] No user control over which asset ID is considered valid
|
|
270
|
+
|
|
271
|
+
**Mitigation**:
|
|
272
|
+
```python
|
|
273
|
+
# SECURE: Validate asset ID
|
|
274
|
+
expected_asset_id = Int(12345678) # Or from global state
|
|
275
|
+
Assert(And(
|
|
276
|
+
Txn.type_enum() == TxnType.AssetTransfer,
|
|
277
|
+
Txn.xfer_asset() == expected_asset_id,
|
|
278
|
+
Txn.asset_amount() >= required_amount
|
|
279
|
+
))
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
**References**: building-secure-contracts/not-so-smart-contracts/algorand/asset_id_verification
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
### 4.9 DENIAL OF SERVICE (Asset Opt-In) ⚠️ MEDIUM
|
|
287
|
+
|
|
288
|
+
**Description**: Transferring assets to non-opted-in accounts causes transaction failure, enabling DoS attacks when using push pattern.
|
|
289
|
+
|
|
290
|
+
**Detection Patterns**:
|
|
291
|
+
```python
|
|
292
|
+
# VULNERABLE: Push pattern for asset distribution
|
|
293
|
+
For(i IN users).Do(
|
|
294
|
+
InnerTxnBuilder.SetFields({
|
|
295
|
+
TxnField.type_enum: TxnType.AssetTransfer,
|
|
296
|
+
TxnField.receiver: users[i],
|
|
297
|
+
TxnField.asset_amount: rewards[i]
|
|
298
|
+
})
|
|
299
|
+
) # Fails if any user not opted-in, DoS all users
|
|
300
|
+
|
|
301
|
+
# VULNERABLE: Batch operations with asset transfers
|
|
302
|
+
# Single failure blocks entire batch
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
**What to Check**:
|
|
306
|
+
- [ ] Asset distributions use pull pattern (users claim) instead of push
|
|
307
|
+
- [ ] OR batch operations handle opt-in failures gracefully
|
|
308
|
+
- [ ] Critical operations not blocked by asset transfer failures
|
|
309
|
+
|
|
310
|
+
**Mitigation**:
|
|
311
|
+
```python
|
|
312
|
+
# SECURE: Pull pattern
|
|
313
|
+
@router.method
|
|
314
|
+
def claim_reward():
|
|
315
|
+
# User initiates, must be opted-in
|
|
316
|
+
amount = App.localGet(Txn.sender(), Bytes("reward"))
|
|
317
|
+
Assert(amount > Int(0))
|
|
318
|
+
# Transfer asset to opted-in user
|
|
319
|
+
|
|
320
|
+
# BETTER: Users trigger their own transfers
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
**References**: building-secure-contracts/not-so-smart-contracts/algorand/dos
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
### 4.10 INNER TRANSACTION FEE ⚠️ MEDIUM
|
|
328
|
+
|
|
329
|
+
**Description**: Inner transactions with unset or non-zero fees drain application balance when fee pooling is used.
|
|
330
|
+
|
|
331
|
+
**Detection Patterns**:
|
|
332
|
+
```python
|
|
333
|
+
# VULNERABLE: Missing fee field in inner transaction
|
|
334
|
+
InnerTxnBuilder.Begin()
|
|
335
|
+
InnerTxnBuilder.SetFields({
|
|
336
|
+
TxnField.type_enum: TxnType.Payment,
|
|
337
|
+
TxnField.receiver: receiver,
|
|
338
|
+
# Missing: TxnField.fee: Int(0)
|
|
339
|
+
})
|
|
340
|
+
InnerTxnBuilder.Submit() # Drains app balance for fees!
|
|
341
|
+
|
|
342
|
+
# VULNERABLE: Non-zero inner transaction fee
|
|
343
|
+
InnerTxnBuilder.SetField(TxnField.fee, Int(1000)) # Drains balance
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
**What to Check**:
|
|
347
|
+
- [ ] All inner transactions explicitly set `TxnField.fee: Int(0)`
|
|
348
|
+
- [ ] Fee pooling strategy documented and validated
|
|
349
|
+
- [ ] Internal bookkeeping accounts for any non-zero fees
|
|
350
|
+
|
|
351
|
+
**Mitigation**:
|
|
352
|
+
```python
|
|
353
|
+
# SECURE: Explicitly set fee to zero
|
|
354
|
+
InnerTxnBuilder.Begin()
|
|
355
|
+
InnerTxnBuilder.SetFields({
|
|
356
|
+
TxnField.type_enum: TxnType.Payment,
|
|
357
|
+
TxnField.receiver: receiver,
|
|
358
|
+
TxnField.amount: amount,
|
|
359
|
+
TxnField.fee: Int(0), # Explicit zero fee
|
|
360
|
+
})
|
|
361
|
+
InnerTxnBuilder.Submit()
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
**References**: building-secure-contracts/not-so-smart-contracts/algorand/inner_transaction_fee
|
|
365
|
+
|
|
366
|
+
---
|
|
367
|
+
|
|
368
|
+
### 4.11 CLEAR STATE TRANSACTION ⚠️ HIGH
|
|
369
|
+
|
|
370
|
+
**Description**: Missing `OnComplete` field validation allows attackers to invoke clear state program instead of approval program, bypassing logic.
|
|
371
|
+
|
|
372
|
+
**Detection Patterns**:
|
|
373
|
+
```python
|
|
374
|
+
# VULNERABLE: Only checks transaction type, not OnComplete
|
|
375
|
+
def validate_group():
|
|
376
|
+
return And(
|
|
377
|
+
Gtxn[0].type_enum() == TxnType.Payment,
|
|
378
|
+
Gtxn[1].type_enum() == TxnType.ApplicationCall, # Could be ClearState!
|
|
379
|
+
# Missing: Gtxn[1].on_completion() == OnComplete.NoOp
|
|
380
|
+
)
|
|
381
|
+
|
|
382
|
+
# VULNERABLE: Assumes ApplicationCall is approval
|
|
383
|
+
If(Gtxn[i].type_enum() == TxnType.ApplicationCall,
|
|
384
|
+
validate_app_call()) # May be ClearStateProgram
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
**What to Check**:
|
|
388
|
+
- [ ] Group transaction validation checks `Gtxn[i].on_completion() == OnComplete.NoOp`
|
|
389
|
+
- [ ] OR explicitly allows specific OnComplete values
|
|
390
|
+
- [ ] Not just checking `TxnType.ApplicationCall` without OnComplete validation
|
|
391
|
+
|
|
392
|
+
**Mitigation**:
|
|
393
|
+
```python
|
|
394
|
+
# SECURE: Validate OnComplete field
|
|
395
|
+
def validate_group():
|
|
396
|
+
return And(
|
|
397
|
+
Gtxn[0].type_enum() == TxnType.Payment,
|
|
398
|
+
Gtxn[1].type_enum() == TxnType.ApplicationCall,
|
|
399
|
+
Gtxn[1].on_completion() == OnComplete.NoOp, # Explicit check
|
|
400
|
+
)
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
**References**: building-secure-contracts/not-so-smart-contracts/algorand/clear_state_transaction
|
|
404
|
+
|
|
405
|
+
---
|