- Added/updated .gitignore file - Fixed remote URL configuration - Updated project structure and files 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
332 lines
11 KiB
Markdown
332 lines
11 KiB
Markdown
# Security Policy
|
|
|
|
## Overview
|
|
|
|
WHOOSH implements enterprise-grade security controls to protect against common web application vulnerabilities and ensure safe operation in production environments. This document outlines our security implementation, best practices, and procedures.
|
|
|
|
## 🔐 Security Implementation
|
|
|
|
### Authentication & Authorization
|
|
|
|
**JWT Authentication**
|
|
- Role-based access control (admin/user roles)
|
|
- Configurable token expiration (default: 24 hours)
|
|
- Support for file-based and environment-based secrets
|
|
- Secure token validation with comprehensive error handling
|
|
|
|
**Service Token Authentication**
|
|
- Internal service-to-service authentication
|
|
- Scoped permissions for automated systems
|
|
- Support for multiple service tokens
|
|
- Configurable token management
|
|
|
|
**Protected Endpoints**
|
|
All administrative endpoints require proper authentication:
|
|
- Council management (`/api/v1/councils/*/artifacts`)
|
|
- Repository operations (`/api/v1/repositories/*`)
|
|
- Team management (`/api/v1/teams/*`)
|
|
- Task ingestion (`/api/v1/tasks/ingest`)
|
|
- Project operations (`/api/v1/projects/*`)
|
|
|
|
### Input Validation & Sanitization
|
|
|
|
**Comprehensive Input Validation**
|
|
- Regex-based validation for all input types
|
|
- Request body size limits (1MB default, 10MB for webhooks)
|
|
- UUID validation for all identifiers
|
|
- Safe character restrictions for names and titles
|
|
|
|
**Validation Rules**
|
|
```go
|
|
Project Names: ^[a-zA-Z0-9\s\-_]+$ (max 100 chars)
|
|
Git URLs: Proper URL format validation
|
|
Task Titles: Safe characters only (max 200 chars)
|
|
Agent IDs: ^[a-zA-Z0-9\-]+$ (max 50 chars)
|
|
UUIDs: RFC 4122 compliant format
|
|
```
|
|
|
|
**Injection Prevention**
|
|
- SQL injection prevention through parameterized queries
|
|
- XSS prevention through input sanitization
|
|
- Command injection prevention through input validation
|
|
- Path traversal prevention through path sanitization
|
|
|
|
### CORS Configuration
|
|
|
|
**Production-Safe CORS**
|
|
- No wildcard origins in production
|
|
- Configurable allowed origins via environment variables
|
|
- Support for file-based origin configuration
|
|
- Restricted allowed headers and methods
|
|
|
|
**Configuration Example**
|
|
```bash
|
|
# Production CORS configuration
|
|
WHOOSH_CORS_ALLOWED_ORIGINS=https://app.company.com,https://admin.company.com
|
|
WHOOSH_CORS_ALLOWED_METHODS=GET,POST,PUT,DELETE,OPTIONS
|
|
WHOOSH_CORS_ALLOWED_HEADERS=Authorization,Content-Type,X-Requested-With
|
|
WHOOSH_CORS_ALLOW_CREDENTIALS=true
|
|
```
|
|
|
|
### Rate Limiting
|
|
|
|
**Per-IP Rate Limiting**
|
|
- Default: 100 requests per minute per IP address
|
|
- Configurable limits and time windows
|
|
- Automatic cleanup to prevent memory leaks
|
|
- Support for proxy headers (X-Forwarded-For, X-Real-IP)
|
|
|
|
**Configuration**
|
|
```bash
|
|
WHOOSH_RATE_LIMIT_ENABLED=true
|
|
WHOOSH_RATE_LIMIT_REQUESTS=100 # Requests per window
|
|
WHOOSH_RATE_LIMIT_WINDOW=60s # Rate limiting window
|
|
WHOOSH_RATE_LIMIT_CLEANUP_INTERVAL=300s # Cleanup frequency
|
|
```
|
|
|
|
### Security Headers
|
|
|
|
**HTTP Security Headers**
|
|
```
|
|
Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'
|
|
X-Frame-Options: DENY
|
|
X-Content-Type-Options: nosniff
|
|
X-XSS-Protection: 1; mode=block
|
|
Referrer-Policy: strict-origin-when-cross-origin
|
|
```
|
|
|
|
### Webhook Security
|
|
|
|
**Gitea Webhook Protection**
|
|
- HMAC SHA-256 signature validation
|
|
- Timing-safe signature comparison using `hmac.Equal`
|
|
- Request body size limits (10MB maximum)
|
|
- Content-Type header validation
|
|
- Comprehensive attack attempt logging
|
|
|
|
**Configuration**
|
|
```bash
|
|
WHOOSH_WEBHOOK_SECRET_FILE=/run/secrets/webhook_secret
|
|
WHOOSH_MAX_WEBHOOK_SIZE=10485760 # 10MB
|
|
```
|
|
|
|
## 🛡️ Security Best Practices
|
|
|
|
### Production Deployment
|
|
|
|
**Secret Management**
|
|
```bash
|
|
# Use file-based secrets in production
|
|
WHOOSH_JWT_SECRET_FILE=/run/secrets/jwt_secret
|
|
WHOOSH_GITEA_TOKEN_FILE=/run/secrets/gitea_token
|
|
WHOOSH_WEBHOOK_SECRET_FILE=/run/secrets/webhook_secret
|
|
|
|
# Docker Swarm secrets example
|
|
echo "strong-jwt-secret-32-chars-min" | docker secret create whoosh_jwt_secret -
|
|
```
|
|
|
|
**Database Security**
|
|
```bash
|
|
# Use SSL/TLS for database connections
|
|
WHOOSH_DATABASE_URL=postgres://user:pass@host/db?sslmode=require
|
|
|
|
# Connection pool limits
|
|
WHOOSH_DB_MAX_OPEN_CONNS=25
|
|
WHOOSH_DB_MAX_IDLE_CONNS=10
|
|
WHOOSH_DB_CONN_MAX_LIFETIME=300s
|
|
```
|
|
|
|
**TLS Configuration**
|
|
```bash
|
|
# Enable TLS in production
|
|
WHOOSH_TLS_ENABLED=true
|
|
WHOOSH_TLS_CERT_FILE=/path/to/cert.pem
|
|
WHOOSH_TLS_KEY_FILE=/path/to/key.pem
|
|
WHOOSH_TLS_MIN_VERSION=1.2
|
|
```
|
|
|
|
### Security Monitoring
|
|
|
|
**Logging & Monitoring**
|
|
- Structured logging with security event correlation
|
|
- Failed authentication attempt monitoring
|
|
- Rate limit violation alerting
|
|
- Administrative action audit logging
|
|
|
|
**Health & Security Endpoints**
|
|
- `/health` - Basic health check (unauthenticated)
|
|
- `/admin/health/details` - Detailed system status (authenticated)
|
|
- `/metrics` - Prometheus metrics (unauthenticated)
|
|
|
|
### Access Control
|
|
|
|
**Role-Based Permissions**
|
|
- **Admin Role**: Full system access, administrative operations
|
|
- **User Role**: Read-only access to public endpoints
|
|
- **Service Tokens**: Scoped access for internal services
|
|
|
|
**Endpoint Protection Matrix**
|
|
| Endpoint Category | Authentication | Authorization |
|
|
|-------------------|---------------|---------------|
|
|
| Public Health | None | None |
|
|
| Public APIs | JWT | User/Admin |
|
|
| Admin Operations | JWT | Admin Only |
|
|
| Internal Services | Service Token | Scoped Access |
|
|
| Webhooks | HMAC | Signature |
|
|
|
|
## 🔍 Security Testing
|
|
|
|
### Vulnerability Assessment
|
|
|
|
**Regular Security Audits**
|
|
- OWASP Top 10 compliance verification
|
|
- Dependency vulnerability scanning
|
|
- Static code analysis with security focus
|
|
- Penetration testing of critical endpoints
|
|
|
|
**Automated Security Testing**
|
|
```bash
|
|
# Static security analysis
|
|
go run honnef.co/go/tools/cmd/staticcheck ./...
|
|
|
|
# Dependency vulnerability scanning
|
|
go mod tidy && go list -json -deps | audit
|
|
|
|
# Security linting
|
|
golangci-lint run --enable gosec
|
|
```
|
|
|
|
### Security Validation
|
|
|
|
**Authentication Testing**
|
|
- Token validation bypass attempts
|
|
- Role escalation prevention verification
|
|
- Session management security testing
|
|
- Service token scope validation
|
|
|
|
**Input Validation Testing**
|
|
- SQL injection attempt testing
|
|
- XSS payload validation testing
|
|
- Command injection prevention testing
|
|
- File upload security testing (if applicable)
|
|
|
|
## 📊 Compliance & Standards
|
|
|
|
### Industry Standards Compliance
|
|
|
|
**OWASP Top 10 2021 Protection**
|
|
- ✅ **A01: Broken Access Control** - Comprehensive authentication/authorization
|
|
- ✅ **A02: Cryptographic Failures** - Strong JWT signing, HTTPS enforcement
|
|
- ✅ **A03: Injection** - Parameterized queries, input validation
|
|
- ✅ **A04: Insecure Design** - Security-by-design architecture
|
|
- ✅ **A05: Security Misconfiguration** - Secure defaults, configuration validation
|
|
- ✅ **A06: Vulnerable Components** - Regular dependency updates
|
|
- ✅ **A07: Identity & Authentication** - Robust authentication framework
|
|
- ✅ **A08: Software & Data Integrity** - Webhook signature validation
|
|
- ✅ **A09: Logging & Monitoring** - Comprehensive security logging
|
|
- ✅ **A10: Server-Side Request Forgery** - Input validation prevents SSRF
|
|
|
|
**Enterprise Compliance**
|
|
- **SOC 2 Type II**: Access controls, monitoring, data protection
|
|
- **ISO 27001**: Information security management system
|
|
- **NIST Cybersecurity Framework**: Identify, Protect, Detect functions
|
|
|
|
## 🚨 Incident Response
|
|
|
|
### Security Incident Handling
|
|
|
|
**Immediate Response**
|
|
1. **Detection**: Monitor logs for security events
|
|
2. **Assessment**: Evaluate impact and scope
|
|
3. **Containment**: Implement immediate protective measures
|
|
4. **Investigation**: Analyze attack vectors and impact
|
|
5. **Recovery**: Restore secure operations
|
|
6. **Learning**: Update security measures based on findings
|
|
|
|
**Contact Information**
|
|
For security issues, please follow our responsible disclosure policy:
|
|
1. Do not disclose security issues publicly
|
|
2. Contact the development team privately
|
|
3. Provide detailed reproduction steps
|
|
4. Allow reasonable time for fix development
|
|
|
|
## 🔧 Configuration Reference
|
|
|
|
### Security Environment Variables
|
|
|
|
```bash
|
|
# Authentication
|
|
WHOOSH_JWT_SECRET=your-strong-secret-here
|
|
WHOOSH_JWT_SECRET_FILE=/run/secrets/jwt_secret
|
|
WHOOSH_JWT_EXPIRATION=24h
|
|
WHOOSH_JWT_ISSUER=whoosh
|
|
WHOOSH_JWT_ALGORITHM=HS256
|
|
|
|
# Service Tokens
|
|
WHOOSH_SERVICE_TOKEN=your-service-token
|
|
WHOOSH_SERVICE_TOKEN_FILE=/run/secrets/service_token
|
|
WHOOSH_SERVICE_TOKEN_HEADER=X-Service-Token
|
|
|
|
# CORS Security
|
|
WHOOSH_CORS_ALLOWED_ORIGINS=https://app.company.com
|
|
WHOOSH_CORS_ALLOWED_ORIGINS_FILE=/run/secrets/allowed_origins
|
|
WHOOSH_CORS_ALLOWED_METHODS=GET,POST,PUT,DELETE,OPTIONS
|
|
WHOOSH_CORS_ALLOWED_HEADERS=Authorization,Content-Type
|
|
WHOOSH_CORS_ALLOW_CREDENTIALS=true
|
|
|
|
# Rate Limiting
|
|
WHOOSH_RATE_LIMIT_ENABLED=true
|
|
WHOOSH_RATE_LIMIT_REQUESTS=100
|
|
WHOOSH_RATE_LIMIT_WINDOW=60s
|
|
WHOOSH_RATE_LIMIT_CLEANUP_INTERVAL=300s
|
|
|
|
# Input Validation
|
|
WHOOSH_MAX_REQUEST_SIZE=1048576 # 1MB
|
|
WHOOSH_MAX_WEBHOOK_SIZE=10485760 # 10MB
|
|
WHOOSH_VALIDATION_STRICT=true
|
|
|
|
# TLS Configuration
|
|
WHOOSH_TLS_ENABLED=false # Set to true in production
|
|
WHOOSH_TLS_CERT_FILE=/path/to/cert.pem
|
|
WHOOSH_TLS_KEY_FILE=/path/to/key.pem
|
|
WHOOSH_TLS_MIN_VERSION=1.2
|
|
```
|
|
|
|
### Production Security Checklist
|
|
|
|
**Deployment Security**
|
|
- [ ] All secrets configured via files or secure environment variables
|
|
- [ ] CORS origins restricted to specific domains (no wildcards)
|
|
- [ ] TLS enabled with valid certificates
|
|
- [ ] Rate limiting configured and enabled
|
|
- [ ] Input validation strict mode enabled
|
|
- [ ] Security headers properly configured
|
|
- [ ] Database connections using SSL/TLS
|
|
- [ ] Webhook secrets properly configured
|
|
- [ ] Monitoring and alerting configured
|
|
- [ ] Security audit logging enabled
|
|
|
|
**Operational Security**
|
|
- [ ] Regular security updates applied
|
|
- [ ] Access logs monitored
|
|
- [ ] Failed authentication attempts tracked
|
|
- [ ] Rate limit violations monitored
|
|
- [ ] Administrative actions audited
|
|
- [ ] Backup security validated
|
|
- [ ] Incident response procedures documented
|
|
- [ ] Security training completed for operators
|
|
|
|
## 📚 Related Documentation
|
|
|
|
- **[Security Audit Report](SECURITY_AUDIT_REPORT.md)** - Detailed security audit findings and remediation
|
|
- **[Configuration Guide](docs/CONFIGURATION.md)** - Complete configuration documentation
|
|
- **[API Specification](docs/API_SPECIFICATION.md)** - API security details and authentication
|
|
- **[Deployment Guide](docs/DEPLOYMENT.md)** - Secure production deployment procedures
|
|
|
|
---
|
|
|
|
**Security Status**: **Production Ready** ✅
|
|
**Last Security Audit**: 2025-09-12
|
|
**Compliance Level**: Enterprise-Grade
|
|
|
|
For security questions or to report security vulnerabilities, please refer to our incident response procedures above. |