@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,190 @@
1
+ # Cryptographic API Footguns
2
+
3
+ Detailed patterns for identifying misuse-prone cryptographic interfaces.
4
+
5
+ ## Algorithm Selection Anti-Patterns
6
+
7
+ ### The "alg" Header Attack (JWT)
8
+
9
+ The JSON Web Token standard allows the token itself to specify which algorithm to use for verification. This is catastrophically wrong.
10
+
11
+ **Attack 1: "none" algorithm**
12
+ ```json
13
+ {"alg": "none", "typ": "JWT"}
14
+ ```
15
+ Many libraries accept this and skip signature verification entirely.
16
+
17
+ **Attack 2: Algorithm confusion (RS256 → HS256)**
18
+ - Server expects RSA signature, uses public key for verification
19
+ - Attacker changes algorithm to HMAC, uses *public key* as HMAC secret
20
+ - Public key is public, so attacker can forge valid signatures
21
+
22
+ **Root cause**: Trusting untrusted input to select security mechanisms.
23
+
24
+ **Fix**: Never let data dictate algorithm. Use one algorithm, hardcoded.
25
+
26
+ ### Cipher Mode Parameters
27
+
28
+ ```python
29
+ # DANGEROUS: mode is selectable
30
+ def encrypt(plaintext, key, mode="ECB"): # ECB is never correct
31
+ ...
32
+
33
+ # BAD: accepts any OpenSSL cipher string
34
+ cipher = OpenSSL::Cipher.new(user_selected_cipher)
35
+
36
+ # GOOD: no parameters
37
+ def encrypt(plaintext, key): # internally uses AES-256-GCM
38
+ ...
39
+ ```
40
+
41
+ **Detection**: Parameters named `mode`, `cipher`, `algorithm`, `hash_type`
42
+
43
+ ### Hash Algorithm Downgrade
44
+
45
+ ```php
46
+ // PHP's hash() accepts ANY algorithm
47
+ hash("crc32", $password); // Valid call, terrible security
48
+ hash("md5", $password); // Valid call, broken security
49
+ hash("sha256", $password); // Valid call, still wrong for passwords
50
+
51
+ // Password functions limit choices
52
+ password_hash($password, PASSWORD_ARGON2ID); // Better
53
+ ```
54
+
55
+ **Pattern**: APIs that accept algorithm as string instead of restricting to safe subset.
56
+
57
+ ## Key/Nonce/IV Confusion
58
+
59
+ ### Indistinguishable Byte Arrays
60
+
61
+ ```go
62
+ // All three are just []byte - easy to swap
63
+ func Encrypt(plaintext, key, nonce []byte) []byte
64
+
65
+ // Easy mistakes:
66
+ Encrypt(plaintext, nonce, key) // Swapped - compiles fine
67
+ Encrypt(plaintext, key, key) // Reused key as nonce - compiles fine
68
+ ```
69
+
70
+ **Fix**: Distinct types
71
+
72
+ ```go
73
+ type EncryptionKey [32]byte
74
+ type Nonce [24]byte
75
+
76
+ func Encrypt(plaintext []byte, key EncryptionKey, nonce Nonce) []byte
77
+ // Now type system catches swaps
78
+ ```
79
+
80
+ ### Nonce Reuse
81
+
82
+ ```python
83
+ # DANGEROUS: nonce parameter with no guidance
84
+ def encrypt(plaintext, key, nonce):
85
+ ...
86
+
87
+ # Developer "simplifies" by reusing:
88
+ nonce = b'\x00' * 12
89
+ encrypt(msg1, key, nonce)
90
+ encrypt(msg2, key, nonce) # Catastrophic with GCM/ChaCha
91
+ ```
92
+
93
+ **Fix**: Generate nonces internally, return them with ciphertext.
94
+
95
+ ## Comparison Footguns
96
+
97
+ ### Timing-Safe vs. Regular Comparison
98
+
99
+ ```python
100
+ # These look identical but have different security properties
101
+ if computed_mac == expected_mac: # VULNERABLE: timing attack
102
+ if hmac.compare_digest(computed_mac, expected_mac): # Safe
103
+ ```
104
+
105
+ **The problem**: Developers don't know to use special comparison. Default string equality is vulnerable.
106
+
107
+ **Detection**: Direct equality checks on MACs, signatures, hashes, tokens.
108
+
109
+ ### Boolean Confusion
110
+
111
+ ```python
112
+ # Signature verification APIs
113
+ result = verify(signature, message, key)
114
+
115
+ # Some return True/False
116
+ if verify(...): # Must check return value
117
+
118
+ # Some raise exceptions
119
+ verify(...) # Failure = exception, no return to check
120
+
121
+ # Developers mixing these up = vulnerabilities
122
+ ```
123
+
124
+ ## Padding Oracle Enablers
125
+
126
+ ### Raw Decryption APIs
127
+
128
+ ```python
129
+ # DANGEROUS: returns plaintext even if padding invalid
130
+ def decrypt(ciphertext, key):
131
+ # ... decrypt ...
132
+ return unpad(plaintext) # Throws on bad padding
133
+
134
+ # Attacker can distinguish:
135
+ # - Valid padding → success
136
+ # - Invalid padding → exception
137
+
138
+ # This distinction enables padding oracle attacks
139
+ ```
140
+
141
+ **Fix**: Decrypt-then-MAC (or authenticated encryption). Never expose padding validity.
142
+
143
+ ### Error Message Differentiation
144
+
145
+ ```
146
+ # DANGEROUS error messages
147
+ "Invalid padding" # Padding oracle signal
148
+ "MAC verification failed" # Different error = oracle
149
+ "Decryption failed" # Good: single error for all failures
150
+ ```
151
+
152
+ ## Key Derivation Footguns
153
+
154
+ ### Using Hashes Instead of KDFs
155
+
156
+ ```python
157
+ # DANGEROUS: hash is not a KDF
158
+ key = hashlib.sha256(password.encode()).digest()
159
+
160
+ # Developer reasoning: "SHA-256 is secure"
161
+ # Reality: Fast hash enables brute force
162
+
163
+ # CORRECT: use actual KDF
164
+ key = hashlib.scrypt(password.encode(), salt=salt, n=2**14, r=8, p=1)
165
+ ```
166
+
167
+ ### Password Storage Misuse
168
+
169
+ ```python
170
+ # DANGEROUS: encryption is not password storage
171
+ encrypted_password = encrypt(password, master_key)
172
+ # Compromise of master_key = all passwords exposed
173
+
174
+ # CORRECT: one-way hash with salt
175
+ hashed_password = argon2.hash(password)
176
+ # No key to steal; each password salted differently
177
+ ```
178
+
179
+ ## Safe API Design Checklist
180
+
181
+ For cryptographic APIs, verify:
182
+
183
+ - [ ] **No algorithm selection**: One safe algorithm, hardcoded
184
+ - [ ] **No mode selection**: GCM/ChaCha20-Poly1305 only, no ECB/CBC
185
+ - [ ] **Distinct types**: Keys, nonces, ciphertexts are different types
186
+ - [ ] **Internal nonce generation**: Don't require developer to provide
187
+ - [ ] **Authenticated encryption**: Encrypt-then-MAC or AEAD built in
188
+ - [ ] **Constant-time comparison**: Default or only comparison method
189
+ - [ ] **Uniform errors**: Same error for all decryption failures
190
+ - [ ] **KDF for passwords**: Argon2/scrypt/bcrypt, not raw hashes
@@ -0,0 +1,205 @@
1
+ # C/C++ Sharp Edges
2
+
3
+ ## Integer Overflow is Undefined Behavior
4
+
5
+ ```c
6
+ // DANGEROUS: Signed overflow is UB, compiler can optimize away checks
7
+ int x = INT_MAX;
8
+ if (x + 1 > x) { // Compiler may assume always true (UB)
9
+ // Overflow check optimized away!
10
+ }
11
+
12
+ // DANGEROUS: Size calculations
13
+ size_t size = user_count * sizeof(struct User);
14
+ // If user_count * sizeof overflows, allocates tiny buffer
15
+ void *buf = malloc(size);
16
+ ```
17
+
18
+ **The Problem**: Signed integer overflow is undefined behavior. Compilers assume it never happens and optimize accordingly—including removing overflow checks.
19
+
20
+ **Detection**: Look for arithmetic on signed integers, especially in size calculations, loop bounds, and allocation sizes.
21
+
22
+ ## Buffer Handling
23
+
24
+ ```c
25
+ // DANGEROUS: No bounds checking
26
+ char buf[64];
27
+ strcpy(buf, user_input); // Classic overflow
28
+ sprintf(buf, "Hello %s", name); // Format + overflow
29
+ gets(buf); // Never use, removed in C11
30
+
31
+ // DANGEROUS: Off-by-one
32
+ char buf[64];
33
+ strncpy(buf, src, 64); // NOT null-terminated if src >= 64!
34
+ buf[63] = '\0'; // Must do manually
35
+
36
+ // DANGEROUS: snprintf return value
37
+ int ret = snprintf(buf, sizeof(buf), "%s", long_string);
38
+ // ret is length that WOULD be written, not actual length
39
+ // If ret >= sizeof(buf), output was truncated
40
+ ```
41
+
42
+ **Safe Alternatives**:
43
+ - `strlcpy`, `strlcat` (BSD, not standard)
44
+ - `snprintf` with proper return value checking
45
+ - C11 Annex K `strcpy_s`, `sprintf_s` (limited support)
46
+
47
+ ## Format Strings
48
+
49
+ ```c
50
+ // DANGEROUS: User controls format
51
+ printf(user_input); // Format string attack
52
+ syslog(LOG_INFO, user_input); // Same problem
53
+ fprintf(stderr, user_input); // Same problem
54
+
55
+ // Attacker input: "%x%x%x%x" → leaks stack
56
+ // Attacker input: "%n" → writes to memory
57
+
58
+ // SAFE: Format as literal
59
+ printf("%s", user_input);
60
+ ```
61
+
62
+ **Detection**: Any `*printf` family function where the format argument is not a string literal.
63
+
64
+ ## Memory Cleanup
65
+
66
+ ```c
67
+ // DANGEROUS: Compiler may optimize away
68
+ char password[64];
69
+ // ... use password ...
70
+ memset(password, 0, sizeof(password)); // May be removed!
71
+
72
+ // The compiler sees: "writes to password, then password goes out of scope"
73
+ // Optimization: "dead store elimination" removes the memset
74
+ ```
75
+
76
+ **Safe Alternatives**:
77
+ ```c
78
+ // Option 1: explicit_bzero (BSD, glibc 2.25+)
79
+ explicit_bzero(password, sizeof(password));
80
+
81
+ // Option 2: SecureZeroMemory (Windows)
82
+ SecureZeroMemory(password, sizeof(password));
83
+
84
+ // Option 3: Volatile function pointer trick
85
+ static void *(*const volatile memset_ptr)(void *, int, size_t) = memset;
86
+ memset_ptr(password, 0, sizeof(password));
87
+
88
+ // Option 4: C11 memset_s (limited support)
89
+ memset_s(password, sizeof(password), 0, sizeof(password));
90
+ ```
91
+
92
+ ## Uninitialized Variables
93
+
94
+ ```c
95
+ // DANGEROUS: Uninitialized stack variables
96
+ int result;
97
+ if (condition) {
98
+ result = compute();
99
+ }
100
+ return result; // Uninitialized if !condition
101
+
102
+ // DANGEROUS: Uninitialized struct padding
103
+ struct {
104
+ char a; // 1 byte
105
+ // 3 bytes padding (uninitialized)
106
+ int b; // 4 bytes
107
+ } s;
108
+ s.a = 'x';
109
+ s.b = 42;
110
+ send(sock, &s, sizeof(s), 0); // Leaks 3 bytes of stack
111
+ ```
112
+
113
+ **Fix**: Use `= {0}` initialization or `memset`.
114
+
115
+ ## Double Free and Use-After-Free
116
+
117
+ ```c
118
+ // DANGEROUS: Double free
119
+ free(ptr);
120
+ // ... later ...
121
+ free(ptr); // Heap corruption
122
+
123
+ // DANGEROUS: Use after free
124
+ free(ptr);
125
+ ptr->value = 42; // Writing to freed memory
126
+
127
+ // DANGEROUS: Returning pointer to local
128
+ char *get_greeting() {
129
+ char buf[64] = "hello";
130
+ return buf; // Stack pointer invalid after return
131
+ }
132
+ ```
133
+
134
+ **Mitigations**:
135
+ - Set pointer to NULL after free: `free(ptr); ptr = NULL;`
136
+ - Use static analysis (Coverity, cppcheck)
137
+ - Use AddressSanitizer in testing
138
+
139
+ ## Signal Handler Issues
140
+
141
+ ```c
142
+ // DANGEROUS: Non-async-signal-safe functions in handler
143
+ void handler(int sig) {
144
+ printf("Got signal\n"); // NOT async-signal-safe
145
+ malloc(100); // NOT async-signal-safe
146
+ free(ptr); // NOT async-signal-safe
147
+ }
148
+
149
+ // Async-signal-safe: write(), _exit(), signal()
150
+ // Most functions including printf, malloc, free are NOT safe
151
+ ```
152
+
153
+ ## Time-of-Check to Time-of-Use (TOCTOU)
154
+
155
+ ```c
156
+ // DANGEROUS: File state can change between check and use
157
+ if (access(filename, W_OK) == 0) {
158
+ // Attacker replaces file with symlink here
159
+ fd = open(filename, O_WRONLY); // Opens different file
160
+ }
161
+ ```
162
+
163
+ **Fix**: Open first, then check permissions on the file descriptor.
164
+
165
+ ## Variadic Function Pitfalls
166
+
167
+ ```c
168
+ // DANGEROUS: Wrong format specifier
169
+ printf("%d", (long long)value); // %d expects int, not long long
170
+ printf("%s", 42); // Interprets 42 as pointer
171
+
172
+ // DANGEROUS: Missing sentinel
173
+ execl("/bin/ls", "ls", "-l", NULL); // NULL required!
174
+ execl("/bin/ls", "ls", "-l"); // Missing NULL = UB
175
+ ```
176
+
177
+ ## Macro Pitfalls
178
+
179
+ ```c
180
+ // DANGEROUS: Macro arguments evaluated multiple times
181
+ #define SQUARE(x) ((x) * (x))
182
+ int a = 5;
183
+ SQUARE(a++); // Expands to ((a++) * (a++)) - increments twice!
184
+
185
+ // DANGEROUS: Operator precedence
186
+ #define ADD(a, b) a + b
187
+ int x = ADD(1, 2) * 3; // Expands to 1 + 2 * 3 = 7, not 9
188
+
189
+ // SAFER: Fully parenthesize
190
+ #define ADD(a, b) ((a) + (b))
191
+ ```
192
+
193
+ ## Detection Patterns
194
+
195
+ Search for these patterns in C/C++ code:
196
+
197
+ | Pattern | Risk |
198
+ |---------|------|
199
+ | `strcpy`, `strcat`, `gets`, `sprintf` | Buffer overflow |
200
+ | `printf(var)` where var is not literal | Format string |
201
+ | `memset` before variable goes out of scope | Dead store elimination |
202
+ | `free(ptr)` without `ptr = NULL` | Double free risk |
203
+ | `malloc` without overflow check on size | Integer overflow |
204
+ | Arithmetic on `int` near INT_MAX | Signed overflow UB |
205
+ | `strncpy` without explicit null termination | Missing terminator |
@@ -0,0 +1,285 @@
1
+ # C# Sharp Edges
2
+
3
+ ## Nullable Reference Types
4
+
5
+ ```csharp
6
+ // DANGEROUS: NRT is opt-in and warnings-only by default
7
+ // Project must enable: <Nullable>enable</Nullable>
8
+
9
+ string? nullable = null;
10
+ string nonNull = nullable; // Warning, but compiles!
11
+ nonNull.Length; // NullReferenceException at runtime
12
+
13
+ // DANGEROUS: Suppression operator
14
+ string value = possiblyNull!; // Suppresses warning, doesn't fix bug
15
+
16
+ // DANGEROUS: Default enabled doesn't mean enforced
17
+ // Many legacy codebases have NRT enabled with thousands of warnings ignored
18
+ ```
19
+
20
+ **Fix**: Enable NRT AND treat warnings as errors:
21
+ ```xml
22
+ <Nullable>enable</Nullable>
23
+ <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
24
+ ```
25
+
26
+ ## Default Struct Values
27
+
28
+ ```csharp
29
+ // DANGEROUS: Structs have default(T) that may be invalid
30
+ struct Connection {
31
+ public string Host; // Default: null
32
+ public int Port; // Default: 0
33
+ }
34
+
35
+ var conn = default(Connection);
36
+ // conn.Host is null, conn.Port is 0 - probably invalid state
37
+
38
+ // DANGEROUS: Array of structs
39
+ var connections = new Connection[10];
40
+ // All 10 are default(Connection) - invalid state
41
+ ```
42
+
43
+ **Fix**: Use constructors, or make structs readonly with init validation.
44
+
45
+ ## IDisposable Leaks
46
+
47
+ ```csharp
48
+ // DANGEROUS: Resources not disposed on exception
49
+ var conn = new SqlConnection(connectionString);
50
+ conn.Open();
51
+ // Exception here = connection never closed
52
+ Process(conn);
53
+ conn.Dispose();
54
+
55
+ // DANGEROUS: Nested disposables
56
+ var outer = new Outer(); // Creates inner disposable
57
+ // Exception before outer.Dispose() = inner leaked
58
+ ```
59
+
60
+ **Fix**: Use `using` statement or declaration:
61
+ ```csharp
62
+ using var conn = new SqlConnection(connectionString);
63
+ conn.Open();
64
+ // Disposed even on exception
65
+
66
+ using (var conn = new SqlConnection(...)) {
67
+ // Scoped disposal
68
+ }
69
+ ```
70
+
71
+ ## Async/Await Pitfalls
72
+
73
+ ```csharp
74
+ // DANGEROUS: async void - exceptions can't be caught
75
+ async void FireAndForget() {
76
+ throw new Exception("Lost!"); // Crashes the process
77
+ }
78
+
79
+ // DANGEROUS: Deadlock with .Result
80
+ async Task DoWork() {
81
+ await Task.Delay(100);
82
+ }
83
+
84
+ void Caller() {
85
+ DoWork().Result; // Deadlock in UI/ASP.NET contexts!
86
+ }
87
+
88
+ // DANGEROUS: Forgetting to await
89
+ async Task Process() {
90
+ DoWorkAsync(); // Not awaited - runs in background
91
+ // Exceptions lost, no completion guarantee
92
+ }
93
+ ```
94
+
95
+ **Fix**: Always return Task, use `ConfigureAwait(false)` in libraries:
96
+ ```csharp
97
+ async Task DoWorkAsync() {
98
+ await Task.Delay(100).ConfigureAwait(false);
99
+ }
100
+ ```
101
+
102
+ ## LINQ Deferred Execution
103
+
104
+ ```csharp
105
+ // DANGEROUS: LINQ queries are lazy
106
+ var query = items.Where(x => x.IsValid);
107
+ // Nothing executed yet!
108
+
109
+ items.Add(newItem); // Added after query defined
110
+ foreach (var item in query) {
111
+ // newItem IS included - query executes here
112
+ }
113
+
114
+ // DANGEROUS: Multiple enumeration
115
+ var filtered = items.Where(x => ExpensiveCheck(x));
116
+ var count = filtered.Count(); // Executes query
117
+ var first = filtered.First(); // Executes query AGAIN
118
+ ```
119
+
120
+ **Fix**: Materialize with `.ToList()` or `.ToArray()` when needed.
121
+
122
+ ## String Comparison
123
+
124
+ ```csharp
125
+ // DANGEROUS: Culture-sensitive comparison by default
126
+ "stra\u00dfe".Equals("strasse"); // Depends on culture!
127
+
128
+ // DANGEROUS: Turkish-I problem
129
+ "INFO".ToLower() == "info" // FALSE in Turkish culture!
130
+ // Turkish: I → ı (dotless i), İ → i
131
+
132
+ // DANGEROUS: Ordinal vs linguistic
133
+ string.Compare("a", "A"); // Culture-dependent
134
+ ```
135
+
136
+ **Fix**: Use ordinal comparison for identifiers:
137
+ ```csharp
138
+ string.Equals(a, b, StringComparison.Ordinal);
139
+ string.Equals(a, b, StringComparison.OrdinalIgnoreCase);
140
+ ```
141
+
142
+ ## Boxing and Unboxing
143
+
144
+ ```csharp
145
+ // DANGEROUS: Hidden boxing with value types
146
+ int value = 42;
147
+ object boxed = value; // Boxing allocation
148
+ int unboxed = (int)boxed; // Unboxing
149
+
150
+ // DANGEROUS: Interface boxing
151
+ struct Point : IComparable<Point> { ... }
152
+ IComparable<Point> comparable = point; // Boxed!
153
+
154
+ // DANGEROUS: LINQ with value types
155
+ var ints = new[] { 1, 2, 3 };
156
+ ints.Where(x => x > 1); // Closure may box
157
+ ```
158
+
159
+ ## Equality Implementation
160
+
161
+ ```csharp
162
+ // DANGEROUS: Incorrect equality implementation
163
+ class MyClass {
164
+ public int Id;
165
+
166
+ public override bool Equals(object obj) {
167
+ return Id == ((MyClass)obj).Id; // Throws if obj is null or wrong type
168
+ }
169
+
170
+ // DANGEROUS: Missing GetHashCode
171
+ // Objects that are Equal MUST have same hash code
172
+ // But: public override int GetHashCode() => ... // Missing!
173
+ }
174
+ ```
175
+
176
+ **Fix**: Implement correctly or use records (C# 9+):
177
+ ```csharp
178
+ record MyRecord(int Id); // Equality implemented correctly
179
+ ```
180
+
181
+ ## Lock Pitfalls
182
+
183
+ ```csharp
184
+ // DANGEROUS: Locking on public object
185
+ public object SyncRoot = new object();
186
+ lock (SyncRoot) { } // External code can deadlock
187
+
188
+ // DANGEROUS: Locking on this
189
+ lock (this) { } // External code can lock same object
190
+
191
+ // DANGEROUS: Locking on Type
192
+ lock (typeof(MyClass)) { } // Type objects are shared across AppDomains
193
+
194
+ // DANGEROUS: Locking on string
195
+ lock ("mylock") { } // String interning makes this shared!
196
+ ```
197
+
198
+ **Fix**: Lock on private readonly object:
199
+ ```csharp
200
+ private readonly object _lock = new object();
201
+ lock (_lock) { }
202
+ ```
203
+
204
+ ## Finalizers
205
+
206
+ ```csharp
207
+ // DANGEROUS: Finalizer delays GC and can resurrect objects
208
+ class Problematic {
209
+ ~Problematic() {
210
+ // This code runs on finalizer thread
211
+ // Can't access other managed objects safely
212
+ GlobalList.Add(this); // Resurrection!
213
+ }
214
+ }
215
+
216
+ // DANGEROUS: Finalizer without dispose pattern
217
+ // Object stays in memory longer (finalization queue)
218
+ ```
219
+
220
+ **Fix**: Implement dispose pattern, avoid finalizers:
221
+ ```csharp
222
+ class Proper : IDisposable {
223
+ private bool _disposed;
224
+
225
+ public void Dispose() {
226
+ Dispose(true);
227
+ GC.SuppressFinalize(this);
228
+ }
229
+
230
+ protected virtual void Dispose(bool disposing) {
231
+ if (_disposed) return;
232
+ if (disposing) { /* managed cleanup */ }
233
+ // unmanaged cleanup
234
+ _disposed = true;
235
+ }
236
+ }
237
+ ```
238
+
239
+ ## Event Handler Memory Leaks
240
+
241
+ ```csharp
242
+ // DANGEROUS: Event handlers keep objects alive
243
+ class Publisher {
244
+ public event EventHandler Changed;
245
+ }
246
+
247
+ class Subscriber {
248
+ public Subscriber(Publisher pub) {
249
+ pub.Changed += OnChanged; // Subscriber now rooted by Publisher
250
+ // Even if Subscriber should be collected, it won't be
251
+ }
252
+ }
253
+ ```
254
+
255
+ **Fix**: Unsubscribe in Dispose or use weak events.
256
+
257
+ ## Serialization
258
+
259
+ ```csharp
260
+ // DANGEROUS: BinaryFormatter is insecure
261
+ var formatter = new BinaryFormatter();
262
+ formatter.Deserialize(untrustedStream); // RCE vulnerability
263
+
264
+ // Microsoft: "BinaryFormatter is dangerous and is not recommended"
265
+ // Similar issues with NetDataContractSerializer, SoapFormatter
266
+ ```
267
+
268
+ **Fix**: Use JSON, XML with known types, or protobuf.
269
+
270
+ ## Detection Patterns
271
+
272
+ | Pattern | Risk |
273
+ |---------|------|
274
+ | `string? x = null; string y = x;` | NRT warning ignored |
275
+ | `possiblyNull!` | Null suppression |
276
+ | `new Connection[n]` for structs | Invalid default state |
277
+ | `SqlConnection` without `using` | Resource leak |
278
+ | `async void` | Unhandled exceptions |
279
+ | `.Result` or `.Wait()` on Task | Deadlock |
280
+ | Missing `await` before async call | Fire and forget |
281
+ | `.Where()` without materialization | Multiple enumeration |
282
+ | `string.Equals` without StringComparison | Culture bugs |
283
+ | `lock (this)` or `lock (typeof(...))` | Deadlock risk |
284
+ | `BinaryFormatter` | Deserialization RCE |
285
+ | Event subscription without unsubscription | Memory leak |