# LDR Custom Security Rules This directory contains custom Semgrep security rules specific to Local Deep Research (LDR). ## Rules Overview ### ldr-security.yaml LDR-specific security rules covering: 1. **Hardcoded Secrets** - Detects API keys, passwords, tokens in source code - Severity: ERROR - CWE-798 2. **SQL Injection Prevention** - Detects string concatenation in SQL queries - Enforces parameterized queries via SQLAlchemy - Severity: ERROR - CWE-89 3. **Code Injection** - Detects dangerous use of eval/exec - Prevents arbitrary code execution - Severity: ERROR - CWE-95 4. **Command Injection** - Detects unsafe use of os.system, shell=True - Enforces subprocess with argument lists - Severity: ERROR - CWE-78 5. **Path Traversal** - Detects unsanitized user input in file paths - Prevents directory traversal attacks - Severity: WARNING - CWE-22 6. **Unsafe Deserialization** - Detects unsafe YAML/pickle loading - Prevents code execution via deserialization - Severity: ERROR - CWE-502 7. **Weak Randomness** - Detects use of random module for security - Enforces secrets module for crypto operations - Severity: WARNING - CWE-338 8. **Debug Mode in Production** - Detects Flask debug=True - Prevents information disclosure - Severity: ERROR - CWE-489 9. **SSRF Prevention** - Detects URL fetching operations - Reminds to validate URLs - Severity: WARNING - CWE-918 10. **XSS Prevention** - Detects user input in HTML context - Enforces proper escaping - Severity: WARNING - CWE-79 11. **CSRF Protection** - Detects POST endpoints - Reminds to enable CSRF protection - Severity: INFO - CWE-352 12. **Credential Logging** - Detects passwords in log statements - Prevents credential disclosure - Severity: ERROR - CWE-532 ## Usage These rules are automatically run by the Semgrep CI/CD workflow: ```bash # Run locally semgrep --config=.semgrep/rules/ src/ # Run with standard rules semgrep --config=p/security-audit --config=.semgrep/rules/ src/ ``` ## Adding New Rules To add new custom rules: 1. Create a new YAML file in `.semgrep/rules/` 2. Follow [Semgrep rule syntax](https://semgrep.dev/docs/writing-rules/overview/) 3. Test the rule: `semgrep --config=.semgrep/rules/your-rule.yaml src/` 4. Document the rule in this README ## Rule Template ```yaml rules: - id: your-rule-id pattern: | # Your pattern here message: Description of the security issue languages: [python] severity: ERROR # or WARNING, INFO metadata: category: security cwe: "CWE-XXX: Description" owasp: "AXX:2021 - Category" ``` ## References - [Semgrep Documentation](https://semgrep.dev/docs/) - [OWASP Top 10 2021](https://owasp.org/Top10/) - [CWE Top 25](https://cwe.mitre.org/top25/) - [Semgrep Registry](https://semgrep.dev/explore)