The Docker Registry UI team takes security bugs seriously. We appreciate your efforts to responsibly disclose your findings.
DO NOT create a public GitHub issue for security vulnerabilities.
Instead, please report security vulnerabilities by emailing:
Please include the following information in your report:
- Description - A clear description of the vulnerability
- Impact - What an attacker can achieve by exploiting this vulnerability
- Steps to Reproduce - Detailed steps to reproduce the issue
- Proof of Concept - If possible, include a PoC or example exploit
- Environment - Version affected, configuration details
- Suggested Fix - If you have ideas on how to fix it (optional)
- Within 24 hours - We will acknowledge receipt of your report
- Within 7 days - We will provide an initial assessment of the vulnerability
- Within 30 days - We aim to release a patch or mitigation strategy
- Coordinated Disclosure - Please give us reasonable time to fix the issue before public disclosure
- Credit - We will credit you in our security advisory (unless you prefer to remain anonymous)
- Communication - We will keep you informed of our progress
-
Reverse Proxy Authentication (CRITICAL)
- ALWAYS deploy behind a reverse proxy with authentication
- Use Basic Auth, OAuth, or OIDC
- Never expose the application directly to the internet
- Example configurations in README.md
-
Network Isolation
- Bind application to
127.0.0.1in production (enforced by environment validation) - Use Docker networks or firewall rules to restrict access
- Only expose reverse proxy to the internet
- Bind application to
-
TLS/SSL Configuration
- Use HTTPS for all connections
- Keep certificates up to date
-
Credentials Management
- Never commit
.envfiles to version control - Use strong, unique passwords for Docker Registry
- Rotate credentials regularly
- Consider using secrets management (Vault, AWS Secrets Manager)
- Never commit
-
Docker Registry Security
- Enable authentication on your Docker Registry
- Use TLS for registry communication
- Set
REGISTRY_STORAGE_DELETE_ENABLEDonly if deletion is required - Regular security updates for Docker Registry
-
Environment Variables
- All environment variables are validated on startup using Zod schemas
- Production deployments enforce security requirements:
HOSTmust be127.0.0.1
- See
.env.examplefor complete configuration
-
Input Validation
- Repository names validated against Docker naming conventions
- Tag names validated for security
- Digest format strictly validated
- All API inputs sanitized to prevent injection attacks
-
Token Management
- Bearer tokens cached server-side only
- Tokens never exposed to frontend
- Automatic token refresh before expiration
- Configurable cache TTL (60-3600 seconds)
-
Code Quality
- ESLint with security plugin (
eslint-plugin-security) - Secret detection (
eslint-plugin-no-secrets) - TypeScript strict mode with additional checks
- Pre-commit hooks enforce all quality checks
- ESLint with security plugin (
-
User Activity Logging
- Enable
ENABLE_USER_LOGGING=trueto log user actions - User identity from
X-Forwarded-Userheader (set by reverse proxy) - All destructive operations should be logged
- Enable
-
Security Events
- Monitor failed authentication attempts
- Alert on unusual deletion patterns
- Track API errors and rate limiting
-
Regular Audits
- Review access logs regularly
- Check for dependency vulnerabilities (
bun audit) - Update dependencies with security patches
This application intentionally has no built-in authentication. It relies entirely on external reverse proxy authentication. This is a security feature, not a bug.
Why?
- Authentication is handled by battle-tested reverse proxies (Nginx, Caddy, Traefik)
- Supports multiple authentication methods (Basic Auth, OAuth, OIDC, mTLS)
- Centralized authentication management
- Follows principle of least privilege
Important:
- Application MUST be bound to
127.0.0.1in production - Reverse proxy MUST enforce authentication
- Test your authentication setup thoroughly
Users authenticated via reverse proxy have full access to Docker Registry operations through this UI. Ensure:
- Only trusted users have access
- Docker Registry credentials are not overly permissive
- Regular audits of user activity
- Consider read-only mode for most users (disable delete operations)
This application is stateless and does not store user data. However:
-
Logs may contain:
- User identifiers (from
X-Forwarded-User) - Repository names accessed
- Operations performed
- Timestamps
- User identifiers (from
-
Token Cache (server memory only):
- Docker Registry bearer tokens
- Cleared on application restart
- Not persisted to disk
-
Browser Storage:
- Dark mode preference (localStorage)
- Language preference (cookie)
- No sensitive data stored
We will announce security updates through:
- GitHub Security Advisories - Primary notification channel
- CHANGELOG.md - All security fixes documented
- Release Notes - Detailed information on patches
Subscribe to GitHub Security Advisories to receive notifications:
- Go to the repository
- Click "Watch" → "Custom" → "Security alerts"
We regularly update dependencies to address security vulnerabilities:
# Check for vulnerabilities
bun audit
# Update dependencies
bun updateDependencies are locked using bun.lock to ensure reproducible builds.
For security-related questions or concerns:
- Email: kactica.pro@gmail.com
Thank you for helping keep Docker Registry UI and its users safe!