Files
picpeak/frontend/.claudedocs/scans/security-2025-01-12.md
T
paul f39427d9d9
Test Gitea Actions / test (push) Successful in 14s
continuous-integration/drone/push Build is passing
docs: add comprehensive security scan report
- Scan for hardcoded secrets and credentials
- Check SQL injection vulnerabilities
- Audit authentication and authorization flaws
- Analyze XSS vulnerabilities
- Review file upload security
- Check security headers and CORS configuration
- Verify npm dependencies (0 vulnerabilities found)

Critical findings:
- Hardcoded JWT secret fallback
- SQL injection in adminDashboard.js
- Stored XSS in CMS content
- Authentication bypass risks

Report includes detailed findings and remediation steps.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-12 23:19:00 +02:00

7.5 KiB

PicPeak Security Scan Report

Date: January 12, 2025
Scan Type: Comprehensive Security Audit
Platform: PicPeak Photo Sharing Platform
Scanner: Claude Code Security Scanner

Executive Summary

A comprehensive security scan of the PicPeak photo sharing platform reveals critical vulnerabilities that require immediate attention. While the application implements some security best practices, several high-severity issues could lead to data breaches, unauthorized access, and system compromise.

Overall Risk Assessment: HIGH 🔴

Critical Issues Found: 8
High-Risk Issues: 7
Medium-Risk Issues: 6
Low-Risk Issues: 2

Critical Vulnerabilities Requiring Immediate Action

1. Hardcoded Secrets and Credentials 🔴

JWT Secret Fallback

  • Location: backend/src/routes/protectedImages.js:15,27
  • Severity: CRITICAL
  • Impact: Complete authentication bypass if environment variable not set
const secret = process.env.JWT_SECRET || 'your-secret-key'; // VULNERABLE

Default Admin Password

  • Location: backend/migrations/init.js:14, setup-remaining-files.sh:121
  • Severity: HIGH
  • Impact: Known default credentials allow unauthorized admin access
  • Current: Hardcoded admin123 password

2. SQL Injection Vulnerabilities 🔴

Direct Template Literal Interpolation

  • Location: backend/src/routes/adminDashboard.js:214,221,227,252,269
  • Severity: HIGH
  • Impact: Potential database compromise
.whereRaw(`timestamp >= datetime("now", "-${days} days")`) // VULNERABLE

LIKE Query Injection

  • Locations:
    • backend/src/routes/adminPhotos.js:476
    • backend/src/routes/adminEvents.js:156-158
  • Severity: MEDIUM
  • Impact: Query manipulation through special characters

3. Authentication & Authorization Flaws 🔴

Missing Token Type Validation

  • Location: Admin middleware
  • Severity: HIGH
  • Impact: Gallery tokens could potentially access admin endpoints

Weak Password Requirements

  • Current: Only 6 characters minimum
  • Severity: MEDIUM
  • Impact: Vulnerable to brute force attacks

Rate Limiting Bypass

  • Location: backend/server.js:57-73
  • Severity: HIGH
  • Impact: Invalid JWT tokens bypass rate limiting

4. Cross-Site Scripting (XSS) 🔴

Stored XSS in CMS

  • Location: frontend/src/pages/public/LegalPage.tsx:106
  • Severity: CRITICAL
  • Impact: Malicious scripts execute for all visitors
dangerouslySetInnerHTML={{ __html: page.content }} // VULNERABLE

5. File Upload Vulnerabilities 🟡

Path Traversal Risk

  • Location: backend/server.js:104-110
  • Severity: HIGH
  • Impact: Access to files outside intended directories

Insufficient MIME Type Validation

  • Multiple locations
  • Severity: MEDIUM
  • Impact: Malicious file upload bypass

6. Security Headers & Configuration 🟡

Missing Critical Headers

  • Missing: CSP, X-Frame-Options, Strict-Transport-Security
  • Severity: MEDIUM
  • Impact: Reduced defense against various attacks

Permissive CORS Configuration

  • Location: backend/server.js:30-49
  • Severity: MEDIUM
  • Impact: Allows multiple origins including localhost

