@elizaos/skills 2.0.0-alpha.10
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/dist/formatter.d.ts +44 -0
- package/dist/formatter.d.ts.map +1 -0
- package/dist/formatter.js +182 -0
- package/dist/frontmatter.d.ts +39 -0
- package/dist/frontmatter.d.ts.map +1 -0
- package/dist/frontmatter.js +105 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/loader.d.ts +33 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +362 -0
- package/dist/resolver.d.ts +18 -0
- package/dist/resolver.d.ts.map +1 -0
- package/dist/resolver.js +90 -0
- package/dist/types.d.ts +201 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +1 -0
- package/package.json +57 -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/SKILL.md +85 -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/SKILL.md +297 -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/SKILL.md +67 -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-differential-review/.claude-plugin/plugin.json +10 -0
- package/skills/security-differential-review/README.md +109 -0
- package/skills/security-differential-review/SKILL.md +220 -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-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/SKILL.md +251 -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-fix-review/.claude-plugin/plugin.json +13 -0
- package/skills/security-fix-review/README.md +118 -0
- package/skills/security-fix-review/SKILL.md +264 -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/SKILL.md +117 -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/SKILL.md +333 -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/SKILL.md +109 -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/SKILL.md +168 -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/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/SKILL.md +292 -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/SKILL.md +349 -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/SKILL.md +91 -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/SKILL.md +104 -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/SKILL.md +142 -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
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
# C/C++ Sharp Edges
|
|
2
|
+
|
|
3
|
+
## Integer Overflow is Undefined Behavior
|
|
4
|
+
|
|
5
|
+
```c
|
|
6
|
+
// DANGEROUS: Signed overflow is UB, compiler can optimize away checks
|
|
7
|
+
int x = INT_MAX;
|
|
8
|
+
if (x + 1 > x) { // Compiler may assume always true (UB)
|
|
9
|
+
// Overflow check optimized away!
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
// DANGEROUS: Size calculations
|
|
13
|
+
size_t size = user_count * sizeof(struct User);
|
|
14
|
+
// If user_count * sizeof overflows, allocates tiny buffer
|
|
15
|
+
void *buf = malloc(size);
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
**The Problem**: Signed integer overflow is undefined behavior. Compilers assume it never happens and optimize accordingly—including removing overflow checks.
|
|
19
|
+
|
|
20
|
+
**Detection**: Look for arithmetic on signed integers, especially in size calculations, loop bounds, and allocation sizes.
|
|
21
|
+
|
|
22
|
+
## Buffer Handling
|
|
23
|
+
|
|
24
|
+
```c
|
|
25
|
+
// DANGEROUS: No bounds checking
|
|
26
|
+
char buf[64];
|
|
27
|
+
strcpy(buf, user_input); // Classic overflow
|
|
28
|
+
sprintf(buf, "Hello %s", name); // Format + overflow
|
|
29
|
+
gets(buf); // Never use, removed in C11
|
|
30
|
+
|
|
31
|
+
// DANGEROUS: Off-by-one
|
|
32
|
+
char buf[64];
|
|
33
|
+
strncpy(buf, src, 64); // NOT null-terminated if src >= 64!
|
|
34
|
+
buf[63] = '\0'; // Must do manually
|
|
35
|
+
|
|
36
|
+
// DANGEROUS: snprintf return value
|
|
37
|
+
int ret = snprintf(buf, sizeof(buf), "%s", long_string);
|
|
38
|
+
// ret is length that WOULD be written, not actual length
|
|
39
|
+
// If ret >= sizeof(buf), output was truncated
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**Safe Alternatives**:
|
|
43
|
+
- `strlcpy`, `strlcat` (BSD, not standard)
|
|
44
|
+
- `snprintf` with proper return value checking
|
|
45
|
+
- C11 Annex K `strcpy_s`, `sprintf_s` (limited support)
|
|
46
|
+
|
|
47
|
+
## Format Strings
|
|
48
|
+
|
|
49
|
+
```c
|
|
50
|
+
// DANGEROUS: User controls format
|
|
51
|
+
printf(user_input); // Format string attack
|
|
52
|
+
syslog(LOG_INFO, user_input); // Same problem
|
|
53
|
+
fprintf(stderr, user_input); // Same problem
|
|
54
|
+
|
|
55
|
+
// Attacker input: "%x%x%x%x" → leaks stack
|
|
56
|
+
// Attacker input: "%n" → writes to memory
|
|
57
|
+
|
|
58
|
+
// SAFE: Format as literal
|
|
59
|
+
printf("%s", user_input);
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Detection**: Any `*printf` family function where the format argument is not a string literal.
|
|
63
|
+
|
|
64
|
+
## Memory Cleanup
|
|
65
|
+
|
|
66
|
+
```c
|
|
67
|
+
// DANGEROUS: Compiler may optimize away
|
|
68
|
+
char password[64];
|
|
69
|
+
// ... use password ...
|
|
70
|
+
memset(password, 0, sizeof(password)); // May be removed!
|
|
71
|
+
|
|
72
|
+
// The compiler sees: "writes to password, then password goes out of scope"
|
|
73
|
+
// Optimization: "dead store elimination" removes the memset
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**Safe Alternatives**:
|
|
77
|
+
```c
|
|
78
|
+
// Option 1: explicit_bzero (BSD, glibc 2.25+)
|
|
79
|
+
explicit_bzero(password, sizeof(password));
|
|
80
|
+
|
|
81
|
+
// Option 2: SecureZeroMemory (Windows)
|
|
82
|
+
SecureZeroMemory(password, sizeof(password));
|
|
83
|
+
|
|
84
|
+
// Option 3: Volatile function pointer trick
|
|
85
|
+
static void *(*const volatile memset_ptr)(void *, int, size_t) = memset;
|
|
86
|
+
memset_ptr(password, 0, sizeof(password));
|
|
87
|
+
|
|
88
|
+
// Option 4: C11 memset_s (limited support)
|
|
89
|
+
memset_s(password, sizeof(password), 0, sizeof(password));
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Uninitialized Variables
|
|
93
|
+
|
|
94
|
+
```c
|
|
95
|
+
// DANGEROUS: Uninitialized stack variables
|
|
96
|
+
int result;
|
|
97
|
+
if (condition) {
|
|
98
|
+
result = compute();
|
|
99
|
+
}
|
|
100
|
+
return result; // Uninitialized if !condition
|
|
101
|
+
|
|
102
|
+
// DANGEROUS: Uninitialized struct padding
|
|
103
|
+
struct {
|
|
104
|
+
char a; // 1 byte
|
|
105
|
+
// 3 bytes padding (uninitialized)
|
|
106
|
+
int b; // 4 bytes
|
|
107
|
+
} s;
|
|
108
|
+
s.a = 'x';
|
|
109
|
+
s.b = 42;
|
|
110
|
+
send(sock, &s, sizeof(s), 0); // Leaks 3 bytes of stack
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**Fix**: Use `= {0}` initialization or `memset`.
|
|
114
|
+
|
|
115
|
+
## Double Free and Use-After-Free
|
|
116
|
+
|
|
117
|
+
```c
|
|
118
|
+
// DANGEROUS: Double free
|
|
119
|
+
free(ptr);
|
|
120
|
+
// ... later ...
|
|
121
|
+
free(ptr); // Heap corruption
|
|
122
|
+
|
|
123
|
+
// DANGEROUS: Use after free
|
|
124
|
+
free(ptr);
|
|
125
|
+
ptr->value = 42; // Writing to freed memory
|
|
126
|
+
|
|
127
|
+
// DANGEROUS: Returning pointer to local
|
|
128
|
+
char *get_greeting() {
|
|
129
|
+
char buf[64] = "hello";
|
|
130
|
+
return buf; // Stack pointer invalid after return
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**Mitigations**:
|
|
135
|
+
- Set pointer to NULL after free: `free(ptr); ptr = NULL;`
|
|
136
|
+
- Use static analysis (Coverity, cppcheck)
|
|
137
|
+
- Use AddressSanitizer in testing
|
|
138
|
+
|
|
139
|
+
## Signal Handler Issues
|
|
140
|
+
|
|
141
|
+
```c
|
|
142
|
+
// DANGEROUS: Non-async-signal-safe functions in handler
|
|
143
|
+
void handler(int sig) {
|
|
144
|
+
printf("Got signal\n"); // NOT async-signal-safe
|
|
145
|
+
malloc(100); // NOT async-signal-safe
|
|
146
|
+
free(ptr); // NOT async-signal-safe
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Async-signal-safe: write(), _exit(), signal()
|
|
150
|
+
// Most functions including printf, malloc, free are NOT safe
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## Time-of-Check to Time-of-Use (TOCTOU)
|
|
154
|
+
|
|
155
|
+
```c
|
|
156
|
+
// DANGEROUS: File state can change between check and use
|
|
157
|
+
if (access(filename, W_OK) == 0) {
|
|
158
|
+
// Attacker replaces file with symlink here
|
|
159
|
+
fd = open(filename, O_WRONLY); // Opens different file
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
**Fix**: Open first, then check permissions on the file descriptor.
|
|
164
|
+
|
|
165
|
+
## Variadic Function Pitfalls
|
|
166
|
+
|
|
167
|
+
```c
|
|
168
|
+
// DANGEROUS: Wrong format specifier
|
|
169
|
+
printf("%d", (long long)value); // %d expects int, not long long
|
|
170
|
+
printf("%s", 42); // Interprets 42 as pointer
|
|
171
|
+
|
|
172
|
+
// DANGEROUS: Missing sentinel
|
|
173
|
+
execl("/bin/ls", "ls", "-l", NULL); // NULL required!
|
|
174
|
+
execl("/bin/ls", "ls", "-l"); // Missing NULL = UB
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
## Macro Pitfalls
|
|
178
|
+
|
|
179
|
+
```c
|
|
180
|
+
// DANGEROUS: Macro arguments evaluated multiple times
|
|
181
|
+
#define SQUARE(x) ((x) * (x))
|
|
182
|
+
int a = 5;
|
|
183
|
+
SQUARE(a++); // Expands to ((a++) * (a++)) - increments twice!
|
|
184
|
+
|
|
185
|
+
// DANGEROUS: Operator precedence
|
|
186
|
+
#define ADD(a, b) a + b
|
|
187
|
+
int x = ADD(1, 2) * 3; // Expands to 1 + 2 * 3 = 7, not 9
|
|
188
|
+
|
|
189
|
+
// SAFER: Fully parenthesize
|
|
190
|
+
#define ADD(a, b) ((a) + (b))
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
## Detection Patterns
|
|
194
|
+
|
|
195
|
+
Search for these patterns in C/C++ code:
|
|
196
|
+
|
|
197
|
+
| Pattern | Risk |
|
|
198
|
+
|---------|------|
|
|
199
|
+
| `strcpy`, `strcat`, `gets`, `sprintf` | Buffer overflow |
|
|
200
|
+
| `printf(var)` where var is not literal | Format string |
|
|
201
|
+
| `memset` before variable goes out of scope | Dead store elimination |
|
|
202
|
+
| `free(ptr)` without `ptr = NULL` | Double free risk |
|
|
203
|
+
| `malloc` without overflow check on size | Integer overflow |
|
|
204
|
+
| Arithmetic on `int` near INT_MAX | Signed overflow UB |
|
|
205
|
+
| `strncpy` without explicit null termination | Missing terminator |
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
# C# Sharp Edges
|
|
2
|
+
|
|
3
|
+
## Nullable Reference Types
|
|
4
|
+
|
|
5
|
+
```csharp
|
|
6
|
+
// DANGEROUS: NRT is opt-in and warnings-only by default
|
|
7
|
+
// Project must enable: <Nullable>enable</Nullable>
|
|
8
|
+
|
|
9
|
+
string? nullable = null;
|
|
10
|
+
string nonNull = nullable; // Warning, but compiles!
|
|
11
|
+
nonNull.Length; // NullReferenceException at runtime
|
|
12
|
+
|
|
13
|
+
// DANGEROUS: Suppression operator
|
|
14
|
+
string value = possiblyNull!; // Suppresses warning, doesn't fix bug
|
|
15
|
+
|
|
16
|
+
// DANGEROUS: Default enabled doesn't mean enforced
|
|
17
|
+
// Many legacy codebases have NRT enabled with thousands of warnings ignored
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**Fix**: Enable NRT AND treat warnings as errors:
|
|
21
|
+
```xml
|
|
22
|
+
<Nullable>enable</Nullable>
|
|
23
|
+
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Default Struct Values
|
|
27
|
+
|
|
28
|
+
```csharp
|
|
29
|
+
// DANGEROUS: Structs have default(T) that may be invalid
|
|
30
|
+
struct Connection {
|
|
31
|
+
public string Host; // Default: null
|
|
32
|
+
public int Port; // Default: 0
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
var conn = default(Connection);
|
|
36
|
+
// conn.Host is null, conn.Port is 0 - probably invalid state
|
|
37
|
+
|
|
38
|
+
// DANGEROUS: Array of structs
|
|
39
|
+
var connections = new Connection[10];
|
|
40
|
+
// All 10 are default(Connection) - invalid state
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**Fix**: Use constructors, or make structs readonly with init validation.
|
|
44
|
+
|
|
45
|
+
## IDisposable Leaks
|
|
46
|
+
|
|
47
|
+
```csharp
|
|
48
|
+
// DANGEROUS: Resources not disposed on exception
|
|
49
|
+
var conn = new SqlConnection(connectionString);
|
|
50
|
+
conn.Open();
|
|
51
|
+
// Exception here = connection never closed
|
|
52
|
+
Process(conn);
|
|
53
|
+
conn.Dispose();
|
|
54
|
+
|
|
55
|
+
// DANGEROUS: Nested disposables
|
|
56
|
+
var outer = new Outer(); // Creates inner disposable
|
|
57
|
+
// Exception before outer.Dispose() = inner leaked
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Fix**: Use `using` statement or declaration:
|
|
61
|
+
```csharp
|
|
62
|
+
using var conn = new SqlConnection(connectionString);
|
|
63
|
+
conn.Open();
|
|
64
|
+
// Disposed even on exception
|
|
65
|
+
|
|
66
|
+
using (var conn = new SqlConnection(...)) {
|
|
67
|
+
// Scoped disposal
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Async/Await Pitfalls
|
|
72
|
+
|
|
73
|
+
```csharp
|
|
74
|
+
// DANGEROUS: async void - exceptions can't be caught
|
|
75
|
+
async void FireAndForget() {
|
|
76
|
+
throw new Exception("Lost!"); // Crashes the process
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// DANGEROUS: Deadlock with .Result
|
|
80
|
+
async Task DoWork() {
|
|
81
|
+
await Task.Delay(100);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
void Caller() {
|
|
85
|
+
DoWork().Result; // Deadlock in UI/ASP.NET contexts!
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// DANGEROUS: Forgetting to await
|
|
89
|
+
async Task Process() {
|
|
90
|
+
DoWorkAsync(); // Not awaited - runs in background
|
|
91
|
+
// Exceptions lost, no completion guarantee
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**Fix**: Always return Task, use `ConfigureAwait(false)` in libraries:
|
|
96
|
+
```csharp
|
|
97
|
+
async Task DoWorkAsync() {
|
|
98
|
+
await Task.Delay(100).ConfigureAwait(false);
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## LINQ Deferred Execution
|
|
103
|
+
|
|
104
|
+
```csharp
|
|
105
|
+
// DANGEROUS: LINQ queries are lazy
|
|
106
|
+
var query = items.Where(x => x.IsValid);
|
|
107
|
+
// Nothing executed yet!
|
|
108
|
+
|
|
109
|
+
items.Add(newItem); // Added after query defined
|
|
110
|
+
foreach (var item in query) {
|
|
111
|
+
// newItem IS included - query executes here
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// DANGEROUS: Multiple enumeration
|
|
115
|
+
var filtered = items.Where(x => ExpensiveCheck(x));
|
|
116
|
+
var count = filtered.Count(); // Executes query
|
|
117
|
+
var first = filtered.First(); // Executes query AGAIN
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**Fix**: Materialize with `.ToList()` or `.ToArray()` when needed.
|
|
121
|
+
|
|
122
|
+
## String Comparison
|
|
123
|
+
|
|
124
|
+
```csharp
|
|
125
|
+
// DANGEROUS: Culture-sensitive comparison by default
|
|
126
|
+
"stra\u00dfe".Equals("strasse"); // Depends on culture!
|
|
127
|
+
|
|
128
|
+
// DANGEROUS: Turkish-I problem
|
|
129
|
+
"INFO".ToLower() == "info" // FALSE in Turkish culture!
|
|
130
|
+
// Turkish: I → ı (dotless i), İ → i
|
|
131
|
+
|
|
132
|
+
// DANGEROUS: Ordinal vs linguistic
|
|
133
|
+
string.Compare("a", "A"); // Culture-dependent
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**Fix**: Use ordinal comparison for identifiers:
|
|
137
|
+
```csharp
|
|
138
|
+
string.Equals(a, b, StringComparison.Ordinal);
|
|
139
|
+
string.Equals(a, b, StringComparison.OrdinalIgnoreCase);
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
## Boxing and Unboxing
|
|
143
|
+
|
|
144
|
+
```csharp
|
|
145
|
+
// DANGEROUS: Hidden boxing with value types
|
|
146
|
+
int value = 42;
|
|
147
|
+
object boxed = value; // Boxing allocation
|
|
148
|
+
int unboxed = (int)boxed; // Unboxing
|
|
149
|
+
|
|
150
|
+
// DANGEROUS: Interface boxing
|
|
151
|
+
struct Point : IComparable<Point> { ... }
|
|
152
|
+
IComparable<Point> comparable = point; // Boxed!
|
|
153
|
+
|
|
154
|
+
// DANGEROUS: LINQ with value types
|
|
155
|
+
var ints = new[] { 1, 2, 3 };
|
|
156
|
+
ints.Where(x => x > 1); // Closure may box
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## Equality Implementation
|
|
160
|
+
|
|
161
|
+
```csharp
|
|
162
|
+
// DANGEROUS: Incorrect equality implementation
|
|
163
|
+
class MyClass {
|
|
164
|
+
public int Id;
|
|
165
|
+
|
|
166
|
+
public override bool Equals(object obj) {
|
|
167
|
+
return Id == ((MyClass)obj).Id; // Throws if obj is null or wrong type
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// DANGEROUS: Missing GetHashCode
|
|
171
|
+
// Objects that are Equal MUST have same hash code
|
|
172
|
+
// But: public override int GetHashCode() => ... // Missing!
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
**Fix**: Implement correctly or use records (C# 9+):
|
|
177
|
+
```csharp
|
|
178
|
+
record MyRecord(int Id); // Equality implemented correctly
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## Lock Pitfalls
|
|
182
|
+
|
|
183
|
+
```csharp
|
|
184
|
+
// DANGEROUS: Locking on public object
|
|
185
|
+
public object SyncRoot = new object();
|
|
186
|
+
lock (SyncRoot) { } // External code can deadlock
|
|
187
|
+
|
|
188
|
+
// DANGEROUS: Locking on this
|
|
189
|
+
lock (this) { } // External code can lock same object
|
|
190
|
+
|
|
191
|
+
// DANGEROUS: Locking on Type
|
|
192
|
+
lock (typeof(MyClass)) { } // Type objects are shared across AppDomains
|
|
193
|
+
|
|
194
|
+
// DANGEROUS: Locking on string
|
|
195
|
+
lock ("mylock") { } // String interning makes this shared!
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
**Fix**: Lock on private readonly object:
|
|
199
|
+
```csharp
|
|
200
|
+
private readonly object _lock = new object();
|
|
201
|
+
lock (_lock) { }
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
## Finalizers
|
|
205
|
+
|
|
206
|
+
```csharp
|
|
207
|
+
// DANGEROUS: Finalizer delays GC and can resurrect objects
|
|
208
|
+
class Problematic {
|
|
209
|
+
~Problematic() {
|
|
210
|
+
// This code runs on finalizer thread
|
|
211
|
+
// Can't access other managed objects safely
|
|
212
|
+
GlobalList.Add(this); // Resurrection!
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// DANGEROUS: Finalizer without dispose pattern
|
|
217
|
+
// Object stays in memory longer (finalization queue)
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
**Fix**: Implement dispose pattern, avoid finalizers:
|
|
221
|
+
```csharp
|
|
222
|
+
class Proper : IDisposable {
|
|
223
|
+
private bool _disposed;
|
|
224
|
+
|
|
225
|
+
public void Dispose() {
|
|
226
|
+
Dispose(true);
|
|
227
|
+
GC.SuppressFinalize(this);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
protected virtual void Dispose(bool disposing) {
|
|
231
|
+
if (_disposed) return;
|
|
232
|
+
if (disposing) { /* managed cleanup */ }
|
|
233
|
+
// unmanaged cleanup
|
|
234
|
+
_disposed = true;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
## Event Handler Memory Leaks
|
|
240
|
+
|
|
241
|
+
```csharp
|
|
242
|
+
// DANGEROUS: Event handlers keep objects alive
|
|
243
|
+
class Publisher {
|
|
244
|
+
public event EventHandler Changed;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
class Subscriber {
|
|
248
|
+
public Subscriber(Publisher pub) {
|
|
249
|
+
pub.Changed += OnChanged; // Subscriber now rooted by Publisher
|
|
250
|
+
// Even if Subscriber should be collected, it won't be
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
**Fix**: Unsubscribe in Dispose or use weak events.
|
|
256
|
+
|
|
257
|
+
## Serialization
|
|
258
|
+
|
|
259
|
+
```csharp
|
|
260
|
+
// DANGEROUS: BinaryFormatter is insecure
|
|
261
|
+
var formatter = new BinaryFormatter();
|
|
262
|
+
formatter.Deserialize(untrustedStream); // RCE vulnerability
|
|
263
|
+
|
|
264
|
+
// Microsoft: "BinaryFormatter is dangerous and is not recommended"
|
|
265
|
+
// Similar issues with NetDataContractSerializer, SoapFormatter
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
**Fix**: Use JSON, XML with known types, or protobuf.
|
|
269
|
+
|
|
270
|
+
## Detection Patterns
|
|
271
|
+
|
|
272
|
+
| Pattern | Risk |
|
|
273
|
+
|---------|------|
|
|
274
|
+
| `string? x = null; string y = x;` | NRT warning ignored |
|
|
275
|
+
| `possiblyNull!` | Null suppression |
|
|
276
|
+
| `new Connection[n]` for structs | Invalid default state |
|
|
277
|
+
| `SqlConnection` without `using` | Resource leak |
|
|
278
|
+
| `async void` | Unhandled exceptions |
|
|
279
|
+
| `.Result` or `.Wait()` on Task | Deadlock |
|
|
280
|
+
| Missing `await` before async call | Fire and forget |
|
|
281
|
+
| `.Where()` without materialization | Multiple enumeration |
|
|
282
|
+
| `string.Equals` without StringComparison | Culture bugs |
|
|
283
|
+
| `lock (this)` or `lock (typeof(...))` | Deadlock risk |
|
|
284
|
+
| `BinaryFormatter` | Deserialization RCE |
|
|
285
|
+
| Event subscription without unsubscription | Memory leak |
|