.env file, a stack trace in a 500 page, or a Server: Apache/2.4.51 header can be the starting point for a critical exploit.
exposed-sensitive-file
CriticalWhat it is
Sensitive files — such as.env, config.json, backup.sql, .git/config, or phpinfo.php — are publicly accessible via direct URL, or directory listing is enabled on the server, exposing the full list of files.
Why it matters
.env files often contain database credentials, API keys, and encryption secrets. A single exposed .env file gives an attacker everything needed to compromise your infrastructure. Directory listings expose the full application structure, making further attacks trivial.
How QAOS detects it
The agent probes a set of common sensitive file paths on every target:How to fix
Configure your web server to deny access to sensitive files:.gitignore and .dockerignore to ensure .env and other secrets are never placed in public directories.
sensitive-data-logged
HighWhat it is
The browser console contains log entries with sensitive information: passwords, authentication tokens, JWT tokens, API keys, or personally identifiable information (PII).Why it matters
Browser console logs are visible to any user with DevTools open. In shared environments or when a user shares a screenshot, this data is exposed. Console logs also often flow into log aggregation systems, creating a persistent record of sensitive data.How QAOS detects it
The agent captures console log entries during normal page interaction and scans them for patterns indicating sensitive data: password strings, token patterns, credit card numbers, SSN patterns, or full user objects containing PII.Examples
How to fix
Audit allconsole.log calls before production deployment. Use a logging library that supports log levels and automatically strips or redacts sensitive fields. Never log password values, full tokens, or complete user objects containing PII.
server-info-leakage
MediumWhat it is
HTTP response headers disclose the server software name and exact version number, giving attackers a targeted list of known CVEs to exploit.Why it matters
An attacker who knows you’re runningApache/2.4.51 (Ubuntu) can immediately look up all known vulnerabilities for that version and attempt targeted exploits. Version information is free reconnaissance.
How QAOS detects it
The agent checks HTTP response headers forServer and X-Powered-By values that include version numbers or framework names.
Examples
How to fix
Remove or genericize server identification headers:detailed-error-message
MediumWhat it is
The browser console contains stack traces, file system paths, database error messages, or internal IP addresses that reveal the application’s internal structure.Why it matters
Stack traces reveal file paths and line numbers, letting attackers map the codebase. Database errors likeSQLSTATE[42S02]: Table 'users' not found expose schema details. Internal IP addresses reveal network topology.
How QAOS detects it
The agent captures all console log entries and scans them for stack trace patterns, database error strings, file system paths, and internal network addresses.Examples
How to fix
Set up a proper error handling middleware that logs detailed errors server-side only, while sending generic error messages to the client. Configure your logging framework to write to files, not to browser-visible outputs:detailed-error-page
MediumWhat it is
Error pages (404, 500, etc.) display stack traces, file paths, database error messages, or internal IP addresses instead of a generic error message.Why it matters
Error pages are often the highest-information-density pages in an application. A verbose 500 error page can reveal the entire application stack, database schema, and internal network layout in a single response.How QAOS detects it
The agent deliberately requests non-existent pages and triggers server errors to probe error page verbosity, checking the response for stack traces and internal details.How to fix
Configure custom error pages that display only a user-friendly message with no internal details. In development, verbose errors are useful — but ensureDEBUG=False (or equivalent) in production:
local-log-storage
MediumWhat it is
Client-side JavaScript writes log entries tolocalStorage or sessionStorage, persisting debug data in the browser across sessions.
Why it matters
localStorage is accessible to any JavaScript running on the same origin (including injected scripts from XSS) and persists indefinitely. Sensitive debug data stored there can be read by attackers long after the original session.
How QAOS detects it
The agent scans JavaScript source for calls tolocalStorage.setItem or sessionStorage.setItem with log-related patterns.