Dependency Analysis

NPM Audit Results

  • Backend: 0 vulnerabilities found
  • Frontend: 0 vulnerabilities found
  • Status: All dependencies are up to date

Detailed Findings by Category

Authentication Security

  1. JWT Implementation Issues:

    • No refresh token mechanism
    • 24-hour token expiration for all types
    • No token revocation capability
    • Hardcoded fallback secret
  2. Session Management:

    • In-memory session storage (not scalable)
    • No Redis implementation despite comments
    • Incomplete session cleanup
  3. Password Security:

    • Weak requirements (6 chars minimum)
    • Fixed bcrypt rounds (10)
    • No password complexity requirements
    • No breach checking

Data Security

  1. SQL Injection Risks:

    • Template literal interpolation in whereRaw()
    • Unescaped LIKE queries
    • Missing input validation on some parameters
  2. XSS Vulnerabilities:

    • Stored XSS in CMS content
    • No Content Security Policy
    • Missing output encoding in some areas
  3. Information Disclosure:

    • Detailed error messages exposed
    • Console.error statements with sensitive data
    • No audit logging for security events

Infrastructure Security

  1. File Upload Issues:

    • Path traversal vulnerability
    • Weak MIME type validation
    • No virus scanning
    • Missing content validation
  2. Network Security:

    • Missing security headers
    • Permissive CORS policy
    • No HTTPS enforcement
    • Rate limiting can be bypassed

Priority 1: Critical (Implement Immediately)

  1. Remove Hardcoded Secrets
// Replace fallback with error
const secret = process.env.JWT_SECRET;
if (!secret) {
  throw new Error('JWT_SECRET environment variable is required');
}
  1. Fix SQL Injection
// Use parameterized queries
.whereRaw('timestamp >= datetime("now", ? || " days")', [`-${days}`])
  1. Sanitize CMS Content
import DOMPurify from 'dompurify';
dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(page.content) }}

Priority 2: High (Implement Within 1 Week)

  1. Add Token Type Validation
if (decoded.type !== 'admin') {
  return res.status(401).json({ error: 'Invalid token type' });
}
  1. Implement Security Headers
app.use(helmet({
  contentSecurityPolicy: {
    directives: {
      defaultSrc: ["'self'"],
      scriptSrc: ["'self'", "'unsafe-inline'"],
      styleSrc: ["'self'", "'unsafe-inline'"],
      imgSrc: ["'self'", "data:", "https:"],
    },
  },
}));
  1. Fix Rate Limiting Bypass
// Check token validity before skipping rate limit
try {
  const decoded = jwt.verify(token, process.env.JWT_SECRET);
  return decoded && decoded.type === 'admin';
} catch (err) {
  return false; // Apply rate limiting on invalid tokens
}

Priority 3: Medium (Implement Within 1 Month)

  1. Enhance Password Security

    • Minimum 12 characters
    • Complexity requirements
    • Breach checking integration
  2. Implement File Security

    • Content-based validation
    • Path traversal protection
    • Virus scanning
  3. Add Security Monitoring

    • Audit logging
    • Failed login tracking
    • Anomaly detection

Security Checklist

  • Remove all hardcoded secrets
  • Fix SQL injection vulnerabilities
  • Add XSS protection (DOMPurify)
  • Implement proper token validation
  • Add all security headers
  • Fix rate limiting bypass
  • Enhance password requirements
  • Add file upload security
  • Implement audit logging
  • Set up security monitoring
  • Document security procedures
  • Conduct penetration testing

Conclusion

The PicPeak platform has significant security vulnerabilities that need immediate attention. The most critical issues are hardcoded secrets, SQL injection risks, and stored XSS vulnerabilities. While the codebase shows some security awareness (bcrypt hashing, JWT usage, input validation), the implementation has serious flaws that could lead to system compromise.

Recommended Action: Address all critical vulnerabilities immediately before deploying to production. Consider a professional security audit after implementing these fixes.


Generated by Claude Code Security Scanner
Scan completed: 2025-01-12