@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,588 @@
|
|
|
1
|
+
# Language-Specific Sharp Edges
|
|
2
|
+
|
|
3
|
+
General programming footguns by language—not limited to cryptography.
|
|
4
|
+
|
|
5
|
+
## C / C++
|
|
6
|
+
|
|
7
|
+
### Integer Overflow is Undefined Behavior
|
|
8
|
+
|
|
9
|
+
```c
|
|
10
|
+
// DANGEROUS: Signed overflow is UB, compiler can optimize away checks
|
|
11
|
+
int x = INT_MAX;
|
|
12
|
+
if (x + 1 > x) { // Compiler may assume always true (UB)
|
|
13
|
+
// Overflow check optimized away!
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// DANGEROUS: Size calculations
|
|
17
|
+
size_t size = user_count * sizeof(struct User);
|
|
18
|
+
// If user_count * sizeof overflows, allocates tiny buffer
|
|
19
|
+
void *buf = malloc(size);
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
**The Problem**: Signed integer overflow is undefined behavior. Compilers assume it never happens and optimize accordingly—including removing overflow checks.
|
|
23
|
+
|
|
24
|
+
### Buffer Handling
|
|
25
|
+
|
|
26
|
+
```c
|
|
27
|
+
// DANGEROUS: No bounds checking
|
|
28
|
+
char buf[64];
|
|
29
|
+
strcpy(buf, user_input); // Classic overflow
|
|
30
|
+
sprintf(buf, "Hello %s", name); // Format + overflow
|
|
31
|
+
gets(buf); // Never use, removed in C11
|
|
32
|
+
|
|
33
|
+
// DANGEROUS: Off-by-one
|
|
34
|
+
char buf[64];
|
|
35
|
+
strncpy(buf, src, 64); // NOT null-terminated if src >= 64!
|
|
36
|
+
buf[63] = '\0'; // Must do manually
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Format Strings
|
|
40
|
+
|
|
41
|
+
```c
|
|
42
|
+
// DANGEROUS: User controls format
|
|
43
|
+
printf(user_input); // Format string attack
|
|
44
|
+
syslog(LOG_INFO, user_input); // Same problem
|
|
45
|
+
|
|
46
|
+
// SAFE: Format as literal
|
|
47
|
+
printf("%s", user_input);
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Memory Cleanup
|
|
51
|
+
|
|
52
|
+
```c
|
|
53
|
+
// DANGEROUS: Secrets persist
|
|
54
|
+
char password[64];
|
|
55
|
+
// ... use password ...
|
|
56
|
+
memset(password, 0, sizeof(password)); // May be optimized away!
|
|
57
|
+
|
|
58
|
+
// SAFER: Use explicit_bzero or volatile
|
|
59
|
+
explicit_bzero(password, sizeof(password)); // Won't be optimized
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Go
|
|
65
|
+
|
|
66
|
+
### Silent Integer Overflow
|
|
67
|
+
|
|
68
|
+
```go
|
|
69
|
+
// DANGEROUS: Overflow wraps silently (no panic!)
|
|
70
|
+
var x int32 = math.MaxInt32
|
|
71
|
+
x = x + 1 // Wraps to -2147483648, no error
|
|
72
|
+
|
|
73
|
+
// This enables vulnerabilities in:
|
|
74
|
+
// - Size calculations for allocations
|
|
75
|
+
// - Loop bounds
|
|
76
|
+
// - Financial calculations
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**The Problem**: Unlike Rust (debug panics), Go silently wraps. Fuzzing may never find overflow bugs because they don't crash.
|
|
80
|
+
|
|
81
|
+
### Slice Aliasing
|
|
82
|
+
|
|
83
|
+
```go
|
|
84
|
+
// DANGEROUS: Slices share backing array
|
|
85
|
+
original := []int{1, 2, 3, 4, 5}
|
|
86
|
+
slice1 := original[1:3] // {2, 3}
|
|
87
|
+
slice2 := original[2:4] // {3, 4}
|
|
88
|
+
|
|
89
|
+
slice1[1] = 999 // Modifies original AND slice2!
|
|
90
|
+
// slice2 is now {999, 4}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Interface Nil Confusion
|
|
94
|
+
|
|
95
|
+
```go
|
|
96
|
+
// DANGEROUS: Typed nil vs untyped nil
|
|
97
|
+
var p *MyStruct = nil
|
|
98
|
+
var i interface{} = p
|
|
99
|
+
|
|
100
|
+
if i == nil {
|
|
101
|
+
// This is FALSE! i holds (type=*MyStruct, value=nil)
|
|
102
|
+
// An interface is only nil if both type and value are nil
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Common in error handling:
|
|
106
|
+
func getError() error {
|
|
107
|
+
var err *MyError = nil
|
|
108
|
+
return err // Returns non-nil error interface!
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### JSON Field Matching
|
|
113
|
+
|
|
114
|
+
```go
|
|
115
|
+
// DANGEROUS: Go's JSON decoder is case-insensitive
|
|
116
|
+
type User struct {
|
|
117
|
+
Admin bool `json:"admin"`
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// Attacker sends: {"ADMIN": true} or {"Admin": true}
|
|
121
|
+
// Both match the "admin" field!
|
|
122
|
+
|
|
123
|
+
// Also: duplicate keys - last one wins
|
|
124
|
+
// {"admin": false, "admin": true} → Admin = true
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
**Fix**: Use `DisallowUnknownFields()` and consider exact-match libraries.
|
|
128
|
+
|
|
129
|
+
### Defer in Loops
|
|
130
|
+
|
|
131
|
+
```go
|
|
132
|
+
// DANGEROUS: All defers execute at function end, not loop iteration
|
|
133
|
+
for _, file := range files {
|
|
134
|
+
f, _ := os.Open(file)
|
|
135
|
+
defer f.Close() // Files stay open until function returns!
|
|
136
|
+
}
|
|
137
|
+
// Can exhaust file descriptors on large loops
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Rust
|
|
143
|
+
|
|
144
|
+
### Integer Overflow Behavior Changes
|
|
145
|
+
|
|
146
|
+
```rust
|
|
147
|
+
// In debug builds: panics
|
|
148
|
+
// In release builds: wraps silently!
|
|
149
|
+
let x: u8 = 255;
|
|
150
|
+
let y = x + 1; // Debug: panic! Release: y = 0
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
**The Problem**: Behavior differs between debug and release. Bugs may only manifest in production.
|
|
154
|
+
|
|
155
|
+
**Fix**: Use `wrapping_*`, `checked_*`, or `saturating_*` explicitly.
|
|
156
|
+
|
|
157
|
+
### Unsafe Blocks
|
|
158
|
+
|
|
159
|
+
```rust
|
|
160
|
+
// DANGEROUS: Unsafe disables Rust's safety guarantees
|
|
161
|
+
unsafe {
|
|
162
|
+
// Can create data races
|
|
163
|
+
// Can dereference raw pointers
|
|
164
|
+
// Can call unsafe functions
|
|
165
|
+
// Can access mutable statics
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// Common in FFI—audit all unsafe blocks carefully
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Mem::forget Skips Destructors
|
|
172
|
+
|
|
173
|
+
```rust
|
|
174
|
+
// DANGEROUS: Resources never cleaned up
|
|
175
|
+
let guard = Mutex::lock().unwrap();
|
|
176
|
+
std::mem::forget(guard); // Lock never released = deadlock
|
|
177
|
+
|
|
178
|
+
// Also problematic for:
|
|
179
|
+
// - File handles
|
|
180
|
+
// - Memory mappings
|
|
181
|
+
// - Cryptographic key cleanup
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Unwrap Panics
|
|
185
|
+
|
|
186
|
+
```rust
|
|
187
|
+
// DANGEROUS: Panics on None/Err
|
|
188
|
+
let value = some_option.unwrap(); // Panics if None
|
|
189
|
+
let result = fallible_fn().unwrap(); // Panics if Err
|
|
190
|
+
|
|
191
|
+
// In libraries: propagate errors with ?
|
|
192
|
+
// In binaries: use expect() with message, or handle properly
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## Swift
|
|
198
|
+
|
|
199
|
+
### Force Unwrapping
|
|
200
|
+
|
|
201
|
+
```swift
|
|
202
|
+
// DANGEROUS: Crashes on nil
|
|
203
|
+
let value = optionalValue! // Runtime crash if nil
|
|
204
|
+
|
|
205
|
+
// DANGEROUS: Implicitly unwrapped optionals
|
|
206
|
+
var name: String! // IUO - crashes if accessed while nil
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### Bridge Type Surprises
|
|
210
|
+
|
|
211
|
+
```swift
|
|
212
|
+
// DANGEROUS: NSString/String bridging
|
|
213
|
+
let nsString: NSString = "hello"
|
|
214
|
+
let range = nsString.range(of: "é") // UTF-16 range
|
|
215
|
+
let swiftString = nsString as String
|
|
216
|
+
// Range semantics differ between NSString (UTF-16) and String (grapheme clusters)
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## Java
|
|
222
|
+
|
|
223
|
+
### Equality Confusion
|
|
224
|
+
|
|
225
|
+
```java
|
|
226
|
+
// DANGEROUS: Reference equality, not value equality
|
|
227
|
+
String a = new String("hello");
|
|
228
|
+
String b = new String("hello");
|
|
229
|
+
if (a == b) { // FALSE - different objects
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
Integer x = 128;
|
|
233
|
+
Integer y = 128;
|
|
234
|
+
if (x == y) { // FALSE - outside cached range [-128, 127]
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
Integer p = 127;
|
|
238
|
+
Integer q = 127;
|
|
239
|
+
if (p == q) { // TRUE - cached, but misleading
|
|
240
|
+
}
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### Type Erasure
|
|
244
|
+
|
|
245
|
+
```java
|
|
246
|
+
// DANGEROUS: Generic types erased at runtime
|
|
247
|
+
List<String> strings = new ArrayList<>();
|
|
248
|
+
List<Integer> ints = new ArrayList<>();
|
|
249
|
+
|
|
250
|
+
// At runtime, both are just "List" - no type checking
|
|
251
|
+
// Can cast incorrectly and get ClassCastException later
|
|
252
|
+
|
|
253
|
+
// Also: can't do runtime checks
|
|
254
|
+
if (obj instanceof List<String>) { // Compile error
|
|
255
|
+
}
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
### Serialization
|
|
259
|
+
|
|
260
|
+
```java
|
|
261
|
+
// DANGEROUS: Like pickle, arbitrary code execution
|
|
262
|
+
ObjectInputStream ois = new ObjectInputStream(untrustedInput);
|
|
263
|
+
Object obj = ois.readObject(); // Executes readObject() on malicious classes
|
|
264
|
+
|
|
265
|
+
// "Gadget chains" in libraries enable RCE
|
|
266
|
+
// Even without executing readObject(), deserialization triggers code
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
### Swallowed Exceptions
|
|
270
|
+
|
|
271
|
+
```java
|
|
272
|
+
// DANGEROUS: Empty catch blocks
|
|
273
|
+
try {
|
|
274
|
+
sensitiveOperation();
|
|
275
|
+
} catch (Exception e) {
|
|
276
|
+
// Silently swallowed - security failure masked
|
|
277
|
+
}
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
## Kotlin
|
|
283
|
+
|
|
284
|
+
### Platform Types from Java
|
|
285
|
+
|
|
286
|
+
```kotlin
|
|
287
|
+
// DANGEROUS: Java returns can be null, but Kotlin doesn't know
|
|
288
|
+
val result = javaLibrary.getValue() // Platform type: String!
|
|
289
|
+
result.length // NPE if Java returned null!
|
|
290
|
+
|
|
291
|
+
// Kotlin trusts Java's lack of nullability annotations
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
### Not-Null Assertion
|
|
295
|
+
|
|
296
|
+
```kotlin
|
|
297
|
+
// DANGEROUS: Throws NPE
|
|
298
|
+
val value = nullableValue!! // KotlinNullPointerException if null
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
### Lateinit Pitfalls
|
|
302
|
+
|
|
303
|
+
```kotlin
|
|
304
|
+
// DANGEROUS: Accessing before initialization throws
|
|
305
|
+
lateinit var config: Config
|
|
306
|
+
|
|
307
|
+
fun process() {
|
|
308
|
+
config.value // UninitializedPropertyAccessException
|
|
309
|
+
}
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
---
|
|
313
|
+
|
|
314
|
+
## C#
|
|
315
|
+
|
|
316
|
+
### Nullable Reference Types Opt-In
|
|
317
|
+
|
|
318
|
+
```csharp
|
|
319
|
+
// DANGEROUS: NRT is opt-in, not enforced by default
|
|
320
|
+
// Project must enable: <Nullable>enable</Nullable>
|
|
321
|
+
|
|
322
|
+
// Even when enabled, it's warnings only by default
|
|
323
|
+
string? nullable = null;
|
|
324
|
+
string nonNull = nullable; // Warning, not error
|
|
325
|
+
nonNull.Length; // NullReferenceException at runtime
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
### Default Struct Values
|
|
329
|
+
|
|
330
|
+
```csharp
|
|
331
|
+
// DANGEROUS: Structs have default values that may be invalid
|
|
332
|
+
struct Connection {
|
|
333
|
+
public string Host; // Default: null
|
|
334
|
+
public int Port; // Default: 0
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
var conn = default(Connection);
|
|
338
|
+
// conn.Host is null, conn.Port is 0 - probably invalid
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
### IDisposable Leaks
|
|
342
|
+
|
|
343
|
+
```csharp
|
|
344
|
+
// DANGEROUS: Resources not disposed
|
|
345
|
+
var conn = new SqlConnection(connectionString);
|
|
346
|
+
conn.Open();
|
|
347
|
+
// Exception here = connection never closed
|
|
348
|
+
|
|
349
|
+
// SAFE: using statement
|
|
350
|
+
using var conn = new SqlConnection(connectionString);
|
|
351
|
+
conn.Open();
|
|
352
|
+
// Disposed even on exception
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
---
|
|
356
|
+
|
|
357
|
+
## PHP
|
|
358
|
+
|
|
359
|
+
### Type Juggling
|
|
360
|
+
|
|
361
|
+
```php
|
|
362
|
+
// DANGEROUS: Loose comparison (==) does type coercion
|
|
363
|
+
"0e123" == "0e456" // TRUE - both are 0 in scientific notation
|
|
364
|
+
"0" == false // TRUE
|
|
365
|
+
"" == false // TRUE
|
|
366
|
+
[] == false // TRUE
|
|
367
|
+
null == false // TRUE
|
|
368
|
+
|
|
369
|
+
// Magic hash comparison
|
|
370
|
+
"0e462097431906509019562988736854" == "0" // TRUE
|
|
371
|
+
// MD5("240610708") starts with 0e... = compares as 0
|
|
372
|
+
|
|
373
|
+
// SAFE: Strict comparison (===)
|
|
374
|
+
"0e123" === "0e456" // FALSE
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
### Variable Variables and Extract
|
|
378
|
+
|
|
379
|
+
```php
|
|
380
|
+
// DANGEROUS: User controls variable names
|
|
381
|
+
$name = $_GET['name'];
|
|
382
|
+
$$name = $_GET['value']; // Variable variable - arbitrary assignment
|
|
383
|
+
|
|
384
|
+
// DANGEROUS: Extract creates variables from array
|
|
385
|
+
extract($_POST); // Every POST param becomes a variable
|
|
386
|
+
// Attacker sends: POST isAdmin=true → $isAdmin = true
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
### Unserialize
|
|
390
|
+
|
|
391
|
+
```php
|
|
392
|
+
// DANGEROUS: Like pickle, arbitrary object instantiation
|
|
393
|
+
$obj = unserialize($user_input);
|
|
394
|
+
|
|
395
|
+
// Triggers __wakeup(), __destruct() on crafted objects
|
|
396
|
+
// Can chain to RCE via "POP gadgets" in libraries
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
---
|
|
400
|
+
|
|
401
|
+
## JavaScript / TypeScript
|
|
402
|
+
|
|
403
|
+
### Coercion Madness
|
|
404
|
+
|
|
405
|
+
```javascript
|
|
406
|
+
// DANGEROUS: == coerces types unpredictably
|
|
407
|
+
"0" == false // true
|
|
408
|
+
"" == false // true
|
|
409
|
+
[] == false // true
|
|
410
|
+
[] == ![] // true (wat)
|
|
411
|
+
|
|
412
|
+
// SAFE: === for strict equality
|
|
413
|
+
"0" === false // false
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
### Prototype Pollution
|
|
417
|
+
|
|
418
|
+
```javascript
|
|
419
|
+
// DANGEROUS: Merging untrusted objects
|
|
420
|
+
function merge(target, source) {
|
|
421
|
+
for (let key in source) {
|
|
422
|
+
target[key] = source[key]; // Includes __proto__!
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
// Attacker sends: {"__proto__": {"isAdmin": true}}
|
|
427
|
+
merge({}, userInput);
|
|
428
|
+
// Now ALL objects have isAdmin === true
|
|
429
|
+
({}).isAdmin // true
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
**Fix**: Check `hasOwnProperty`, use `Object.create(null)`, or safe merge libraries.
|
|
433
|
+
|
|
434
|
+
### Regex DoS (ReDoS)
|
|
435
|
+
|
|
436
|
+
```javascript
|
|
437
|
+
// DANGEROUS: Catastrophic backtracking
|
|
438
|
+
const regex = /^(a+)+$/;
|
|
439
|
+
regex.test("aaaaaaaaaaaaaaaaaaaaaaaaaaaa!");
|
|
440
|
+
// Exponential time - freezes the event loop
|
|
441
|
+
|
|
442
|
+
// Patterns to avoid: nested quantifiers (a+)+, (a*)*
|
|
443
|
+
// Overlapping alternatives: (a|a)+
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
### ParseInt Radix
|
|
447
|
+
|
|
448
|
+
```javascript
|
|
449
|
+
// DANGEROUS: Radix not specified
|
|
450
|
+
parseInt("08"); // 8 in modern JS, was 0 in old (octal)
|
|
451
|
+
parseInt("0x10"); // 16 - hex prefix recognized
|
|
452
|
+
|
|
453
|
+
// SAFE: Always specify radix
|
|
454
|
+
parseInt("08", 10); // 8
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
---
|
|
458
|
+
|
|
459
|
+
## Python
|
|
460
|
+
|
|
461
|
+
### Mutable Default Arguments
|
|
462
|
+
|
|
463
|
+
```python
|
|
464
|
+
# DANGEROUS: Default is shared across calls
|
|
465
|
+
def append_to(item, target=[]):
|
|
466
|
+
target.append(item)
|
|
467
|
+
return target
|
|
468
|
+
|
|
469
|
+
append_to(1) # [1]
|
|
470
|
+
append_to(2) # [1, 2] - same list!
|
|
471
|
+
|
|
472
|
+
# SAFE: Use None sentinel
|
|
473
|
+
def append_to(item, target=None):
|
|
474
|
+
if target is None:
|
|
475
|
+
target = []
|
|
476
|
+
target.append(item)
|
|
477
|
+
return target
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
### Eval and Friends
|
|
481
|
+
|
|
482
|
+
```python
|
|
483
|
+
# DANGEROUS: Arbitrary code execution
|
|
484
|
+
eval(user_input) # Executes Python expression
|
|
485
|
+
exec(user_input) # Executes Python statements
|
|
486
|
+
compile(user_input, '', 'exec') # Compiles for later exec
|
|
487
|
+
|
|
488
|
+
# Also via:
|
|
489
|
+
input() # In Python 2, equivalent to eval(raw_input())
|
|
490
|
+
```
|
|
491
|
+
|
|
492
|
+
### Late Binding Closures
|
|
493
|
+
|
|
494
|
+
```python
|
|
495
|
+
# DANGEROUS: Closures capture variable by reference
|
|
496
|
+
funcs = []
|
|
497
|
+
for i in range(3):
|
|
498
|
+
funcs.append(lambda: i)
|
|
499
|
+
|
|
500
|
+
[f() for f in funcs] # [2, 2, 2] - all see final i
|
|
501
|
+
|
|
502
|
+
# SAFE: Capture by value with default argument
|
|
503
|
+
funcs = []
|
|
504
|
+
for i in range(3):
|
|
505
|
+
funcs.append(lambda i=i: i)
|
|
506
|
+
|
|
507
|
+
[f() for f in funcs] # [0, 1, 2]
|
|
508
|
+
```
|
|
509
|
+
|
|
510
|
+
### Is vs ==
|
|
511
|
+
|
|
512
|
+
```python
|
|
513
|
+
# DANGEROUS: 'is' checks identity, not equality
|
|
514
|
+
a = 256
|
|
515
|
+
b = 256
|
|
516
|
+
a is b # True - cached small integers
|
|
517
|
+
|
|
518
|
+
a = 257
|
|
519
|
+
b = 257
|
|
520
|
+
a is b # False - different objects!
|
|
521
|
+
|
|
522
|
+
# Same string issue:
|
|
523
|
+
s1 = "hello"
|
|
524
|
+
s2 = "hello"
|
|
525
|
+
s1 is s2 # True - interned
|
|
526
|
+
|
|
527
|
+
s1 = "hello world"
|
|
528
|
+
s2 = "hello world"
|
|
529
|
+
s1 is s2 # Maybe - depends on interpreter
|
|
530
|
+
```
|
|
531
|
+
|
|
532
|
+
---
|
|
533
|
+
|
|
534
|
+
## Ruby
|
|
535
|
+
|
|
536
|
+
### Dynamic Execution
|
|
537
|
+
|
|
538
|
+
```ruby
|
|
539
|
+
# DANGEROUS: Arbitrary code execution
|
|
540
|
+
eval(user_input) # Executes Ruby code
|
|
541
|
+
send(user_input, *args) # Calls arbitrary method
|
|
542
|
+
constantize(user_input) # Gets arbitrary constant/class
|
|
543
|
+
public_send(user_input) # Calls public method by name
|
|
544
|
+
|
|
545
|
+
# Rails-specific:
|
|
546
|
+
params[:controller].constantize # Class injection
|
|
547
|
+
```
|
|
548
|
+
|
|
549
|
+
### YAML.load
|
|
550
|
+
|
|
551
|
+
```ruby
|
|
552
|
+
# DANGEROUS: Arbitrary object instantiation (like pickle)
|
|
553
|
+
YAML.load(user_input)
|
|
554
|
+
|
|
555
|
+
# Attacker sends YAML that instantiates arbitrary objects
|
|
556
|
+
# Can chain to RCE via "gadget" classes
|
|
557
|
+
|
|
558
|
+
# SAFE: Use safe_load
|
|
559
|
+
YAML.safe_load(user_input)
|
|
560
|
+
```
|
|
561
|
+
|
|
562
|
+
### Mass Assignment
|
|
563
|
+
|
|
564
|
+
```ruby
|
|
565
|
+
# DANGEROUS: All params assigned to model
|
|
566
|
+
User.new(params[:user]) # If params includes {admin: true}...
|
|
567
|
+
|
|
568
|
+
# Rails 4+ requires strong parameters:
|
|
569
|
+
params.require(:user).permit(:name, :email) # Explicitly allowlist
|
|
570
|
+
```
|
|
571
|
+
|
|
572
|
+
---
|
|
573
|
+
|
|
574
|
+
## Quick Reference Table
|
|
575
|
+
|
|
576
|
+
| Language | Primary Sharp Edges |
|
|
577
|
+
|----------|-------------------|
|
|
578
|
+
| C/C++ | Integer overflow UB, buffer overflows, format strings, memory cleanup |
|
|
579
|
+
| Go | Silent int overflow, slice aliasing, interface nil, JSON case-insensitive |
|
|
580
|
+
| Rust | Debug/release overflow difference, unsafe blocks, mem::forget |
|
|
581
|
+
| Swift | Force unwrap, implicitly unwrapped optionals |
|
|
582
|
+
| Java | == vs equals, type erasure, serialization, swallowed exceptions |
|
|
583
|
+
| Kotlin | Platform types, !!, lateinit |
|
|
584
|
+
| C# | NRT opt-in, default struct values, IDisposable leaks |
|
|
585
|
+
| PHP | Type juggling (==), extract(), unserialize() |
|
|
586
|
+
| JS/TS | == coercion, prototype pollution, ReDoS, parseInt radix |
|
|
587
|
+
| Python | Mutable defaults, eval/exec/pickle, late binding, is vs == |
|
|
588
|
+
| Ruby | eval/send/constantize, YAML.load, mass assignment |
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sherpa-onnx-tts
|
|
3
|
+
description: Local text-to-speech via sherpa-onnx (offline, no cloud)
|
|
4
|
+
metadata:
|
|
5
|
+
{
|
|
6
|
+
"otto":
|
|
7
|
+
{
|
|
8
|
+
"emoji": "🗣️",
|
|
9
|
+
"os": ["darwin", "linux", "win32"],
|
|
10
|
+
"requires": { "env": ["SHERPA_ONNX_RUNTIME_DIR", "SHERPA_ONNX_MODEL_DIR"] },
|
|
11
|
+
"install":
|
|
12
|
+
[
|
|
13
|
+
{
|
|
14
|
+
"id": "download-runtime-macos",
|
|
15
|
+
"kind": "download",
|
|
16
|
+
"os": ["darwin"],
|
|
17
|
+
"url": "https://github.com/k2-fsa/sherpa-onnx/releases/download/v1.12.23/sherpa-onnx-v1.12.23-osx-universal2-shared.tar.bz2",
|
|
18
|
+
"archive": "tar.bz2",
|
|
19
|
+
"extract": true,
|
|
20
|
+
"stripComponents": 1,
|
|
21
|
+
"targetDir": "~/.otto/tools/sherpa-onnx-tts/runtime",
|
|
22
|
+
"label": "Download sherpa-onnx runtime (macOS)",
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": "download-runtime-linux-x64",
|
|
26
|
+
"kind": "download",
|
|
27
|
+
"os": ["linux"],
|
|
28
|
+
"url": "https://github.com/k2-fsa/sherpa-onnx/releases/download/v1.12.23/sherpa-onnx-v1.12.23-linux-x64-shared.tar.bz2",
|
|
29
|
+
"archive": "tar.bz2",
|
|
30
|
+
"extract": true,
|
|
31
|
+
"stripComponents": 1,
|
|
32
|
+
"targetDir": "~/.otto/tools/sherpa-onnx-tts/runtime",
|
|
33
|
+
"label": "Download sherpa-onnx runtime (Linux x64)",
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"id": "download-runtime-win-x64",
|
|
37
|
+
"kind": "download",
|
|
38
|
+
"os": ["win32"],
|
|
39
|
+
"url": "https://github.com/k2-fsa/sherpa-onnx/releases/download/v1.12.23/sherpa-onnx-v1.12.23-win-x64-shared.tar.bz2",
|
|
40
|
+
"archive": "tar.bz2",
|
|
41
|
+
"extract": true,
|
|
42
|
+
"stripComponents": 1,
|
|
43
|
+
"targetDir": "~/.otto/tools/sherpa-onnx-tts/runtime",
|
|
44
|
+
"label": "Download sherpa-onnx runtime (Windows x64)",
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"id": "download-model-lessac",
|
|
48
|
+
"kind": "download",
|
|
49
|
+
"url": "https://github.com/k2-fsa/sherpa-onnx/releases/download/tts-models/vits-piper-en_US-lessac-high.tar.bz2",
|
|
50
|
+
"archive": "tar.bz2",
|
|
51
|
+
"extract": true,
|
|
52
|
+
"targetDir": "~/.otto/tools/sherpa-onnx-tts/models",
|
|
53
|
+
"label": "Download Piper en_US lessac (high)",
|
|
54
|
+
},
|
|
55
|
+
],
|
|
56
|
+
},
|
|
57
|
+
}
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
# sherpa-onnx-tts
|
|
61
|
+
|
|
62
|
+
Local TTS using the sherpa-onnx offline CLI.
|
|
63
|
+
|
|
64
|
+
## Install
|
|
65
|
+
|
|
66
|
+
1. Download the runtime for your OS (extracts into `~/.otto/tools/sherpa-onnx-tts/runtime`)
|
|
67
|
+
2. Download a voice model (extracts into `~/.otto/tools/sherpa-onnx-tts/models`)
|
|
68
|
+
|
|
69
|
+
Update `~/.otto/otto.json`:
|
|
70
|
+
|
|
71
|
+
```json5
|
|
72
|
+
{
|
|
73
|
+
skills: {
|
|
74
|
+
entries: {
|
|
75
|
+
"sherpa-onnx-tts": {
|
|
76
|
+
env: {
|
|
77
|
+
SHERPA_ONNX_RUNTIME_DIR: "~/.otto/tools/sherpa-onnx-tts/runtime",
|
|
78
|
+
SHERPA_ONNX_MODEL_DIR: "~/.otto/tools/sherpa-onnx-tts/models/vits-piper-en_US-lessac-high",
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
The wrapper lives in this skill folder. Run it directly, or add the wrapper to PATH:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
export PATH="{baseDir}/bin:$PATH"
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Usage
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
{baseDir}/bin/sherpa-onnx-tts -o ./tts.wav "Hello from local TTS."
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Notes:
|
|
99
|
+
|
|
100
|
+
- Pick a different model from the sherpa-onnx `tts-models` release if you want another voice.
|
|
101
|
+
- If the model dir has multiple `.onnx` files, set `SHERPA_ONNX_MODEL_FILE` or pass `--model-file`.
|
|
102
|
+
- You can also pass `--tokens-file` or `--data-dir` to override the defaults.
|
|
103
|
+
- Windows: run `node {baseDir}\\bin\\sherpa-onnx-tts -o tts.wav "Hello from local TTS."`
|