@elizaos/skills 2.0.0-alpha.3

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.
Files changed (371) hide show
  1. package/README.md +126 -0
  2. package/package.json +53 -0
  3. package/skills/1password/SKILL.md +70 -0
  4. package/skills/1password/references/cli-examples.md +29 -0
  5. package/skills/1password/references/get-started.md +17 -0
  6. package/skills/apple-notes/SKILL.md +77 -0
  7. package/skills/apple-reminders/SKILL.md +96 -0
  8. package/skills/bear-notes/SKILL.md +107 -0
  9. package/skills/bird/SKILL.md +224 -0
  10. package/skills/blogwatcher/SKILL.md +69 -0
  11. package/skills/blucli/SKILL.md +47 -0
  12. package/skills/bluebubbles/SKILL.md +131 -0
  13. package/skills/camsnap/SKILL.md +45 -0
  14. package/skills/canvas/SKILL.md +203 -0
  15. package/skills/clawhub/SKILL.md +77 -0
  16. package/skills/coding-agent/SKILL.md +284 -0
  17. package/skills/discord/SKILL.md +578 -0
  18. package/skills/eightctl/SKILL.md +50 -0
  19. package/skills/food-order/SKILL.md +48 -0
  20. package/skills/gemini/SKILL.md +43 -0
  21. package/skills/gifgrep/SKILL.md +79 -0
  22. package/skills/github/SKILL.md +77 -0
  23. package/skills/gog/SKILL.md +116 -0
  24. package/skills/goplaces/SKILL.md +52 -0
  25. package/skills/healthcheck/SKILL.md +245 -0
  26. package/skills/himalaya/SKILL.md +257 -0
  27. package/skills/himalaya/references/configuration.md +184 -0
  28. package/skills/himalaya/references/message-composition.md +199 -0
  29. package/skills/imsg/SKILL.md +74 -0
  30. package/skills/local-places/SERVER_README.md +101 -0
  31. package/skills/local-places/SKILL.md +102 -0
  32. package/skills/local-places/pyproject.toml +21 -0
  33. package/skills/local-places/src/local_places/__init__.py +2 -0
  34. package/skills/local-places/src/local_places/google_places.py +314 -0
  35. package/skills/local-places/src/local_places/main.py +65 -0
  36. package/skills/local-places/src/local_places/schemas.py +107 -0
  37. package/skills/mcporter/SKILL.md +61 -0
  38. package/skills/model-usage/SKILL.md +69 -0
  39. package/skills/model-usage/references/codexbar-cli.md +33 -0
  40. package/skills/model-usage/scripts/model_usage.py +310 -0
  41. package/skills/nano-banana-pro/SKILL.md +58 -0
  42. package/skills/nano-banana-pro/scripts/generate_image.py +184 -0
  43. package/skills/nano-pdf/SKILL.md +38 -0
  44. package/skills/notion/SKILL.md +172 -0
  45. package/skills/obsidian/SKILL.md +81 -0
  46. package/skills/openai-image-gen/SKILL.md +89 -0
  47. package/skills/openai-image-gen/scripts/gen.py +240 -0
  48. package/skills/openai-whisper/SKILL.md +38 -0
  49. package/skills/openai-whisper-api/SKILL.md +52 -0
  50. package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
  51. package/skills/openhue/SKILL.md +51 -0
  52. package/skills/oracle/SKILL.md +125 -0
  53. package/skills/ordercli/SKILL.md +78 -0
  54. package/skills/peekaboo/SKILL.md +190 -0
  55. package/skills/sag/SKILL.md +87 -0
  56. package/skills/security-ask-questions-if-underspecified/.claude-plugin/plugin.json +10 -0
  57. package/skills/security-ask-questions-if-underspecified/README.md +24 -0
  58. package/skills/security-ask-questions-if-underspecified/skills/ask-questions-if-underspecified/SKILL.md +85 -0
  59. package/skills/security-audit-context-building/.claude-plugin/plugin.json +10 -0
  60. package/skills/security-audit-context-building/README.md +58 -0
  61. package/skills/security-audit-context-building/commands/audit-context.md +21 -0
  62. package/skills/security-audit-context-building/skills/audit-context-building/SKILL.md +297 -0
  63. package/skills/security-audit-context-building/skills/audit-context-building/resources/COMPLETENESS_CHECKLIST.md +47 -0
  64. package/skills/security-audit-context-building/skills/audit-context-building/resources/FUNCTION_MICRO_ANALYSIS_EXAMPLE.md +355 -0
  65. package/skills/security-audit-context-building/skills/audit-context-building/resources/OUTPUT_REQUIREMENTS.md +71 -0
  66. package/skills/security-building-secure-contracts/.claude-plugin/plugin.json +10 -0
  67. package/skills/security-building-secure-contracts/README.md +241 -0
  68. package/skills/security-building-secure-contracts/skills/algorand-vulnerability-scanner/SKILL.md +284 -0
  69. package/skills/security-building-secure-contracts/skills/algorand-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +405 -0
  70. package/skills/security-building-secure-contracts/skills/audit-prep-assistant/SKILL.md +409 -0
  71. package/skills/security-building-secure-contracts/skills/cairo-vulnerability-scanner/SKILL.md +329 -0
  72. package/skills/security-building-secure-contracts/skills/cairo-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +722 -0
  73. package/skills/security-building-secure-contracts/skills/code-maturity-assessor/SKILL.md +218 -0
  74. package/skills/security-building-secure-contracts/skills/code-maturity-assessor/resources/ASSESSMENT_CRITERIA.md +355 -0
  75. package/skills/security-building-secure-contracts/skills/code-maturity-assessor/resources/EXAMPLE_REPORT.md +248 -0
  76. package/skills/security-building-secure-contracts/skills/code-maturity-assessor/resources/REPORT_FORMAT.md +33 -0
  77. package/skills/security-building-secure-contracts/skills/cosmos-vulnerability-scanner/SKILL.md +334 -0
  78. package/skills/security-building-secure-contracts/skills/cosmos-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +740 -0
  79. package/skills/security-building-secure-contracts/skills/guidelines-advisor/SKILL.md +252 -0
  80. package/skills/security-building-secure-contracts/skills/guidelines-advisor/resources/ASSESSMENT_AREAS.md +329 -0
  81. package/skills/security-building-secure-contracts/skills/guidelines-advisor/resources/DELIVERABLES.md +118 -0
  82. package/skills/security-building-secure-contracts/skills/guidelines-advisor/resources/EXAMPLE_REPORT.md +298 -0
  83. package/skills/security-building-secure-contracts/skills/secure-workflow-guide/SKILL.md +161 -0
  84. package/skills/security-building-secure-contracts/skills/secure-workflow-guide/resources/EXAMPLE_REPORT.md +279 -0
  85. package/skills/security-building-secure-contracts/skills/secure-workflow-guide/resources/WORKFLOW_STEPS.md +132 -0
  86. package/skills/security-building-secure-contracts/skills/solana-vulnerability-scanner/SKILL.md +389 -0
  87. package/skills/security-building-secure-contracts/skills/solana-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +669 -0
  88. package/skills/security-building-secure-contracts/skills/substrate-vulnerability-scanner/SKILL.md +298 -0
  89. package/skills/security-building-secure-contracts/skills/substrate-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +791 -0
  90. package/skills/security-building-secure-contracts/skills/token-integration-analyzer/SKILL.md +362 -0
  91. package/skills/security-building-secure-contracts/skills/token-integration-analyzer/resources/ASSESSMENT_CATEGORIES.md +571 -0
  92. package/skills/security-building-secure-contracts/skills/token-integration-analyzer/resources/REPORT_TEMPLATES.md +141 -0
  93. package/skills/security-building-secure-contracts/skills/ton-vulnerability-scanner/SKILL.md +388 -0
  94. package/skills/security-building-secure-contracts/skills/ton-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +595 -0
  95. package/skills/security-burpsuite-project-parser/.claude-plugin/plugin.json +10 -0
  96. package/skills/security-burpsuite-project-parser/README.md +103 -0
  97. package/skills/security-burpsuite-project-parser/commands/burp-search.md +18 -0
  98. package/skills/security-burpsuite-project-parser/skills/SKILL.md +358 -0
  99. package/skills/security-burpsuite-project-parser/skills/scripts/burp-search.sh +99 -0
  100. package/skills/security-claude-in-chrome-troubleshooting/.claude-plugin/plugin.json +8 -0
  101. package/skills/security-claude-in-chrome-troubleshooting/README.md +31 -0
  102. package/skills/security-claude-in-chrome-troubleshooting/skills/claude-in-chrome-troubleshooting/SKILL.md +251 -0
  103. package/skills/security-constant-time-analysis/.claude-plugin/plugin.json +9 -0
  104. package/skills/security-constant-time-analysis/README.md +381 -0
  105. package/skills/security-constant-time-analysis/commands/ct-check.md +20 -0
  106. package/skills/security-constant-time-analysis/ct_analyzer/__init__.py +49 -0
  107. package/skills/security-constant-time-analysis/ct_analyzer/analyzer.py +1284 -0
  108. package/skills/security-constant-time-analysis/ct_analyzer/script_analyzers.py +3081 -0
  109. package/skills/security-constant-time-analysis/ct_analyzer/tests/__init__.py +1 -0
  110. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_analyzer.py +1397 -0
  111. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/bn_excerpt.js +205 -0
  112. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/decompose_constant_time.c +181 -0
  113. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/decompose_vulnerable.c +74 -0
  114. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/decompose_vulnerable.go +78 -0
  115. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/decompose_vulnerable.rs +92 -0
  116. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.cs +174 -0
  117. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.java +161 -0
  118. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.kt +181 -0
  119. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.php +140 -0
  120. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.py +252 -0
  121. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.rb +188 -0
  122. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.swift +199 -0
  123. package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.ts +154 -0
  124. package/skills/security-constant-time-analysis/pyproject.toml +52 -0
  125. package/skills/security-constant-time-analysis/skills/constant-time-analysis/README.md +90 -0
  126. package/skills/security-constant-time-analysis/skills/constant-time-analysis/SKILL.md +219 -0
  127. package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/compiled.md +129 -0
  128. package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/javascript.md +136 -0
  129. package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/kotlin.md +252 -0
  130. package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/php.md +172 -0
  131. package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/python.md +179 -0
  132. package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/ruby.md +198 -0
  133. package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/swift.md +288 -0
  134. package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/vm-compiled.md +354 -0
  135. package/skills/security-constant-time-analysis/uv.lock +8 -0
  136. package/skills/security-culture-index/.claude-plugin/plugin.json +8 -0
  137. package/skills/security-culture-index/README.md +79 -0
  138. package/skills/security-culture-index/skills/interpreting-culture-index/SKILL.md +293 -0
  139. package/skills/security-culture-index/skills/interpreting-culture-index/references/anti-patterns.md +255 -0
  140. package/skills/security-culture-index/skills/interpreting-culture-index/references/conversation-starters.md +408 -0
  141. package/skills/security-culture-index/skills/interpreting-culture-index/references/interview-trait-signals.md +253 -0
  142. package/skills/security-culture-index/skills/interpreting-culture-index/references/motivators.md +158 -0
  143. package/skills/security-culture-index/skills/interpreting-culture-index/references/patterns-archetypes.md +147 -0
  144. package/skills/security-culture-index/skills/interpreting-culture-index/references/primary-traits.md +307 -0
  145. package/skills/security-culture-index/skills/interpreting-culture-index/references/secondary-traits.md +228 -0
  146. package/skills/security-culture-index/skills/interpreting-culture-index/references/team-composition.md +148 -0
  147. package/skills/security-culture-index/skills/interpreting-culture-index/scripts/check_deps.py +108 -0
  148. package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/__init__.py +20 -0
  149. package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/constants.py +122 -0
  150. package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/extract.py +187 -0
  151. package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/models.py +16 -0
  152. package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/opencv_extractor.py +520 -0
  153. package/skills/security-culture-index/skills/interpreting-culture-index/scripts/extract_pdf.py +237 -0
  154. package/skills/security-culture-index/skills/interpreting-culture-index/scripts/pyproject.toml +18 -0
  155. package/skills/security-culture-index/skills/interpreting-culture-index/templates/burnout-report.md +113 -0
  156. package/skills/security-culture-index/skills/interpreting-culture-index/templates/comparison-report.md +103 -0
  157. package/skills/security-culture-index/skills/interpreting-culture-index/templates/hiring-profile.md +127 -0
  158. package/skills/security-culture-index/skills/interpreting-culture-index/templates/individual-report.md +85 -0
  159. package/skills/security-culture-index/skills/interpreting-culture-index/templates/predicted-profile.md +165 -0
  160. package/skills/security-culture-index/skills/interpreting-culture-index/templates/team-report.md +109 -0
  161. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/analyze-team.md +188 -0
  162. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/coach-manager.md +267 -0
  163. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/compare-profiles.md +188 -0
  164. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/define-hiring-profile.md +220 -0
  165. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/detect-burnout.md +206 -0
  166. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/extract-from-pdf.md +121 -0
  167. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/interpret-individual.md +183 -0
  168. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/interview-debrief.md +234 -0
  169. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/mediate-conflict.md +306 -0
  170. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/plan-onboarding.md +322 -0
  171. package/skills/security-culture-index/skills/interpreting-culture-index/workflows/predict-from-interview.md +250 -0
  172. package/skills/security-differential-review/.claude-plugin/plugin.json +10 -0
  173. package/skills/security-differential-review/README.md +109 -0
  174. package/skills/security-differential-review/commands/diff-review.md +21 -0
  175. package/skills/security-differential-review/skills/differential-review/SKILL.md +220 -0
  176. package/skills/security-differential-review/skills/differential-review/adversarial.md +203 -0
  177. package/skills/security-differential-review/skills/differential-review/methodology.md +234 -0
  178. package/skills/security-differential-review/skills/differential-review/patterns.md +300 -0
  179. package/skills/security-differential-review/skills/differential-review/reporting.md +369 -0
  180. package/skills/security-dwarf-expert/.claude-plugin/plugin.json +10 -0
  181. package/skills/security-dwarf-expert/README.md +38 -0
  182. package/skills/security-dwarf-expert/skills/dwarf-expert/SKILL.md +93 -0
  183. package/skills/security-dwarf-expert/skills/dwarf-expert/reference/coding.md +31 -0
  184. package/skills/security-dwarf-expert/skills/dwarf-expert/reference/dwarfdump.md +50 -0
  185. package/skills/security-dwarf-expert/skills/dwarf-expert/reference/readelf.md +8 -0
  186. package/skills/security-entry-point-analyzer/.claude-plugin/plugin.json +10 -0
  187. package/skills/security-entry-point-analyzer/README.md +74 -0
  188. package/skills/security-entry-point-analyzer/commands/entry-points.md +18 -0
  189. package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/SKILL.md +251 -0
  190. package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/cosmwasm.md +182 -0
  191. package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/move-aptos.md +107 -0
  192. package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/move-sui.md +87 -0
  193. package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/solana.md +155 -0
  194. package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/solidity.md +135 -0
  195. package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/ton.md +185 -0
  196. package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/vyper.md +141 -0
  197. package/skills/security-firebase-apk-scanner/.claude-plugin/plugin.json +10 -0
  198. package/skills/security-firebase-apk-scanner/README.md +85 -0
  199. package/skills/security-firebase-apk-scanner/commands/scan-apk.md +18 -0
  200. package/skills/security-firebase-apk-scanner/scanner.sh +1408 -0
  201. package/skills/security-firebase-apk-scanner/skills/firebase-apk-scanner/SKILL.md +197 -0
  202. package/skills/security-firebase-apk-scanner/skills/firebase-apk-scanner/references/vulnerabilities.md +803 -0
  203. package/skills/security-fix-review/.claude-plugin/plugin.json +13 -0
  204. package/skills/security-fix-review/README.md +118 -0
  205. package/skills/security-fix-review/commands/fix-review.md +24 -0
  206. package/skills/security-fix-review/skills/fix-review/SKILL.md +264 -0
  207. package/skills/security-fix-review/skills/fix-review/references/bug-detection.md +408 -0
  208. package/skills/security-fix-review/skills/fix-review/references/finding-matching.md +298 -0
  209. package/skills/security-fix-review/skills/fix-review/references/report-parsing.md +398 -0
  210. package/skills/security-insecure-defaults/.claude-plugin/plugin.json +10 -0
  211. package/skills/security-insecure-defaults/README.md +45 -0
  212. package/skills/security-insecure-defaults/skills/insecure-defaults/SKILL.md +117 -0
  213. package/skills/security-insecure-defaults/skills/insecure-defaults/references/examples.md +409 -0
  214. package/skills/security-modern-python/.claude-plugin/plugin.json +10 -0
  215. package/skills/security-modern-python/README.md +58 -0
  216. package/skills/security-modern-python/hooks/hooks.json +16 -0
  217. package/skills/security-modern-python/hooks/intercept-legacy-python.bats +388 -0
  218. package/skills/security-modern-python/hooks/intercept-legacy-python.sh +109 -0
  219. package/skills/security-modern-python/hooks/test_helper.bash +75 -0
  220. package/skills/security-modern-python/skills/modern-python/SKILL.md +333 -0
  221. package/skills/security-modern-python/skills/modern-python/references/dependabot.md +43 -0
  222. package/skills/security-modern-python/skills/modern-python/references/migration-checklist.md +141 -0
  223. package/skills/security-modern-python/skills/modern-python/references/pep723-scripts.md +259 -0
  224. package/skills/security-modern-python/skills/modern-python/references/prek.md +211 -0
  225. package/skills/security-modern-python/skills/modern-python/references/pyproject.md +254 -0
  226. package/skills/security-modern-python/skills/modern-python/references/ruff-config.md +240 -0
  227. package/skills/security-modern-python/skills/modern-python/references/security-setup.md +255 -0
  228. package/skills/security-modern-python/skills/modern-python/references/testing.md +284 -0
  229. package/skills/security-modern-python/skills/modern-python/references/uv-commands.md +200 -0
  230. package/skills/security-modern-python/skills/modern-python/templates/dependabot.yml +36 -0
  231. package/skills/security-modern-python/skills/modern-python/templates/pre-commit-config.yaml +66 -0
  232. package/skills/security-property-based-testing/.claude-plugin/plugin.json +9 -0
  233. package/skills/security-property-based-testing/README.md +47 -0
  234. package/skills/security-property-based-testing/skills/property-based-testing/README.md +88 -0
  235. package/skills/security-property-based-testing/skills/property-based-testing/SKILL.md +109 -0
  236. package/skills/security-property-based-testing/skills/property-based-testing/references/design.md +191 -0
  237. package/skills/security-property-based-testing/skills/property-based-testing/references/generating.md +200 -0
  238. package/skills/security-property-based-testing/skills/property-based-testing/references/libraries.md +130 -0
  239. package/skills/security-property-based-testing/skills/property-based-testing/references/refactoring.md +181 -0
  240. package/skills/security-property-based-testing/skills/property-based-testing/references/reviewing.md +209 -0
  241. package/skills/security-property-based-testing/skills/property-based-testing/references/strategies.md +124 -0
  242. package/skills/semgrep-rule-creator/.claude-plugin/plugin.json +8 -0
  243. package/skills/semgrep-rule-creator/README.md +43 -0
  244. package/skills/semgrep-rule-creator/commands/semgrep-rule.md +26 -0
  245. package/skills/semgrep-rule-creator/skills/semgrep-rule-creator/SKILL.md +168 -0
  246. package/skills/semgrep-rule-creator/skills/semgrep-rule-creator/references/quick-reference.md +203 -0
  247. package/skills/semgrep-rule-creator/skills/semgrep-rule-creator/references/workflow.md +240 -0
  248. package/skills/semgrep-rule-variant-creator/.claude-plugin/plugin.json +9 -0
  249. package/skills/semgrep-rule-variant-creator/README.md +86 -0
  250. package/skills/semgrep-rule-variant-creator/skills/semgrep-rule-variant-creator/SKILL.md +205 -0
  251. package/skills/semgrep-rule-variant-creator/skills/semgrep-rule-variant-creator/references/applicability-analysis.md +250 -0
  252. package/skills/semgrep-rule-variant-creator/skills/semgrep-rule-variant-creator/references/language-syntax-guide.md +324 -0
  253. package/skills/semgrep-rule-variant-creator/skills/semgrep-rule-variant-creator/references/workflow.md +518 -0
  254. package/skills/session-logs/SKILL.md +115 -0
  255. package/skills/sharp-edges/.claude-plugin/plugin.json +10 -0
  256. package/skills/sharp-edges/README.md +48 -0
  257. package/skills/sharp-edges/skills/sharp-edges/SKILL.md +292 -0
  258. package/skills/sharp-edges/skills/sharp-edges/references/auth-patterns.md +252 -0
  259. package/skills/sharp-edges/skills/sharp-edges/references/case-studies.md +274 -0
  260. package/skills/sharp-edges/skills/sharp-edges/references/config-patterns.md +333 -0
  261. package/skills/sharp-edges/skills/sharp-edges/references/crypto-apis.md +190 -0
  262. package/skills/sharp-edges/skills/sharp-edges/references/lang-c.md +205 -0
  263. package/skills/sharp-edges/skills/sharp-edges/references/lang-csharp.md +285 -0
  264. package/skills/sharp-edges/skills/sharp-edges/references/lang-go.md +270 -0
  265. package/skills/sharp-edges/skills/sharp-edges/references/lang-java.md +263 -0
  266. package/skills/sharp-edges/skills/sharp-edges/references/lang-javascript.md +269 -0
  267. package/skills/sharp-edges/skills/sharp-edges/references/lang-kotlin.md +265 -0
  268. package/skills/sharp-edges/skills/sharp-edges/references/lang-php.md +245 -0
  269. package/skills/sharp-edges/skills/sharp-edges/references/lang-python.md +274 -0
  270. package/skills/sharp-edges/skills/sharp-edges/references/lang-ruby.md +273 -0
  271. package/skills/sharp-edges/skills/sharp-edges/references/lang-rust.md +272 -0
  272. package/skills/sharp-edges/skills/sharp-edges/references/lang-swift.md +287 -0
  273. package/skills/sharp-edges/skills/sharp-edges/references/language-specific.md +588 -0
  274. package/skills/sherpa-onnx-tts/SKILL.md +103 -0
  275. package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
  276. package/skills/skill-creator/SKILL.md +370 -0
  277. package/skills/skill-creator/license.txt +202 -0
  278. package/skills/skill-creator/scripts/init_skill.py +378 -0
  279. package/skills/skill-creator/scripts/package_skill.py +111 -0
  280. package/skills/skill-creator/scripts/quick_validate.py +101 -0
  281. package/skills/slack/SKILL.md +144 -0
  282. package/skills/songsee/SKILL.md +49 -0
  283. package/skills/sonoscli/SKILL.md +46 -0
  284. package/skills/spec-to-code-compliance/.claude-plugin/plugin.json +10 -0
  285. package/skills/spec-to-code-compliance/README.md +67 -0
  286. package/skills/spec-to-code-compliance/commands/spec-compliance.md +22 -0
  287. package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/SKILL.md +349 -0
  288. package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/COMPLETENESS_CHECKLIST.md +69 -0
  289. package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/IR_EXAMPLES.md +417 -0
  290. package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/OUTPUT_REQUIREMENTS.md +105 -0
  291. package/skills/spotify-player/SKILL.md +64 -0
  292. package/skills/static-analysis/.claude-plugin/plugin.json +8 -0
  293. package/skills/static-analysis/README.md +59 -0
  294. package/skills/static-analysis/skills/codeql/SKILL.md +315 -0
  295. package/skills/static-analysis/skills/sarif-parsing/SKILL.md +479 -0
  296. package/skills/static-analysis/skills/sarif-parsing/resources/jq-queries.md +162 -0
  297. package/skills/static-analysis/skills/sarif-parsing/resources/sarif_helpers.py +331 -0
  298. package/skills/static-analysis/skills/semgrep/SKILL.md +337 -0
  299. package/skills/summarize/SKILL.md +87 -0
  300. package/skills/testing-handbook-skills/.claude-plugin/plugin.json +8 -0
  301. package/skills/testing-handbook-skills/README.md +241 -0
  302. package/skills/testing-handbook-skills/scripts/pyproject.toml +8 -0
  303. package/skills/testing-handbook-skills/scripts/validate-skills.py +657 -0
  304. package/skills/testing-handbook-skills/skills/address-sanitizer/SKILL.md +341 -0
  305. package/skills/testing-handbook-skills/skills/aflpp/SKILL.md +640 -0
  306. package/skills/testing-handbook-skills/skills/atheris/SKILL.md +515 -0
  307. package/skills/testing-handbook-skills/skills/cargo-fuzz/SKILL.md +454 -0
  308. package/skills/testing-handbook-skills/skills/codeql/SKILL.md +549 -0
  309. package/skills/testing-handbook-skills/skills/constant-time-testing/SKILL.md +507 -0
  310. package/skills/testing-handbook-skills/skills/coverage-analysis/SKILL.md +607 -0
  311. package/skills/testing-handbook-skills/skills/fuzzing-dictionary/SKILL.md +297 -0
  312. package/skills/testing-handbook-skills/skills/fuzzing-obstacles/SKILL.md +426 -0
  313. package/skills/testing-handbook-skills/skills/harness-writing/SKILL.md +614 -0
  314. package/skills/testing-handbook-skills/skills/libafl/SKILL.md +625 -0
  315. package/skills/testing-handbook-skills/skills/libfuzzer/SKILL.md +795 -0
  316. package/skills/testing-handbook-skills/skills/ossfuzz/SKILL.md +426 -0
  317. package/skills/testing-handbook-skills/skills/ruzzy/SKILL.md +443 -0
  318. package/skills/testing-handbook-skills/skills/semgrep/SKILL.md +601 -0
  319. package/skills/testing-handbook-skills/skills/testing-handbook-generator/SKILL.md +372 -0
  320. package/skills/testing-handbook-skills/skills/testing-handbook-generator/agent-prompt.md +280 -0
  321. package/skills/testing-handbook-skills/skills/testing-handbook-generator/discovery.md +452 -0
  322. package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/domain-skill.md +504 -0
  323. package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/fuzzer-skill.md +454 -0
  324. package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/technique-skill.md +527 -0
  325. package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/tool-skill.md +366 -0
  326. package/skills/testing-handbook-skills/skills/testing-handbook-generator/testing.md +482 -0
  327. package/skills/testing-handbook-skills/skills/wycheproof/SKILL.md +533 -0
  328. package/skills/things-mac/SKILL.md +86 -0
  329. package/skills/tmux/SKILL.md +135 -0
  330. package/skills/tmux/scripts/find-sessions.sh +112 -0
  331. package/skills/tmux/scripts/wait-for-text.sh +83 -0
  332. package/skills/trello/SKILL.md +95 -0
  333. package/skills/variant-analysis/.claude-plugin/plugin.json +8 -0
  334. package/skills/variant-analysis/README.md +41 -0
  335. package/skills/variant-analysis/commands/variants.md +23 -0
  336. package/skills/variant-analysis/skills/variant-analysis/METHODOLOGY.md +327 -0
  337. package/skills/variant-analysis/skills/variant-analysis/SKILL.md +142 -0
  338. package/skills/variant-analysis/skills/variant-analysis/resources/codeql/cpp.ql +119 -0
  339. package/skills/variant-analysis/skills/variant-analysis/resources/codeql/go.ql +69 -0
  340. package/skills/variant-analysis/skills/variant-analysis/resources/codeql/java.ql +71 -0
  341. package/skills/variant-analysis/skills/variant-analysis/resources/codeql/javascript.ql +63 -0
  342. package/skills/variant-analysis/skills/variant-analysis/resources/codeql/python.ql +80 -0
  343. package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/cpp.yaml +98 -0
  344. package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/go.yaml +63 -0
  345. package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/java.yaml +61 -0
  346. package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/javascript.yaml +60 -0
  347. package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/python.yaml +72 -0
  348. package/skills/variant-analysis/skills/variant-analysis/resources/variant-report-template.md +75 -0
  349. package/skills/video-frames/SKILL.md +46 -0
  350. package/skills/video-frames/scripts/frame.sh +81 -0
  351. package/skills/voice-call/SKILL.md +45 -0
  352. package/skills/wacli/SKILL.md +72 -0
  353. package/skills/weather/SKILL.md +54 -0
  354. package/skills/yara-authoring/.claude-plugin/plugin.json +9 -0
  355. package/skills/yara-authoring/README.md +131 -0
  356. package/skills/yara-authoring/skills/yara-rule-authoring/SKILL.md +645 -0
  357. package/skills/yara-authoring/skills/yara-rule-authoring/examples/MAL_Mac_ProtonRAT_Jan25.yar +99 -0
  358. package/skills/yara-authoring/skills/yara-rule-authoring/examples/MAL_NPM_SupplyChain_Jan25.yar +170 -0
  359. package/skills/yara-authoring/skills/yara-rule-authoring/examples/MAL_Win_Remcos_Jan25.yar +103 -0
  360. package/skills/yara-authoring/skills/yara-rule-authoring/examples/SUSP_CRX_SuspiciousPermissions.yar +134 -0
  361. package/skills/yara-authoring/skills/yara-rule-authoring/examples/SUSP_JS_Obfuscation_Jan25.yar +185 -0
  362. package/skills/yara-authoring/skills/yara-rule-authoring/references/crx-module.md +214 -0
  363. package/skills/yara-authoring/skills/yara-rule-authoring/references/dex-module.md +383 -0
  364. package/skills/yara-authoring/skills/yara-rule-authoring/references/performance.md +333 -0
  365. package/skills/yara-authoring/skills/yara-rule-authoring/references/strings.md +433 -0
  366. package/skills/yara-authoring/skills/yara-rule-authoring/references/style-guide.md +257 -0
  367. package/skills/yara-authoring/skills/yara-rule-authoring/references/testing.md +399 -0
  368. package/skills/yara-authoring/skills/yara-rule-authoring/scripts/atom_analyzer.py +526 -0
  369. package/skills/yara-authoring/skills/yara-rule-authoring/scripts/pyproject.toml +25 -0
  370. package/skills/yara-authoring/skills/yara-rule-authoring/scripts/yara_lint.py +631 -0
  371. package/skills/yara-authoring/skills/yara-rule-authoring/workflows/rule-development.md +493 -0
