Skip to content

Conversation

@trillium
Copy link
Member

Fixes #750

What changes did you make and why did you make them?

  • Upgraded Mongoose from 5.10.0 to 8.9.5 to fix security vulnerabilities CVE-2024-53900 and CVE-2025-23061

  • Removed old connection options that don't work in newer Mongoose versions

  • Changed callbacks to async/await because new Mongoose doesn't support callbacks

  • Added 'new' keyword before ObjectId() calls to match new requirements

Files Changed

  • backend/package.json - Updated Mongoose version
  • backend/server.js - Fixed connection options and initial() function
  • backend/setup-test.js - Fixed connection options
  • backend/scripts/cloneOrSyncCollections.js - Fixed connection options
  • backend/controllers/user.controller.js - Fixed callbacks and ObjectId
  • backend/controllers/project.controller.js - Fixed ObjectId

Screenshots of Proposed Changes Of The Website (if any, please do not screen shot code changes)

N/A - Backend only changes, no visual changes

Remove deprecated connection options that are no longer needed in
Mongoose 6+:
- useNewUrlParser
- useUnifiedTopology
- useCreateIndex
- useFindAndModify

These options are now defaults and cause warnings in newer versions.

Affects:
- backend/server.js: Remove options from main DB connection
- backend/setup-test.js: Remove mongoose.set() and connection options
- backend/scripts/cloneOrSyncCollections.js: Keep dbName, remove deprecated options

Related to Mongoose upgrade from 5.x to 8.x for CVE-2024-53900 fix.
Convert callback-based Mongoose API calls to async/await pattern,
required for Mongoose 7+ which dropped callback support.

Changes:
- backend/server.js: Convert initial() function to async/await
  - estimatedDocumentCount() callback → await
  - Role.save() callbacks → await
  - Call initial() after runServer() connection completes
- backend/controllers/user.controller.js: Convert UserController.createUser()
  - user.save() callback → try/catch with await

This ensures compatibility with Mongoose 7+ which removed all
callback support in favor of promises.

Related to Mongoose upgrade from 5.x to 8.x for CVE-2024-53900 fix.
Add 'new' keyword to ObjectId() calls to comply with Mongoose 7+
stricter constructor requirements. MongoDB driver ObjectId constructor
requires 'new' keyword in newer versions.

Changes:
- backend/controllers/user.controller.js: Add 'new' to 3 ObjectId calls
  in bulkUpdateManagedProjects() function
- backend/controllers/project.controller.js: Add 'new' to 3 ObjectId calls
  in bulkUpdateManagedByUsers() function

Without 'new' keyword, ObjectId constructor may throw errors or behave
unexpectedly in Mongoose 8 with MongoDB driver v6.

Related to Mongoose upgrade from 5.x to 8.x for CVE-2024-53900 fix.
Upgrade Mongoose to address critical security vulnerabilities:

- CVE-2024-53900 (CVSS 8.7): Search injection vulnerability allowing
  arbitrary JavaScript execution via $where operator
- CVE-2025-23061: Incomplete fix bypass for CVE-2024-53900

Mongoose 8.9.5 includes complete patches for both vulnerabilities.

Breaking changes handled in previous commits:
- Removed deprecated connection options
- Converted callbacks to async/await
- Added 'new' keyword to ObjectId constructors

Minimum Mongoose versions with CVE fixes: 6.13.5, 7.8.3, 8.8.3
This upgrade uses 8.9.5 for complete protection.

BREAKING CHANGE: Requires Node.js 16+
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.

Update package: mongodb

1 participant