@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.
- package/README.md +126 -0
- package/package.json +53 -0
- package/skills/1password/SKILL.md +70 -0
- package/skills/1password/references/cli-examples.md +29 -0
- package/skills/1password/references/get-started.md +17 -0
- package/skills/apple-notes/SKILL.md +77 -0
- package/skills/apple-reminders/SKILL.md +96 -0
- package/skills/bear-notes/SKILL.md +107 -0
- package/skills/bird/SKILL.md +224 -0
- package/skills/blogwatcher/SKILL.md +69 -0
- package/skills/blucli/SKILL.md +47 -0
- package/skills/bluebubbles/SKILL.md +131 -0
- package/skills/camsnap/SKILL.md +45 -0
- package/skills/canvas/SKILL.md +203 -0
- package/skills/clawhub/SKILL.md +77 -0
- package/skills/coding-agent/SKILL.md +284 -0
- package/skills/discord/SKILL.md +578 -0
- package/skills/eightctl/SKILL.md +50 -0
- package/skills/food-order/SKILL.md +48 -0
- package/skills/gemini/SKILL.md +43 -0
- package/skills/gifgrep/SKILL.md +79 -0
- package/skills/github/SKILL.md +77 -0
- package/skills/gog/SKILL.md +116 -0
- package/skills/goplaces/SKILL.md +52 -0
- package/skills/healthcheck/SKILL.md +245 -0
- package/skills/himalaya/SKILL.md +257 -0
- package/skills/himalaya/references/configuration.md +184 -0
- package/skills/himalaya/references/message-composition.md +199 -0
- package/skills/imsg/SKILL.md +74 -0
- package/skills/local-places/SERVER_README.md +101 -0
- package/skills/local-places/SKILL.md +102 -0
- package/skills/local-places/pyproject.toml +21 -0
- package/skills/local-places/src/local_places/__init__.py +2 -0
- package/skills/local-places/src/local_places/google_places.py +314 -0
- package/skills/local-places/src/local_places/main.py +65 -0
- package/skills/local-places/src/local_places/schemas.py +107 -0
- package/skills/mcporter/SKILL.md +61 -0
- package/skills/model-usage/SKILL.md +69 -0
- package/skills/model-usage/references/codexbar-cli.md +33 -0
- package/skills/model-usage/scripts/model_usage.py +310 -0
- package/skills/nano-banana-pro/SKILL.md +58 -0
- package/skills/nano-banana-pro/scripts/generate_image.py +184 -0
- package/skills/nano-pdf/SKILL.md +38 -0
- package/skills/notion/SKILL.md +172 -0
- package/skills/obsidian/SKILL.md +81 -0
- package/skills/openai-image-gen/SKILL.md +89 -0
- package/skills/openai-image-gen/scripts/gen.py +240 -0
- package/skills/openai-whisper/SKILL.md +38 -0
- package/skills/openai-whisper-api/SKILL.md +52 -0
- package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
- package/skills/openhue/SKILL.md +51 -0
- package/skills/oracle/SKILL.md +125 -0
- package/skills/ordercli/SKILL.md +78 -0
- package/skills/peekaboo/SKILL.md +190 -0
- package/skills/sag/SKILL.md +87 -0
- package/skills/security-ask-questions-if-underspecified/.claude-plugin/plugin.json +10 -0
- package/skills/security-ask-questions-if-underspecified/README.md +24 -0
- package/skills/security-ask-questions-if-underspecified/skills/ask-questions-if-underspecified/SKILL.md +85 -0
- package/skills/security-audit-context-building/.claude-plugin/plugin.json +10 -0
- package/skills/security-audit-context-building/README.md +58 -0
- package/skills/security-audit-context-building/commands/audit-context.md +21 -0
- package/skills/security-audit-context-building/skills/audit-context-building/SKILL.md +297 -0
- package/skills/security-audit-context-building/skills/audit-context-building/resources/COMPLETENESS_CHECKLIST.md +47 -0
- package/skills/security-audit-context-building/skills/audit-context-building/resources/FUNCTION_MICRO_ANALYSIS_EXAMPLE.md +355 -0
- package/skills/security-audit-context-building/skills/audit-context-building/resources/OUTPUT_REQUIREMENTS.md +71 -0
- package/skills/security-building-secure-contracts/.claude-plugin/plugin.json +10 -0
- package/skills/security-building-secure-contracts/README.md +241 -0
- package/skills/security-building-secure-contracts/skills/algorand-vulnerability-scanner/SKILL.md +284 -0
- package/skills/security-building-secure-contracts/skills/algorand-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +405 -0
- package/skills/security-building-secure-contracts/skills/audit-prep-assistant/SKILL.md +409 -0
- package/skills/security-building-secure-contracts/skills/cairo-vulnerability-scanner/SKILL.md +329 -0
- package/skills/security-building-secure-contracts/skills/cairo-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +722 -0
- package/skills/security-building-secure-contracts/skills/code-maturity-assessor/SKILL.md +218 -0
- package/skills/security-building-secure-contracts/skills/code-maturity-assessor/resources/ASSESSMENT_CRITERIA.md +355 -0
- package/skills/security-building-secure-contracts/skills/code-maturity-assessor/resources/EXAMPLE_REPORT.md +248 -0
- package/skills/security-building-secure-contracts/skills/code-maturity-assessor/resources/REPORT_FORMAT.md +33 -0
- package/skills/security-building-secure-contracts/skills/cosmos-vulnerability-scanner/SKILL.md +334 -0
- package/skills/security-building-secure-contracts/skills/cosmos-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +740 -0
- package/skills/security-building-secure-contracts/skills/guidelines-advisor/SKILL.md +252 -0
- package/skills/security-building-secure-contracts/skills/guidelines-advisor/resources/ASSESSMENT_AREAS.md +329 -0
- package/skills/security-building-secure-contracts/skills/guidelines-advisor/resources/DELIVERABLES.md +118 -0
- package/skills/security-building-secure-contracts/skills/guidelines-advisor/resources/EXAMPLE_REPORT.md +298 -0
- package/skills/security-building-secure-contracts/skills/secure-workflow-guide/SKILL.md +161 -0
- package/skills/security-building-secure-contracts/skills/secure-workflow-guide/resources/EXAMPLE_REPORT.md +279 -0
- package/skills/security-building-secure-contracts/skills/secure-workflow-guide/resources/WORKFLOW_STEPS.md +132 -0
- package/skills/security-building-secure-contracts/skills/solana-vulnerability-scanner/SKILL.md +389 -0
- package/skills/security-building-secure-contracts/skills/solana-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +669 -0
- package/skills/security-building-secure-contracts/skills/substrate-vulnerability-scanner/SKILL.md +298 -0
- package/skills/security-building-secure-contracts/skills/substrate-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +791 -0
- package/skills/security-building-secure-contracts/skills/token-integration-analyzer/SKILL.md +362 -0
- package/skills/security-building-secure-contracts/skills/token-integration-analyzer/resources/ASSESSMENT_CATEGORIES.md +571 -0
- package/skills/security-building-secure-contracts/skills/token-integration-analyzer/resources/REPORT_TEMPLATES.md +141 -0
- package/skills/security-building-secure-contracts/skills/ton-vulnerability-scanner/SKILL.md +388 -0
- package/skills/security-building-secure-contracts/skills/ton-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +595 -0
- package/skills/security-burpsuite-project-parser/.claude-plugin/plugin.json +10 -0
- package/skills/security-burpsuite-project-parser/README.md +103 -0
- package/skills/security-burpsuite-project-parser/commands/burp-search.md +18 -0
- package/skills/security-burpsuite-project-parser/skills/SKILL.md +358 -0
- package/skills/security-burpsuite-project-parser/skills/scripts/burp-search.sh +99 -0
- package/skills/security-claude-in-chrome-troubleshooting/.claude-plugin/plugin.json +8 -0
- package/skills/security-claude-in-chrome-troubleshooting/README.md +31 -0
- package/skills/security-claude-in-chrome-troubleshooting/skills/claude-in-chrome-troubleshooting/SKILL.md +251 -0
- package/skills/security-constant-time-analysis/.claude-plugin/plugin.json +9 -0
- package/skills/security-constant-time-analysis/README.md +381 -0
- package/skills/security-constant-time-analysis/commands/ct-check.md +20 -0
- package/skills/security-constant-time-analysis/ct_analyzer/__init__.py +49 -0
- package/skills/security-constant-time-analysis/ct_analyzer/analyzer.py +1284 -0
- package/skills/security-constant-time-analysis/ct_analyzer/script_analyzers.py +3081 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/__init__.py +1 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_analyzer.py +1397 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/bn_excerpt.js +205 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/decompose_constant_time.c +181 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/decompose_vulnerable.c +74 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/decompose_vulnerable.go +78 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/decompose_vulnerable.rs +92 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.cs +174 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.java +161 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.kt +181 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.php +140 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.py +252 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.rb +188 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.swift +199 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.ts +154 -0
- package/skills/security-constant-time-analysis/pyproject.toml +52 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/README.md +90 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/SKILL.md +219 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/compiled.md +129 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/javascript.md +136 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/kotlin.md +252 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/php.md +172 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/python.md +179 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/ruby.md +198 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/swift.md +288 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/vm-compiled.md +354 -0
- package/skills/security-constant-time-analysis/uv.lock +8 -0
- package/skills/security-culture-index/.claude-plugin/plugin.json +8 -0
- package/skills/security-culture-index/README.md +79 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/SKILL.md +293 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/anti-patterns.md +255 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/conversation-starters.md +408 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/interview-trait-signals.md +253 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/motivators.md +158 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/patterns-archetypes.md +147 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/primary-traits.md +307 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/secondary-traits.md +228 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/team-composition.md +148 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/check_deps.py +108 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/__init__.py +20 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/constants.py +122 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/extract.py +187 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/models.py +16 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/opencv_extractor.py +520 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/extract_pdf.py +237 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/pyproject.toml +18 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/templates/burnout-report.md +113 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/templates/comparison-report.md +103 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/templates/hiring-profile.md +127 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/templates/individual-report.md +85 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/templates/predicted-profile.md +165 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/templates/team-report.md +109 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/analyze-team.md +188 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/coach-manager.md +267 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/compare-profiles.md +188 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/define-hiring-profile.md +220 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/detect-burnout.md +206 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/extract-from-pdf.md +121 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/interpret-individual.md +183 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/interview-debrief.md +234 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/mediate-conflict.md +306 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/plan-onboarding.md +322 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/predict-from-interview.md +250 -0
- package/skills/security-differential-review/.claude-plugin/plugin.json +10 -0
- package/skills/security-differential-review/README.md +109 -0
- package/skills/security-differential-review/commands/diff-review.md +21 -0
- package/skills/security-differential-review/skills/differential-review/SKILL.md +220 -0
- package/skills/security-differential-review/skills/differential-review/adversarial.md +203 -0
- package/skills/security-differential-review/skills/differential-review/methodology.md +234 -0
- package/skills/security-differential-review/skills/differential-review/patterns.md +300 -0
- package/skills/security-differential-review/skills/differential-review/reporting.md +369 -0
- package/skills/security-dwarf-expert/.claude-plugin/plugin.json +10 -0
- package/skills/security-dwarf-expert/README.md +38 -0
- package/skills/security-dwarf-expert/skills/dwarf-expert/SKILL.md +93 -0
- package/skills/security-dwarf-expert/skills/dwarf-expert/reference/coding.md +31 -0
- package/skills/security-dwarf-expert/skills/dwarf-expert/reference/dwarfdump.md +50 -0
- package/skills/security-dwarf-expert/skills/dwarf-expert/reference/readelf.md +8 -0
- package/skills/security-entry-point-analyzer/.claude-plugin/plugin.json +10 -0
- package/skills/security-entry-point-analyzer/README.md +74 -0
- package/skills/security-entry-point-analyzer/commands/entry-points.md +18 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/SKILL.md +251 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/cosmwasm.md +182 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/move-aptos.md +107 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/move-sui.md +87 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/solana.md +155 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/solidity.md +135 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/ton.md +185 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/vyper.md +141 -0
- package/skills/security-firebase-apk-scanner/.claude-plugin/plugin.json +10 -0
- package/skills/security-firebase-apk-scanner/README.md +85 -0
- package/skills/security-firebase-apk-scanner/commands/scan-apk.md +18 -0
- package/skills/security-firebase-apk-scanner/scanner.sh +1408 -0
- package/skills/security-firebase-apk-scanner/skills/firebase-apk-scanner/SKILL.md +197 -0
- package/skills/security-firebase-apk-scanner/skills/firebase-apk-scanner/references/vulnerabilities.md +803 -0
- package/skills/security-fix-review/.claude-plugin/plugin.json +13 -0
- package/skills/security-fix-review/README.md +118 -0
- package/skills/security-fix-review/commands/fix-review.md +24 -0
- package/skills/security-fix-review/skills/fix-review/SKILL.md +264 -0
- package/skills/security-fix-review/skills/fix-review/references/bug-detection.md +408 -0
- package/skills/security-fix-review/skills/fix-review/references/finding-matching.md +298 -0
- package/skills/security-fix-review/skills/fix-review/references/report-parsing.md +398 -0
- package/skills/security-insecure-defaults/.claude-plugin/plugin.json +10 -0
- package/skills/security-insecure-defaults/README.md +45 -0
- package/skills/security-insecure-defaults/skills/insecure-defaults/SKILL.md +117 -0
- package/skills/security-insecure-defaults/skills/insecure-defaults/references/examples.md +409 -0
- package/skills/security-modern-python/.claude-plugin/plugin.json +10 -0
- package/skills/security-modern-python/README.md +58 -0
- package/skills/security-modern-python/hooks/hooks.json +16 -0
- package/skills/security-modern-python/hooks/intercept-legacy-python.bats +388 -0
- package/skills/security-modern-python/hooks/intercept-legacy-python.sh +109 -0
- package/skills/security-modern-python/hooks/test_helper.bash +75 -0
- package/skills/security-modern-python/skills/modern-python/SKILL.md +333 -0
- package/skills/security-modern-python/skills/modern-python/references/dependabot.md +43 -0
- package/skills/security-modern-python/skills/modern-python/references/migration-checklist.md +141 -0
- package/skills/security-modern-python/skills/modern-python/references/pep723-scripts.md +259 -0
- package/skills/security-modern-python/skills/modern-python/references/prek.md +211 -0
- package/skills/security-modern-python/skills/modern-python/references/pyproject.md +254 -0
- package/skills/security-modern-python/skills/modern-python/references/ruff-config.md +240 -0
- package/skills/security-modern-python/skills/modern-python/references/security-setup.md +255 -0
- package/skills/security-modern-python/skills/modern-python/references/testing.md +284 -0
- package/skills/security-modern-python/skills/modern-python/references/uv-commands.md +200 -0
- package/skills/security-modern-python/skills/modern-python/templates/dependabot.yml +36 -0
- package/skills/security-modern-python/skills/modern-python/templates/pre-commit-config.yaml +66 -0
- package/skills/security-property-based-testing/.claude-plugin/plugin.json +9 -0
- package/skills/security-property-based-testing/README.md +47 -0
- package/skills/security-property-based-testing/skills/property-based-testing/README.md +88 -0
- package/skills/security-property-based-testing/skills/property-based-testing/SKILL.md +109 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/design.md +191 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/generating.md +200 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/libraries.md +130 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/refactoring.md +181 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/reviewing.md +209 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/strategies.md +124 -0
- package/skills/semgrep-rule-creator/.claude-plugin/plugin.json +8 -0
- package/skills/semgrep-rule-creator/README.md +43 -0
- package/skills/semgrep-rule-creator/commands/semgrep-rule.md +26 -0
- package/skills/semgrep-rule-creator/skills/semgrep-rule-creator/SKILL.md +168 -0
- package/skills/semgrep-rule-creator/skills/semgrep-rule-creator/references/quick-reference.md +203 -0
- package/skills/semgrep-rule-creator/skills/semgrep-rule-creator/references/workflow.md +240 -0
- package/skills/semgrep-rule-variant-creator/.claude-plugin/plugin.json +9 -0
- package/skills/semgrep-rule-variant-creator/README.md +86 -0
- package/skills/semgrep-rule-variant-creator/skills/semgrep-rule-variant-creator/SKILL.md +205 -0
- package/skills/semgrep-rule-variant-creator/skills/semgrep-rule-variant-creator/references/applicability-analysis.md +250 -0
- package/skills/semgrep-rule-variant-creator/skills/semgrep-rule-variant-creator/references/language-syntax-guide.md +324 -0
- package/skills/semgrep-rule-variant-creator/skills/semgrep-rule-variant-creator/references/workflow.md +518 -0
- package/skills/session-logs/SKILL.md +115 -0
- package/skills/sharp-edges/.claude-plugin/plugin.json +10 -0
- package/skills/sharp-edges/README.md +48 -0
- package/skills/sharp-edges/skills/sharp-edges/SKILL.md +292 -0
- package/skills/sharp-edges/skills/sharp-edges/references/auth-patterns.md +252 -0
- package/skills/sharp-edges/skills/sharp-edges/references/case-studies.md +274 -0
- package/skills/sharp-edges/skills/sharp-edges/references/config-patterns.md +333 -0
- package/skills/sharp-edges/skills/sharp-edges/references/crypto-apis.md +190 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-c.md +205 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-csharp.md +285 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-go.md +270 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-java.md +263 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-javascript.md +269 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-kotlin.md +265 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-php.md +245 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-python.md +274 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-ruby.md +273 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-rust.md +272 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-swift.md +287 -0
- package/skills/sharp-edges/skills/sharp-edges/references/language-specific.md +588 -0
- package/skills/sherpa-onnx-tts/SKILL.md +103 -0
- package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
- package/skills/skill-creator/SKILL.md +370 -0
- package/skills/skill-creator/license.txt +202 -0
- package/skills/skill-creator/scripts/init_skill.py +378 -0
- package/skills/skill-creator/scripts/package_skill.py +111 -0
- package/skills/skill-creator/scripts/quick_validate.py +101 -0
- package/skills/slack/SKILL.md +144 -0
- package/skills/songsee/SKILL.md +49 -0
- package/skills/sonoscli/SKILL.md +46 -0
- package/skills/spec-to-code-compliance/.claude-plugin/plugin.json +10 -0
- package/skills/spec-to-code-compliance/README.md +67 -0
- package/skills/spec-to-code-compliance/commands/spec-compliance.md +22 -0
- package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/SKILL.md +349 -0
- package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/COMPLETENESS_CHECKLIST.md +69 -0
- package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/IR_EXAMPLES.md +417 -0
- package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/OUTPUT_REQUIREMENTS.md +105 -0
- package/skills/spotify-player/SKILL.md +64 -0
- package/skills/static-analysis/.claude-plugin/plugin.json +8 -0
- package/skills/static-analysis/README.md +59 -0
- package/skills/static-analysis/skills/codeql/SKILL.md +315 -0
- package/skills/static-analysis/skills/sarif-parsing/SKILL.md +479 -0
- package/skills/static-analysis/skills/sarif-parsing/resources/jq-queries.md +162 -0
- package/skills/static-analysis/skills/sarif-parsing/resources/sarif_helpers.py +331 -0
- package/skills/static-analysis/skills/semgrep/SKILL.md +337 -0
- package/skills/summarize/SKILL.md +87 -0
- package/skills/testing-handbook-skills/.claude-plugin/plugin.json +8 -0
- package/skills/testing-handbook-skills/README.md +241 -0
- package/skills/testing-handbook-skills/scripts/pyproject.toml +8 -0
- package/skills/testing-handbook-skills/scripts/validate-skills.py +657 -0
- package/skills/testing-handbook-skills/skills/address-sanitizer/SKILL.md +341 -0
- package/skills/testing-handbook-skills/skills/aflpp/SKILL.md +640 -0
- package/skills/testing-handbook-skills/skills/atheris/SKILL.md +515 -0
- package/skills/testing-handbook-skills/skills/cargo-fuzz/SKILL.md +454 -0
- package/skills/testing-handbook-skills/skills/codeql/SKILL.md +549 -0
- package/skills/testing-handbook-skills/skills/constant-time-testing/SKILL.md +507 -0
- package/skills/testing-handbook-skills/skills/coverage-analysis/SKILL.md +607 -0
- package/skills/testing-handbook-skills/skills/fuzzing-dictionary/SKILL.md +297 -0
- package/skills/testing-handbook-skills/skills/fuzzing-obstacles/SKILL.md +426 -0
- package/skills/testing-handbook-skills/skills/harness-writing/SKILL.md +614 -0
- package/skills/testing-handbook-skills/skills/libafl/SKILL.md +625 -0
- package/skills/testing-handbook-skills/skills/libfuzzer/SKILL.md +795 -0
- package/skills/testing-handbook-skills/skills/ossfuzz/SKILL.md +426 -0
- package/skills/testing-handbook-skills/skills/ruzzy/SKILL.md +443 -0
- package/skills/testing-handbook-skills/skills/semgrep/SKILL.md +601 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/SKILL.md +372 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/agent-prompt.md +280 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/discovery.md +452 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/domain-skill.md +504 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/fuzzer-skill.md +454 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/technique-skill.md +527 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/tool-skill.md +366 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/testing.md +482 -0
- package/skills/testing-handbook-skills/skills/wycheproof/SKILL.md +533 -0
- package/skills/things-mac/SKILL.md +86 -0
- package/skills/tmux/SKILL.md +135 -0
- package/skills/tmux/scripts/find-sessions.sh +112 -0
- package/skills/tmux/scripts/wait-for-text.sh +83 -0
- package/skills/trello/SKILL.md +95 -0
- package/skills/variant-analysis/.claude-plugin/plugin.json +8 -0
- package/skills/variant-analysis/README.md +41 -0
- package/skills/variant-analysis/commands/variants.md +23 -0
- package/skills/variant-analysis/skills/variant-analysis/METHODOLOGY.md +327 -0
- package/skills/variant-analysis/skills/variant-analysis/SKILL.md +142 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/codeql/cpp.ql +119 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/codeql/go.ql +69 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/codeql/java.ql +71 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/codeql/javascript.ql +63 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/codeql/python.ql +80 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/cpp.yaml +98 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/go.yaml +63 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/java.yaml +61 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/javascript.yaml +60 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/python.yaml +72 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/variant-report-template.md +75 -0
- package/skills/video-frames/SKILL.md +46 -0
- package/skills/video-frames/scripts/frame.sh +81 -0
- package/skills/voice-call/SKILL.md +45 -0
- package/skills/wacli/SKILL.md +72 -0
- package/skills/weather/SKILL.md +54 -0
- package/skills/yara-authoring/.claude-plugin/plugin.json +9 -0
- package/skills/yara-authoring/README.md +131 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/SKILL.md +645 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/examples/MAL_Mac_ProtonRAT_Jan25.yar +99 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/examples/MAL_NPM_SupplyChain_Jan25.yar +170 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/examples/MAL_Win_Remcos_Jan25.yar +103 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/examples/SUSP_CRX_SuspiciousPermissions.yar +134 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/examples/SUSP_JS_Obfuscation_Jan25.yar +185 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/references/crx-module.md +214 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/references/dex-module.md +383 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/references/performance.md +333 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/references/strings.md +433 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/references/style-guide.md +257 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/references/testing.md +399 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/scripts/atom_analyzer.py +526 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/scripts/pyproject.toml +25 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/scripts/yara_lint.py +631 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/workflows/rule-development.md +493 -0
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
# Bug Detection Patterns
|
|
2
|
+
|
|
3
|
+
Anti-patterns to detect when analyzing commits for bug introduction.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
When reviewing fix commits, look for changes that may introduce new bugs or security vulnerabilities. These patterns represent common ways that "fixes" can make things worse.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Security Anti-Patterns
|
|
12
|
+
|
|
13
|
+
### Access Control Weakening
|
|
14
|
+
|
|
15
|
+
**Pattern:** Removal or weakening of access restrictions
|
|
16
|
+
|
|
17
|
+
**Detection:**
|
|
18
|
+
```bash
|
|
19
|
+
# Search for removed access modifiers
|
|
20
|
+
git diff <source>..<target> | grep "^-" | grep -E "(onlyOwner|onlyAdmin|require\(msg\.sender|auth|access)"
|
|
21
|
+
|
|
22
|
+
# Search for visibility changes
|
|
23
|
+
git diff <source>..<target> | grep -E "^[-+].*(public|external|internal|private)"
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**Examples:**
|
|
27
|
+
```diff
|
|
28
|
+
- function withdraw() external onlyOwner {
|
|
29
|
+
+ function withdraw() external {
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
```diff
|
|
33
|
+
- require(msg.sender == owner, "Not owner");
|
|
34
|
+
+ // Removed for gas optimization
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
**Risk:** Privilege escalation, unauthorized access
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
### Validation Removal
|
|
42
|
+
|
|
43
|
+
**Pattern:** Removal of input validation or precondition checks
|
|
44
|
+
|
|
45
|
+
**Detection:**
|
|
46
|
+
```bash
|
|
47
|
+
# Search for removed require/assert statements
|
|
48
|
+
git diff <source>..<target> | grep "^-" | grep -E "(require|assert|revert|throw)"
|
|
49
|
+
|
|
50
|
+
# Search for removed if-checks
|
|
51
|
+
git diff <source>..<target> | grep "^-" | grep -E "if\s*\("
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**Examples:**
|
|
55
|
+
```diff
|
|
56
|
+
- require(amount > 0, "Zero amount");
|
|
57
|
+
- require(amount <= balance, "Insufficient balance");
|
|
58
|
+
balance -= amount;
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
```diff
|
|
62
|
+
- if (input == null) throw new IllegalArgumentException();
|
|
63
|
+
process(input);
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**Risk:** Input bypass, unexpected states, crashes
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
### Error Handling Reduction
|
|
71
|
+
|
|
72
|
+
**Pattern:** Removal or weakening of error handling
|
|
73
|
+
|
|
74
|
+
**Detection:**
|
|
75
|
+
```bash
|
|
76
|
+
# Search for removed try/catch
|
|
77
|
+
git diff <source>..<target> | grep "^-" | grep -E "(try|catch|except|finally)"
|
|
78
|
+
|
|
79
|
+
# Search for removed error checks
|
|
80
|
+
git diff <source>..<target> | grep "^-" | grep -E "(error|Error|err|Err)"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**Examples:**
|
|
84
|
+
```diff
|
|
85
|
+
- try {
|
|
86
|
+
result = riskyOperation();
|
|
87
|
+
- } catch (Exception e) {
|
|
88
|
+
- logger.error("Operation failed", e);
|
|
89
|
+
- return fallbackValue;
|
|
90
|
+
- }
|
|
91
|
+
+ result = riskyOperation();
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**Risk:** Silent failures, unhandled exceptions, crashes
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
### External Call Reordering
|
|
99
|
+
|
|
100
|
+
**Pattern:** State updates moved after external calls (reentrancy risk)
|
|
101
|
+
|
|
102
|
+
**Detection:**
|
|
103
|
+
```bash
|
|
104
|
+
# Search for external calls followed by state changes
|
|
105
|
+
git diff <source>..<target> | grep -A10 "\.call\|\.transfer\|\.send"
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**Examples:**
|
|
109
|
+
```diff
|
|
110
|
+
- balance[msg.sender] = 0;
|
|
111
|
+
- (bool success,) = msg.sender.call{value: amount}("");
|
|
112
|
+
+ (bool success,) = msg.sender.call{value: amount}("");
|
|
113
|
+
+ balance[msg.sender] = 0; // State change after external call!
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
**Risk:** Reentrancy attacks
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
### Integer Operation Changes
|
|
121
|
+
|
|
122
|
+
**Pattern:** Removal of overflow/underflow protection
|
|
123
|
+
|
|
124
|
+
**Detection:**
|
|
125
|
+
```bash
|
|
126
|
+
# Search for SafeMath removal
|
|
127
|
+
git diff <source>..<target> | grep "^-" | grep -E "(SafeMath|safeAdd|safeSub|safeMul|safeDiv)"
|
|
128
|
+
|
|
129
|
+
# Search for unchecked blocks
|
|
130
|
+
git diff <source>..<target> | grep -E "unchecked\s*\{"
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**Examples:**
|
|
134
|
+
```diff
|
|
135
|
+
- using SafeMath for uint256;
|
|
136
|
+
- balance = balance.sub(amount);
|
|
137
|
+
+ balance = balance - amount; // No overflow protection
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
```diff
|
|
141
|
+
- total = total + amount; // Solidity 0.8 has built-in checks
|
|
142
|
+
+ unchecked {
|
|
143
|
+
+ total = total + amount; // Disabled overflow check
|
|
144
|
+
+ }
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
**Risk:** Integer overflow/underflow
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
### Cryptographic Weakening
|
|
152
|
+
|
|
153
|
+
**Pattern:** Changes to cryptographic operations that reduce security
|
|
154
|
+
|
|
155
|
+
**Detection:**
|
|
156
|
+
```bash
|
|
157
|
+
# Search for crypto-related changes
|
|
158
|
+
git diff <source>..<target> | grep -E "(hash|Hash|encrypt|decrypt|sign|verify|random|nonce|salt|key|Key)"
|
|
159
|
+
|
|
160
|
+
# Search for algorithm names
|
|
161
|
+
git diff <source>..<target> | grep -E "(SHA|MD5|AES|RSA|ECDSA|keccak)"
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
**Examples:**
|
|
165
|
+
```diff
|
|
166
|
+
- bytes32 hash = keccak256(abi.encodePacked(nonce, data));
|
|
167
|
+
+ bytes32 hash = keccak256(abi.encodePacked(data)); // Removed nonce!
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
```diff
|
|
171
|
+
- return crypto.createHash('sha256').update(data).digest();
|
|
172
|
+
+ return crypto.createHash('md5').update(data).digest(); // Weak hash!
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**Risk:** Hash collisions, signature bypass, predictability
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
### Memory Safety Issues
|
|
180
|
+
|
|
181
|
+
**Pattern:** Changes that introduce memory safety bugs
|
|
182
|
+
|
|
183
|
+
**Detection:**
|
|
184
|
+
```bash
|
|
185
|
+
# Search for buffer/array operations
|
|
186
|
+
git diff <source>..<target> | grep -E "(malloc|free|memcpy|strcpy|buffer|array\[)"
|
|
187
|
+
|
|
188
|
+
# Search for bounds checks
|
|
189
|
+
git diff <source>..<target> | grep "^-" | grep -E "(length|size|bounds|index)"
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
**Examples:**
|
|
193
|
+
```diff
|
|
194
|
+
- if (index < array.length) {
|
|
195
|
+
return array[index];
|
|
196
|
+
- }
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
```diff
|
|
200
|
+
- strncpy(dest, src, sizeof(dest) - 1);
|
|
201
|
+
+ strcpy(dest, src); // No bounds check!
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
**Risk:** Buffer overflow, use-after-free, out-of-bounds access
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
### Concurrency Issues
|
|
209
|
+
|
|
210
|
+
**Pattern:** Removal of synchronization or race condition introduction
|
|
211
|
+
|
|
212
|
+
**Detection:**
|
|
213
|
+
```bash
|
|
214
|
+
# Search for lock/synchronization changes
|
|
215
|
+
git diff <source>..<target> | grep -E "(lock|Lock|mutex|synchronized|atomic|volatile)"
|
|
216
|
+
|
|
217
|
+
# Search for removed synchronization
|
|
218
|
+
git diff <source>..<target> | grep "^-" | grep -E "(lock|synchronized)"
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
**Examples:**
|
|
222
|
+
```diff
|
|
223
|
+
- synchronized (this) {
|
|
224
|
+
counter++;
|
|
225
|
+
- }
|
|
226
|
+
+ counter++; // No synchronization!
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**Risk:** Race conditions, data corruption
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## General Bug Patterns
|
|
234
|
+
|
|
235
|
+
### Logic Inversion
|
|
236
|
+
|
|
237
|
+
**Pattern:** Boolean logic changed incorrectly
|
|
238
|
+
|
|
239
|
+
**Detection:**
|
|
240
|
+
```bash
|
|
241
|
+
# Search for condition changes
|
|
242
|
+
git diff <source>..<target> | grep -E "^[-+].*if\s*\(|^[-+].*\?|^[-+].*&&|^[-+].*\|\|"
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
**Examples:**
|
|
246
|
+
```diff
|
|
247
|
+
- if (isValid) {
|
|
248
|
+
+ if (!isValid) {
|
|
249
|
+
process();
|
|
250
|
+
}
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
```diff
|
|
254
|
+
- return a && b;
|
|
255
|
+
+ return a || b;
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
### Off-by-One Errors
|
|
261
|
+
|
|
262
|
+
**Pattern:** Boundary conditions changed incorrectly
|
|
263
|
+
|
|
264
|
+
**Detection:**
|
|
265
|
+
```bash
|
|
266
|
+
# Search for comparison operators
|
|
267
|
+
git diff <source>..<target> | grep -E "^[-+].*(<=|>=|<|>|==)"
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
**Examples:**
|
|
271
|
+
```diff
|
|
272
|
+
- for (i = 0; i < length; i++)
|
|
273
|
+
+ for (i = 0; i <= length; i++) // Off-by-one!
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
```diff
|
|
277
|
+
- if (index < array.length)
|
|
278
|
+
+ if (index <= array.length) // Off-by-one!
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
---
|
|
282
|
+
|
|
283
|
+
### Null/Undefined Handling
|
|
284
|
+
|
|
285
|
+
**Pattern:** Removal of null checks
|
|
286
|
+
|
|
287
|
+
**Detection:**
|
|
288
|
+
```bash
|
|
289
|
+
# Search for null checks
|
|
290
|
+
git diff <source>..<target> | grep "^-" | grep -E "(null|NULL|nil|None|undefined)"
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
**Examples:**
|
|
294
|
+
```diff
|
|
295
|
+
- if (obj == null) return defaultValue;
|
|
296
|
+
return obj.getValue(); // Potential NPE
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
### Resource Leaks
|
|
302
|
+
|
|
303
|
+
**Pattern:** Removal of cleanup code
|
|
304
|
+
|
|
305
|
+
**Detection:**
|
|
306
|
+
```bash
|
|
307
|
+
# Search for resource management
|
|
308
|
+
git diff <source>..<target> | grep "^-" | grep -E "(close|Close|dispose|Dispose|free|Free|release|Release)"
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
**Examples:**
|
|
312
|
+
```diff
|
|
313
|
+
file = open(path)
|
|
314
|
+
- try:
|
|
315
|
+
data = file.read()
|
|
316
|
+
- finally:
|
|
317
|
+
- file.close()
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
## Analysis Workflow
|
|
323
|
+
|
|
324
|
+
### Step 1: Get the Diff
|
|
325
|
+
|
|
326
|
+
```bash
|
|
327
|
+
git diff <source>..<target> > changes.diff
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
### Step 2: Scan for Anti-Patterns
|
|
331
|
+
|
|
332
|
+
Run detection commands for each pattern category:
|
|
333
|
+
|
|
334
|
+
```bash
|
|
335
|
+
# Security patterns
|
|
336
|
+
grep "^-" changes.diff | grep -E "(require|assert|onlyOwner|auth)"
|
|
337
|
+
grep "^-" changes.diff | grep -E "(try|catch|except)"
|
|
338
|
+
|
|
339
|
+
# Logic patterns
|
|
340
|
+
grep -E "^[-+].*if\s*\(" changes.diff
|
|
341
|
+
grep -E "^[-+].*(<=|>=|<|>)" changes.diff
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
### Step 3: Manual Review
|
|
345
|
+
|
|
346
|
+
For each detected pattern:
|
|
347
|
+
1. Read the surrounding context
|
|
348
|
+
2. Understand the intent of the change
|
|
349
|
+
3. Determine if the pattern indicates a bug
|
|
350
|
+
4. Document findings
|
|
351
|
+
|
|
352
|
+
### Step 4: Rate Severity
|
|
353
|
+
|
|
354
|
+
| Severity | Criteria |
|
|
355
|
+
|----------|----------|
|
|
356
|
+
| Critical | Exploitable security vulnerability |
|
|
357
|
+
| High | Security regression or data loss risk |
|
|
358
|
+
| Medium | Logic error with limited impact |
|
|
359
|
+
| Low | Code smell, minor issue |
|
|
360
|
+
| Info | Observation, no immediate risk |
|
|
361
|
+
|
|
362
|
+
---
|
|
363
|
+
|
|
364
|
+
## False Positive Handling
|
|
365
|
+
|
|
366
|
+
Not every detected pattern is a bug. Consider:
|
|
367
|
+
|
|
368
|
+
**Intentional changes:**
|
|
369
|
+
- Removing redundant validation
|
|
370
|
+
- Simplifying error handling
|
|
371
|
+
- Refactoring for clarity
|
|
372
|
+
|
|
373
|
+
**Context matters:**
|
|
374
|
+
- Is the removed check truly necessary?
|
|
375
|
+
- Is there equivalent protection elsewhere?
|
|
376
|
+
- Does the surrounding code handle the case?
|
|
377
|
+
|
|
378
|
+
**Verify with:**
|
|
379
|
+
1. Read the full commit context
|
|
380
|
+
2. Check commit message for explanation
|
|
381
|
+
3. Look for replacement logic
|
|
382
|
+
4. Consider the broader codebase
|
|
383
|
+
|
|
384
|
+
---
|
|
385
|
+
|
|
386
|
+
## Reporting Format
|
|
387
|
+
|
|
388
|
+
For each detected concern:
|
|
389
|
+
|
|
390
|
+
```markdown
|
|
391
|
+
### Bug Introduction Concern
|
|
392
|
+
|
|
393
|
+
**Pattern:** [Pattern name]
|
|
394
|
+
**Commit:** [hash]
|
|
395
|
+
**File:** [path:line]
|
|
396
|
+
**Severity:** [Critical/High/Medium/Low/Info]
|
|
397
|
+
|
|
398
|
+
**Change:**
|
|
399
|
+
```diff
|
|
400
|
+
[relevant diff snippet]
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
**Analysis:**
|
|
404
|
+
[Explanation of why this is concerning]
|
|
405
|
+
|
|
406
|
+
**Recommendation:**
|
|
407
|
+
[Suggested action]
|
|
408
|
+
```
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
# Finding Matching Strategies
|
|
2
|
+
|
|
3
|
+
Techniques for matching security findings to code commits.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Matching findings to commits requires multiple approaches since:
|
|
8
|
+
- Commit messages may not reference finding IDs
|
|
9
|
+
- Findings may span multiple files
|
|
10
|
+
- Multiple commits may partially address a single finding
|
|
11
|
+
- A single commit may address multiple findings
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Matching Approaches
|
|
16
|
+
|
|
17
|
+
### 1. Direct ID Reference
|
|
18
|
+
|
|
19
|
+
Search commit messages for finding IDs:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
# Search for TOB-style IDs in commit messages
|
|
23
|
+
git log <source>..<target> --grep="TOB-" --oneline
|
|
24
|
+
|
|
25
|
+
# Search for generic finding references
|
|
26
|
+
git log <source>..<target> --grep="[Ff]inding" --oneline
|
|
27
|
+
git log <source>..<target> --grep="[Ff]ix" --oneline
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**Confidence:** High when found, but many commits lack explicit references.
|
|
31
|
+
|
|
32
|
+
### 2. File Path Matching
|
|
33
|
+
|
|
34
|
+
Match findings by affected files:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
# Get files changed in commit range
|
|
38
|
+
git diff <source>..<target> --name-only
|
|
39
|
+
|
|
40
|
+
# Compare with files mentioned in finding
|
|
41
|
+
# Finding: "The vulnerability exists in contracts/Vault.sol"
|
|
42
|
+
# Check: Does any commit modify contracts/Vault.sol?
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
**Workflow:**
|
|
46
|
+
1. Extract file paths from finding description
|
|
47
|
+
2. List changed files in commit range
|
|
48
|
+
3. Identify commits touching those files
|
|
49
|
+
4. Analyze those commits in detail
|
|
50
|
+
|
|
51
|
+
### 3. Function/Symbol Matching
|
|
52
|
+
|
|
53
|
+
Match by function or variable names:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# Search for function name in diffs
|
|
57
|
+
git log <source>..<target> -p | grep -A5 -B5 "function withdraw"
|
|
58
|
+
|
|
59
|
+
# Search for specific patterns
|
|
60
|
+
git log <source>..<target> -S "functionName" --oneline
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**Extract symbols from findings:**
|
|
64
|
+
- Function names: `withdraw()`, `transfer()`, `validateInput()`
|
|
65
|
+
- Variable names: `balance`, `owner`, `allowance`
|
|
66
|
+
- Contract/class names: `Vault`, `TokenManager`
|
|
67
|
+
|
|
68
|
+
### 4. Code Pattern Matching
|
|
69
|
+
|
|
70
|
+
Match by vulnerability pattern:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
# Finding mentions "missing require statement"
|
|
74
|
+
# Search for added require statements
|
|
75
|
+
git diff <source>..<target> | grep "^+" | grep "require"
|
|
76
|
+
|
|
77
|
+
# Finding mentions "reentrancy"
|
|
78
|
+
# Search for state changes and external calls
|
|
79
|
+
git diff <source>..<target> | grep -E "(\.call|\.transfer|\.send)"
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Matching Workflow
|
|
85
|
+
|
|
86
|
+
### Step 1: Extract Finding Metadata
|
|
87
|
+
|
|
88
|
+
For each finding, extract:
|
|
89
|
+
|
|
90
|
+
| Field | Example |
|
|
91
|
+
|-------|---------|
|
|
92
|
+
| ID | TOB-CLIENT-1 |
|
|
93
|
+
| Title | Missing access control in withdraw() |
|
|
94
|
+
| Severity | High |
|
|
95
|
+
| Files | contracts/Vault.sol:L45-L67 |
|
|
96
|
+
| Functions | withdraw(), _validateCaller() |
|
|
97
|
+
| Pattern | Access control |
|
|
98
|
+
| Recommendation | Add onlyOwner modifier |
|
|
99
|
+
|
|
100
|
+
### Step 2: Search for Direct Matches
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
# Check for ID in commit messages
|
|
104
|
+
git log <source>..<target> --grep="TOB-CLIENT-1" --oneline
|
|
105
|
+
|
|
106
|
+
# Check for title keywords
|
|
107
|
+
git log <source>..<target> --grep="access control" --oneline
|
|
108
|
+
git log <source>..<target> --grep="withdraw" --oneline
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Step 3: Identify Relevant Commits
|
|
112
|
+
|
|
113
|
+
For each file mentioned in the finding:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
# Get commits that modified the file
|
|
117
|
+
git log <source>..<target> --oneline -- contracts/Vault.sol
|
|
118
|
+
|
|
119
|
+
# Get the diff for that file
|
|
120
|
+
git diff <source>..<target> -- contracts/Vault.sol
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Step 4: Analyze Fix Quality
|
|
124
|
+
|
|
125
|
+
For each potentially matching commit:
|
|
126
|
+
|
|
127
|
+
1. **Read the full diff** - Understand what changed
|
|
128
|
+
2. **Compare with recommendation** - Does the fix follow the suggested approach?
|
|
129
|
+
3. **Check completeness** - Are all instances of the vulnerability fixed?
|
|
130
|
+
4. **Verify correctness** - Is the fix itself correct (no logic errors)?
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Status Assignment Criteria
|
|
135
|
+
|
|
136
|
+
### FIXED
|
|
137
|
+
|
|
138
|
+
Assign when:
|
|
139
|
+
- Code change directly addresses the root cause
|
|
140
|
+
- Fix follows the report's recommendation (or equivalent)
|
|
141
|
+
- All instances of the vulnerability are addressed
|
|
142
|
+
- No obvious issues with the fix itself
|
|
143
|
+
|
|
144
|
+
**Evidence required:**
|
|
145
|
+
- Commit hash
|
|
146
|
+
- File and line numbers
|
|
147
|
+
- Brief explanation of how fix addresses the finding
|
|
148
|
+
|
|
149
|
+
### PARTIALLY_FIXED
|
|
150
|
+
|
|
151
|
+
Assign when:
|
|
152
|
+
- Some instances fixed, others remain
|
|
153
|
+
- Fix addresses symptoms but not root cause
|
|
154
|
+
- Fix is incomplete (missing edge cases)
|
|
155
|
+
- Fix works but doesn't follow best practice
|
|
156
|
+
|
|
157
|
+
**Evidence required:**
|
|
158
|
+
- What was fixed (with commit hash)
|
|
159
|
+
- What remains unfixed
|
|
160
|
+
- Specific gaps in the fix
|
|
161
|
+
|
|
162
|
+
### NOT_ADDRESSED
|
|
163
|
+
|
|
164
|
+
Assign when:
|
|
165
|
+
- No commits modify relevant files
|
|
166
|
+
- Changes to relevant files don't address the finding
|
|
167
|
+
- Finding relates to architecture/design not changed
|
|
168
|
+
|
|
169
|
+
**Evidence required:**
|
|
170
|
+
- Confirmation that relevant files were checked
|
|
171
|
+
- Brief explanation of why no fix was found
|
|
172
|
+
|
|
173
|
+
### CANNOT_DETERMINE
|
|
174
|
+
|
|
175
|
+
Assign when:
|
|
176
|
+
- Finding is ambiguous
|
|
177
|
+
- Code changes are unclear
|
|
178
|
+
- Requires runtime analysis to verify
|
|
179
|
+
- Need additional context from developers
|
|
180
|
+
|
|
181
|
+
**Evidence required:**
|
|
182
|
+
- What was analyzed
|
|
183
|
+
- Specific questions that need answers
|
|
184
|
+
- Suggested next steps
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## Complex Scenarios
|
|
189
|
+
|
|
190
|
+
### Multiple Commits for One Finding
|
|
191
|
+
|
|
192
|
+
When several commits contribute to fixing a single finding:
|
|
193
|
+
|
|
194
|
+
1. List all relevant commits
|
|
195
|
+
2. Analyze each contribution
|
|
196
|
+
3. Determine if combined effect is FIXED or PARTIALLY_FIXED
|
|
197
|
+
4. Document each commit's contribution
|
|
198
|
+
|
|
199
|
+
**Example:**
|
|
200
|
+
```
|
|
201
|
+
TOB-XXX-1: Access control vulnerability in withdraw()
|
|
202
|
+
|
|
203
|
+
Commits:
|
|
204
|
+
- abc123: Added onlyOwner modifier
|
|
205
|
+
- def456: Added balance check
|
|
206
|
+
- ghi789: Added event emission
|
|
207
|
+
|
|
208
|
+
Combined: FIXED
|
|
209
|
+
- abc123 addresses the core access control issue
|
|
210
|
+
- def456 adds defense in depth
|
|
211
|
+
- ghi789 improves auditability
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### One Commit for Multiple Findings
|
|
215
|
+
|
|
216
|
+
When a single commit addresses multiple findings:
|
|
217
|
+
|
|
218
|
+
1. Analyze the commit once
|
|
219
|
+
2. Map specific changes to each finding
|
|
220
|
+
3. Assign status to each finding individually
|
|
221
|
+
4. Reference the same commit in multiple findings
|
|
222
|
+
|
|
223
|
+
### Interacting Findings
|
|
224
|
+
|
|
225
|
+
When findings are related and fixes may interact:
|
|
226
|
+
|
|
227
|
+
1. Identify the relationship
|
|
228
|
+
2. Analyze fixes together
|
|
229
|
+
3. Check for conflicts or regressions
|
|
230
|
+
4. Document the interaction
|
|
231
|
+
|
|
232
|
+
**Example:**
|
|
233
|
+
```
|
|
234
|
+
TOB-XXX-1: Reentrancy in withdraw()
|
|
235
|
+
TOB-XXX-2: Missing balance validation
|
|
236
|
+
|
|
237
|
+
These interact: A reentrancy fix might break the balance check
|
|
238
|
+
Analysis: Commit abc123 uses checks-effects-interactions pattern
|
|
239
|
+
Result: Both findings addressed without conflict
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## Handling Ambiguity
|
|
245
|
+
|
|
246
|
+
### When Finding Description is Vague
|
|
247
|
+
|
|
248
|
+
1. Search for related patterns in the codebase
|
|
249
|
+
2. Look for commit messages mentioning the issue
|
|
250
|
+
3. Check if any changes seem security-related
|
|
251
|
+
4. Mark as CANNOT_DETERMINE if unclear
|
|
252
|
+
|
|
253
|
+
### When Multiple Interpretations Exist
|
|
254
|
+
|
|
255
|
+
1. Document both interpretations
|
|
256
|
+
2. Analyze against both
|
|
257
|
+
3. Note which interpretation the fix addresses
|
|
258
|
+
4. Flag for developer clarification if needed
|
|
259
|
+
|
|
260
|
+
### When Fix Differs from Recommendation
|
|
261
|
+
|
|
262
|
+
The fix may be valid even if different from the recommendation:
|
|
263
|
+
|
|
264
|
+
1. Understand the recommended approach
|
|
265
|
+
2. Analyze the actual fix
|
|
266
|
+
3. Determine if it addresses the root cause
|
|
267
|
+
4. Mark as FIXED if effective, note the difference
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
## Git Commands Reference
|
|
272
|
+
|
|
273
|
+
```bash
|
|
274
|
+
# List commits in range
|
|
275
|
+
git log <source>..<target> --oneline
|
|
276
|
+
|
|
277
|
+
# Search commit messages
|
|
278
|
+
git log <source>..<target> --grep="pattern" --oneline
|
|
279
|
+
|
|
280
|
+
# Get files changed
|
|
281
|
+
git diff <source>..<target> --name-only
|
|
282
|
+
|
|
283
|
+
# Get full diff
|
|
284
|
+
git diff <source>..<target>
|
|
285
|
+
|
|
286
|
+
# Get diff for specific file
|
|
287
|
+
git diff <source>..<target> -- path/to/file
|
|
288
|
+
|
|
289
|
+
# Search for code changes
|
|
290
|
+
git log <source>..<target> -S "code_pattern" --oneline
|
|
291
|
+
|
|
292
|
+
# Get commit details
|
|
293
|
+
git show <commit> --stat
|
|
294
|
+
git show <commit> -p
|
|
295
|
+
|
|
296
|
+
# Blame specific lines
|
|
297
|
+
git blame <commit> -- path/to/file
|
|
298
|
+
```
|