@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,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name [VARIANT_NAME]
|
|
3
|
+
* @description Find variants of [ORIGINAL_BUG_ID]
|
|
4
|
+
* @kind path-problem
|
|
5
|
+
* @problem.severity error
|
|
6
|
+
* @tags security variant-analysis
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import java
|
|
10
|
+
import semmle.code.java.dataflow.TaintTracking
|
|
11
|
+
import semmle.code.java.dataflow.FlowSources
|
|
12
|
+
import DataFlow::PathGraph
|
|
13
|
+
|
|
14
|
+
module VariantConfig implements DataFlow::ConfigSig {
|
|
15
|
+
predicate isSource(DataFlow::Node source) {
|
|
16
|
+
// HttpServletRequest.getParameter/getHeader
|
|
17
|
+
exists(MethodAccess ma |
|
|
18
|
+
ma.getMethod().getName() in ["getParameter", "getHeader", "getCookies", "getQueryString"] and
|
|
19
|
+
ma.getMethod().getDeclaringType().getASupertype*().hasQualifiedName("javax.servlet", "ServletRequest") and
|
|
20
|
+
source.asExpr() = ma
|
|
21
|
+
)
|
|
22
|
+
or
|
|
23
|
+
// Spring @RequestParam, @PathVariable
|
|
24
|
+
exists(Parameter p |
|
|
25
|
+
p.getAnAnnotation().getType().hasQualifiedName("org.springframework.web.bind.annotation", ["RequestParam", "PathVariable", "RequestBody"]) and
|
|
26
|
+
source.asParameter() = p
|
|
27
|
+
)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
predicate isSink(DataFlow::Node sink) {
|
|
31
|
+
// Command injection
|
|
32
|
+
exists(MethodAccess ma |
|
|
33
|
+
ma.getMethod().hasQualifiedName("java.lang", "Runtime", "exec") and
|
|
34
|
+
sink.asExpr() = ma.getArgument(0)
|
|
35
|
+
)
|
|
36
|
+
or
|
|
37
|
+
exists(ClassInstanceExpr cie |
|
|
38
|
+
cie.getConstructedType().hasQualifiedName("java.lang", "ProcessBuilder") and
|
|
39
|
+
sink.asExpr() = cie.getArgument(0)
|
|
40
|
+
)
|
|
41
|
+
or
|
|
42
|
+
// SQL injection
|
|
43
|
+
exists(MethodAccess ma |
|
|
44
|
+
ma.getMethod().getName() in ["executeQuery", "executeUpdate", "execute"] and
|
|
45
|
+
ma.getMethod().getDeclaringType().getASupertype*().hasQualifiedName("java.sql", "Statement") and
|
|
46
|
+
sink.asExpr() = ma.getArgument(0)
|
|
47
|
+
)
|
|
48
|
+
or
|
|
49
|
+
// Path traversal
|
|
50
|
+
exists(ClassInstanceExpr cie |
|
|
51
|
+
cie.getConstructedType().hasQualifiedName("java.io", "File") and
|
|
52
|
+
sink.asExpr() = cie.getArgument(0)
|
|
53
|
+
)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
predicate isBarrier(DataFlow::Node node) {
|
|
57
|
+
exists(MethodAccess ma |
|
|
58
|
+
ma.getMethod().getName() in ["escape", "sanitize", "parseInt", "valueOf"] and
|
|
59
|
+
node.asExpr() = ma
|
|
60
|
+
)
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
module VariantFlow = TaintTracking::Global<VariantConfig>;
|
|
65
|
+
import VariantFlow::PathGraph
|
|
66
|
+
|
|
67
|
+
from VariantFlow::PathNode source, VariantFlow::PathNode sink
|
|
68
|
+
where VariantFlow::flowPath(source, sink)
|
|
69
|
+
select sink.getNode(), source, sink,
|
|
70
|
+
"Tainted data from $@ flows to dangerous sink.",
|
|
71
|
+
source.getNode(), "user input"
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name [VARIANT_NAME]
|
|
3
|
+
* @description Find variants of [ORIGINAL_BUG_ID]
|
|
4
|
+
* @kind path-problem
|
|
5
|
+
* @problem.severity error
|
|
6
|
+
* @tags security variant-analysis
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import javascript
|
|
10
|
+
import semmle.javascript.security.dataflow.CommandInjectionQuery
|
|
11
|
+
import DataFlow::PathGraph
|
|
12
|
+
|
|
13
|
+
module VariantConfig implements DataFlow::ConfigSig {
|
|
14
|
+
predicate isSource(DataFlow::Node source) {
|
|
15
|
+
// Express request params
|
|
16
|
+
exists(PropAccess pa |
|
|
17
|
+
pa.getPropertyName() in ["query", "body", "params", "cookies"] and
|
|
18
|
+
source.asExpr() = pa
|
|
19
|
+
)
|
|
20
|
+
or
|
|
21
|
+
// URL/location
|
|
22
|
+
exists(PropAccess pa |
|
|
23
|
+
pa.getBase().toString() in ["window", "document", "location"] and
|
|
24
|
+
source.asExpr() = pa
|
|
25
|
+
)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
predicate isSink(DataFlow::Node sink) {
|
|
29
|
+
// Command injection
|
|
30
|
+
exists(CallExpr c |
|
|
31
|
+
c.getCalleeName() in ["exec", "execSync", "spawn", "spawnSync"] and
|
|
32
|
+
sink.asExpr() = c.getArgument(0)
|
|
33
|
+
)
|
|
34
|
+
or
|
|
35
|
+
// eval/Function
|
|
36
|
+
exists(CallExpr c |
|
|
37
|
+
c.getCalleeName() in ["eval", "Function"] and
|
|
38
|
+
sink.asExpr() = c.getArgument(0)
|
|
39
|
+
)
|
|
40
|
+
or
|
|
41
|
+
// SQL queries
|
|
42
|
+
exists(CallExpr c |
|
|
43
|
+
c.getCalleeName() in ["query", "raw", "execute"] and
|
|
44
|
+
sink.asExpr() = c.getArgument(0)
|
|
45
|
+
)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
predicate isBarrier(DataFlow::Node node) {
|
|
49
|
+
exists(CallExpr c |
|
|
50
|
+
c.getCalleeName() in ["escape", "sanitize", "parseInt", "encodeURIComponent"] and
|
|
51
|
+
node.asExpr() = c
|
|
52
|
+
)
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
module VariantFlow = TaintTracking::Global<VariantConfig>;
|
|
57
|
+
import VariantFlow::PathGraph
|
|
58
|
+
|
|
59
|
+
from VariantFlow::PathNode source, VariantFlow::PathNode sink
|
|
60
|
+
where VariantFlow::flowPath(source, sink)
|
|
61
|
+
select sink.getNode(), source, sink,
|
|
62
|
+
"Tainted data from $@ flows to dangerous sink.",
|
|
63
|
+
source.getNode(), "user input"
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name [VARIANT_NAME]
|
|
3
|
+
* @description Find variants of [ORIGINAL_BUG_ID]
|
|
4
|
+
* @kind path-problem
|
|
5
|
+
* @problem.severity error
|
|
6
|
+
* @precision high
|
|
7
|
+
* @tags security
|
|
8
|
+
* variant-analysis
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import python
|
|
12
|
+
import semmle.python.dataflow.new.DataFlow
|
|
13
|
+
import semmle.python.dataflow.new.TaintTracking
|
|
14
|
+
import semmle.python.ApiGraphs
|
|
15
|
+
|
|
16
|
+
module VariantConfig implements DataFlow::ConfigSig {
|
|
17
|
+
// Sources: where untrusted data originates
|
|
18
|
+
predicate isSource(DataFlow::Node source) {
|
|
19
|
+
// Flask request parameters
|
|
20
|
+
source = API::moduleImport("flask").getMember("request")
|
|
21
|
+
.getMember(["args", "form", "json", "data"])
|
|
22
|
+
.getAUse()
|
|
23
|
+
or
|
|
24
|
+
// Environment variables
|
|
25
|
+
exists(Call c |
|
|
26
|
+
c.getFunc().(Attribute).getObject().(Name).getId() = "os" and
|
|
27
|
+
c.getFunc().(Attribute).getName() in ["getenv", "environ"] and
|
|
28
|
+
source.asExpr() = c
|
|
29
|
+
)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Sinks: where tainted data becomes dangerous
|
|
33
|
+
predicate isSink(DataFlow::Node sink) {
|
|
34
|
+
// os.system()
|
|
35
|
+
exists(Call c |
|
|
36
|
+
c.getFunc().(Attribute).getObject().(Name).getId() = "os" and
|
|
37
|
+
c.getFunc().(Attribute).getName() = "system" and
|
|
38
|
+
sink.asExpr() = c.getArg(0)
|
|
39
|
+
)
|
|
40
|
+
or
|
|
41
|
+
// subprocess with shell=True
|
|
42
|
+
exists(Call c |
|
|
43
|
+
c.getFunc().(Attribute).getName() in ["call", "run", "Popen"] and
|
|
44
|
+
c.getArgByName("shell").(NameConstant).getValue() = true and
|
|
45
|
+
sink.asExpr() = c.getArg(0)
|
|
46
|
+
)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Barriers: sanitization functions
|
|
50
|
+
predicate isBarrier(DataFlow::Node node) {
|
|
51
|
+
exists(Call c |
|
|
52
|
+
c.getFunc().(Attribute).getObject().(Name).getId() = "shlex" and
|
|
53
|
+
c.getFunc().(Attribute).getName() = "quote" and
|
|
54
|
+
node.asExpr() = c
|
|
55
|
+
)
|
|
56
|
+
or
|
|
57
|
+
exists(Call c |
|
|
58
|
+
c.getFunc().(Name).getId() in ["sanitize", "escape", "validate"] and
|
|
59
|
+
node.asExpr() = c
|
|
60
|
+
)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Custom flow steps (optional)
|
|
64
|
+
predicate isAdditionalFlowStep(DataFlow::Node pred, DataFlow::Node succ) {
|
|
65
|
+
exists(Call c |
|
|
66
|
+
c.getFunc().(Attribute).getName() = "format" and
|
|
67
|
+
pred.asExpr() = c.getFunc().(Attribute).getObject() and
|
|
68
|
+
succ.asExpr() = c
|
|
69
|
+
)
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
module VariantFlow = TaintTracking::Global<VariantConfig>;
|
|
74
|
+
import VariantFlow::PathGraph
|
|
75
|
+
|
|
76
|
+
from VariantFlow::PathNode source, VariantFlow::PathNode sink
|
|
77
|
+
where VariantFlow::flowPath(source, sink)
|
|
78
|
+
select sink.getNode(), source, sink,
|
|
79
|
+
"Potential variant: tainted data from $@ flows to dangerous sink.",
|
|
80
|
+
source.getNode(), "user-controlled input"
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
rules:
|
|
2
|
+
- id: variant-taint-cpp
|
|
3
|
+
message: "Potential variant: user input flows to dangerous sink"
|
|
4
|
+
severity: ERROR
|
|
5
|
+
languages: [c, cpp]
|
|
6
|
+
mode: taint
|
|
7
|
+
|
|
8
|
+
pattern-sources:
|
|
9
|
+
# Command line
|
|
10
|
+
- pattern: argv[$IDX]
|
|
11
|
+
# Standard input
|
|
12
|
+
- pattern: gets(...)
|
|
13
|
+
- pattern: fgets($BUF, $SIZE, stdin)
|
|
14
|
+
- pattern: scanf(...)
|
|
15
|
+
- pattern: fscanf(...)
|
|
16
|
+
- pattern: getenv(...)
|
|
17
|
+
# Network
|
|
18
|
+
- pattern: recv($SOCK, $BUF, ...)
|
|
19
|
+
- pattern: recvfrom(...)
|
|
20
|
+
- pattern: read($FD, $BUF, ...)
|
|
21
|
+
|
|
22
|
+
pattern-sinks:
|
|
23
|
+
# Command injection
|
|
24
|
+
- pattern: system($SINK)
|
|
25
|
+
- pattern: popen($SINK, ...)
|
|
26
|
+
- pattern: execl($SINK, ...)
|
|
27
|
+
- pattern: execlp($SINK, ...)
|
|
28
|
+
- pattern: execv($SINK, ...)
|
|
29
|
+
- pattern: execvp($SINK, ...)
|
|
30
|
+
# Buffer overflow
|
|
31
|
+
- pattern: strcpy($DST, $SINK)
|
|
32
|
+
- pattern: strcat($DST, $SINK)
|
|
33
|
+
- pattern: sprintf($DST, $FMT, ..., $SINK, ...)
|
|
34
|
+
- pattern: gets($SINK)
|
|
35
|
+
# Format string
|
|
36
|
+
- pattern: printf($SINK)
|
|
37
|
+
- pattern: fprintf($FILE, $SINK)
|
|
38
|
+
- pattern: sprintf($BUF, $SINK)
|
|
39
|
+
- pattern: syslog($PRI, $SINK)
|
|
40
|
+
# Memory
|
|
41
|
+
- pattern: malloc($SINK)
|
|
42
|
+
- pattern: calloc($SINK, ...)
|
|
43
|
+
- pattern: realloc($PTR, $SINK)
|
|
44
|
+
- pattern: alloca($SINK)
|
|
45
|
+
# File operations
|
|
46
|
+
- pattern: fopen($SINK, ...)
|
|
47
|
+
- pattern: open($SINK, ...)
|
|
48
|
+
|
|
49
|
+
pattern-sanitizers:
|
|
50
|
+
- pattern: strncpy($DST, $SRC, $N)
|
|
51
|
+
- pattern: strncat($DST, $SRC, $N)
|
|
52
|
+
- pattern: snprintf($BUF, $SIZE, ...)
|
|
53
|
+
- pattern: strlcpy(...)
|
|
54
|
+
- pattern: strlcat(...)
|
|
55
|
+
|
|
56
|
+
paths:
|
|
57
|
+
exclude:
|
|
58
|
+
- "**/test/**"
|
|
59
|
+
- "**/*_test.c"
|
|
60
|
+
- "**/*_test.cpp"
|
|
61
|
+
|
|
62
|
+
- id: unsafe-functions-cpp
|
|
63
|
+
message: "Use of unsafe function - consider bounded alternative"
|
|
64
|
+
severity: WARNING
|
|
65
|
+
languages: [c, cpp]
|
|
66
|
+
pattern-either:
|
|
67
|
+
- pattern: gets(...)
|
|
68
|
+
- pattern: strcpy(...)
|
|
69
|
+
- pattern: strcat(...)
|
|
70
|
+
- pattern: sprintf(...)
|
|
71
|
+
- pattern: vsprintf(...)
|
|
72
|
+
|
|
73
|
+
- id: format-string-cpp
|
|
74
|
+
message: "Potential format string vulnerability"
|
|
75
|
+
severity: ERROR
|
|
76
|
+
languages: [c, cpp]
|
|
77
|
+
patterns:
|
|
78
|
+
- pattern-either:
|
|
79
|
+
- pattern: printf($VAR)
|
|
80
|
+
- pattern: fprintf($F, $VAR)
|
|
81
|
+
- pattern: sprintf($B, $VAR)
|
|
82
|
+
- pattern: snprintf($B, $S, $VAR)
|
|
83
|
+
- pattern-not: printf("...")
|
|
84
|
+
- pattern-not: fprintf($F, "...")
|
|
85
|
+
- pattern-not: sprintf($B, "...")
|
|
86
|
+
- pattern-not: snprintf($B, $S, "...")
|
|
87
|
+
|
|
88
|
+
- id: integer-overflow-cpp
|
|
89
|
+
message: "Potential integer overflow before memory allocation"
|
|
90
|
+
severity: WARNING
|
|
91
|
+
languages: [c, cpp]
|
|
92
|
+
patterns:
|
|
93
|
+
- pattern: |
|
|
94
|
+
$SIZE = $X * $Y;
|
|
95
|
+
...
|
|
96
|
+
malloc($SIZE)
|
|
97
|
+
- pattern: malloc($X * $Y)
|
|
98
|
+
- pattern: calloc($X * $Y, ...)
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
rules:
|
|
2
|
+
- id: variant-taint-go
|
|
3
|
+
message: "Potential variant: user input flows to dangerous sink"
|
|
4
|
+
severity: ERROR
|
|
5
|
+
languages: [go]
|
|
6
|
+
mode: taint
|
|
7
|
+
|
|
8
|
+
pattern-sources:
|
|
9
|
+
# net/http
|
|
10
|
+
- pattern: $REQ.URL.Query().Get(...)
|
|
11
|
+
- pattern: $REQ.FormValue(...)
|
|
12
|
+
- pattern: $REQ.PostFormValue(...)
|
|
13
|
+
- pattern: $REQ.Header.Get(...)
|
|
14
|
+
# Gin
|
|
15
|
+
- pattern: $CTX.Query(...)
|
|
16
|
+
- pattern: $CTX.Param(...)
|
|
17
|
+
- pattern: $CTX.PostForm(...)
|
|
18
|
+
- pattern: $CTX.GetHeader(...)
|
|
19
|
+
# Echo
|
|
20
|
+
- pattern: $CTX.QueryParam(...)
|
|
21
|
+
- pattern: $CTX.FormValue(...)
|
|
22
|
+
# os.Args
|
|
23
|
+
- pattern: os.Args[$IDX]
|
|
24
|
+
- pattern: os.Getenv(...)
|
|
25
|
+
|
|
26
|
+
pattern-sinks:
|
|
27
|
+
# Command injection
|
|
28
|
+
- pattern: exec.Command($SINK, ...)
|
|
29
|
+
- pattern: exec.CommandContext($CTX, $SINK, ...)
|
|
30
|
+
# SQL injection
|
|
31
|
+
- pattern: $DB.Query($SINK, ...)
|
|
32
|
+
- pattern: $DB.QueryRow($SINK, ...)
|
|
33
|
+
- pattern: $DB.Exec($SINK, ...)
|
|
34
|
+
# Path traversal
|
|
35
|
+
- pattern: os.Open($SINK)
|
|
36
|
+
- pattern: os.OpenFile($SINK, ...)
|
|
37
|
+
- pattern: os.ReadFile($SINK)
|
|
38
|
+
- pattern: ioutil.ReadFile($SINK)
|
|
39
|
+
# Template injection
|
|
40
|
+
- pattern: template.HTML($SINK)
|
|
41
|
+
|
|
42
|
+
pattern-sanitizers:
|
|
43
|
+
- pattern: strconv.Atoi($X)
|
|
44
|
+
- pattern: strconv.ParseInt($X, ...)
|
|
45
|
+
- pattern: filepath.Clean($X)
|
|
46
|
+
- pattern: filepath.Base($X)
|
|
47
|
+
- pattern: html.EscapeString($X)
|
|
48
|
+
|
|
49
|
+
paths:
|
|
50
|
+
exclude:
|
|
51
|
+
- "**/*_test.go"
|
|
52
|
+
- "**/test/**"
|
|
53
|
+
- "**/vendor/**"
|
|
54
|
+
|
|
55
|
+
- id: variant-pattern-go
|
|
56
|
+
message: "Suspicious pattern matching known vulnerability"
|
|
57
|
+
severity: WARNING
|
|
58
|
+
languages: [go]
|
|
59
|
+
patterns:
|
|
60
|
+
- pattern-either:
|
|
61
|
+
- pattern: exec.Command(...)
|
|
62
|
+
- pattern: $DB.Query($Q, ...)
|
|
63
|
+
- pattern-not: exec.Command("...")
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
rules:
|
|
2
|
+
- id: variant-taint-java
|
|
3
|
+
message: "Potential variant: user input flows to dangerous sink"
|
|
4
|
+
severity: ERROR
|
|
5
|
+
languages: [java]
|
|
6
|
+
mode: taint
|
|
7
|
+
|
|
8
|
+
pattern-sources:
|
|
9
|
+
# Servlet
|
|
10
|
+
- pattern: (HttpServletRequest $REQ).getParameter(...)
|
|
11
|
+
- pattern: (HttpServletRequest $REQ).getHeader(...)
|
|
12
|
+
- pattern: (HttpServletRequest $REQ).getCookies()
|
|
13
|
+
- pattern: (HttpServletRequest $REQ).getQueryString()
|
|
14
|
+
- pattern: (HttpServletRequest $REQ).getInputStream()
|
|
15
|
+
# Spring
|
|
16
|
+
- pattern: "@RequestParam $TYPE $VAR"
|
|
17
|
+
- pattern: "@PathVariable $TYPE $VAR"
|
|
18
|
+
- pattern: "@RequestBody $TYPE $VAR"
|
|
19
|
+
|
|
20
|
+
pattern-sinks:
|
|
21
|
+
# Command injection
|
|
22
|
+
- pattern: Runtime.getRuntime().exec($SINK, ...)
|
|
23
|
+
- pattern: new ProcessBuilder($SINK, ...)
|
|
24
|
+
# SQL injection
|
|
25
|
+
- pattern: (Statement $S).executeQuery($SINK)
|
|
26
|
+
- pattern: (Statement $S).executeUpdate($SINK)
|
|
27
|
+
- pattern: (Statement $S).execute($SINK)
|
|
28
|
+
- pattern: (Connection $C).prepareStatement($SINK)
|
|
29
|
+
# Path traversal
|
|
30
|
+
- pattern: new File($SINK)
|
|
31
|
+
- pattern: new FileInputStream($SINK)
|
|
32
|
+
- pattern: new FileOutputStream($SINK)
|
|
33
|
+
- pattern: Paths.get($SINK, ...)
|
|
34
|
+
# XXE
|
|
35
|
+
- pattern: (DocumentBuilder $DB).parse($SINK)
|
|
36
|
+
# Deserialization
|
|
37
|
+
- pattern: (ObjectInputStream $OIS).readObject()
|
|
38
|
+
|
|
39
|
+
pattern-sanitizers:
|
|
40
|
+
- pattern: Integer.parseInt($X)
|
|
41
|
+
- pattern: Integer.valueOf($X)
|
|
42
|
+
- pattern: StringEscapeUtils.escapeHtml4($X)
|
|
43
|
+
- pattern: ESAPI.encoder().encodeForSQL(...)
|
|
44
|
+
|
|
45
|
+
paths:
|
|
46
|
+
exclude:
|
|
47
|
+
- "**/test/**"
|
|
48
|
+
- "**/*Test.java"
|
|
49
|
+
|
|
50
|
+
- id: variant-pattern-java
|
|
51
|
+
message: "Suspicious pattern matching known vulnerability"
|
|
52
|
+
severity: WARNING
|
|
53
|
+
languages: [java]
|
|
54
|
+
patterns:
|
|
55
|
+
- pattern-either:
|
|
56
|
+
- pattern: Runtime.getRuntime().exec(...)
|
|
57
|
+
- pattern: new ProcessBuilder(...)
|
|
58
|
+
- pattern-inside: |
|
|
59
|
+
$RET $METHOD(..., HttpServletRequest $REQ, ...) {
|
|
60
|
+
...
|
|
61
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
rules:
|
|
2
|
+
- id: variant-taint-js
|
|
3
|
+
message: "Potential variant: user input flows to dangerous sink"
|
|
4
|
+
severity: ERROR
|
|
5
|
+
languages: [javascript, typescript]
|
|
6
|
+
mode: taint
|
|
7
|
+
|
|
8
|
+
pattern-sources:
|
|
9
|
+
# Express
|
|
10
|
+
- pattern: req.query.$PARAM
|
|
11
|
+
- pattern: req.body.$PARAM
|
|
12
|
+
- pattern: req.params.$PARAM
|
|
13
|
+
- pattern: req.cookies.$PARAM
|
|
14
|
+
# URL/Location
|
|
15
|
+
- pattern: window.location.$PROP
|
|
16
|
+
- pattern: document.location.$PROP
|
|
17
|
+
- pattern: location.search
|
|
18
|
+
- pattern: location.hash
|
|
19
|
+
|
|
20
|
+
pattern-sinks:
|
|
21
|
+
# Command injection
|
|
22
|
+
- pattern: child_process.exec($SINK, ...)
|
|
23
|
+
- pattern: child_process.execSync($SINK, ...)
|
|
24
|
+
- pattern: child_process.spawn($SINK, ...)
|
|
25
|
+
# Code execution
|
|
26
|
+
- pattern: eval($SINK)
|
|
27
|
+
- pattern: Function($SINK)
|
|
28
|
+
- pattern: setTimeout($SINK, ...)
|
|
29
|
+
- pattern: setInterval($SINK, ...)
|
|
30
|
+
# SQL
|
|
31
|
+
- pattern: $DB.query($SINK, ...)
|
|
32
|
+
- pattern: $DB.raw($SINK)
|
|
33
|
+
# XSS
|
|
34
|
+
- pattern: $EL.innerHTML = $SINK
|
|
35
|
+
- pattern: document.write($SINK)
|
|
36
|
+
|
|
37
|
+
pattern-sanitizers:
|
|
38
|
+
- pattern: parseInt($X, ...)
|
|
39
|
+
- pattern: encodeURIComponent($X)
|
|
40
|
+
- pattern: escape($X)
|
|
41
|
+
- pattern: $DB.escape($X)
|
|
42
|
+
|
|
43
|
+
paths:
|
|
44
|
+
exclude:
|
|
45
|
+
- "**/*.test.js"
|
|
46
|
+
- "**/*.spec.js"
|
|
47
|
+
- "**/test/**"
|
|
48
|
+
- "**/node_modules/**"
|
|
49
|
+
|
|
50
|
+
- id: variant-pattern-js
|
|
51
|
+
message: "Suspicious pattern matching known vulnerability"
|
|
52
|
+
severity: WARNING
|
|
53
|
+
languages: [javascript, typescript]
|
|
54
|
+
patterns:
|
|
55
|
+
- pattern-either:
|
|
56
|
+
- pattern: eval(...)
|
|
57
|
+
- pattern: Function(...)
|
|
58
|
+
- pattern: child_process.exec(...)
|
|
59
|
+
- pattern-not: eval("...")
|
|
60
|
+
- pattern-not: Function("...")
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
rules:
|
|
2
|
+
- id: variant-taint-analysis
|
|
3
|
+
message: >-
|
|
4
|
+
Potential variant: user-controlled data flows to dangerous sink.
|
|
5
|
+
Original bug: [DESCRIBE_ORIGINAL_BUG]
|
|
6
|
+
severity: ERROR
|
|
7
|
+
languages: [python]
|
|
8
|
+
mode: taint
|
|
9
|
+
|
|
10
|
+
pattern-sources:
|
|
11
|
+
# Flask
|
|
12
|
+
- pattern: request.args.get(...)
|
|
13
|
+
- pattern: request.args[...]
|
|
14
|
+
- pattern: request.form.get(...)
|
|
15
|
+
- pattern: request.form[...]
|
|
16
|
+
- pattern: request.json
|
|
17
|
+
- pattern: request.data
|
|
18
|
+
# Django (uncomment if needed)
|
|
19
|
+
# - pattern: request.GET.get(...)
|
|
20
|
+
# - pattern: request.POST.get(...)
|
|
21
|
+
# General
|
|
22
|
+
- pattern: os.environ.get(...)
|
|
23
|
+
- pattern: input(...)
|
|
24
|
+
|
|
25
|
+
pattern-sinks:
|
|
26
|
+
# Command injection
|
|
27
|
+
- pattern: os.system($SINK)
|
|
28
|
+
- pattern: os.popen($SINK)
|
|
29
|
+
- pattern: subprocess.call($SINK, ...)
|
|
30
|
+
- pattern: subprocess.run($SINK, ...)
|
|
31
|
+
- pattern: subprocess.Popen($SINK, ...)
|
|
32
|
+
# Code execution
|
|
33
|
+
- pattern: eval($SINK)
|
|
34
|
+
- pattern: exec($SINK)
|
|
35
|
+
# SQL (uncomment if needed)
|
|
36
|
+
# - pattern: $CURSOR.execute($SINK)
|
|
37
|
+
# Path traversal (uncomment if needed)
|
|
38
|
+
# - pattern: open($SINK, ...)
|
|
39
|
+
|
|
40
|
+
pattern-sanitizers:
|
|
41
|
+
- pattern: shlex.quote(...)
|
|
42
|
+
- pattern: os.path.basename(...)
|
|
43
|
+
- pattern: int(...)
|
|
44
|
+
- pattern: sanitize(...)
|
|
45
|
+
- pattern: escape(...)
|
|
46
|
+
- pattern: validate(...)
|
|
47
|
+
|
|
48
|
+
paths:
|
|
49
|
+
exclude:
|
|
50
|
+
- "*_test.py"
|
|
51
|
+
- "test_*.py"
|
|
52
|
+
- "tests/"
|
|
53
|
+
- "**/test/**"
|
|
54
|
+
|
|
55
|
+
metadata:
|
|
56
|
+
category: security
|
|
57
|
+
confidence: HIGH
|
|
58
|
+
|
|
59
|
+
# Simple pattern matching variant (non-taint)
|
|
60
|
+
- id: variant-pattern-match
|
|
61
|
+
message: "Suspicious pattern matching known vulnerability signature"
|
|
62
|
+
severity: WARNING
|
|
63
|
+
languages: [python]
|
|
64
|
+
patterns:
|
|
65
|
+
- pattern-either:
|
|
66
|
+
- pattern: dangerous_func($USER_DATA)
|
|
67
|
+
- pattern: risky_operation(..., $USER_DATA, ...)
|
|
68
|
+
- pattern-not: dangerous_func("...")
|
|
69
|
+
paths:
|
|
70
|
+
exclude:
|
|
71
|
+
- "tests/"
|
|
72
|
+
- "*_test.py"
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Variant Analysis Report
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
| Field | Value |
|
|
6
|
+
|-------|-------|
|
|
7
|
+
| **Original Bug** | [BUG_ID / CVE] |
|
|
8
|
+
| **Analysis Date** | [DATE] |
|
|
9
|
+
| **Codebase** | [REPO/PROJECT] |
|
|
10
|
+
| **Variants Found** | [COUNT] |
|
|
11
|
+
|
|
12
|
+
## Original Vulnerability
|
|
13
|
+
|
|
14
|
+
**Root Cause:** [e.g., "User input reaches SQL query without parameterization"]
|
|
15
|
+
|
|
16
|
+
**Location:** `[path/to/file.py:LINE]` in `function_name()`
|
|
17
|
+
|
|
18
|
+
```python
|
|
19
|
+
# Vulnerable code
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Search Methodology
|
|
23
|
+
|
|
24
|
+
| Version | Pattern | Tool | Matches | TP | FP |
|
|
25
|
+
|---------|---------|------|---------|----|----|
|
|
26
|
+
| v1 | [exact] | ripgrep | 1 | 1 | 0 |
|
|
27
|
+
| v2 | [abstract] | semgrep | N | N | N |
|
|
28
|
+
|
|
29
|
+
**Final Pattern:**
|
|
30
|
+
```yaml
|
|
31
|
+
# Pattern used
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Findings
|
|
35
|
+
|
|
36
|
+
### Variant #1: [BRIEF_TITLE]
|
|
37
|
+
|
|
38
|
+
| Severity | Confidence | Status |
|
|
39
|
+
|----------|------------|--------|
|
|
40
|
+
| High | High | Confirmed |
|
|
41
|
+
|
|
42
|
+
**Location:** `[path/to/file.py:LINE]`
|
|
43
|
+
|
|
44
|
+
```python
|
|
45
|
+
# Vulnerable code
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**Analysis:** [Why this is a true/false positive]
|
|
49
|
+
|
|
50
|
+
**Exploitability:**
|
|
51
|
+
- [ ] Reachable from external input
|
|
52
|
+
- [ ] User-controlled data
|
|
53
|
+
- [ ] No sanitization
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
<!-- Copy variant template above for additional findings -->
|
|
58
|
+
|
|
59
|
+
## False Positive Patterns
|
|
60
|
+
|
|
61
|
+
| Pattern | Count | Reason |
|
|
62
|
+
|---------|-------|--------|
|
|
63
|
+
| [pattern] | N | [why safe] |
|
|
64
|
+
|
|
65
|
+
## Recommendations
|
|
66
|
+
|
|
67
|
+
### Immediate
|
|
68
|
+
1. Fix variant in [location]
|
|
69
|
+
|
|
70
|
+
### Preventive
|
|
71
|
+
1. Add Semgrep rule to CI
|
|
72
|
+
|
|
73
|
+
```yaml
|
|
74
|
+
# CI-ready rule
|
|
75
|
+
```
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: video-frames
|
|
3
|
+
description: Extract frames or short clips from videos using ffmpeg.
|
|
4
|
+
homepage: https://ffmpeg.org
|
|
5
|
+
metadata:
|
|
6
|
+
{
|
|
7
|
+
"otto":
|
|
8
|
+
{
|
|
9
|
+
"emoji": "🎞️",
|
|
10
|
+
"requires": { "bins": ["ffmpeg"] },
|
|
11
|
+
"install":
|
|
12
|
+
[
|
|
13
|
+
{
|
|
14
|
+
"id": "brew",
|
|
15
|
+
"kind": "brew",
|
|
16
|
+
"formula": "ffmpeg",
|
|
17
|
+
"bins": ["ffmpeg"],
|
|
18
|
+
"label": "Install ffmpeg (brew)",
|
|
19
|
+
},
|
|
20
|
+
],
|
|
21
|
+
},
|
|
22
|
+
}
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
# Video Frames (ffmpeg)
|
|
26
|
+
|
|
27
|
+
Extract a single frame from a video, or create quick thumbnails for inspection.
|
|
28
|
+
|
|
29
|
+
## Quick start
|
|
30
|
+
|
|
31
|
+
First frame:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
{baseDir}/scripts/frame.sh /path/to/video.mp4 --out /tmp/frame.jpg
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
At a timestamp:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
{baseDir}/scripts/frame.sh /path/to/video.mp4 --time 00:00:10 --out /tmp/frame-10s.jpg
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Notes
|
|
44
|
+
|
|
45
|
+
- Prefer `--time` for “what is happening around here?”.
|
|
46
|
+
- Use a `.jpg` for quick share; use `.png` for crisp UI frames.
|