Skip to content

fix(deps): update dependency mongoose to v8.22.1 [security]#554

Open
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/npm-mongoose-vulnerability
Open

fix(deps): update dependency mongoose to v8.22.1 [security]#554
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/npm-mongoose-vulnerability

Conversation

@renovate
Copy link
Copy Markdown
Contributor

@renovate renovate Bot commented May 8, 2026

This PR contains the following updates:

Package Change Age Confidence
mongoose (source) 8.19.08.22.1 age confidence

Mongoose's Improper Sanitization of $nor in sanitizeFilter May Allow NoSQL Injection

CVE-2026-42334 / GHSA-wpg9-53fq-2r8h

More information

Details

Impact

This vulnerability allows bypassing Mongoose’s sanitizeFilter query sanitization mechanism via the $nor operator.

When sanitizeFilter is enabled, Mongoose wraps query operators in $eq to neutralize them. However, prior to the fix, $nor was not included in the set of logical operators that are recursively sanitized. Because $nor accepts an array (like $and and $or), and arrays do not trigger hasDollarKeys(), malicious operators such as $ne, $gt, or $regex could be injected inside a $nor clause without being sanitized.

This may lead to:

  • Authentication bypass
  • Unauthorized data access
  • Data exfiltration

Affected users:

Applications that:

  • Explicitly enable sanitizeFilter
  • Pass unsanitized user-controlled input directly into query methods (e.g., Model.findOne(req.body)) and rely on sanitizeFilter to strip out query selectors

Applications that validate input schemas, whitelist fields, or avoid passing raw request bodies into queries are not affected. For example, Model.findOne({ user: req.body.user, pwd: req.body.pwd }) is not affected.

Patches

Patches have been released for all supported Mongoose release lines:

  • ^6.13.9
  • ^7.8.9
  • ^8.22.1
  • ^9.1.6
Workarounds

Delete $nor keys, use an additional schema validation library, or write middleware to strip out $nor from query filters.

Resources

sanitizeFilter documentation: https://mongoosejs.com/docs/api/mongoose.html#Mongoose.prototype.sanitizeFilter()

Original blog post on sanitizeFilter: https://thecodebarbarian.com/whats-new-in-mongoose-6-sanitizefilter.html

Severity

  • CVSS Score: 7.5 / 10 (High)
  • Vector String: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N

References

This data is provided by the GitHub Advisory Database (CC-BY 4.0).


Release Notes

Automattic/mongoose (mongoose)

v8.22.1

Compare Source

==================

  • fix: handle other top-level query operators in sanitizeFilter
  • fix(document): when cloning a doc with subdocs, make sure the subdocs parent is the cloned doc #​15904 #​15901
  • types(models): support Mongoose query casting in AnyBulkWriteOperation filter property #​15910
  • types: add toBSON() to documents #​15927

v8.22.0

Compare Source

8.22.0 / 2026-01-27

v8.21.1

Compare Source

===================

  • fix(clone): fix parent doc for map subdocuments and array subdocuments #​15958 AbdelrahmanHafez
  • fix(document): when cloning a doc with subdocs, make sure the subdocs parent is the cloned doc #​15904 #​15901
  • fix: respect currentTime schema option in bulkWrite updates #​15976 sderrow
  • types(models): support Mongoose query casting in AnyBulkWriteOperation filter property #​15910
  • types: add toBSON() to documents #​15927

v8.21.0

Compare Source

===================

  • feat(document+model): pass options to pre('deleteOne') and update+options to pre('updateOne') hooks #​15908 #​15870
  • feat(document): add support for getAtomics() to allow custom container types to utilize atomics #​15817
  • fix: add support for typescript style enums #​15914 #​15913 mjfwebb

v8.20.4

Compare Source

===================

v8.20.3

Compare Source

===================

  • perf: use Object.hasOwn instead of Object#hasOwnProperty #​15875 AbdelrahmanHafez
  • fix: improve error when calling Document.prototype.init() with null/undefined #​15812 Vegapunk-debug
  • types(schema): avoid treating paths with default: null as required #​15889
  • types(schema): allow partial statics to schema.statics() #​15780

v8.20.2

Compare Source

===================

v8.20.1

Compare Source

===================

v8.20.0

Compare Source

===================

v8.19.4

Compare Source

===================

v8.19.3

Compare Source

===================

  • fix(model+plugins): correctly apply shard key on deleteOne() #​15705 #​15701
  • fix(schema): correctly cache text indexes as 'text' not 1 #​15695
  • types: make inferRawDocType correctly infer empty array type [] as any[] #​15704 #​15699

v8.19.2

Compare Source

===================

  • perf(setDefaultsOnInsert): avoid computing all modified paths when running setDefaultsOnInsert and update validators, only calculate if there are defaults to set #​15691 #​15672
  • fix: correct handling of relative vs absolute paths with maps and subdocuments #​15682 #​15678 #​15350
  • ci: add publish script with provenance #​15684 #​15680

v8.19.1

Compare Source

===================

  • perf: avoid getting all modified paths in update when checking if versionKey needs to be set #​15677 #​15672
  • perf: Avoid needless path translation #​15679 orgads
  • fix(query): throw error if using update operator with modifier and no path #​15670 #​15642
  • types: avoid making FilterQuery a conditional type because of how typescript handles distributed conditional unions #​15676 #​15671
  • docs: update installation instructions #​15675 aalok-y

Configuration

📅 Schedule: (UTC)

  • Branch creation
    • ""
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@sonarqubecloud
Copy link
Copy Markdown

sonarqubecloud Bot commented May 8, 2026

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants