Compare commits
9 commits
19b4a20a02
...
7d4708b516
| Author | SHA1 | Date | |
|---|---|---|---|
| 7d4708b516 | |||
| 34af1f2a16 | |||
| 21b96804e8 | |||
| a6a221788b | |||
| 610741e123 | |||
| ddb11a7c06 | |||
| 57b09e5b66 | |||
| 046dbc63ad | |||
| c3c235f8c4 |
4 changed files with 287 additions and 2 deletions
156
SECURITY_CHECKLIST.md
Normal file
156
SECURITY_CHECKLIST.md
Normal file
|
|
@ -0,0 +1,156 @@
|
||||||
|
# General Bots Security Checklist
|
||||||
|
|
||||||
|
## Critical (P1) - Must Fix Immediately
|
||||||
|
|
||||||
|
### Authentication & Authorization
|
||||||
|
- [ ] **SecurityManager Integration** - Initialize in bootstrap
|
||||||
|
- [ ] **CSRF Protection** - Enable for all state-changing endpoints
|
||||||
|
- [ ] **Error Handling** - Replace all `unwrap()`/`expect()` calls
|
||||||
|
- [ ] **Security Headers** - Apply to all HTTP routes
|
||||||
|
|
||||||
|
### Data Protection
|
||||||
|
- [ ] **TLS/MTLS** - Ensure certificates are generated and validated
|
||||||
|
- [ ] **SafeCommand Usage** - Replace all `Command::new()` calls
|
||||||
|
- [ ] **Error Sanitization** - Use `ErrorSanitizer` for all HTTP errors
|
||||||
|
|
||||||
|
## High Priority (P2) - Fix Within 2 Weeks
|
||||||
|
|
||||||
|
### Authentication
|
||||||
|
- [ ] **Passkey Support** - Complete WebAuthn implementation
|
||||||
|
- [ ] **MFA Enhancement** - Add backup codes and recovery flows
|
||||||
|
- [ ] **API Key Management** - Implement rotation and expiration
|
||||||
|
|
||||||
|
### Monitoring & Detection
|
||||||
|
- [ ] **Security Monitoring** - Integrate `SecurityMonitor` with app events
|
||||||
|
- [ ] **DLP Policies** - Configure default policies for PII/PCI/PHI
|
||||||
|
- [ ] **Rate Limiting** - Apply consistent limits across all endpoints
|
||||||
|
|
||||||
|
## Medium Priority (P3) - Fix Within 1 Month
|
||||||
|
|
||||||
|
### Infrastructure
|
||||||
|
- [ ] **Certificate Management** - Add expiration monitoring and auto-renewal
|
||||||
|
- [ ] **Audit Logging** - Ensure comprehensive coverage
|
||||||
|
- [ ] **Security Testing** - Create dedicated test suite
|
||||||
|
|
||||||
|
### Compliance
|
||||||
|
- [ ] **Security Documentation** - Update policies and procedures
|
||||||
|
- [ ] **Compliance Mapping** - Map controls to SOC2/GDPR/ISO27001
|
||||||
|
- [ ] **Evidence Collection** - Implement automated evidence gathering
|
||||||
|
|
||||||
|
## Quick Wins (Can be done today)
|
||||||
|
|
||||||
|
### Code Quality
|
||||||
|
- [ ] Run `cargo clippy --workspace` and fix all warnings
|
||||||
|
- [ ] Use `cargo audit` to check for vulnerable dependencies
|
||||||
|
- [ ] Replace 10 `unwrap()` calls with proper error handling
|
||||||
|
|
||||||
|
### Configuration
|
||||||
|
- [ ] Check `.env` files for hardcoded secrets (move to `/tmp/`)
|
||||||
|
- [ ] Verify `botserver-stack/conf/` permissions
|
||||||
|
- [ ] Review `Cargo.toml` for unnecessary dependencies
|
||||||
|
|
||||||
|
### Testing
|
||||||
|
- [ ] Test authentication flows with invalid credentials
|
||||||
|
- [ ] Verify CSRF tokens are required for POST/PUT/DELETE
|
||||||
|
- [ ] Check security headers on main endpoints
|
||||||
|
|
||||||
|
## Daily Security Tasks
|
||||||
|
|
||||||
|
### Morning Check
|
||||||
|
- [ ] Review `botserver.log` for security events
|
||||||
|
- [ ] Check `cargo audit` for new vulnerabilities
|
||||||
|
- [ ] Monitor failed login attempts
|
||||||
|
- [ ] Verify certificate expiration dates
|
||||||
|
|
||||||
|
### Ongoing Monitoring
|
||||||
|
- [ ] Watch for unusual access patterns
|
||||||
|
- [ ] Monitor DLP policy violations
|
||||||
|
- [ ] Track security metric trends
|
||||||
|
- [ ] Review audit logs for anomalies
|
||||||
|
|
||||||
|
### Weekly Tasks
|
||||||
|
- [ ] Run full security scan with protection tools
|
||||||
|
- [ ] Review and rotate any expiring credentials
|
||||||
|
- [ ] Update security dependencies
|
||||||
|
- [ ] Backup security configurations
|
||||||
|
|
||||||
|
## Emergency Response
|
||||||
|
|
||||||
|
### If you suspect a breach:
|
||||||
|
1. **Isolate** - Disconnect affected systems
|
||||||
|
2. **Preserve** - Don't delete logs or evidence
|
||||||
|
3. **Document** - Record all actions and observations
|
||||||
|
4. **Escalate** - Contact security team immediately
|
||||||
|
5. **Contain** - Implement temporary security measures
|
||||||
|
6. **Investigate** - Determine scope and impact
|
||||||
|
7. **Remediate** - Fix vulnerabilities and restore services
|
||||||
|
8. **Learn** - Update procedures to prevent recurrence
|
||||||
|
|
||||||
|
## Security Tools Commands
|
||||||
|
|
||||||
|
### Dependency Scanning
|
||||||
|
```bash
|
||||||
|
cargo audit
|
||||||
|
cargo deny check
|
||||||
|
cargo geiger
|
||||||
|
```
|
||||||
|
|
||||||
|
### Code Analysis
|
||||||
|
```bash
|
||||||
|
cargo clippy --workspace -- -D warnings
|
||||||
|
cargo fmt --check
|
||||||
|
```
|
||||||
|
|
||||||
|
### Security Testing
|
||||||
|
```bash
|
||||||
|
# Run security tests
|
||||||
|
cargo test -p bottest --test security
|
||||||
|
|
||||||
|
# Check for unsafe code
|
||||||
|
cargo geiger --forbid
|
||||||
|
|
||||||
|
# Audit dependencies
|
||||||
|
cargo audit --deny warnings
|
||||||
|
```
|
||||||
|
|
||||||
|
### Protection Tools
|
||||||
|
```bash
|
||||||
|
# Security scanning
|
||||||
|
curl -X POST http://localhost:9000/api/security/protection/scan
|
||||||
|
|
||||||
|
# Get security report
|
||||||
|
curl http://localhost:9000/api/security/protection/report
|
||||||
|
|
||||||
|
# Check tool status
|
||||||
|
curl http://localhost:9000/api/security/protection/status
|
||||||
|
```
|
||||||
|
|
||||||
|
## Common Security Issues to Watch For
|
||||||
|
|
||||||
|
### 1. Hardcoded Secrets
|
||||||
|
**Bad:** `password = "secret123"` in code
|
||||||
|
**Good:** `password = env::var("DB_PASSWORD")?` from `/tmp/`
|
||||||
|
|
||||||
|
### 2. Unsafe Command Execution
|
||||||
|
**Bad:** `Command::new("rm").arg("-rf").arg(user_input)`
|
||||||
|
**Good:** `SafeCommand::new("rm")?.arg("-rf")?.arg(sanitized_input)?`
|
||||||
|
|
||||||
|
### 3. Missing Input Validation
|
||||||
|
**Bad:** `format!("SELECT * FROM {}", user_table)`
|
||||||
|
**Good:** `validate_table_name(&user_table)?; format!("SELECT * FROM {}", safe_table)`
|
||||||
|
|
||||||
|
### 4. Information Disclosure
|
||||||
|
**Bad:** `Json(json!({ "error": e.to_string() }))`
|
||||||
|
**Good:** `let sanitized = log_and_sanitize(&e, "context", None); (StatusCode::INTERNAL_SERVER_ERROR, sanitized)`
|
||||||
|
|
||||||
|
## Security Contact Information
|
||||||
|
|
||||||
|
**Primary Contact:** security@pragmatismo.com.br
|
||||||
|
**Backup Contact:** Check `security.txt` at `/.well-known/security.txt`
|
||||||
|
|
||||||
|
**Emergency Response:** Follow procedures in `botbook/src/12-auth/security-policy.md`
|
||||||
|
|
||||||
|
---
|
||||||
|
*Last Updated: 2026-02-22*
|
||||||
|
*Review Frequency: Weekly*
|
||||||
|
*Next Review: 2026-03-01*
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit 764f05865348714911be3f2f8d2a3f8c693b20d3
|
Subproject commit 0b1b17406db9d4cc91c1a29cf549398e72fd111a
|
||||||
2
botui
2
botui
|
|
@ -1 +1 @@
|
||||||
Subproject commit 6afeeb311f0ed9be0a3058fe07f21e6a476bdf42
|
Subproject commit 0c2dd80f30111ea4e74c751687faabb11eacbc12
|
||||||
129
security_audit.sh
Executable file
129
security_audit.sh
Executable file
|
|
@ -0,0 +1,129 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# General Bots Security Audit Script
|
||||||
|
# This script helps identify critical security issues in the codebase
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
echo "🔒 General Bots Security Audit"
|
||||||
|
echo "=============================="
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check for hardcoded secrets
|
||||||
|
echo "1. Checking for hardcoded secrets..."
|
||||||
|
if grep -r "password\s*=\s*\"" --include="*.rs" --include="*.toml" --include="*.json" . 2>/dev/null | grep -v "test" | grep -v "example" | head -10; then
|
||||||
|
echo "⚠️ WARNING: Found potential hardcoded passwords"
|
||||||
|
else
|
||||||
|
echo "✅ No obvious hardcoded passwords found"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check for unwrap/expect calls
|
||||||
|
echo "2. Checking for unwrap/expect calls..."
|
||||||
|
UNWRAP_COUNT=$(grep -r "\.unwrap()\|\.expect(" --include="*.rs" . 2>/dev/null | wc -l)
|
||||||
|
if [ "$UNWRAP_COUNT" -gt 0 ]; then
|
||||||
|
echo "⚠️ WARNING: Found $UNWRAP_COUNT unwrap/expect calls"
|
||||||
|
echo " Sample locations:"
|
||||||
|
grep -r "\.unwrap()\|\.expect(" --include="*.rs" . 2>/dev/null | head -5
|
||||||
|
else
|
||||||
|
echo "✅ No unwrap/expect calls found"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check for Command::new usage
|
||||||
|
echo "3. Checking for unsafe command execution..."
|
||||||
|
if grep -r "Command::new" --include="*.rs" . 2>/dev/null | grep -v "SafeCommand" | head -5; then
|
||||||
|
echo "⚠️ WARNING: Found potential unsafe command execution"
|
||||||
|
echo " Should use SafeCommand instead"
|
||||||
|
else
|
||||||
|
echo "✅ No unsafe Command::new calls found"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check for SQL injection patterns
|
||||||
|
echo "4. Checking for SQL injection patterns..."
|
||||||
|
if grep -r "format!.*SELECT\|format!.*INSERT\|format!.*UPDATE\|format!.*DELETE" --include="*.rs" . 2>/dev/null | grep -v "sanitize" | head -5; then
|
||||||
|
echo "⚠️ WARNING: Found potential SQL injection patterns"
|
||||||
|
echo " Should use sql_guard functions"
|
||||||
|
else
|
||||||
|
echo "✅ No obvious SQL injection patterns found"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check security headers in routes
|
||||||
|
echo "5. Checking for security middleware usage..."
|
||||||
|
if grep -r "security_headers_middleware\|csrf_middleware\|rate_limit_middleware" --include="*.rs" . 2>/dev/null | head -5; then
|
||||||
|
echo "✅ Security middleware found"
|
||||||
|
else
|
||||||
|
echo "⚠️ WARNING: No security middleware found in routes"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check for SecurityManager usage
|
||||||
|
echo "6. Checking for SecurityManager initialization..."
|
||||||
|
if grep -r "SecurityManager::new\|SecurityManager::initialize" --include="*.rs" . 2>/dev/null; then
|
||||||
|
echo "✅ SecurityManager usage found"
|
||||||
|
else
|
||||||
|
echo "⚠️ WARNING: SecurityManager not initialized"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check dependencies
|
||||||
|
echo "7. Checking dependencies..."
|
||||||
|
if command -v cargo-audit &> /dev/null; then
|
||||||
|
echo "Running cargo audit..."
|
||||||
|
cargo audit
|
||||||
|
else
|
||||||
|
echo "⚠️ Install cargo-audit: cargo install cargo-audit"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check for .env files in git
|
||||||
|
echo "8. Checking for secrets in git..."
|
||||||
|
if find . -name ".env" -type f | grep -v node_modules | grep -v target; then
|
||||||
|
echo "⚠️ WARNING: .env files found in repository"
|
||||||
|
echo " Secrets should be in /tmp/ only"
|
||||||
|
else
|
||||||
|
echo "✅ No .env files in repository"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check file permissions
|
||||||
|
echo "9. Checking critical file permissions..."
|
||||||
|
if [ -f "botserver-stack/conf/vault/init.json" ]; then
|
||||||
|
PERMS=$(stat -c "%a" "botserver-stack/conf/vault/init.json")
|
||||||
|
if [ "$PERMS" -gt 600 ]; then
|
||||||
|
echo "⚠️ WARNING: Vault init file permissions too open: $PERMS"
|
||||||
|
echo " Should be 600 or 400"
|
||||||
|
else
|
||||||
|
echo "✅ Vault init file permissions OK: $PERMS"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Summary
|
||||||
|
echo "📊 Security Audit Summary"
|
||||||
|
echo "========================"
|
||||||
|
echo ""
|
||||||
|
echo "Critical Issues to Address:"
|
||||||
|
echo "1. $UNWRAP_COUNT unwrap/expect calls need replacement"
|
||||||
|
echo "2. SecurityManager initialization missing"
|
||||||
|
echo "3. Security middleware may not be applied to all routes"
|
||||||
|
echo ""
|
||||||
|
echo "Next Steps:"
|
||||||
|
echo "1. Review TASKS.md for detailed remediation plan"
|
||||||
|
echo "2. Fix P1 issues first (SecurityManager, error handling)"
|
||||||
|
echo "3. Run cargo clippy and fix all warnings"
|
||||||
|
echo "4. Implement security testing"
|
||||||
|
echo ""
|
||||||
|
echo "For detailed tasks, see: TASKS.md"
|
||||||
|
echo "For quick checklist, see: SECURITY_CHECKLIST.md"
|
||||||
Loading…
Add table
Reference in a new issue