265 lines
7.1 KiB
Markdown
265 lines
7.1 KiB
Markdown
# Security Policy
|
|
|
|
## Reporting a Vulnerability
|
|
|
|
If you discover a security vulnerability in nanobot, please report it by:
|
|
|
|
1. **DO NOT** open a public GitHub issue
|
|
2. Create a private security advisory on GitHub or contact the repository maintainers
|
|
3. Include:
|
|
- Description of the vulnerability
|
|
- Steps to reproduce
|
|
- Potential impact
|
|
- Suggested fix (if any)
|
|
|
|
We aim to respond to security reports within 48 hours.
|
|
|
|
## Security Best Practices
|
|
|
|
### 1. API Key Management
|
|
|
|
**CRITICAL**: Never commit API keys to version control.
|
|
|
|
```bash
|
|
# ✅ Good: Store in config file with restricted permissions
|
|
chmod 600 ~/.nanobot/config.json
|
|
|
|
# ❌ Bad: Hardcoding keys in code or committing them
|
|
```
|
|
|
|
**Recommendations:**
|
|
- Store API keys in `~/.nanobot/config.json` with file permissions set to `0600`
|
|
- Consider using environment variables for sensitive keys
|
|
- Use OS keyring/credential manager for production deployments
|
|
- Rotate API keys regularly
|
|
- Use separate API keys for development and production
|
|
|
|
### 2. Channel Access Control
|
|
|
|
**IMPORTANT**: Always configure `allowFrom` lists for production use.
|
|
|
|
```json
|
|
{
|
|
"channels": {
|
|
"telegram": {
|
|
"enabled": true,
|
|
"token": "YOUR_BOT_TOKEN",
|
|
"allowFrom": ["123456789", "987654321"]
|
|
},
|
|
"whatsapp": {
|
|
"enabled": true,
|
|
"allowFrom": ["+1234567890"]
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
**Security Notes:**
|
|
- Empty `allowFrom` list will **ALLOW ALL** users (open by default for personal use)
|
|
- Get your Telegram user ID from `@userinfobot`
|
|
- Use full phone numbers with country code for WhatsApp
|
|
- Review access logs regularly for unauthorized access attempts
|
|
|
|
### 3. Shell Command Execution
|
|
|
|
The `exec` tool can execute shell commands. While dangerous command patterns are blocked, you should:
|
|
|
|
- ✅ Review all tool usage in agent logs
|
|
- ✅ Understand what commands the agent is running
|
|
- ✅ Use a dedicated user account with limited privileges
|
|
- ✅ Never run nanobot as root
|
|
- ❌ Don't disable security checks
|
|
- ❌ Don't run on systems with sensitive data without careful review
|
|
|
|
**Blocked patterns:**
|
|
- `rm -rf /` - Root filesystem deletion
|
|
- Fork bombs
|
|
- Filesystem formatting (`mkfs.*`)
|
|
- Raw disk writes
|
|
- Other destructive operations
|
|
|
|
### 4. File System Access
|
|
|
|
File operations have path traversal protection, but:
|
|
|
|
- ✅ Run nanobot with a dedicated user account
|
|
- ✅ Use filesystem permissions to protect sensitive directories
|
|
- ✅ Regularly audit file operations in logs
|
|
- ❌ Don't give unrestricted access to sensitive files
|
|
|
|
### 5. Network Security
|
|
|
|
**API Calls:**
|
|
- All external API calls use HTTPS by default
|
|
- Timeouts are configured to prevent hanging requests
|
|
- Consider using a firewall to restrict outbound connections if needed
|
|
|
|
**WhatsApp Bridge:**
|
|
- The bridge binds to `127.0.0.1:3001` (localhost only, not accessible from external network)
|
|
- Set `bridgeToken` in config to enable shared-secret authentication between Python and Node.js
|
|
- Keep authentication data in `~/.nanobot/whatsapp-auth` secure (mode 0700)
|
|
|
|
### 6. Dependency Security
|
|
|
|
**Critical**: Keep dependencies updated!
|
|
|
|
```bash
|
|
# Check for vulnerable dependencies
|
|
pip install pip-audit
|
|
pip-audit
|
|
|
|
# Update to latest secure versions
|
|
pip install --upgrade nanobot-ai
|
|
```
|
|
|
|
For Node.js dependencies (WhatsApp bridge):
|
|
```bash
|
|
cd bridge
|
|
npm audit
|
|
npm audit fix
|
|
```
|
|
|
|
**Important Notes:**
|
|
- Keep `litellm` updated to the latest version for security fixes
|
|
- We've updated `ws` to `>=8.17.1` to fix DoS vulnerability
|
|
- Run `pip-audit` or `npm audit` regularly
|
|
- Subscribe to security advisories for nanobot and its dependencies
|
|
|
|
### 7. Production Deployment
|
|
|
|
For production use:
|
|
|
|
1. **Isolate the Environment**
|
|
```bash
|
|
# Run in a container or VM
|
|
docker run --rm -it python:3.11
|
|
pip install nanobot-ai
|
|
```
|
|
|
|
2. **Use a Dedicated User**
|
|
```bash
|
|
sudo useradd -m -s /bin/bash nanobot
|
|
sudo -u nanobot nanobot gateway
|
|
```
|
|
|
|
3. **Set Proper Permissions**
|
|
```bash
|
|
chmod 700 ~/.nanobot
|
|
chmod 600 ~/.nanobot/config.json
|
|
chmod 700 ~/.nanobot/whatsapp-auth
|
|
```
|
|
|
|
4. **Enable Logging**
|
|
```bash
|
|
# Configure log monitoring
|
|
tail -f ~/.nanobot/logs/nanobot.log
|
|
```
|
|
|
|
5. **Use Rate Limiting**
|
|
- Configure rate limits on your API providers
|
|
- Monitor usage for anomalies
|
|
- Set spending limits on LLM APIs
|
|
|
|
6. **Regular Updates**
|
|
```bash
|
|
# Check for updates weekly
|
|
pip install --upgrade nanobot-ai
|
|
```
|
|
|
|
### 8. Development vs Production
|
|
|
|
**Development:**
|
|
- Use separate API keys
|
|
- Test with non-sensitive data
|
|
- Enable verbose logging
|
|
- Use a test Telegram bot
|
|
|
|
**Production:**
|
|
- Use dedicated API keys with spending limits
|
|
- Restrict file system access
|
|
- Enable audit logging
|
|
- Regular security reviews
|
|
- Monitor for unusual activity
|
|
|
|
### 9. Data Privacy
|
|
|
|
- **Logs may contain sensitive information** - secure log files appropriately
|
|
- **LLM providers see your prompts** - review their privacy policies
|
|
- **Chat history is stored locally** - protect the `~/.nanobot` directory
|
|
- **API keys are in plain text** - use OS keyring for production
|
|
|
|
### 10. Incident Response
|
|
|
|
If you suspect a security breach:
|
|
|
|
1. **Immediately revoke compromised API keys**
|
|
2. **Review logs for unauthorized access**
|
|
```bash
|
|
grep "Access denied" ~/.nanobot/logs/nanobot.log
|
|
```
|
|
3. **Check for unexpected file modifications**
|
|
4. **Rotate all credentials**
|
|
5. **Update to latest version**
|
|
6. **Report the incident** to maintainers
|
|
|
|
## Security Features
|
|
|
|
### Built-in Security Controls
|
|
|
|
✅ **Input Validation**
|
|
- Path traversal protection on file operations
|
|
- Dangerous command pattern detection
|
|
- Input length limits on HTTP requests
|
|
|
|
✅ **Authentication**
|
|
- Allow-list based access control
|
|
- Failed authentication attempt logging
|
|
- Open by default (configure allowFrom for production use)
|
|
|
|
✅ **Resource Protection**
|
|
- Command execution timeouts (60s default)
|
|
- Output truncation (10KB limit)
|
|
- HTTP request timeouts (10-30s)
|
|
|
|
✅ **Secure Communication**
|
|
- HTTPS for all external API calls
|
|
- TLS for Telegram API
|
|
- WhatsApp bridge: localhost-only binding + optional token auth
|
|
|
|
## Known Limitations
|
|
|
|
⚠️ **Current Security Limitations:**
|
|
|
|
1. **No Rate Limiting** - Users can send unlimited messages (add your own if needed)
|
|
2. **Plain Text Config** - API keys stored in plain text (use keyring for production)
|
|
3. **No Session Management** - No automatic session expiry
|
|
4. **Limited Command Filtering** - Only blocks obvious dangerous patterns
|
|
5. **No Audit Trail** - Limited security event logging (enhance as needed)
|
|
|
|
## Security Checklist
|
|
|
|
Before deploying nanobot:
|
|
|
|
- [ ] API keys stored securely (not in code)
|
|
- [ ] Config file permissions set to 0600
|
|
- [ ] `allowFrom` lists configured for all channels
|
|
- [ ] Running as non-root user
|
|
- [ ] File system permissions properly restricted
|
|
- [ ] Dependencies updated to latest secure versions
|
|
- [ ] Logs monitored for security events
|
|
- [ ] Rate limits configured on API providers
|
|
- [ ] Backup and disaster recovery plan in place
|
|
- [ ] Security review of custom skills/tools
|
|
|
|
## Updates
|
|
|
|
**Last Updated**: 2026-02-03
|
|
|
|
For the latest security updates and announcements, check:
|
|
- GitHub Security Advisories: https://github.com/HKUDS/nanobot/security/advisories
|
|
- Release Notes: https://github.com/HKUDS/nanobot/releases
|
|
|
|
## License
|
|
|
|
See LICENSE file for details.
|