Security Misconfiguration happens when systems ship with insecure defaults, unnecessary features left on, verbose error output, or permissive cloud settings. Try the interactive playground below to see exactly what a misconfigured production server leaks.
OWASP TOP 10 · 2025 · A02 — SECURITY MISCONFIGURATION
Security Misconfiguration happens when systems are deployed with insecure default settings, unnecessary features left enabled, overly verbose error handling, or permissive cloud/storage permissions. It’s rarely a single dramatic flaw — it’s usually a setting someone forgot to change before going to production, like leaving a debug console, a sample admin app, or a “DEBUG=True” flag switched on for the whole world to see.
Interactive Demo
Code Comparison
# settings.py DEBUG = True ALLOWED_HOSTS = ["*"] # .env (loaded into error page on crash) DATABASE_URL=postgres://admin:Winter2024!@db-prod-01.internal:5432/app API_KEY=sk_live_9fA2...kQ7 INTERNAL_HOST=prod-app-03.internal.corp # Any 500 error now renders a full # traceback + these variables to any visitor.
# settings.py DEBUG = False ALLOWED_HOSTS = ["cybersecuritytelugu.com"] # Custom error handler def handler500(request): log_error_internally(request) # full trace → logs only return render(request, "errors/500_generic.html", status=500) # Visitor sees a generic message. # Engineers see the real trace in log tooling.
Why This Matters
Real-world pattern: a huge share of breach disclosures trace back to something this mundane — a debug console left reachable on a production URL, a cloud storage bucket left with public/world permissions “just for testing” or an old sample admin panel that was never removed after go-live. None of these require a clever exploit; they just require someone to look.
How to Detect & Fix