Injection vulnerabilities occur when untrusted user input is interpreted as code or query logic rather than data. They range from cross-site scripting (XSS) that executes JavaScript in victims’ browsers to database injection that exposes your entire data store.Documentation Index
Fetch the complete documentation index at: https://docs.qaos.machdel.com/llms.txt
Use this file to discover all available pages before exploring further.
user-input-not-filtered
High What it is Input fields do not sanitize or escape user-provided data before rendering it back to the page, making the application vulnerable to Cross-Site Scripting (XSS) attacks. Why it matters XSS allows attackers to inject arbitrary JavaScript into your application’s pages. This can be used to:- Steal session cookies (even without HttpOnly bypass via stored XSS)
- Redirect users to phishing sites
- Silently exfiltrate form data (keylogging)
- Deface the application
- Attack other users who view the infected page
hostile-data-used-in-query
High What it is User-controlled input is used directly in query construction without parameterization, allowing attackers to alter query logic and extract unauthorized records. Why it matters A single injectable search field can expose your entire database. SQL injection payloads like' OR 1=1 -- bypass WHERE clauses. NoSQL injection payloads like {"$ne": null} return all records. This is consistently the #1 cause of large-scale data breaches.
How QAOS detects it
The agent identifies search, filter, and query fields, then submits injection payloads and observes response changes:
untrusted-data-concatenation-dynamic-query
High What it is Dynamic queries are built by concatenating multiple untrusted input values, allowing injected fragments like&showAll=true, &fields=password, or ?filter[$gt]=0 to alter query behavior and expose unauthorized data.
Why it matters
Even when individual inputs are partially sanitized, combining multiple user-controlled values into a single query expression creates injection opportunities. Mass assignment vulnerabilities in ORMs fall into this category.
How QAOS detects it
The agent tests filter-based pages by injecting extra query parameters like showAll=true, fields=password,ssn,salary, or filter[$ne]=null to probe whether the application blindly passes these to the data layer.
How to fix
Use an explicit allow-list of accepted parameters and operators. Never pass raw query fragments from user input directly to an ORM or query builder:
orm-parameter-extraction-in-url
High What it is URL parameters are passed directly to an ORM query without validation, allowing injection of MongoDB-style operators ([$ne], [$gt], [$regex]), SQL fragments, or mass assignment parameters that expose additional records or hidden fields.
Why it matters
ORM injection via URL parameters is particularly common in Node.js applications using Mongoose or Sequelize, where req.query is passed directly to Model.find(). This can bypass all access control and expose every record in the collection.
How QAOS detects it
The agent appends injection suffixes to URL parameters on pages with data listings:
$ operators or array syntax:
orm-parameter-extraction-in-form
High What it is The same ORM injection vulnerability as above, but exploited through form submissions (POST body parameters) rather than URL query strings. Why it matters POST body parameters often receive less scrutiny than URL parameters, especially in frameworks that use body parsers that automatically convertname[$ne]=x form notation into nested objects { name: { $ne: 'x' } }.
How QAOS detects it
The agent submits forms with modified body parameters containing ORM injection payloads and observes whether the response includes data it should not have access to.
How to fix
Apply the same sanitization to POST body parameters as to query strings. Use express-mongo-sanitize or equivalent for your framework, and validate all inputs against explicit schemas using tools like Zod, Joi, or Pydantic.