@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,454 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cargo-fuzz
|
|
3
|
+
type: fuzzer
|
|
4
|
+
description: >
|
|
5
|
+
cargo-fuzz is the de facto fuzzing tool for Rust projects using Cargo.
|
|
6
|
+
Use for fuzzing Rust code with libFuzzer backend.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# cargo-fuzz
|
|
10
|
+
|
|
11
|
+
cargo-fuzz is the de facto choice for fuzzing Rust projects when using Cargo. It uses libFuzzer as the backend and provides a convenient Cargo subcommand that automatically enables relevant compilation flags for your Rust project, including support for sanitizers like AddressSanitizer.
|
|
12
|
+
|
|
13
|
+
## When to Use
|
|
14
|
+
|
|
15
|
+
cargo-fuzz is currently the primary and most mature fuzzing solution for Rust projects using Cargo.
|
|
16
|
+
|
|
17
|
+
| Fuzzer | Best For | Complexity |
|
|
18
|
+
|--------|----------|------------|
|
|
19
|
+
| cargo-fuzz | Cargo-based Rust projects, quick setup | Low |
|
|
20
|
+
| AFL++ | Multi-core fuzzing, non-Cargo projects | Medium |
|
|
21
|
+
| LibAFL | Custom fuzzers, research, advanced use cases | High |
|
|
22
|
+
|
|
23
|
+
**Choose cargo-fuzz when:**
|
|
24
|
+
- Your project uses Cargo (required)
|
|
25
|
+
- You want simple, quick setup with minimal configuration
|
|
26
|
+
- You need integrated sanitizer support
|
|
27
|
+
- You're fuzzing Rust code with or without unsafe blocks
|
|
28
|
+
|
|
29
|
+
## Quick Start
|
|
30
|
+
|
|
31
|
+
```rust
|
|
32
|
+
#![no_main]
|
|
33
|
+
|
|
34
|
+
use libfuzzer_sys::fuzz_target;
|
|
35
|
+
|
|
36
|
+
fn harness(data: &[u8]) {
|
|
37
|
+
your_project::check_buf(data);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
fuzz_target!(|data: &[u8]| {
|
|
41
|
+
harness(data);
|
|
42
|
+
});
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Initialize and run:
|
|
46
|
+
```bash
|
|
47
|
+
cargo fuzz init
|
|
48
|
+
# Edit fuzz/fuzz_targets/fuzz_target_1.rs with your harness
|
|
49
|
+
cargo +nightly fuzz run fuzz_target_1
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Installation
|
|
53
|
+
|
|
54
|
+
cargo-fuzz requires the nightly Rust toolchain because it uses features only available in nightly.
|
|
55
|
+
|
|
56
|
+
### Prerequisites
|
|
57
|
+
|
|
58
|
+
- Rust and Cargo installed via [rustup](https://rustup.rs/)
|
|
59
|
+
- Nightly toolchain
|
|
60
|
+
|
|
61
|
+
### Linux/macOS
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
# Install nightly toolchain
|
|
65
|
+
rustup install nightly
|
|
66
|
+
|
|
67
|
+
# Install cargo-fuzz
|
|
68
|
+
cargo install cargo-fuzz
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Verification
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
cargo +nightly --version
|
|
75
|
+
cargo fuzz --version
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Writing a Harness
|
|
79
|
+
|
|
80
|
+
### Project Structure
|
|
81
|
+
|
|
82
|
+
cargo-fuzz works best when your code is structured as a library crate. If you have a binary project, split your `main.rs` into:
|
|
83
|
+
|
|
84
|
+
```text
|
|
85
|
+
src/main.rs # Entry point (main function)
|
|
86
|
+
src/lib.rs # Code to fuzz (public functions)
|
|
87
|
+
Cargo.toml
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Initialize fuzzing:
|
|
91
|
+
```bash
|
|
92
|
+
cargo fuzz init
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
This creates:
|
|
96
|
+
```text
|
|
97
|
+
fuzz/
|
|
98
|
+
├── Cargo.toml
|
|
99
|
+
└── fuzz_targets/
|
|
100
|
+
└── fuzz_target_1.rs
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Harness Structure
|
|
104
|
+
|
|
105
|
+
```rust
|
|
106
|
+
#![no_main]
|
|
107
|
+
|
|
108
|
+
use libfuzzer_sys::fuzz_target;
|
|
109
|
+
|
|
110
|
+
fn harness(data: &[u8]) {
|
|
111
|
+
// 1. Validate input size if needed
|
|
112
|
+
if data.is_empty() {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// 2. Call target function with fuzz data
|
|
117
|
+
your_project::target_function(data);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
fuzz_target!(|data: &[u8]| {
|
|
121
|
+
harness(data);
|
|
122
|
+
});
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Harness Rules
|
|
126
|
+
|
|
127
|
+
| Do | Don't |
|
|
128
|
+
|----|-------|
|
|
129
|
+
| Structure code as library crate | Keep everything in main.rs |
|
|
130
|
+
| Use `fuzz_target!` macro | Write custom main function |
|
|
131
|
+
| Handle `Result::Err` gracefully | Panic on expected errors |
|
|
132
|
+
| Keep harness deterministic | Use random number generators |
|
|
133
|
+
|
|
134
|
+
> **See Also:** For detailed harness writing techniques and structure-aware fuzzing with the
|
|
135
|
+
> `arbitrary` crate, see the **fuzz-harness-writing** technique skill.
|
|
136
|
+
|
|
137
|
+
## Structure-Aware Fuzzing
|
|
138
|
+
|
|
139
|
+
cargo-fuzz integrates with the [arbitrary](https://github.com/rust-fuzz/arbitrary) crate for structure-aware fuzzing:
|
|
140
|
+
|
|
141
|
+
```rust
|
|
142
|
+
// In your library crate
|
|
143
|
+
use arbitrary::Arbitrary;
|
|
144
|
+
|
|
145
|
+
#[derive(Debug, Arbitrary)]
|
|
146
|
+
pub struct Name {
|
|
147
|
+
data: String
|
|
148
|
+
}
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
```rust
|
|
152
|
+
// In your fuzz target
|
|
153
|
+
#![no_main]
|
|
154
|
+
use libfuzzer_sys::fuzz_target;
|
|
155
|
+
|
|
156
|
+
fuzz_target!(|data: your_project::Name| {
|
|
157
|
+
data.check_buf();
|
|
158
|
+
});
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Add to your library's `Cargo.toml`:
|
|
162
|
+
```toml
|
|
163
|
+
[dependencies]
|
|
164
|
+
arbitrary = { version = "1", features = ["derive"] }
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## Running Campaigns
|
|
168
|
+
|
|
169
|
+
### Basic Run
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
cargo +nightly fuzz run fuzz_target_1
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### Without Sanitizers (Safe Rust)
|
|
176
|
+
|
|
177
|
+
If your project doesn't use unsafe Rust, disable sanitizers for 2x performance boost:
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
cargo +nightly fuzz run --sanitizer none fuzz_target_1
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Check if your project uses unsafe code:
|
|
184
|
+
```bash
|
|
185
|
+
cargo install cargo-geiger
|
|
186
|
+
cargo geiger
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Re-executing Test Cases
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
# Run a specific test case (e.g., a crash)
|
|
193
|
+
cargo +nightly fuzz run fuzz_target_1 fuzz/artifacts/fuzz_target_1/crash-<hash>
|
|
194
|
+
|
|
195
|
+
# Run all corpus entries without fuzzing
|
|
196
|
+
cargo +nightly fuzz run fuzz_target_1 fuzz/corpus/fuzz_target_1 -- -runs=0
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
### Using Dictionaries
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
cargo +nightly fuzz run fuzz_target_1 -- -dict=./dict.dict
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### Interpreting Output
|
|
206
|
+
|
|
207
|
+
| Output | Meaning |
|
|
208
|
+
|--------|---------|
|
|
209
|
+
| `NEW` | New coverage-increasing input discovered |
|
|
210
|
+
| `pulse` | Periodic status update |
|
|
211
|
+
| `INITED` | Fuzzer initialized successfully |
|
|
212
|
+
| Crash with stack trace | Bug found, saved to `fuzz/artifacts/` |
|
|
213
|
+
|
|
214
|
+
Corpus location: `fuzz/corpus/fuzz_target_1/`
|
|
215
|
+
Crashes location: `fuzz/artifacts/fuzz_target_1/`
|
|
216
|
+
|
|
217
|
+
## Sanitizer Integration
|
|
218
|
+
|
|
219
|
+
### AddressSanitizer (ASan)
|
|
220
|
+
|
|
221
|
+
ASan is enabled by default and detects memory errors:
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
cargo +nightly fuzz run fuzz_target_1
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### Disabling Sanitizers
|
|
228
|
+
|
|
229
|
+
For pure safe Rust (no unsafe blocks in your code or dependencies):
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
cargo +nightly fuzz run --sanitizer none fuzz_target_1
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
**Performance impact:** ASan adds ~2x overhead. Disable for safe Rust to improve fuzzing speed.
|
|
236
|
+
|
|
237
|
+
### Checking for Unsafe Code
|
|
238
|
+
|
|
239
|
+
```bash
|
|
240
|
+
cargo install cargo-geiger
|
|
241
|
+
cargo geiger
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
> **See Also:** For detailed sanitizer configuration, flags, and troubleshooting,
|
|
245
|
+
> see the **address-sanitizer** technique skill.
|
|
246
|
+
|
|
247
|
+
## Coverage Analysis
|
|
248
|
+
|
|
249
|
+
cargo-fuzz integrates with Rust's coverage tools to analyze fuzzing effectiveness.
|
|
250
|
+
|
|
251
|
+
### Prerequisites
|
|
252
|
+
|
|
253
|
+
```bash
|
|
254
|
+
rustup toolchain install nightly --component llvm-tools-preview
|
|
255
|
+
cargo install cargo-binutils
|
|
256
|
+
cargo install rustfilt
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
### Generating Coverage Reports
|
|
260
|
+
|
|
261
|
+
```bash
|
|
262
|
+
# Generate coverage data from corpus
|
|
263
|
+
cargo +nightly fuzz coverage fuzz_target_1
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
Create coverage generation script:
|
|
267
|
+
|
|
268
|
+
```bash
|
|
269
|
+
cat <<'EOF' > ./generate_html
|
|
270
|
+
#!/bin/sh
|
|
271
|
+
if [ $# -lt 1 ]; then
|
|
272
|
+
echo "Error: Name of fuzz target is required."
|
|
273
|
+
echo "Usage: $0 fuzz_target [sources...]"
|
|
274
|
+
exit 1
|
|
275
|
+
fi
|
|
276
|
+
FUZZ_TARGET="$1"
|
|
277
|
+
shift
|
|
278
|
+
SRC_FILTER="$@"
|
|
279
|
+
TARGET=$(rustc -vV | sed -n 's|host: ||p')
|
|
280
|
+
cargo +nightly cov -- show -Xdemangler=rustfilt \
|
|
281
|
+
"target/$TARGET/coverage/$TARGET/release/$FUZZ_TARGET" \
|
|
282
|
+
-instr-profile="fuzz/coverage/$FUZZ_TARGET/coverage.profdata" \
|
|
283
|
+
-show-line-counts-or-regions -show-instantiations \
|
|
284
|
+
-format=html -o fuzz_html/ $SRC_FILTER
|
|
285
|
+
EOF
|
|
286
|
+
chmod +x ./generate_html
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
Generate HTML report:
|
|
290
|
+
```bash
|
|
291
|
+
./generate_html fuzz_target_1 src/lib.rs
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
HTML report saved to: `fuzz_html/`
|
|
295
|
+
|
|
296
|
+
> **See Also:** For detailed coverage analysis techniques and systematic coverage improvement,
|
|
297
|
+
> see the **coverage-analysis** technique skill.
|
|
298
|
+
|
|
299
|
+
## Advanced Usage
|
|
300
|
+
|
|
301
|
+
### Tips and Tricks
|
|
302
|
+
|
|
303
|
+
| Tip | Why It Helps |
|
|
304
|
+
|-----|--------------|
|
|
305
|
+
| Start with a seed corpus | Dramatically speeds up initial coverage discovery |
|
|
306
|
+
| Use `--sanitizer none` for safe Rust | 2x performance improvement |
|
|
307
|
+
| Check coverage regularly | Identifies gaps in harness or seed corpus |
|
|
308
|
+
| Use dictionaries for parsers | Helps overcome magic value checks |
|
|
309
|
+
| Structure code as library | Required for cargo-fuzz integration |
|
|
310
|
+
|
|
311
|
+
### libFuzzer Options
|
|
312
|
+
|
|
313
|
+
Pass options to libFuzzer after `--`:
|
|
314
|
+
|
|
315
|
+
```bash
|
|
316
|
+
# See all options
|
|
317
|
+
cargo +nightly fuzz run fuzz_target_1 -- -help=1
|
|
318
|
+
|
|
319
|
+
# Set timeout per run
|
|
320
|
+
cargo +nightly fuzz run fuzz_target_1 -- -timeout=10
|
|
321
|
+
|
|
322
|
+
# Use dictionary
|
|
323
|
+
cargo +nightly fuzz run fuzz_target_1 -- -dict=dict.dict
|
|
324
|
+
|
|
325
|
+
# Limit maximum input size
|
|
326
|
+
cargo +nightly fuzz run fuzz_target_1 -- -max_len=1024
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
### Multi-Core Fuzzing
|
|
330
|
+
|
|
331
|
+
```bash
|
|
332
|
+
# Experimental forking support (not recommended)
|
|
333
|
+
cargo +nightly fuzz run --jobs 1 fuzz_target_1
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
Note: The multi-core fuzzing feature is experimental and not recommended. For parallel fuzzing, consider running multiple instances manually or using AFL++.
|
|
337
|
+
|
|
338
|
+
## Real-World Examples
|
|
339
|
+
|
|
340
|
+
### Example: ogg Crate
|
|
341
|
+
|
|
342
|
+
The [ogg crate](https://github.com/RustAudio/ogg) parses Ogg media container files. Parsers are excellent fuzzing targets because they handle untrusted data.
|
|
343
|
+
|
|
344
|
+
```bash
|
|
345
|
+
# Clone and initialize
|
|
346
|
+
git clone https://github.com/RustAudio/ogg.git
|
|
347
|
+
cd ogg/
|
|
348
|
+
cargo fuzz init
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
Harness at `fuzz/fuzz_targets/fuzz_target_1.rs`:
|
|
352
|
+
|
|
353
|
+
```rust
|
|
354
|
+
#![no_main]
|
|
355
|
+
|
|
356
|
+
use ogg::{PacketReader, PacketWriter};
|
|
357
|
+
use ogg::writing::PacketWriteEndInfo;
|
|
358
|
+
use std::io::Cursor;
|
|
359
|
+
use libfuzzer_sys::fuzz_target;
|
|
360
|
+
|
|
361
|
+
fn harness(data: &[u8]) {
|
|
362
|
+
let mut pck_rdr = PacketReader::new(Cursor::new(data.to_vec()));
|
|
363
|
+
pck_rdr.delete_unread_packets();
|
|
364
|
+
|
|
365
|
+
let output = Vec::new();
|
|
366
|
+
let mut pck_wtr = PacketWriter::new(Cursor::new(output));
|
|
367
|
+
|
|
368
|
+
if let Ok(_) = pck_rdr.read_packet() {
|
|
369
|
+
if let Ok(r) = pck_rdr.read_packet() {
|
|
370
|
+
match r {
|
|
371
|
+
Some(pck) => {
|
|
372
|
+
let inf = if pck.last_in_stream() {
|
|
373
|
+
PacketWriteEndInfo::EndStream
|
|
374
|
+
} else if pck.last_in_page() {
|
|
375
|
+
PacketWriteEndInfo::EndPage
|
|
376
|
+
} else {
|
|
377
|
+
PacketWriteEndInfo::NormalPacket
|
|
378
|
+
};
|
|
379
|
+
let stream_serial = pck.stream_serial();
|
|
380
|
+
let absgp_page = pck.absgp_page();
|
|
381
|
+
let _ = pck_wtr.write_packet(
|
|
382
|
+
pck.data, stream_serial, inf, absgp_page
|
|
383
|
+
);
|
|
384
|
+
}
|
|
385
|
+
None => return,
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
fuzz_target!(|data: &[u8]| {
|
|
392
|
+
harness(data);
|
|
393
|
+
});
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
Seed the corpus:
|
|
397
|
+
```bash
|
|
398
|
+
mkdir fuzz/corpus/fuzz_target_1/
|
|
399
|
+
curl -o fuzz/corpus/fuzz_target_1/320x240.ogg \
|
|
400
|
+
https://commons.wikimedia.org/wiki/File:320x240.ogg
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
Run:
|
|
404
|
+
```bash
|
|
405
|
+
cargo +nightly fuzz run fuzz_target_1
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
Analyze coverage:
|
|
409
|
+
```bash
|
|
410
|
+
cargo +nightly fuzz coverage fuzz_target_1
|
|
411
|
+
./generate_html fuzz_target_1 src/lib.rs
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
## Troubleshooting
|
|
415
|
+
|
|
416
|
+
| Problem | Cause | Solution |
|
|
417
|
+
|---------|-------|----------|
|
|
418
|
+
| "requires nightly" error | Using stable toolchain | Use `cargo +nightly fuzz` |
|
|
419
|
+
| Slow fuzzing performance | ASan enabled for safe Rust | Add `--sanitizer none` flag |
|
|
420
|
+
| "cannot find binary" | No library crate | Move code from `main.rs` to `lib.rs` |
|
|
421
|
+
| Sanitizer compilation issues | Wrong nightly version | Try different nightly: `rustup install nightly-2024-01-01` |
|
|
422
|
+
| Low coverage | Missing seed corpus | Add sample inputs to `fuzz/corpus/fuzz_target_1/` |
|
|
423
|
+
| Magic value not found | No dictionary | Create dictionary file with magic values |
|
|
424
|
+
|
|
425
|
+
## Related Skills
|
|
426
|
+
|
|
427
|
+
### Technique Skills
|
|
428
|
+
|
|
429
|
+
| Skill | Use Case |
|
|
430
|
+
|-------|----------|
|
|
431
|
+
| **fuzz-harness-writing** | Structure-aware fuzzing with `arbitrary` crate |
|
|
432
|
+
| **address-sanitizer** | Understanding ASan output and configuration |
|
|
433
|
+
| **coverage-analysis** | Measuring and improving fuzzing effectiveness |
|
|
434
|
+
| **fuzzing-corpus** | Building and managing seed corpora |
|
|
435
|
+
| **fuzzing-dictionaries** | Creating dictionaries for format-aware fuzzing |
|
|
436
|
+
|
|
437
|
+
### Related Fuzzers
|
|
438
|
+
|
|
439
|
+
| Skill | When to Consider |
|
|
440
|
+
|-------|------------------|
|
|
441
|
+
| **libfuzzer** | Fuzzing C/C++ code with similar workflow |
|
|
442
|
+
| **aflpp** | Multi-core fuzzing or non-Cargo Rust projects |
|
|
443
|
+
| **libafl** | Advanced fuzzing research or custom fuzzer development |
|
|
444
|
+
|
|
445
|
+
## Resources
|
|
446
|
+
|
|
447
|
+
**[Rust Fuzz Book - cargo-fuzz](https://rust-fuzz.github.io/book/cargo-fuzz.html)**
|
|
448
|
+
Official documentation for cargo-fuzz covering installation, usage, and advanced features.
|
|
449
|
+
|
|
450
|
+
**[arbitrary crate documentation](https://docs.rs/arbitrary/latest/arbitrary/)**
|
|
451
|
+
Guide to structure-aware fuzzing with automatic derivation for Rust types.
|
|
452
|
+
|
|
453
|
+
**[cargo-fuzz GitHub Repository](https://github.com/rust-fuzz/cargo-fuzz)**
|
|
454
|
+
Source code, issue tracker, and examples for cargo-fuzz.
|