This document describes security practices and procedures for the Aetherscan project.
| Version | Supported | Notes |
|---|---|---|
| 1.x.x | Yes | Current development version |
| 0.x.x | No | Pre-release, not supported |
If you discover a security vulnerability in Aetherscan:
- Open a GitHub Discussion with the "security" label
- Provide a clear description of the vulnerability
- Include steps to reproduce if applicable
- Suggest a fix if you have one
For vulnerabilities that could expose sensitive data or allow unauthorized access:
- Do NOT open a public issue
- Contact Zach directly on Slack (preferred) or via email
- Include:
- Description of the vulnerability
- Steps to reproduce
- Potential impact
- Suggested remediation (if any)
- Allow up to 48-72 hours for initial response
- Work with maintainers on coordinated disclosure
Aetherscan uses the following secrets that must be protected:
| Secret | Environment Variable | Purpose |
|---|---|---|
| Slack Bot Token | SLACK_BOT_TOKEN |
Slack alerts and notifications |
-
Never commit secrets to the repository
- Use environment variables or
.envfiles .envfiles are in.gitignore
- Use environment variables or
-
Use separate tokens for development and production
- Development tokens should have limited permissions
- Production tokens should be rotated regularly
-
Store secrets securely
- Use a secrets manager (e.g., HashiCorp Vault or Google Secrets Manager)
- Or encrypted environment files with restricted permissions
-
Audit access regularly
- Review who has access to production secrets
- Remove access for inactive contributors
If you suspect a token has been compromised, rotate immediately:
- Go to Slack API
- Select the Aetherscan app
- Navigate to "OAuth & Permissions"
- Click "Revoke Tokens"
- Reinstall the Aetherscan app and generate a new token with the following scopes:
channels:read,chat:write,files:write,groups:read,incoming-webhook - Update
SLACK_BOT_TOKENin all deployment environments - Verify the new token works:
aetherscan train --help(should not show Slack errors)
The project uses gitleaks as a pre-commit hook to prevent accidental secret commits.
- API keys and tokens
- GCP/AWS credentials
- Private keys (RSA, DSA, etc.)
- Generic secrets patterns
- High-entropy strings
# Install gitleaks
brew install gitleaks # macOS
# or
apt-get install gitleaks # Ubuntu
# Scan the repository
gitleaks detect --source . --verbose
# Scan specific commits
gitleaks detect --source . --log-opts="HEAD~10..HEAD"If gitleaks flags a non-secret (e.g., a test fixture):
-
Add the specific file/line to
.gitleaksignore:# .gitleaksignore tests/fixtures/mock_data.py:42 -
Use inline comments (less preferred):
fake_token = "test_token_abc123" # gitleaks:allow
The repository uses GitHub's Dependabot for automated dependency vulnerability detection.
# Using pip-audit
pip install pip-audit
pip-audit
# Using safety
pip install safety
safety check- Critical/High severity: Update immediately and release a patch
- Medium severity: Update in next minor release
- Low severity: Update in next major release or when convenient
- All training & model data are publicly disclosed via relevant channels (e.g. Ma et al. 2023), and made readily available via the Breakthrough Listen Open Data Archive
- Intermediate data products (e.g. db records or plots) are generally stored on secure, access-controlled HPC servers not made available to the public
-
Run with least privilege
- Don't run as root
- Use dedicated service accounts
-
Network isolation
- Training nodes should have limited network access
- Only allow outbound connections to Slack API (if used)
-
Container security (if using Docker)
- Use non-root user in container
- Scan images for vulnerabilities
- Don't mount sensitive host directories
-
Logging
- Enable audit logging for production systems
- Monitor for unusual patterns (high error rates, unexpected access)
If a security incident occurs:
- Contain: Revoke compromised credentials immediately
- Assess: Determine what was accessed or modified
- Notify: Alert affected parties and maintainers
- Remediate: Fix the vulnerability and rotate all potentially affected secrets
- Document: Record the incident for future reference
- Improve: Update processes to prevent recurrence
- Security issues: @zachtheyek on Slack
- General questions: Open a GitHub Discussion or Slack thread