logo

Database

Elixir Mongo Nosql Injection

Description

Detects potential NoSQL injection vulnerabilities in Elixir MongoDB queries where user input may be directly interpolated into query filters without proper sanitization. This can allow attackers to manipulate database queries by injecting malicious operators or conditions, potentially leading to unauthorized data access or bypassing authentication mechanisms.

Weakness:

106 - NoSQL injection

Category: Unexpected Injection

Detection Strategy

    Analyzes Elixir source code for MongoDB query operations

    Examines function calls and query construction patterns in selected code locations

    Identifies MongoDB filter operations that may accept unsanitized user input

    Reports vulnerability when query filters are built using potentially unsafe input concatenation or interpolation

    Focuses on scenarios where external data flows into MongoDB query parameters without proper validation or escaping

Vulnerable code example

defmodule VulnerableApp do
  def user_login(conn, topology) do
    # VULNERABLE: entire filter structure comes from user input
    filter = conn.params["credentials"]
    Mongo.find_one(topology, "users", filter)
  end

  def search_users(conn, topology) do...

✅ Secure code example

defmodule VulnerableApp do
  def user_login(conn, topology) do
    # Get individual credential fields from user input
    username = conn.params["username"]
    password = conn.params["password"]
    
    # SAFE: construct filter with fixed keys, only values from user input
    filter = %{"username" => username, "password" => password}...