We release patches for security vulnerabilities. Currently supported versions:
| Version | Supported |
|---|---|
| 0.1.x | ✅ |
We take the security of our CLI seriously. If you believe you have found a security vulnerability, please report it to us using one of the following methods:
- Navigate to the Security tab
- Click "Report a vulnerability"
- Fill out the advisory form with:
- Description of the vulnerability
- Steps to reproduce
- Potential impact assessment
- Suggested fix (if any)
Send an email to security@coastal-programs.com with the same information.
Please do not report security vulnerabilities through public GitHub issues.
You can expect the following response timeline:
| Timeframe | Action |
|---|---|
| 24-48 hours | Acknowledgment of report |
| 3-5 days | Initial assessment and severity classification |
| 7-14 days | Fix development and testing (for High/Critical) |
| 14-30 days | Fix development and testing (for Medium/Low) |
| Same day as fix | Public disclosure via GitHub Security Advisory |
We classify vulnerabilities using the following severity levels:
- Remote code execution
- Authentication bypass
- Credential theft or exposure
- Data loss in production environments
Response: Immediate patching within 24-48 hours
- Privilege escalation
- Unauthorized data access
- Denial of service
- Insecure credential storage
Response: Patch within 7 days
- Information disclosure
- Missing encryption
- Insufficient input validation
- Weak cryptographic algorithms
Response: Patch within 14 days
- Security best practice violations
- Non-critical information leaks
- Documentation gaps
Response: Patch in next scheduled release
OS Keychain Storage (Default):
- macOS: Credentials stored in macOS Keychain (Keychain Access app)
- Windows: Credentials stored in Windows Credential Manager
- Linux: Credentials stored in libsecret (requires
libsecret-1-devorgnome-keyring)
Encrypted File Fallback: If OS keychain is unavailable, credentials are stored in an encrypted file:
- Location:
~/.supabase/credentials.enc - Encryption: AES-256-GCM with PBKDF2 key derivation (100,000 iterations)
- Permissions: 0600 (owner read/write only)
- Note: Requires user consent before first use
Environment Variables (CI/CD): For automated environments, use:
export SUPABASE_ACCESS_TOKEN="your_token_here"When using this CLI:
- Never commit credentials to version control
- Keep the CLI updated to the latest version (
npm update -g @coastal-programs/supabase-cli) - Use strong access tokens with minimal required permissions
- Review command output before executing destructive operations
- Enable 2FA on your Supabase account
- Rotate access tokens regularly (every 90 days recommended)
- Use project-specific service role keys (not account-wide tokens)
- Monitor access logs in Supabase dashboard
- Delete credentials when uninstalling:
rm -rf ~/.supabase
The following commands can cause data loss and require confirmation:
backup:delete- Permanently deletes backupsbackup:restore- Overwrites current databasebackup:pitr:restore- Point-in-time recovery (overwrites data)projects:delete- Permanently deletes projectdb:replicas:delete- Deletes read replicasecurity:restrictions:remove- Removes network security rules
Always review the command output and confirmation prompts carefully. Use the --yes flag only in automated scripts where you understand the consequences.
Service role keys bypass Row Level Security (RLS) and have full database access:
- Never commit service role keys to version control
- Store securely in OS keychain (CLI handles this automatically)
- Limit usage to administrative tasks only
- Rotate regularly in Supabase dashboard
- Monitor usage via database logs
- Consider alternatives like using lower-privilege API keys when possible
For automated deployments:
-
Use environment variables:
export SUPABASE_ACCESS_TOKEN="token" export SUPABASE_CLI_ACCEPT_ENCRYPTED_FALLBACK="true"
-
Use GitHub Secrets or equivalent for sensitive data
-
Use
--yesflag to bypass confirmation prompts:supabase-cli backup:create --yes
-
Limit CI/CD token permissions to only required operations
-
Rotate CI/CD tokens more frequently (every 30 days recommended)
- Do not disclose vulnerability details in pull requests
- Contact maintainers first via security@coastal-programs.com
- Use private branches for security fixes
- Include tests that verify the fix
- Update CHANGELOG with "Security" section
When contributing code:
- Never log credentials or sensitive data
- Validate all inputs before processing
- Use parameterized queries to prevent injection
- Handle errors gracefully without exposing internals
- Follow least privilege principle for API calls
- Use secure random for cryptographic operations (
crypto.randomBytes) - Avoid race conditions in file operations
- Set restrictive file permissions (0600 for sensitive files)
- Use timing-safe comparisons for secrets
- Keep dependencies updated (
npm audit)
- Regular audits: Run
npm auditbefore each release - Automatic updates: Dependabot enabled for security patches
- Version pinning: Use exact versions for security-critical packages
- Review changes: Check changelogs before updating dependencies
- Test thoroughly: Run full test suite after dependency updates
// ✅ Good: Use SecureStorage for credentials
import { secureStorage } from './utils/secure-storage'
await secureStorage.store('token', value)
// ❌ Bad: Never write credentials to plaintext files
fs.writeFileSync('credentials.json', JSON.stringify({ token }))
// ✅ Good: Use crypto.randomBytes for secure random
import { randomBytes } from 'crypto'
const token = randomBytes(32).toString('hex')
// ❌ Bad: Never use Math.random() for security
const token = Math.random().toString(36)
// ✅ Good: Set restrictive file permissions
fs.writeFileSync(file, data, { mode: 0o600 })
// ❌ Bad: World-readable sensitive files
fs.writeFileSync(file, data) // Uses default 0o666- OS Keychain: Most secure option, uses platform-native encryption
- Encrypted File: Uses AES-256-GCM with machine-specific key derivation
- Environment Variables: Least secure, use only in controlled environments
The encrypted file fallback uses machine-specific key derivation based on hostname and username. This means:
- ✅ Credentials cannot be decrypted on a different machine
- ✅ Protects against credential file theft
⚠️ Credentials lost if hostname/username changes⚠️ Not suitable for shared/multi-user systems
Service role keys are stored with user consent:
- Stored in OS keychain by default
- Requires explicit consent for encrypted file fallback
- Can be revoked at any time via
supabase-cli auth:logout
The Supabase Management API has rate limits:
- Excessive requests may be throttled
- CLI implements exponential backoff and retry logic
- Use caching (
CACHE_ENABLED=true) to reduce API calls
The following are not considered security vulnerabilities:
- Brute force attacks on weak access tokens (use strong tokens)
- Stolen credentials from user's machine (secure your machine)
- Social engineering attacks (user education required)
- Denial of service via API rate limiting (intended behavior)
- Dependencies with vulnerabilities already reported to upstream projects
- Issues with official Supabase platform (report to Supabase directly)
- Non-security bugs (use GitHub Issues instead)
Future security enhancements under consideration:
- Hardware security key support (YubiKey, etc.)
- Token refresh mechanism
- Role-based access control (RBAC) for CLI commands
- Audit logging for all CLI operations
- Integration with secrets managers (HashiCorp Vault, AWS Secrets Manager)
- Security compliance automation (SOC 2, ISO 27001)
We follow Coordinated Vulnerability Disclosure (CVD):
- Receive report via GitHub Security Advisory or email
- Acknowledge within 24-48 hours
- Investigate and assess severity (3-5 days)
- Develop fix in private branch (7-30 days based on severity)
- Test thoroughly including regression testing
- Notify reporter of fix timeline
- Release patch via npm
- Publish advisory on GitHub Security tab
- Credit reporter (unless anonymous requested)
- Update CHANGELOG with security section
We request a 90-day disclosure window for Critical/High vulnerabilities to allow users time to update.
- GitHub Security: https://github.com/coastal-programs/supabase-cli/security/advisories
- Email: security@coastal-programs.com
- PGP Key: Available on request for sensitive reports
This CLI follows security standards and best practices from:
- OWASP: Secure credential storage, input validation, error handling
- NIST SP 800-63B: Digital identity guidelines
- CWE Top 25: Common Weakness Enumeration mitigation
- PCI DSS: Strong encryption at rest (AES-256-GCM)
If you have suggestions on how this process could be improved, please submit a pull request or contact security@coastal-programs.com.
Last Updated: October 30, 2025 Version: 2.0