- Core library with SVG and PNG generation - CLI tool with generate and batch commands - Cross-platform path handling for Windows compatibility - Comprehensive test suite with integration tests
12 KiB
Security Policy
Supported Versions
We provide security updates for the following versions of go-jdenticon:
| Version | Supported |
|---|---|
| 1.2.x | ✅ |
| 1.1.x | ✅ |
| 1.0.x | ❌ (EOL) |
| < 1.0 | ❌ (Pre-release) |
Reporting a Vulnerability
Please do NOT report security vulnerabilities through public GitHub issues.
If you discover a security vulnerability in go-jdenticon, please report it to us responsibly:
Preferred Method: GitHub Private Vulnerability Reporting
- Go to the Security tab of this repository
- Click "Report a vulnerability"
- Fill out the vulnerability report form with as much detail as possible
Alternative Method: Email
If GitHub private reporting is not available, you can email the maintainer at: kev@kev.codes
What to Include
Please include the following information in your report:
- Description: Clear description of the vulnerability
- Version: Affected version(s) of go-jdenticon
- Component: Which part of the library is affected (core API, CLI tool, specific renderer, etc.)
- Impact: Your assessment of the potential impact and severity
- Reproduction: Step-by-step instructions to reproduce the issue
- Proof of Concept: If applicable, minimal code example demonstrating the vulnerability
- Suggested Fix: If you have ideas for how to address the issue
Our Commitment
- Initial Response: We will acknowledge your report within 48 hours
- Progress Updates: We will provide status updates every 7 days until resolution
- Verification: We will work with you to understand and verify the issue
- Timeline: We aim to release security patches within 30 days for critical issues, 90 days for lower severity issues
- Credit: We will credit you in our security advisory unless you prefer to remain anonymous
Disclosure Timeline
We follow responsible disclosure practices:
- Day 0: Vulnerability reported privately
- Days 1-7: Initial triage and verification
- Days 8-30: Development and testing of fix (for critical issues)
- Day of Release: Security advisory published with fixed version
- 30 days post-release: Full technical details may be shared publicly
Scope
This security policy covers:
- Core Library: The main go-jdenticon Go API (
jdenticonpackage) - CLI Tool: The command-line interface (
cmd/jdenticon) - Internal Components: Engine, renderers, and utilities
- Documentation: If documentation could lead users to implement insecure patterns
Out of Scope
The following are generally considered out of scope:
- Vulnerabilities in third-party dependencies (please report these upstream)
- Issues that require physical access to the system
- Social engineering attacks
- Issues in example code that is clearly marked as "example only"
Security Guide
Overview
The go-jdenticon library generates deterministic identicons (geometric avatar images) from input strings. This guide provides comprehensive security information for developers, operators, and security teams integrating or deploying the library.
⚠️ Important: This library is designed for generating visual representations of data, not for cryptographic or authentication purposes. The output should never be used for security-critical decisions.
Security Features
go-jdenticon includes several built-in security protections:
- Resource Limits: Configurable limits on input size, icon size, and complexity
- Input Validation: Comprehensive validation of all user inputs
- Path Traversal Protection: CLI tool prevents writing files outside intended directories
- Memory Protection: Built-in protections against memory exhaustion attacks
- Defense in Depth: Multiple layers of validation throughout the system
Threat Model
Primary Security Concerns
The main security risks for an identicon generation library are related to resource availability rather than data confidentiality:
1. Denial of Service (DoS) Attacks
- CPU Exhaustion: Malicious inputs designed to consume excessive processing time
- Memory Exhaustion: Requests for extremely large images that exhaust available memory
- Disk Exhaustion: (CLI only) Repeated generation of large files filling storage
2. Input Validation Vulnerabilities
- Malformed Inputs: Invalid color strings, non-UTF8 characters, or edge cases in parsers
- Path Traversal: (CLI only) Attempts to write files outside intended directories
3. Resource Consumption Attacks
- Large Input Strings: Extremely long input strings that consume CPU during processing
- Complex Generation: Inputs that trigger computationally expensive generation paths
Built-in Protections
go-jdenticon includes comprehensive protections against these threats:
- ✅ Configurable Resource Limits: Input size, image dimensions, and complexity limits
- ✅ Robust Input Validation: All inputs are validated before processing
- ✅ Path Traversal Protection: CLI tool sanitizes output paths
- ✅ Memory Bounds Checking: Internal limits prevent memory exhaustion
- ✅ Defense in Depth: Multiple validation layers throughout the system
Secure Usage Guidelines
For Go API Consumers
1. Treat All Inputs as Untrusted
Always validate and sanitize user-provided data before passing it to the library:
// ❌ DANGEROUS: Direct use of user input
userInput := getUserInput() // Could be malicious
icon, err := jdenticon.Generate(ctx, userInput, 256)
// ✅ SECURE: Validate and sanitize first
userInput := strings.TrimSpace(getUserInput())
if len(userInput) > 100 { // Your application limit
return errors.New("input too long")
}
if !isValidInput(userInput) { // Your validation logic
return errors.New("invalid input")
}
icon, err := jdenticon.Generate(ctx, userInput, 256)
2. Never Use Sensitive Data as Input
Do not use PII, passwords, or secrets as identicon input:
// ❌ DANGEROUS: Using sensitive data
email := "user@example.com"
password := "secret123"
icon, _ := jdenticon.Generate(ctx, password, 256) // DON'T DO THIS
// ✅ SECURE: Use non-sensitive identifiers
userID := "user-12345"
icon, err := jdenticon.Generate(ctx, userID, 256)
3. Always Handle Errors
Check for errors - they may indicate security limit violations:
// ✅ SECURE: Proper error handling
icon, err := jdenticon.Generate(ctx, input, size)
if err != nil {
// Log the error - could indicate attack attempt
log.Printf("Icon generation failed: %v", err)
// Handle gracefully based on error type
var sizeErr *jdenticon.ErrValueTooLarge
if errors.As(err, &sizeErr) {
return handleResourceLimitError(sizeErr)
}
return handleGeneralError(err)
}
4. Configure Resource Limits Explicitly
Don't rely on defaults - set limits appropriate for your environment:
config := jdenticon.Config{
MaxIconSize: 1024, // Maximum 1024×1024 pixels
MaxInputLength: 256, // Maximum 256 byte input strings
MaxComplexity: 50, // Reduce computational complexity
// ... other config options
}
// Use 0 for default limits, positive values for custom limits, -1 to disable
icon, err := jdenticon.ToSVGWithConfig(ctx, "user@example.com", 512, config)
Default Security Limits:
- Icon Size: 4096×4096 pixels maximum (~64MB memory usage)
- Input Length: 1MB maximum input string length
- Complexity: 100 maximum computational complexity score
For Web Applications
1. Content Security Policy for SVG Output
When serving SVG identicons, use proper Content-Security-Policy:
<!-- ✅ SECURE: Restrict SVG capabilities -->
<meta http-equiv="Content-Security-Policy"
content="img-src 'self' data:; object-src 'none';">
<img src="data:image/svg+xml;base64,..." alt="User Avatar">
2. Cache Generated Icons
Avoid regenerating identical icons to prevent resource exhaustion:
// ✅ SECURE: Use generator with caching
generator, err := jdenticon.NewGeneratorWithCacheSize(1000)
if err != nil {
return err
}
// Icons with same input will be cached
icon1, _ := generator.Generate(ctx, "user123", 64)
icon2, _ := generator.Generate(ctx, "user123", 64) // Served from cache
For CLI Tool Users
1. Validate Output Paths
The CLI tool includes path traversal protection, but you should still validate:
# ✅ SECURE: Use absolute paths in trusted directories
jdenticon generate "user123" --output /var/www/avatars/user123.svg
# ❌ POTENTIALLY RISKY: Don't use user-controlled paths
# jdenticon generate "$USER_INPUT" --output "$USER_PATH"
2. Run with Minimal Privileges
# ✅ SECURE: Create dedicated user for CLI operations
sudo useradd -r -s /bin/false jdenticon-user
sudo -u jdenticon-user jdenticon generate "user123" --output avatar.svg
Deployment Security
Container Security
When deploying in containers, apply resource limits:
# docker-compose.yml or Kubernetes deployment
resources:
limits:
memory: "512Mi"
cpu: "500m"
requests:
memory: "256Mi"
cpu: "250m"
Monitoring and Alerting
Monitor these metrics for security:
- Generation error rates (potential attack indicators)
- Resource limit violations
- Unusual input patterns or sizes
- Memory/CPU usage spikes
// Example monitoring code
func monitorGeneration(input string, size int, err error) {
if err != nil {
securityLog.Printf("Generation failed: input_len=%d, size=%d, error=%v",
len(input), size, err)
// Check for potential attack patterns
if len(input) > 1000 || size > 2048 {
alertSecurityTeam("Suspicious identicon generation attempt", input, size, err)
}
}
}
Platform-Specific Considerations
32-bit Systems
- Integer overflow protections are in place for hash parsing
- Memory limits may need adjustment for smaller address space
Container Environments
- Apply CPU and memory limits as defense in depth
- Monitor for container escape attempts through resource exhaustion
Security Limitations & Known Issues
- Cryptographic Attacks: The output is deterministic and predictable - not suitable for security purposes
- Information Leakage: Identical inputs produce identical outputs - avoid using sensitive data
- Side-Channel Attacks: Processing time may vary based on input complexity
- Dependency Vulnerabilities: Keep Go toolchain and any external dependencies updated
Security Updates
Security updates are distributed through:
- GitHub Releases: All security fixes are released as new versions
- GitHub Security Advisories: Critical issues are published as security advisories
- Go Module Proxy: Updates are automatically available through
go get -u
Emergency Response
If You Suspect an Attack
- Monitor: Check logs for patterns of failed generations or resource limit violations
- Investigate: Look for common source IPs or unusual input patterns
- Respond: Apply rate limiting, blocking, or input filtering as appropriate
- Document: Keep records for potential security team review
Security Best Practices Summary
For Developers ✅
- Always validate inputs before passing to the library
- Handle all errors returned by library functions
- Never use sensitive data as identicon input
- Configure resource limits explicitly for your environment
- Use proper Content-Security-Policy when serving SVGs
For Operators ✅
- Apply container-level resource limits as defense in depth
- Monitor generation metrics and error rates
- Keep dependencies updated with vulnerability scanning
- Run CLI tools with minimal privileges
- Set up alerting for suspicious patterns
For Security Teams ✅
- Review configuration limits match threat model
- Include go-jdenticon in vulnerability scanning processes
- Monitor for new security advisories
- Test disaster recovery procedures for DoS scenarios
- Validate secure coding practices in applications using the library
Questions?
If you have questions about this security policy or need clarification on whether an issue should be reported as a security vulnerability, please open a regular GitHub issue with the tag "security-question" (this is for questions about the policy, not for reporting actual vulnerabilities).
Last Updated: 2025-06-24
Policy Version: 1.0