Ccodemod

codemod/express-nosql-injection-to-safe-queries

Transform unsafe MongoDB query construction with user input to safe parameterized queries in Express applications using mongoose and mongodb drivers

securitynosql-injectionmongodbexpresstransformationmigration
Public
0 executions

Run locally

npx codemod @codemod/express-nosql-injection-to-safe-queries

Express NoSQL Injection to Safe Queries

A security-focused codemod that transforms unsafe MongoDB query construction with user input to safe parameterized queries in Express applications using Mongoose and MongoDB drivers.

Overview

This codemod addresses CWE-943: Improper Neutralization of Special Elements in Data Query Logic by identifying and transforming potentially vulnerable NoSQL injection patterns in Express applications.

Security Context

CWE-943 occurs when user input is directly passed to database operations without proper sanitization, allowing attackers to inject malicious query operators like $where, $regex, or arbitrary JavaScript code.

Installation

bash

What it transforms

Direct User Input

Before:

javascript

After:

javascript

Spread Operators with User Input

Before:

javascript

After:

javascript

Update Operations

Before:

javascript

After:

javascript

Dangerous Operators

Before:

javascript

After:

javascript

What it doesn't transform

  • Hardcoded query values
  • Already validated input
  • Queries using sanitized variables
  • Non-user input variables
  • Static regex patterns

Supported Operations

  • find, findOne, findOneAndUpdate, findOneAndDelete
  • updateOne, updateMany
  • deleteOne, deleteMany
  • replaceOne
  • aggregate, count, countDocuments

Limitations

  • Manual Review Required: The codemod uses common field patterns. You must review and adjust the generated safe fields to match your actual data schema.
  • Conservative Approach: It may generate overly restrictive queries that need adjustment.
  • Schema Awareness: The codemod doesn't know your actual database schema, so field selection is based on common patterns.

Security References

Development

bash

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Add tests for your changes
  4. Ensure all tests pass
  5. Submit a pull request

License

MIT

Ready to contribute?

Build your own codemod and share it with the community.