NoSQL injection via user-controlled query input

ID

vbnet.inject.nosql_injection

Severity

critical

Remediation Complexity

medium

Remediation Risk

medium

Remediation Effort

medium

Resource

Inject

Language

VB.NET

Description

User-controlled input flows into a NoSQL query without neutralization (a parsed BSON/JSON filter, a $where JavaScript expression, or a string filter passed to a MongoDB collection operation). An attacker can inject query operators to bypass filters, read other documents, or run arbitrary JavaScript on the server (NoSQL injection). Build queries with the typed Builders<T>.Filter API and pass user values as parameters; never concatenate untrusted input into a filter string or a $where clause.

Rationale

User-controlled input flows into a NoSQL query without neutralization (a parsed BSON/JSON filter, a $where JavaScript expression, or a string filter passed to a MongoDB collection operation). An attacker can inject query operators to bypass filters, read other documents, or run arbitrary JavaScript on the server (NoSQL injection). Build queries with the typed Builders<T>.Filter API and pass user values as parameters; never concatenate untrusted input into a filter string or a $where clause.

The following code illustrates a vulnerable pattern detected by this rule:

Public Sub FindFromRequest(ByVal Request As HttpRequest, ByVal collection As IMongoCollection(Of BsonDocument))
    Dim query As String = Request.QueryString("q")
    ' VULNERABLE: NoSQL injection via user-controlled query input
    Dim result = collection.Find(query)
End Sub

Remediation

Follow secure coding practices and review the references below for detailed remediation guidance.

Configuration

This detector does not need any configuration.

References