CIS MongoDB 7 Benchmark v1.1.0 PDF
CIS MongoDB 7 Benchmark v1.1.0 PDF
CIS MongoDB 7 Benchmark v1.1.0 PDF
Benchmark
v1.1.0 - 10-24-2024
For information on referencing and/or citing CIS Benchmarks in 3rd party documentation
(including using portions of Benchmark Recommendations) please contact CIS Legal
(CISLegal@cisecurity.org) and request guidance on copyright usage.
NOTE: It is NEVER acceptable to host a CIS Benchmark in ANY format (PDF, etc.)
on a 3rd party (non-CIS owned) site.
Page 1
Page 2
Page 3
These tools make the hardening process much more scalable for large numbers of
systems and applications.
NOTE: Some tooling focuses only on the CIS Benchmarks™ Recommendations that
can be fully automated (skipping ones marked Manual). It is important that
ALL Recommendations (Automated and Manual) be addressed, since all
are important for properly securing systems and are typically in scope for
audits.
In addition, CIS has developed CIS Build Kits for some common technologies to assist
in applying CIS Benchmarks™ Recommendations.
Page 4
NOTE: CIS and the CIS Benchmarks™ development communities in CIS WorkBench
do their best to test and have high confidence in the Recommendations, but
they cannot test potential conflicts with all possible system deployments.
Known potential issues identified during CIS Benchmarks™ development are
documented in the Impact section of each Recommendation.
By using CIS and/or CIS Benchmarks™ Certified tools, and being careful with
remediation deployment, it is possible to harden large numbers of deployed systems in
a cost effective, efficient, and safe manner.
NOTE: As previously stated, the PDF versions of the CIS Benchmarks™ are
available for free, non-commercial use on the CIS Website. All other formats
of the CIS Benchmarks™ (MS Word, Excel, and Build Kits) are available for
CIS SecureSuite® members.
Page 5
Important Information
• Automated Assessment Content is provided for Linux platforms only and is set to
look for mongod.conf in path /etc/mongod.conf.
• Mongod: The primary daemon process for the MongoDB system. It handles data
requests, manages data access, and performs background management
operations.
• Mongos: mongos is a routing service for MongoDB Sharded Clusters.mongos
requires mongod config, which stores the metadata of the cluster.MongoDB
Shard Utility, the controller and query router for sharded clusters. Sharding
partitions the data-set into discrete parts.
Intended Audience
This document is intended for system and application administrators, security
specialists, auditors, help desk, and platform deployment personnel who plan to
develop, deploy, assess, or secure solutions that incorporate MongoDB.
Page 6
Page 7
Convention Meaning
Page 8
Title
Concise description for the recommendation's intended configuration.
Assessment Status
An assessment status is included for every recommendation. The assessment status
indicates whether the given recommendation can be automated or requires manual
steps to implement. Both statuses are equally important and are determined and
supported as defined below:
Automated
Represents recommendations for which assessment of a technical control can be fully
automated and validated to a pass/fail state. Recommendations will include the
necessary information to implement automation.
Manual
Represents recommendations for which assessment of a technical control cannot be
fully automated and requires all or some manual steps to validate that the configured
state is set as expected. The expected state can vary depending on the environment.
Profile
A collection of recommendations for securing a technology or a supporting platform.
Most benchmarks include at least a Level 1 and Level 2 Profile. Level 2 extends Level 1
recommendations and is not a standalone profile. The Profile Definitions section in the
benchmark provides the definitions as they pertain to the recommendations included for
the technology.
Description
Detailed information pertaining to the setting with which the recommendation is
concerned. In some cases, the description will include the recommended value.
Rationale Statement
Detailed reasoning for the recommendation to provide the user a clear and concise
understanding on the importance of the recommendation.
Page 9
Audit Procedure
Systematic instructions for determining if the target system complies with the
recommendation.
Remediation Procedure
Systematic instructions for applying recommendations to the target system to bring it
into compliance according to the recommendation.
Default Value
Default value for the given setting in this recommendation, if known. If not known, either
not configured or not defined will be applied.
References
Additional documentation relative to the recommendation.
Additional Information
Supplementary information that does not correspond to any other field but may be
useful to the user.
Page 10
• Level 1- MongoDB
• Level 2 - MongoDB
This profile extends the “Level 1 - MongoDB” profile. Items in this profile apply to
MongoDB and exhibit one or more of the following characteristics:
Page 11
Authors
Vinesh Redkar
Pralhad Chaskar
Editor
Randall Mowen
Contributors
James Scott
Emad Al-Mousa
Vinesh Redkar
Matthew Reagan
Tony Wilderwing
Page 12
Page 13
• Level 1- MongoDB
Description:
The MongoDB installation version, along with the patch level, should be the most recent
that is compatible with the organization's operational needs. In addition, regularly view
latest minor security patch updates for security vulnerability fixes (CVE Related) from
MongoDB website: https://www.mongodb.com/alerts
Rationale:
Using the most recent MongoDB software version along with all applicable patches,
helps limit the possibilities for vulnerabilities in the software. The installation version
and/or patches applied should be selected according to the needs of the organization.
At a minimum, the software version should be supported.
Audit:
On Ubuntu:
Run the following command from within the MongoDB shell to determine if the
MongoDB software version complies with your organization’s operational needs:
mongo --version
db.version() #Inside mongo console
On Windows:
Navigate to the Installation directory of Mongo DB on the server and run below
command
mongod.exe --version
Remediation:
Upgrade to the latest version of the MongoDB software:
Page 14
1. https://www.mongodb.com/docs/v7.0/installation/
2. https://www.mongodb.com/docs/v7.0/release-notes/7.0/#std-label-release-notes-
7.0
3. https://www.mongodb.com/download-center#community
4. https://www.mongodb.com/support-policy
5. https://www.mongodb.com/alerts
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
Page 15
Page 16
• Level 1- MongoDB
Description:
This setting ensures that all clients, users, servers are required to authenticate before
being granted access to the MongoDB database.
Authentication is the process of verifying the identity of a client. When access control,
i.e. authorization, is enabled, MongoDB requires all clients to authenticate themselves in
order to determine their access.
from MongoDB documentation
Authentication Mechanisms
MongoDB supports a number of authentication mechanisms that clients
can use to verify their identity. These mechanisms allow MongoDB to
integrate into your existing authentication system.
MongoDB supports multiple authentication mechanisms:
• SCRAM (Default)
• x.509 Certificate Authentication.
Certificate Authority
For production use, your MongoDB deployment should use valid
certificates generated and signed by a certificate authority. You or your
organization can generate and maintain an independent certificate
authority, or use certificates generated by third-party TLS/SSL vendors.
In addition to supporting the aforementioned mechanisms, MongoDB
Enterprise also supports the following mechanisms:
Rationale:
Failure to authenticate clients, users, servers can enable unauthorized access to the
MongoDB database and can prevent tracing actions back to their sources.
It's highly recommended that password length and complexity also be in-place. When
performing the traditional user/password authentication against MongoDB there is not
in-place intrinsic password complexity check and there is no LOCKING mechanism with
multiple failure logins. So, MongoDB is prone to brute force attacks compared to other
database systems.
Page 17
Remediation:
The authentication mechanism should be implemented before anyone accesses the
MongoDB Server.
To enable the authentication mechanism:
Or
• Create the system user administrator, ensuring that its password meets
organizationally-defined password in terms of length and complexity
requirements as there is no in-place locking mechanism for multiple failed login
attempts against MongoDB.
Page 18
security:
authorization: "enabled"
Default Value:
By default, authorization is set to disable.
References:
1. https://www.mongodb.com/docs/v7.0/core/authentication/
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
Page 19
• Level 1- MongoDB
Description:
MongoDB should not be set to bypass authentication via the localhost exception. The
localhost exception allows the user to enable authorization before creating the first user
in the system. When active, the localhost exception allows all connections from the
localhost interface to have full access to that instance. The exception applies only when
there are no users created in the MongoDB instance.
Note: This recommendation only applies when there are no users created in the
MongoDB instance.
Rationale:
Disabling this exception will prevent unauthorized local access to the MongoDB
database. It will also ensure the traceability of each database activity to a specific user.
Localhost Exception allows direct connect to Mongod’s without any UN/PW.
Audit:
Run the following command to extract the information about
enableLocalhostAuthBypass setting on Configuration File.
On Ubuntu:
cat /etc/mongod.conf |grep "enableLocalhostAuthBypass"
On Windows:
type mongod.conf | findstr "enableLocalhostAuthBypass"
The value for enableLocalhostAuthBypass must be false.
Remediation:
To disable local authentication on the MongoDB database.
Type OS Console Command
mongod --setParameter enableLocalhostAuthBypass=0
or
To manually configure use the setParameter option in the mongo configuration file to
set it to false.
Page 20
Default Value:
By default, localhost exception value (enableLocalhostAuthBypass) is true.
References:
1. https://www.mongodb.com/docs/v7.0/core/localhost-exception/
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
Page 21
• Level 2 - MongoDB
Description:
Authentication is enabled in a sharded cluster when the certificate or key files are
created and configured for all components. This ensures that every client that accesses
the cluster must provide credentials, to include MongoDB instances that access each
other within the cluster.
With keyfile authentication, each mongod or mongos instance in the sharded cluster
uses the contents of the keyfile as the shared password for authenticating other
members in the deployment. Only mongod or mongos instances with the correct keyfile
can join the sharded cluster.
For Production Environment: x.509 certificate authentication with secure TSL/SSL
connection must be used for authentication.
For Development Purpose: Key file can be used as an authentication mechanism
between the shared cluster. Keyfiles are bare-minimum forms of security and are best
suited for testing or development environments.
Rationale:
Enforcing a key or certificate on a sharded cluster prevents unauthorized access to the
MongoDB database and provides traceability of database activities to a specific user or
component. A MongoDB sharded cluster can enforce user authentication as well as
internal authentication of its components to secure against unauthorized access.
Audit:
Based on recommendations
•
PEMKeyFile, clusterFile, CAFile must be configured.
•
clusterAuthMode should be set to x509
•
authenticationMechanisms should be set to MONGODB-X509.
To Check That your Current MongoDB is configured for sharding setup, execute the
following command:
sh.status()
OR
Page 22
On Windows:
type mongod.conf | findstr “clusterAuthMode”
Run the following command to verify that the key file-based authentication is
configured: (Only for Development Purpose)
On Ubuntu:
cat /etc/mongod.conf | grep “keyFile”
On Windows:
type mongod.conf | findstr “keyFile”
Remediation:
To authenticate to servers, clients can use x.509 certificates instead of usernames and
passwords.
MongoDB supports x.509 certificate authentication for use with a secure TLS/SSL
connection. The x.509 client authentication allows clients to authenticate to servers with
certificates rather than with a username and password.
Change the configuration file /etc/mongod.conf on each host, adding the following
rows:
Page 23
security:
authorization: enabled
clusterAuthMode: x509
net:
tls:
mode: requireTLS
certificateKeyFile: <path to its TLS/SSL certificate and key file>
CAFile: <path to root CA PEM file to verify received certificate>
clusterFile: <path to its certificate key file for membership
authentication>
bindIp: localhost,<hostname(s)|ip address(es)>
Restart the daemon
sudo service mongodb restart
To enable authentication in the sharded cluster, perform the following steps:(Only for
Development Purpose)
•
Generate A Key File
• On each component in the shared cluster, enable authentication by editing the
configuration file /etc/mongod.conf. Set the keyFile option to the key file’s
path and then start the component with this command:
keyFile = /srv/mongodb/keyfile
• When starting the component, set --keyFile option, which is an option for both
mongos instances and mongod instances. Set the --keyFile to the key file’s
path.
Default Value:
Not configured
References:
1. https://www.mongodb.com/docs/v7.0/core/security-transport-encryption/#std-
label-transport-encryption
Page 24
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
Page 25
Page 26
• Level 1- MongoDB
Description:
MongoDB grants access to data and commands through "role-based" approach,
MongoDB is shipped with built-in roles that provide the different levels of access
commonly needed in a database system. In addition, you can create custom-roles.
The following roles provide the ability to assign any user any privilege on any database,
which means that users with one of these roles can assign themselves any privilege on
any database:
dbOwner role, when scoped to the admin database userAdmin role, when scoped to the
admin database userAdminAnyDatabase role
Rationale:
Ensuring highly privileged Roles are granted only for database administrators, and roles
are not scoped to "admin" databases will reduce attack surface and follows the least
privilege principle.
Audit:
To check accounts with database roles scoped in "admin" database, use the following
query:
db.system.users.find(
{"roles.role":{$in:["dbOwner","userAdmin","userAdminAnyDatabase"]},"roles.db"
: "admin" } )
Remediation:
If any accounts were listed with built in-roles:
dbOwner
userAdmin
userAdminAnyDatabase
in "admin" database role then drop them.
References:
1. https://www.mongodb.com/docs/v7.0/reference/built-in-roles/
Page 27
Controls
Control IG 1 IG 2 IG 3
Version
Page 28
• Level 1- MongoDB
Description:
Role-based access control (RBAC) is a method of regulating access to resources based
on the roles of individual users within an enterprise. A user is granted one or more roles
that determine the user’s access to database resources and operations. Outside of role
assignments, the user has no access to the system. MongoDB can use RBAC to govern
access to MongoDB systems. MongoDB does not enable authorization by default.
Rationale:
When properly implemented, RBAC enables users to carry out a wide range of
authorized tasks by dynamically regulating their actions according to flexible functions.
This allows an organization to control employees’ access to all database tables through
RBAC.
Audit:
Connect to MongoDB with the appropriate privileges and run the following command:
References:
1. https://www.mongodb.com/docs/v7.0/tutorial/manage-users-and-roles/
Page 29
Controls
Control IG 1 IG 2 IG 3
Version
Page 30
• Level 1- MongoDB
Description:
The MongoDB service should not be run using a privileged account such as 'root'
because this unnecessarily exposes the operating system to high risk.
Rationale:
Using a non-privileged, dedicated service account restricts the database from accessing
the critical areas of the operating system which are not required by the MongoDB. This
will also mitigate the potential for unauthorized access via a compromised, privileged
account on the operating system.
Audit:
Run the following command to get listing of all mongo instances, the PID number, and
the PID owner.
ps -ef | grep -E "mongos|mongod"
Remediation:
Default Value:
Not configured
References:
1. https://www.mongodb.com/docs/v7.0/tutorial/manage-users-and-roles/
Page 31
Controls
Control IG 1 IG 2 IG 3
Version
Page 32
• Level 1- MongoDB
Description:
Reviewing all roles periodically and eliminating unneeded roles as well as unneeded
privileges from necessary roles helps minimize the privileges that each user has.
Rationale:
Although role-based access control (RBAC) has many advantages for regulating access
to resources, over time some roles may no longer be needed, and some roles may
grant privileges that are no longer needed.
Audit:
Perform the following command to view all roles on the database on which the
command runs, including both built-in and user-defined roles, as well as the privileges
granted by each role. Ensure that only necessary roles are listed and only the
necessary privileges are listed for each role.
db.runCommand(
{
rolesInfo: 1,
showPrivileges: true,
showBuiltinRoles: true
}
)
Remediation:
To revoke specified privileges from the user-defined role on the database where the
command is run. The revokePrivilegesFromRole command has the following syntax:
References:
1. https://www.mongodb.com/docs/v7.0/reference/privilege-actions/#mongodb-
authaction-revokeRole
2. https://www.mongodb.com/docs/v7.0/core/authorization/#std-label-privileges
Additional Information:
You must have the dropRole action on a database to drop a role from that database.
Page 33
Controls
Control IG 1 IG 2 IG 3
Version
Page 34
• Level 2 - MongoDB
Description:
Roles provide several advantages that make it easier to manage privileges in a
database system. Security administrators can control access to their databases in a
way that mirrors the structure of their organizations (they can create roles in the
database that map directly to the job functions in their organizations). The assignment
of privileges is simplified. Instead of granting the same set of privileges to each
individual user in a particular job function, the administrator can grant this set of
privileges to a role representing that job function and then grant that role to each user in
that job function.
Rationale:
Reviewing the Superuser/Admin roles within a database helps minimize the possibility
of privileged unwanted access.
Audit:
Superuser roles provide the ability to assign any user any privilege on any database,
which means that users with one of these roles can assign themselves any privilege on
any database:
db.runCommand( { rolesInfo: "dbOwner" } )
db.runCommand( { rolesInfo: "userAdmin" } )
db.runCommand( { rolesInfo: "userAdminAnyDatabase" } )
Root role provides access to the operations and all the resources of the
readWriteAnyDatabase, dbAdminAnyDatabase, userAdminAnyDatabase,
clusterAdmin roles, restore combined.
db.runCommand( { rolesInfo: "readWriteAnyDatabase" } )
db.runCommand( { rolesInfo: "dbAdminAnyDatabase" } )
db.runCommand( { rolesInfo: "userAdminAnyDatabase" } )
db.runCommand( { rolesInfo: "clusterAdmin" } )
Cluster Administration Roles are used for administering the whole system rather than
just a single database.
db.runCommand( { rolesInfo: "hostManager" } )
Remediation:
To remove a user from one or more roles on the current database.
Page 35
1. https://www.mongodb.com/docs/v7.0/core/security-user-defined-roles/
2. https://www.mongodb.com/docs/v7.0/reference/method/#std-label-role-
management-methods
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
Page 36
Page 37
• Level 2 - MongoDB
Description:
Only modern TLS protocols should be enabled in MongoDB for all client connections
and upstream connections. Removing legacy TLS and SSL protocols (SSL 3.0, TLS 1.0
and 1.1), and enabling emerging and stable TLS protocols (TLS 1.2, and TLS 1.3),
ensures users are able to take advantage of strong security capabilities and protects
them from insecure legacy protocols.
Rationale:
Why disable TLS 1.0: TLS 1.0 was deprecated from use when PCI DSS Compliance
mandated that it not be used for any applications processing credit card numbers in
June 2018.
Why disable TLS 1.1: Because of the increased security associated with higher
versions of TLS, TLS 1.0 should be disabled.
Audit:
To verify that the server uses disables legacy TLS protocols you should check the
disabledProtocols directive, run the following commands:
mongod --config /etc/mongod.conf
Remediation:
Make changes to configuration file, to configure your mongod or mongos instance to
disable legacy protocols, shut down the instance and update the configuration file with
the following setting:
net:
tls:
mode: requireTLS
certificateKeyFile: /etc/ssl/mongodb.pem
CAFile: /etc/ssl/caToValidateClientCertificates.pem
disabledProtocols: TLS1_0,TLS1_1
Page 38
Default Value:
TLS1_0, TLS1_1, TLS1_2
Note: Starting in version 4.0.4 (and 3.6.9)TLS1_3 is added to the default value.
References:
1. https://www.mongodb.com/docs/v7.0/core/security-transport-encryption/
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
Page 39
• Level 1- MongoDB
Description:
Servers can be configured to disable specific TLS/SSL protocol versions which may be
vulnerable to exploitation and/or lack features which improve the level of security as
provided by newer versions of the protocol.
Rationale:
The TLSv1.0 protocol is vulnerable to the BEAST attack when used in CBC mode
(October 2011). Unfortunately, the TLSv1.0 uses CBC modes for all of the block mode
ciphers, which only leaves the RC4 streaming cipher which is also weak and is not
recommended. Therefore, it is recommended that the TLSv1.0 protocol be disabled.
The TLSv1.1 protocol does not support Authenticated Encryption with Associated Data
(AEAD) which is designed to simultaneously provide confidentiality, integrity, and
authenticity.
The NIST SP 800-52r2 guidelines for TLS configuration require that TLS 1.2 is
configured with FIPS-based cipher suites be supported by all government TLS servers
and clients and requires support of TLS 1.3 by January 1, 2024. A September 2018
IETF draft also depreciates the usage of TLSv1.0 and TLSv1.1 as shown in the
references.
Impact:
If an attempt to connect using a disabled protocol is made the connection attempt will
fail and may have unanticipated impact on clients attempting to establish the
connection.
Audit:
To verify that the server disable TLS v1.0 and v1.1, run one of the following commands:
• On Ubuntu:
• On Windows:
Page 40
Or
mongod --sslDisabledProtocols `TLS1_0,TLS1_1
Default Value:
TLS1_0 if TLS 1.1+ is available on the system.
References:
1. https://www.mongodb.com/docs/v7.0/reference/configuration-options/#mongodb-
setting-net.ssl.disabledProtocols
Additional Information:
On macOS, you cannot disable TLS1_1 and leave both TLS1_0 and TLS1_2 enabled.
You must also disable at least one of the other two; for example, TLS1_0,TLS1_1.
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
Page 41
• Level 1- MongoDB
Description:
Use TLS or SSL to protect all incoming and outgoing connections. This should include
using TLS or SSL to encrypt communication between the mongod and mongos
components of a MongoDB client as well as between all applications and MongoDB.
MongoDB supports TLS/SSL (Transport Layer Security/Secure Sockets Layer) to
encrypt all of MongoDB’s network traffic. TLS/SSL ensures that MongoDB network
traffic is only readable by the intended client.
Please note: As of MongoDB version 4.2 SSL has been deprecated.
Also, starting in MongoDB version 4.0, MongoDB disables support for TLS 1.0
encryption on systems where TLS 1.1+ is available.
Rationale:
This prevents sniffing of cleartext traffic between MongoDB components or performing a
man-in-the-middle attack for MongoDB.
Audit:
To verify that the server requires SSL or TLS (net.tls.mode value set to requireTLS),
run one of the following commands:
On Ubuntu:
cat /etc/mongod.conf | grep –A20 ‘net’ | grep –A10 ‘tls’ | grep ‘mode’
On Windows:
type mongod.conf | findstr –A20 ‘net’ | findstr –A10 ‘tls’ | findstr ‘mode’
Remediation:
Configure MongoDB servers to require the use of SSL or TLS to encrypt all MongoDB
network communications.
To implement SSL or TLS to encrypt all MongoDB network communication, perform the
following steps:
For mongod (“Primary daemon process for the MongoDB system”)
In the configuration file /etc/mongod.conf, set the PEMKeyFile option to the certificate
file’s path and then start the component with this command:
Page 42
Default Value:
Not configured
References:
1. https://www.mongodb.com/docs/v7.0/tutorial/configure-ssl/
2. https://www.mongodb.com/docs/v7.0/tutorial/configure-ssl-clients/
3. https://www.mongodb.com/docs/v7.0/tutorial/upgrade-cluster-to-ssl/
4. https://www.mongodb.com/docs/v7.0/reference/configuration-options/#mongodb-
setting-net.tls.clusterAuthX509.attributes
Additional Information:
-----------------------------------------------------------------------------
Value | Description
------------+----------------------------------------------------------------
disabled | The server does not use TLS.
------------+----------------------------------------------------------------
allowTLS | Connections between servers do not use TLS. For incoming
connections,
| the server accepts both TLS and non-TLS.
|
|
------------+----------------------------------------------------------------
preferTLS | Connections between servers use TLS. For incoming connections,
the server
| accepts both TLS and non-TLS.
|
|
------------+----------------------------------------------------------------
requireTLS | The server uses and accepts only TLS encrypted connections.
|
-----------------------------------------------------------------------------
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
Page 43
Page 44
• Level 2 - MongoDB
Description:
The Federal Information Processing Standard (FIPS) is a computer security standard
used to certify software modules and libraries that encrypt and decrypt data securely.
You can configure MongoDB to run with a FIPS 140-2 certified library for OpenSSL.
FIPS is a property of the encryption system and not the access control system.
However, the environment requires FIPS compliant encryption and access control.
Organizations must ensure that the access control system uses only FIPS-compliant
encryption.
Rationale:
FIPS is an industry standard which dictates how data should be encrypted at rest and
during transmission.
Audit:
On Ubuntu:
To verify that the server uses FIPS Mode (net.tls.FIPSMode value set to true), run
following commands:
mongod --config /etc/mongod.conf
net:
tls:
FIPSMode: true
Or
To verify FIPS mode is running, check the server log file for a message that FIPS is
active:
FIPS 140-2 mode activated
On Windows:
Check FIPSMode is true
type mongod.conf | findstr “FIPSMode"
Remediation:
Configuring FIPS mode, ensure that your certificate is FIPS compliant. Run mongod or
mongos instance in FIPS mode.
Make changes to configuration file, to configure your mongod or mongos instance to
use FIPS mode, shut down the instance and update the configuration file with the
following setting:
Page 45
Default Value:
Not configured
References:
1. https://www.mongodb.com/docs/v7.0/tutorial/configure-fips/
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
Page 46
• Level 2 - MongoDB
Description:
Encryption of data at rest must be enabled to ensure compliance with security and
privacy standards including HIPAA, PCI-DSS, and FERPA.
Encryption at rest, when used in conjunction with transport encryption and good security
policies that protect relevant accounts, passwords, and encryption keys.
Rationale:
Unauthorized users, such as intruders who are attempting security attacks, cannot read
the data from storage and back up media unless they have the master encryption key to
decrypt it.
Audit:
To verify that the server requires TLS (net.tls.mode value set to requireTLS), run
one of the following commands:
On Ubuntu:
cat /etc/mongod.conf | grep --enableEncryption 'yes' | grep --
encryptionKeyFile '<path to keyfile>'
On Windows:
type mongod.conf | findstr --enableEncryption 'yes' | findstr --
encryptionKeyFile '<path to keyfile>'
Remediation:
It is recommended to enable the data at rest encryption to protect the data.
Protecting Data at Rest Including following steps.
Only the master key is external to the server and requires external management. To
manage the master key, MongoDB’s encrypted storage engine supports two key
management options:
Page 47
References:
1. https://www.mongodb.com/docs/v7.0/core/security-encryption-at-rest/
Additional Information:
Available in MongoDB Enterprise only.
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
Page 48
Page 49
• Level 1- MongoDB
Description:
Track access and changes to database configurations and data. MongoDB Enterprise
includes a system auditing facility that can record system events (e.g. user operations,
connection events) on a MongoDB instance. These audit records permit forensic
analysis and allow administrators to verify proper controls.
Rationale:
System level logs can be handy while troubleshooting an operational problem or
handling a security incident.
Audit:
To verify that system activity is being audited for MongoDB, run the following command
to confirm the auditLog.destination value is set correctly:
On Ubuntu:
cat /etc/mongod.conf |grep –A4 "auditLog" | grep "destination"
On Windows:
type mongod.conf | findstr –A4 "auditLog" | findstr "destination"
Remediation:
Set the value of auditLog.destination to the appropriate value from the following
options:
syslog
To enable auditing and print audit events to syslog
mongod --dbpath data/db --auditDestination syslog
console
To enable auditing and print audit events to standard output (i.e., stdout)
mongod --dbpath data/db --auditDestination console
Json File
To enable auditing and print audit events to a file in JSON format. Printing audit events
to file in JSON format degrades server performance more than printing to a file in BSON
format.
Page 50
Bson File
To enable auditing and print audit events to a file in BSON binary format
mongod --dbpath data/db --auditDestination file --auditFormat BSON --
auditPath data/db/auditLog.bson
Default Value:
Not configured
References:
1. http://docs.mongodb.org/manual/tutorial/configure-auditing/
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
Page 51
• Level 2 - MongoDB
Description:
MongoDB Enterprise supports auditing of various operations. When enabled, the audit
facility, by default, records all auditable operations as detailed in Audit Event Actions,
Details, and Results. To specify which events to record, the audit feature includes the -
-auditFilter option. This check is only for Enterprise editions.
Rationale:
All operations carried out on the database are logged. This helps in backtracking and
tracing any incident that occurs.
Audit:
To verify that audit filters are configured on MongoDB as per the organization’s
requirements, run the following command:
On Ubuntu:
cat /etc/mongod.conf |grep –A10 "auditLog" | grep "filter"
On Windows:
type mongod.conf | findstr –A10 "auditLog" | findstr "filter"
Remediation:
Set the audit filters based on the organization’s requirements.
Default Value:
Not configured
References:
1. https://docs.mongodb.com/manual/reference/audit-message/
2. https://docs.mongodb.com/manual/tutorial/configure-audit-filters/
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
Page 52
Page 53
• Level 2 - MongoDB
Description:
The SystemLog.quiet option stops logging of information such as:
• connection events
• authentication events
• replication sync activities
• evidence of some potentially impactful commands being run (eg: drop,
dropIndexes, validate)
This information should be logged whenever possible. This check is only for Enterprise
editions.
Rationale:
The use of SystemLog.quiet makes troubleshooting problems and investigating
possible security incidents much more difficult.
Audit:
To verify that the SystemLog: quiet=false option is disabled (value of false), run the
following command:
On Ubuntu:
cat /etc/mongod.conf |grep "quiet"
On Windows:
type mongod.conf | findstr "quiet"
Remediation:
Set
`SystemLog:
quiet: false`
to false in the /etc/mongod.conf file to disable it.
References:
1. https://docs.mongodb.com/manual/reference/configuration-
options/#systemLog.quiet
Page 54
Controls
Control IG 1 IG 2 IG 3
Version
Page 55
• Level 2 - MongoDB
Description:
By default, new log entries will overwrite old entries after a restart of the mongod or
Mongols service. Enabling the systemLog.logAppend setting causes new entries to be
appended to the end of the log file rather than overwriting the existing content of the log
when the mongos or mongod instance restarts.
Rationale:
Allowing old entries to be overwritten by new entries instead of appending new entries
to the end of the log may destroy old log data that is needed for a variety of purposes.
Audit:
To verify that new log entries will be appended to the end of the log file after a restart
(systemLog: logAppend: true value set to true), run the following command:
On Ubuntu:
cat /etc/mongod.conf | grep "logAppend"
On Windows:
type mongod.conf | findstr "logAppend"
Remediation:
Set
`systemLog:
logAppend: true`
to true in the /etc/mongod.conf file.
References:
1. https://docs.mongodb.com/manual/reference/configuration-
options/#systemLog.logAppend
Page 56
Controls
Control IG 1 IG 2 IG 3
Version
Page 57
Page 58
• Level 1- MongoDB
Description:
Changing the default port used by MongoDB makes it harder for attackers to find the
database and target it.
Rationale:
Standard ports are used in automated attacks and by attackers to verify which
applications are running on a server.
Impact:
Hackers frequently scan IP addresses for commonly used ports, so it's not uncommon
to use a different port to "fly under the radar". This is just to avoid detection, other than
that there is no added safety by using a different port.
Audit:
To verify the port number used by MongoDB, execute the following command and
ensure that the port number is not 27017:
On Ubuntu:
cat /etc/mongod.conf |grep “port”
On Windows:
type mongod.conf | findstr “port”
Remediation:
Change the port for MongoDB server to a number other than 27017.
In mongod.conf edit the below lines
# network interfaces
net:
port: $Orginasation Defined port
bindIp: $Orginasation Defined IP
References:
1. https://docs.mongodb.com/v5.0/reference/default-mongodb-port/
Page 59
Controls
Control IG 1 IG 2 IG 3
Version
Page 60
• Level 2 - MongoDB
Description:
Operating systems provide ways to limit and control the usage of system resources
such as threads, files, and network connections on a per-process and per-user basis
Rationale:
These ulimits prevent a single user from consuming too many system resources.
Audit:
To verify the resource limits set for MongoDB, run the following commands.
Extract the process ID for MongoDB:
ps -ef | grep mongod
View the limits associated with that process number:
cat /proc/1322/limits
Remediation:
Every deployment may have unique requirements and settings. Recommended
thresholds and settings are particularly important for MongoDB deployments:
•
f (file size): unlimited
•
t (cpu time): unlimited
•
v (virtual memory): unlimited [1]
•
n (open files): 64000
•
m (memory size): unlimited [1] [2]
•
u (processes/threads): 64000
Restart the mongod and mongos instances after changing the ulimit settings to
ensure that the changes take effect.
Page 61
1. https://www.mongodb.com/docs/v7.0/reference/ulimit/
2. https://docs.mongodb.com/manual/reference/ulimit/
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
Page 62
• Level 2 - MongoDB
Description:
MongoDB supports the execution of JavaScript code for certain server-side operations:
mapReduce, group, $where, $accumulator, and $function aggregation operations
that allow users to define custom aggregation expressions. If you do not use these
operations, server-side scripting should be disabled.
Rationale:
If server-side scripting is not needed and is not disabled, this introduces unnecessary
risk which may allow an attacker to take advantage of insecure coding.
Impact:
Disabling server-side scripting will block all server-side scripts from executing.
Audit:
Remediation:
If server-side scripting is not required, for mongod instance disable it by using the --
noscripting option on the command line, or setting security.javascriptEnabled to
false in the configuration file.
Starting in MongoDB 4.4 this is also applicable to mongos.
Default Value:
Enabled
References:
1. https://www.mongodb.com/docs/v7.0/core/server-side-javascript/
2. https://docs.mongodb.com/manual/core/server-side-javascript/#disable-server-
side-js
Page 63
Controls
Control IG 1 IG 2 IG 3
Version
Page 64
Page 65
• Level 1- MongoDB
Description:
In the Shared Cluster, the certificate or keyfile is utilized for authentications.
Implementing proper file permissions on the certificate or keyfile will prevent
unauthorized access to it.
Rationale:
Protecting the certificate/keyfile strengthens authentication in the sharded cluster and
prevents unauthorized access to the MongoDB database.
Audit:
Find the location of certificate/keyfile using the following commands:
On Ubuntu:
cat /etc/mongod.conf | grep “keyFile:”
cat /etc/mongod.conf | grep “PEMKeyFile:”
cat /etc/mongod.conf | grep “CAFile:”
On Windows:
type mongod.conf | findstr “keyFile:”
type mongod.conf | findstr “PEMKeyFile:”
type mongod.conf | findstr “CAFile:”
Remediation:
Set the keyFile ownership to mongodb user and remove other permissions by
executing these commands:
chmod 600 /keyfile
sudo chown mongodb:mongodb /keyfile
Default Value:
Not configured
References:
1. https://www.mongodb.com/docs/v7.0/tutorial/deploy-replica-set-with-keyfile-
access-control/
Page 66
Controls
Control IG 1 IG 2 IG 3
Version
Page 67
• Level 1- MongoDB
Description:
MongoDB database files need to be protected using file permissions.
Rationale:
This will restrict unauthorized users from accessing the database.
Audit:
To verify that the permissions for the MongoDB database file are configured securely,
run the following commands.
Find out the database location using the following command:
On Ubuntu:
cat /etc/mongod.conf |grep "dbpath"
or
cat /etc/mongod.conf | grep "dbPath"
Use the database location as part of the following command to view and verify the
permissions set for the database file:
Example:
$ stat -c '%a' /var/lib/mongodb
On Windows:
type mongod.conf | findstr "dbpath"
Use the database location as part of the following command to view and verify the
permissions set for the database file:
icacls "dbpath"
Remediation:
Set ownership of the database file to mongodb user and remove other permissions
using the following commands:
chmod 770 /var/lib/mongodb
chown mongodb:mongodb /var/lib/mongodb
Default Value:
Not configured
Page 68
1. https://www.mongodb.com/docs/v7.0/reference/configuration-options/#mongodb-
setting-storage.dbPath
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
Page 69
Yes No
2 Authentication
3 Authorization
4 Data Encryption
Page 70
Yes No
5 Audit Logging
5.4 Ensure that new entries are appended to the end of the
log file (Automated)
6.2 Ensure that operating system resource limits are set for
MongoDB (Manual)
7 File Permissions
Page 71
Page 72
Page 73
Page 74
Page 75
Page 76
Page 77
Page 78
Page 79
Page 80
Page 81
Page 82
Page 83
Page 84