@@ -0,0 +1,740 @@
1
+ ## 6. Vulnerability Checklist (9 Patterns)
2
+
3
+ ### 6.1 INCORRECT GetSigners() ⚠️ CRITICAL
4
+
5
+ **Description**: Mismatch between address returned by `GetSigners()` and address actually used in handler allows unauthorized actions via signer impersonation.
6
+
7
+ **Detection Patterns**:
8
+ ```go
9
+ // VULNERABLE: GetSigners returns one address, handler uses different field
10
+ type MsgExample struct {
11
+ Signer string // Returned by GetSigners()
12
+ Author string // Actually used in handler
13
+ }
14
+
15
+ func (msg MsgExample) GetSigners() []sdk.AccAddress {
16
+ return []sdk.AccAddress{sdk.AccAddress(msg.Signer)}
17
+ }
18
+
19
+ // Handler uses Author instead!
20
+ func handleMsgExample(ctx sdk.Context, msg MsgExample) error {
21
+ // WRONG: Using msg.Author instead of verified signer
22
+ return keeper.DoAction(ctx, msg.Author, msg.Data)
23
+ }
24
+ ```
25
+
26
+ **What to Check**:
27
+ - [ ] `GetSigners()` returns address that is actually used in handler
28
+ - [ ] No multiple address fields in message (signer, author, owner, from, etc.)
29
+ - [ ] Handler only uses addresses from `GetSigners()`
30
+ - [ ] User-provided addresses not stored without validation
31
+
32
+ **Mitigation**:
33
+ ```go
34
+ // SECURE: Single address field, used consistently
35
+ type MsgExample struct {
36
+ Signer string // Only address field
37
+ }
38
+
39
+ func (msg MsgExample) GetSigners() []sdk.AccAddress {
40
+ return []sdk.AccAddress{sdk.AccAddress(msg.Signer)}
41
+ }
42
+
43
+ func handleMsgExample(ctx sdk.Context, msg MsgExample) error {
44
+ // Use the verified signer address
45
+ signers := msg.GetSigners()
46
+ return keeper.DoAction(ctx, signers[0], msg.Data)
47
+ }
48
+ ```
49
+
50
+ **Testing**:
51
+ - Unit test with different signer/author values
52
+ - Verify only GetSigners() address has authorization
53
+ - Sanity tests for all message types
54
+
55
+ **References**: building-secure-contracts/not-so-smart-contracts/cosmos/incorrect_signer
56
+
57
+ ---
58
+
59
+ ### 4.2 NON-DETERMINISM ⚠️ CRITICAL - CHAIN HALT
60
+
61
+ **Description**: Non-deterministic code in consensus causes different validators to produce different state roots, halting the chain. This is the most severe Cosmos vulnerability.
62
+
63
+ **Detection Patterns**:
64
+
65
+ #### Pattern 1: Map Iteration
66
+ ```go
67
+ // VULNERABLE: Iterating over Go map (random order)
68
+ assets := make(map[string]sdk.Coin)
69
+ for assetID, coin := range assets { // NON-DETERMINISTIC!
70
+ keeper.ProcessAsset(ctx, assetID, coin)
71
+ }
72
+ ```
73
+
74
+ #### Pattern 2: Platform-Dependent Types
75
+ ```go
76
+ // VULNERABLE: Platform-dependent integer types
77
+ var amount int // Size differs: 32-bit vs 64-bit systems
78
+ var price float64 // Float arithmetic is non-deterministic
79
+
80
+ // Serialization produces different bytes on different architectures
81
+ bz := someSerializer(amount) // Different on 32-bit vs 64-bit!
82
+ ```
83
+
84
+ #### Pattern 3: Goroutines and Concurrency
85
+ ```go
86
+ // VULNERABLE: Goroutines have non-deterministic execution order
87
+ go processTransaction(tx1)
88
+ go processTransaction(tx2)
89
+ // Order of state updates is non-deterministic!
90
+ ```
91
+
92
+ #### Pattern 4: Select Statements
93
+ ```go
94
+ // VULNERABLE: Select with multiple ready channels
95
+ select {
96
+ case msg := <-ch1: // Non-deterministic choice
97
+ process(msg)
98
+ case msg := <-ch2:
99
+ process(msg)
100
+ }
101
+ ```
102
+
103
+ #### Pattern 5: Other Sources
104
+ ```go
105
+ // VULNERABLE: Other non-determinism sources
106
+ rand.Intn(100) // Random numbers
107
+ time.Now() // Local system time (use ctx.BlockTime())
108
+ &obj // Memory addresses
109
+ json.Marshal(map) // Map serialization order
110
+ filepath.Walk() // Filesystem traversal order
111
+ ```
112
+
113
+ **What to Check**:
114
+ - [ ] NO `range` over maps in any consensus code
115
+ - [ ] NO `int`, `uint`, `float32`, `float64` types (use `int32`, `int64`, `sdk.Int`, `sdk.Dec`)
116
+ - [ ] NO goroutines in message handlers or ABCI methods
117
+ - [ ] NO `select` statements with multiple channels
118
+ - [ ] NO `rand` package usage (use deterministic PRF)
119
+ - [ ] NO `time.Now()` (use `ctx.BlockTime()` or `ctx.BlockHeight()`)
120
+ - [ ] NO memory address usage (`&obj`, pointer comparisons)
121
+ - [ ] NO non-deterministic serialization
122
+
123
+ **Mitigation**:
124
+ ```go
125
+ // SECURE: Deterministic iteration
126
+ // Option 1: Sort map keys
127
+ keys := make([]string, 0, len(assets))
128
+ for k := range assets {
129
+ keys = append(keys, k)
130
+ }
131
+ sort.Strings(keys) // Deterministic order
132
+ for _, k := range keys {
133
+ keeper.ProcessAsset(ctx, k, assets[k])
134
+ }
135
+
136
+ // Option 2: Use ordered data structure
137
+ // Use sdk.KVStore with ordered iteration
138
+
139
+ // SECURE: Platform-independent types
140
+ var amount int64 // Explicit 64-bit
141
+ var amount sdk.Int // Arbitrary precision integer
142
+ var price sdk.Dec // Decimal type for consensus
143
+
144
+ // SECURE: Use block time, not system time
145
+ timestamp := ctx.BlockTime() // Deterministic
146
+ height := ctx.BlockHeight() // Deterministic
147
+ ```
148
+
149
+ **Tool Detection**:
150
+ ```bash
151
+ # Use CodeQL custom rules
152
+ codeql database create --language=go
153
+ codeql query run cosmos-non-determinism.ql
154
+
155
+ # Look for patterns
156
+ grep -r "range.*map\[" x/
157
+ grep -r "go func" x/
158
+ grep -r "time.Now()" x/
159
+ grep -r "float64\|float32" x/
160
+ ```
161
+
162
+ **References**: building-secure-contracts/not-so-smart-contracts/cosmos/non_determinism
163
+
164
+ ---
165
+
166
+ ### 4.3 MESSAGES PRIORITY ⚠️ HIGH
167
+
168
+ **Description**: Missing prioritization of critical messages (oracle updates, emergency pause, governance) allows front-running and censorship during network congestion.
169
+
170
+ **Detection Patterns**:
171
+ ```go
172
+ // VULNERABLE: No priority for critical oracle update
173
+ func (app *App) CheckTx(req abci.RequestCheckTx) abci.ResponseCheckTx {
174
+ // All messages treated equally, oracle updates can be delayed
175
+ return app.BaseApp.CheckTx(req)
176
+ }
177
+
178
+ // VULNERABLE: Emergency pause has same priority as normal txs
179
+ // During congestion, pause message may not be included in time
180
+ ```
181
+
182
+ **What to Check**:
183
+ - [ ] Oracle/price feed updates have high priority
184
+ - [ ] Emergency pause/circuit breaker messages prioritized
185
+ - [ ] Critical governance proposals prioritized
186
+ - [ ] CheckTx returns higher priority for critical message types
187
+ - [ ] High fees required for priority transactions (prevent spam)
188
+
189
+ **Mitigation**:
190
+ ```go
191
+ // SECURE: Prioritize critical messages in CheckTx
192
+ func (app *App) CheckTx(req abci.RequestCheckTx) abci.ResponseCheckTx {
193
+ tx, err := app.txDecoder(req.Tx)
194
+ if err != nil {
195
+ return sdkerrors.ResponseCheckTx(err, 0, 0, app.trace)
196
+ }
197
+
198
+ msgs := tx.GetMsgs()
199
+ priority := int64(0)
200
+
201
+ for _, msg := range msgs {
202
+ switch msg.(type) {
203
+ case *oracle.MsgUpdatePrice:
204
+ // Verify sender is authorized oracle
205
+ if isAuthorizedOracle(msg.GetSigners()[0]) {
206
+ priority = 1000000 // Highest priority
207
+ }
208
+ case *crisis.MsgPause:
209
+ // Verify sender is admin
210
+ if isAdmin(msg.GetSigners()[0]) {
211
+ priority = 1000000 // Highest priority
212
+ }
213
+ }
214
+ }
215
+
216
+ return abci.ResponseCheckTx{
217
+ Code: 0,
218
+ Priority: priority,
219
+ // High priority messages pay higher fees to prevent spam
220
+ }
221
+ }
222
+ ```
223
+
224
+ **References**: building-secure-contracts/not-so-smart-contracts/cosmos/messages_priority
225
+
226
+ ---
227
+
228
+ ### 4.4 SLOW ABCI METHODS ⚠️ CRITICAL - CHAIN HALT
229
+
230
+ **Description**: Computationally expensive `BeginBlocker` or `EndBlocker` with unbounded loops can exceed block time limits, halting the chain.
231
+
232
+ **Detection Patterns**:
233
+ ```go
234
+ // VULNERABLE: Unbounded loop in EndBlocker
235
+ func EndBlocker(ctx sdk.Context, k keeper.Keeper) {
236
+ // Iterates over ALL users - could be millions!
237
+ k.IterateAllUsers(ctx, func(user User) bool {
238
+ reward := k.CalculateReward(ctx, user) // Complex calculation
239
+ k.DistributeReward(ctx, user, reward)
240
+ return false
241
+ })
242
+ }
243
+
244
+ // VULNERABLE: Nested loops in BeginBlocker
245
+ func BeginBlocker(ctx sdk.Context, k keeper.Keeper) {
246
+ pools := k.GetAllPools(ctx) // 1000+ pools
247
+ for _, pool := range pools {
248
+ assets := k.GetPoolAssets(ctx, pool.ID) // 100+ assets each
249
+ for _, asset := range assets {
250
+ k.UpdatePrice(ctx, pool, asset) // Expensive calculation
251
+ }
252
+ }
253
+ }
254
+
255
+ // VULNERABLE: Unbounded state iteration
256
+ func (k Keeper) ProcessExpiredOrders(ctx sdk.Context) {
257
+ // No limit on number of orders processed per block!
258
+ k.IterateExpiredOrders(ctx, func(order Order) bool {
259
+ k.CancelOrder(ctx, order)
260
+ return false // Processes ALL expired orders
261
+ })
262
+ }
263
+ ```
264
+
265
+ **What to Check**:
266
+ - [ ] BeginBlocker has bounded computational complexity
267
+ - [ ] EndBlocker has bounded computational complexity
268
+ - [ ] NO nested loops over unbounded collections
269
+ - [ ] NO iterations over all users/pools/assets
270
+ - [ ] Batch operations have size limits
271
+ - [ ] Stress tests with maximum expected data
272
+
273
+ **Mitigation**:
274
+ ```go
275
+ // SECURE: Process limited batch per block
276
+ func EndBlocker(ctx sdk.Context, k keeper.Keeper) {
277
+ maxProcessed := 100 // Process max 100 users per block
278
+
279
+ iterator := k.GetUnprocessedUsers(ctx)
280
+ defer iterator.Close()
281
+
282
+ count := 0
283
+ for ; iterator.Valid() && count < maxProcessed; iterator.Next() {
284
+ user := k.UnmarshalUser(iterator.Value())
285
+ reward := k.CalculateReward(ctx, user)
286
+ k.DistributeReward(ctx, user, reward)
287
+ k.MarkProcessed(ctx, user)
288
+ count++
289
+ }
290
+ // Remaining users processed in subsequent blocks
291
+ }
292
+
293
+ // SECURE: Limit nested iterations
294
+ func BeginBlocker(ctx sdk.Context, k keeper.Keeper) {
295
+ // Process only active pools (limited set)
296
+ activePools := k.GetActivePools(ctx) // Max 50 pools
297
+ for _, pool := range activePools {
298
+ // Process only top assets (limited set)
299
+ topAssets := k.GetTopPoolAssets(ctx, pool.ID, 10)
300
+ for _, asset := range topAssets {
301
+ k.UpdatePrice(ctx, pool, asset)
302
+ }
303
+ }
304
+ }
305
+ ```
306
+
307
+ **Testing**:
308
+ ```go
309
+ // Benchmark ABCI methods
310
+ func BenchmarkEndBlocker(b *testing.B) {
311
+ // Test with maximum expected state
312
+ ctx := setupMaximumState() // 1M users, 10K pools, etc.
313
+
314
+ b.ResetTimer()
315
+ for i := 0; i < b.N; i++ {
316
+ EndBlocker(ctx, keeper)
317
+ }
318
+ // Must complete in < 1 second
319
+ }
320
+ ```
321
+
322
+ **References**: building-secure-contracts/not-so-smart-contracts/cosmos/abci_method_slow
323
+
324
+ ---
325
+
326
+ ### 4.5 ABCI METHODS PANIC ⚠️ CRITICAL - CHAIN HALT
327
+
328
+ **Description**: Unexpected panics in `BeginBlocker` or `EndBlocker` immediately stop the blockchain. Many Cosmos SDK types panic on invalid operations.
329
+
330
+ **Detection Patterns**:
331
+
332
+ #### Pattern 1: Panic-Prone Coin Operations
333
+ ```go
334
+ // VULNERABLE: NewCoins panics on invalid coins
335
+ func EndBlocker(ctx sdk.Context, k keeper.Keeper) {
336
+ // Panics if amount is negative or denom is invalid!
337
+ coins := sdk.NewCoins(sdk.NewCoin(userDenom, userAmount))
338
+ k.MintCoins(ctx, coins)
339
+ }
340
+
341
+ // VULNERABLE: Coin arithmetic panics
342
+ reward := sdk.NewCoin("uatom", sdk.NewInt(-100)) // PANIC: negative amount
343
+ ```
344
+
345
+ #### Pattern 2: Dec/Int Operations
346
+ ```go
347
+ // VULNERABLE: NewDec panics on invalid string
348
+ func BeginBlocker(ctx sdk.Context, k keeper.Keeper) {
349
+ price := sdk.NewDec(priceString) // PANIC if priceString is invalid!
350
+ }
351
+
352
+ // VULNERABLE: Division by zero
353
+ ratio := amount.Quo(sdk.ZeroInt()) // PANIC!
354
+ ```
355
+
356
+ #### Pattern 3: SetParamSet
357
+ ```go
358
+ // VULNERABLE: SetParamSet panics on validation failure
359
+ func (k Keeper) UpdateParams(ctx sdk.Context, params Params) {
360
+ // PANIC if params are invalid!
361
+ k.paramSpace.SetParamSet(ctx, &params)
362
+ }
363
+ ```
364
+
365
+ #### Pattern 4: Array Out of Bounds
366
+ ```go
367
+ // VULNERABLE: No bounds checking
368
+ func processValidators(validators []Validator) {
369
+ top := validators[0] // PANIC if empty slice!
370
+ }
371
+ ```
372
+
373
+ **What to Check**:
374
+ - [ ] All `sdk.NewCoins()`, `sdk.NewCoin()` calls validated
375
+ - [ ] All `sdk.NewDec()`, `sdk.NewInt()` calls validated
376
+ - [ ] Division operations check for zero divisor
377
+ - [ ] `SetParamSet` called only with validated params
378
+ - [ ] Array/slice access has bounds checking
379
+ - [ ] User input validated before use in panic-prone operations
380
+
381
+ **Mitigation**:
382
+ ```go
383
+ // SECURE: Validate before panic-prone operations
384
+ func EndBlocker(ctx sdk.Context, k keeper.Keeper) {
385
+ // Validate denom and amount
386
+ if err := sdk.ValidateDenom(userDenom); err != nil {
387
+ ctx.Logger().Error("invalid denom", "error", err)
388
+ return
389
+ }
390
+ if userAmount.IsNegative() {
391
+ ctx.Logger().Error("negative amount")
392
+ return
393
+ }
394
+
395
+ coins := sdk.NewCoins(sdk.NewCoin(userDenom, userAmount))
396
+ k.MintCoins(ctx, coins)
397
+ }
398
+
399
+ // SECURE: Use safe constructors
400
+ func (k Keeper) UpdatePrice(ctx sdk.Context, priceStr string) error {
401
+ // Safe: Returns error instead of panicking
402
+ price, err := sdk.NewDecFromStr(priceStr)
403
+ if err != nil {
404
+ return err
405
+ }
406
+
407
+ // Check for zero before division
408
+ if divisor.IsZero() {
409
+ return errors.New("division by zero")
410
+ }
411
+ ratio := amount.Quo(divisor)
412
+
413
+ return nil
414
+ }
415
+
416
+ // SECURE: Bounds checking
417
+ func processValidators(validators []Validator) {
418
+ if len(validators) == 0 {
419
+ return
420
+ }
421
+ top := validators[0] // Safe
422
+ }
423
+ ```
424
+
425
+ **Tool Detection**:
426
+ ```bash
427
+ # Use CodeQL to find panic-prone operations
428
+ codeql query run find-unvalidated-sdk-operations.ql
429
+
430
+ # Manual review
431
+ grep -r "sdk.NewDec\|sdk.NewInt\|sdk.NewCoins" x/
432
+ grep -r "\.Quo\|\.Div" x/
433
+ grep -r "SetParamSet" x/
434
+ ```
435
+
436
+ **References**: building-secure-contracts/not-so-smart-contracts/cosmos/abci_method_panics
437
+
438
+ ---
439
+
440
+ ### 4.6 BROKEN BOOKKEEPING ⚠️ HIGH
441
+
442
+ **Description**: Custom internal accounting alongside `x/bank` module becomes inconsistent when direct token transfers bypass internal bookkeeping.
443
+
444
+ **Detection Patterns**:
445
+ ```go
446
+ // VULNERABLE: Internal bookkeeping separate from x/bank
447
+ type Keeper struct {
448
+ // Internal tracking of balances
449
+ userBalances map[string]sdk.Coins // NOT synchronized with x/bank!
450
+ }
451
+
452
+ func (k Keeper) Deposit(ctx sdk.Context, user string, amount sdk.Coins) {
453
+ // Updates internal bookkeeping
454
+ k.userBalances[user] = k.userBalances[user].Add(amount...)
455
+
456
+ // Also updates x/bank
457
+ k.bankKeeper.SendCoins(ctx, sender, moduleAccount, amount)
458
+ }
459
+
460
+ // PROBLEM: Direct IBC transfer bypasses internal bookkeeping!
461
+ // User receives tokens via IBC -> x/bank updated but userBalances not updated
462
+ // Invariant violated: sum(userBalances) != bankKeeper.GetSupply()
463
+ ```
464
+
465
+ **What to Check**:
466
+ - [ ] No custom balance tracking alongside x/bank
467
+ - [ ] OR custom tracking uses blocklist to prevent unexpected transfers
468
+ - [ ] Invariant checks compare internal accounting to x/bank
469
+ - [ ] IBC transfers handled correctly
470
+ - [ ] Module accounts use SendEnabled parameter
471
+
472
+ **Mitigation**:
473
+ ```go
474
+ // OPTION 1: Use blocklist to prevent unexpected transfers
475
+ func (k Keeper) BeforeTokenTransfer(ctx sdk.Context, from, to string) error {
476
+ // Block all transfers except through our module
477
+ if !k.IsAuthorizedTransfer(ctx, from, to) {
478
+ return errors.New("direct transfers blocked")
479
+ }
480
+ return nil
481
+ }
482
+
483
+ // OPTION 2: Use SendEnabled parameter
484
+ // In x/bank params, set SendEnabled = false for your token
485
+ // All transfers must go through your module
486
+
487
+ // OPTION 3: Don't maintain separate bookkeeping
488
+ // Use x/bank as source of truth, query when needed
489
+ func (k Keeper) GetUserBalance(ctx sdk.Context, user string) sdk.Coins {
490
+ addr := sdk.AccAddress(user)
491
+ return k.bankKeeper.GetAllBalances(ctx, addr)
492
+ }
493
+ ```
494
+
495
+ **Invariant Testing**:
496
+ ```go
497
+ // Invariant: Internal accounting matches x/bank
498
+ func (k Keeper) InvariantCheck(ctx sdk.Context) error {
499
+ internalTotal := sdk.NewCoins()
500
+ for _, balance := range k.userBalances {
501
+ internalTotal = internalTotal.Add(balance...)
502
+ }
503
+
504
+ moduleBalance := k.bankKeeper.GetAllBalances(ctx, k.moduleAccount)
505
+
506
+ if !internalTotal.IsEqual(moduleBalance) {
507
+ return fmt.Errorf("bookkeeping mismatch: internal=%v bank=%v",
508
+ internalTotal, moduleBalance)
509
+ }
510
+ return nil
511
+ }
512
+ ```
513
+
514
+ **References**: building-secure-contracts/not-so-smart-contracts/cosmos/broken_bookkeeping
515
+
516
+ ---
517
+
518
+ ### 4.7 ROUNDING ERRORS ⚠️ MEDIUM
519
+
520
+ **Description**: `sdk.Dec` type has precision issues and lacks associativity, causing rounding errors that can be exploited or cause incorrect calculations.
521
+
522
+ **Detection Patterns**:
523
+ ```go
524
+ // VULNERABLE: Division before multiplication (loses precision)
525
+ sharePrice := totalValue.Quo(totalShares) // Division first
526
+ userValue := sharePrice.Mul(userShares) // Multiplication second
527
+ // User gets less value due to rounding down in division
528
+
529
+ // VULNERABLE: sdk.Dec associativity issues
530
+ a := sdk.NewDec(1)
531
+ b := sdk.NewDec(10)
532
+ c := sdk.NewDec(100)
533
+
534
+ result1 := a.Mul(b).Quo(c) // (1 * 10) / 100 = 0.1
535
+ result2 := a.Quo(c).Mul(b) // (1 / 100) * 10 = 0.1 (but different precision!)
536
+ // result1 != result2 due to precision handling
537
+
538
+ // VULNERABLE: Repeated rounding favors users
539
+ for _, user := range users {
540
+ reward := totalReward.Quo(sdk.NewDec(len(users))) // Round each time
541
+ k.MintReward(ctx, user, reward)
542
+ }
543
+ // Total minted > totalReward due to rounding up
544
+ ```
545
+
546
+ **What to Check**:
547
+ - [ ] Multiplication before division pattern used
548
+ - [ ] Rounding direction favors protocol, not users
549
+ - [ ] No repeated rounding in loops
550
+ - [ ] Consistent calculation order across all operations
551
+ - [ ] Consider using integer arithmetic with scaling factor
552
+
553
+ **Mitigation**:
554
+ ```go
555
+ // SECURE: Multiply before divide (preserves precision)
556
+ userValue := totalValue.Mul(userShares).Quo(totalShares)
557
+ // Full precision maintained until final division
558
+
559
+ // SECURE: Round in favor of system
560
+ // When distributing rewards, round down (users get slightly less)
561
+ reward := totalReward.Mul(userShares).QuoTruncate(totalShares)
562
+
563
+ // When calculating fees, round up (users pay slightly more)
564
+ fee := amount.Mul(feeRate).QuoCeil(sdk.NewDec(10000))
565
+
566
+ // SECURE: Distribute with remainder handling
567
+ totalDistributed := sdk.ZeroDec()
568
+ for i, user := range users {
569
+ if i == len(users)-1 {
570
+ // Last user gets remainder to ensure sum is exact
571
+ reward = totalReward.Sub(totalDistributed)
572
+ } else {
573
+ reward = totalReward.Quo(sdk.NewDec(len(users)))
574
+ totalDistributed = totalDistributed.Add(reward)
575
+ }
576
+ k.MintReward(ctx, user, reward)
577
+ }
578
+ ```
579
+
580
+ **References**: building-secure-contracts/not-so-smart-contracts/cosmos/rounding_errors
581
+
582
+ ---
583
+
584
+ ### 4.8 UNREGISTERED MESSAGE HANDLER ⚠️ MEDIUM (Legacy Issue)
585
+
586
+ **Description**: Message types defined in proto but not registered in `NewHandler` function cause messages to be accepted but silently ignored (pre-Cosmos SDK v0.47).
587
+
588
+ **Detection Patterns**:
589
+ ```go
590
+ // VULNERABLE: Message defined but not in handler (legacy Msg Service)
591
+ // In types/msgs.proto
592
+ message MsgWithdraw {
593
+ string sender = 1;
594
+ string amount = 2;
595
+ }
596
+
597
+ // In handler.go
598
+ func NewHandler(k keeper.Keeper) sdk.Handler {
599
+ return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) {
600
+ switch msg := msg.(type) {
601
+ case *types.MsgDeposit:
602
+ return handleMsgDeposit(ctx, k, msg)
603
+ // Missing: case *types.MsgWithdraw
604
+ default:
605
+ return nil, sdkerrors.ErrUnknownRequest
606
+ }
607
+ }
608
+ }
609
+ ```
610
+
611
+ **What to Check**:
612
+ - [ ] Using Cosmos SDK v0.47+ with automatic handler registration
613
+ - [ ] OR all message types in proto have corresponding handler case
614
+ - [ ] Integration tests call all message types
615
+ - [ ] CI checks for unregistered messages
616
+
617
+ **Mitigation**:
618
+ ```go
619
+ // OPTION 1: Use modern SDK (v0.47+) - handlers auto-registered
620
+ // In msg_server.go
621
+ type msgServer struct {
622
+ Keeper
623
+ }
624
+
625
+ func (s msgServer) Deposit(ctx context.Context, msg *types.MsgDeposit) (*types.MsgDepositResponse, error) {
626
+ // Handler automatically registered via protobuf service
627
+ }
628
+
629
+ func (s msgServer) Withdraw(ctx context.Context, msg *types.MsgWithdraw) (*types.MsgWithdrawResponse, error) {
630
+ // Handler automatically registered
631
+ }
632
+
633
+ // OPTION 2: Verify all messages registered (legacy)
634
+ func NewHandler(k keeper.Keeper) sdk.Handler {
635
+ return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) {
636
+ switch msg := msg.(type) {
637
+ case *types.MsgDeposit:
638
+ return handleMsgDeposit(ctx, k, msg)
639
+ case *types.MsgWithdraw: // Ensure all messages present!
640
+ return handleMsgWithdraw(ctx, k, msg)
641
+ default:
642
+ return nil, sdkerrors.ErrUnknownRequest
643
+ }
644
+ }
645
+ }
646
+ ```
647
+
648
+ **Testing**:
649
+ ```go
650
+ // Integration test for all message types
651
+ func TestAllMessageTypes(t *testing.T) {
652
+ // Get all message types from proto
653
+ messageTypes := getAllProtoMessageTypes()
654
+
655
+ for _, msgType := range messageTypes {
656
+ // Verify message can be submitted and processed
657
+ result, err := app.DeliverTx(ctx, msgType)
658
+ require.NoError(t, err)
659
+ require.NotNil(t, result)
660
+ }
661
+ }
662
+ ```
663
+
664
+ **References**: building-secure-contracts/not-so-smart-contracts/cosmos/message_handler_missing
665
+
666
+ ---
667
+
668
+ ### 4.9 MISSING ERROR HANDLER ⚠️ HIGH
669
+
670
+ **Description**: Ignoring error return values from keeper methods (especially `bankKeeper.SendCoins`) allows invalid operations to silently succeed.
671
+
672
+ **Detection Patterns**:
673
+ ```go
674
+ // VULNERABLE: Ignored error from SendCoins
675
+ func (k Keeper) Withdraw(ctx sdk.Context, user string, amount sdk.Coins) {
676
+ // Error ignored! Withdrawal appears successful even if SendCoins fails
677
+ k.bankKeeper.SendCoins(ctx, moduleAccount, user, amount)
678
+
679
+ // Update state assuming withdrawal succeeded
680
+ k.DecrementBalance(ctx, user, amount)
681
+ }
682
+
683
+ // VULNERABLE: Deferred error handling too late
684
+ func (k Keeper) ProcessBatch(ctx sdk.Context, txs []Transaction) {
685
+ for _, tx := range txs {
686
+ err := k.ProcessTransaction(ctx, tx)
687
+ // Error not checked, continues processing!
688
+ }
689
+ }
690
+ ```
691
+
692
+ **What to Check**:
693
+ - [ ] ALL keeper method calls check error return values
694
+ - [ ] `bankKeeper.SendCoins()` errors always handled
695
+ - [ ] State updates only occur after successful operation
696
+ - [ ] Errors propagated to caller
697
+ - [ ] Use linters to detect ignored errors (errcheck)
698
+
699
+ **Mitigation**:
700
+ ```go
701
+ // SECURE: Check all errors
702
+ func (k Keeper) Withdraw(ctx sdk.Context, user string, amount sdk.Coins) error {
703
+ // Check error from SendCoins
704
+ if err := k.bankKeeper.SendCoins(ctx, moduleAccount, user, amount); err != nil {
705
+ return err // Withdrawal failed, no state change
706
+ }
707
+
708
+ // Only update state if SendCoins succeeded
709
+ k.DecrementBalance(ctx, user, amount)
710
+ return nil
711
+ }
712
+
713
+ // SECURE: Stop processing on first error
714
+ func (k Keeper) ProcessBatch(ctx sdk.Context, txs []Transaction) error {
715
+ for _, tx := range txs {
716
+ if err := k.ProcessTransaction(ctx, tx); err != nil {
717
+ return fmt.Errorf("transaction failed: %w", err)
718
+ }
719
+ }
720
+ return nil
721
+ }
722
+ ```
723
+
724
+ **Linter Configuration**:
725
+ ```yaml
726
+ # .golangci.yml
727
+ linters:
728
+ enable:
729
+ - errcheck # Detect unchecked errors
730
+ - goerr113 # Error handling rules
731
+
732
+ linters-settings:
733
+ errcheck:
734
+ check-blank: true # Flag _ = err
735
+ check-type-assertions: true
736
+ ```
737
+
738
+ **References**: building-secure-contracts/not-so-smart-contracts/cosmos/missing_error_handler
739
+
740
+ ---