diff --git a/src/wp-admin/admin-ajax.php b/src/wp-admin/admin-ajax.php
index 6be4a87a13..7b9a11bf06 100644
--- a/src/wp-admin/admin-ajax.php
+++ b/src/wp-admin/admin-ajax.php
@@ -137,6 +137,7 @@
 	'health-check-background-updates',
 	'health-check-loopback-requests',
 	'health-check-get-sizes',
+	'health-check-code-integrity',
 );
 
 // Deprecated
diff --git a/src/wp-admin/includes/ajax-actions.php b/src/wp-admin/includes/ajax-actions.php
index 5ad5eac8a6..2928047941 100644
--- a/src/wp-admin/includes/ajax-actions.php
+++ b/src/wp-admin/includes/ajax-actions.php
@@ -5057,3 +5057,24 @@ function wp_ajax_health_check_get_sizes() {
 
 	wp_send_json_success( $all_sizes );
 }
+
+/**
+ * Ajax handler for site health checks on code integrity.
+ *
+ * @since 5.3.0
+ */
+function wp_ajax_health_check_code_integrity() {
+        check_ajax_referer( 'health-check-site-status' );
+
+        if ( ! current_user_can( 'view_site_health_checks' ) ) {
+                wp_send_json_error();
+        }
+
+        if ( ! class_exists( 'WP_Site_Health' ) ) {
+                require_once( ABSPATH . 'wp-admin/includes/class-wp-site-health.php' );
+        }
+
+        $site_health = new WP_Site_Health();
+        wp_send_json_success( $site_health->get_test_code_integrity() );
+}
+
diff --git a/src/wp-admin/includes/class-wp-site-health.php b/src/wp-admin/includes/class-wp-site-health.php
index d8c097c93d..2348a867ef 100644
--- a/src/wp-admin/includes/class-wp-site-health.php
+++ b/src/wp-admin/includes/class-wp-site-health.php
@@ -1729,6 +1729,89 @@ public function get_test_rest_availability() {
 		return $result;
 	}
 
+	/**
+	 * Scan the WordPress codebase for modified and/or missing files.
+	 *
+	 * Files that have been modified or that have gone missing may indicate that the site
+	 * has been compromised, installation failure, or that the code has been customized.
+	 * Users that know the code base should be unaltered will be offered to reinstall or
+	 * upgrade WordPress in response.
+	 *
+	 * @since 5.3.0
+	 *
+	 * @return array The test results.
+	 */
+	public function get_test_code_integrity() {
+		$result = array(
+			'label'       => __( 'No changes to the core files are detected' ),
+			'status'      => 'good',
+			'badge'       => array(
+				'label' => __( 'Security' ),
+				'color' => 'blue',
+			),
+			'description' => __( 'A scan for changes to the core WordPress files was performed. No changes are detected.' ),
+			'actions'     => '',
+			'test'        => 'code_integrity',
+                );
+
+		$wp_version = get_bloginfo( 'version' );
+		$wp_locale  = get_locale();
+
+		// Retrieve a list of checksums from the remote server for verification
+
+		$checksums = get_transient( 'health-check-code-integrity-checksums' );
+		if ( false === $checksums ) {
+			$checksums = get_core_checksums( $wp_version, $wp_locale );
+			if ( false === $checksums && false !== strpos( $wp_version, '-' ) ) {
+				$checksums = get_core_checksums( (float) $wp_version - 0.1, $wp_locale );
+                	}
+
+			set_transient( 'health-check-code-integrity-checksums', $checksums, HOURS_IN_SECONDS );
+		}
+
+		if ( empty( $checksums ) ) {
+			$result['status']      = 'critical';
+                        $result['label']       = 'Unable to scan core files for changes';
+			$result['description'] = __( 'The checksum file list could not be downloaded. There maybe a connection issue or a list is not available for this version. Please try to run this test again at a later time.' );
+			return $result;
+		}
+
+		$changed_files = false;
+		foreach ( $checksums as $file => $checksum ) {
+
+			if ( 0 === strncmp( $file, 'wp-content', 10 ) ) {
+				continue;
+			}
+
+			if ( ! file_exists( ABSPATH . $file ) ) {
+				$changed_files = true;
+				break;
+			}
+
+			$existing_checksum = md5_file( ABSPATH . $file );
+			if ( $existing_checksum !== $checksum ) {
+				$changed_files = true;
+				break;
+			}
+
+		}
+
+		if ( true === $changed_files ) {
+
+			$result['status'] = 'recommended';
+			$result['label']  = __( 'Some core files may have been modified' );
+			$result['description'] = __( 'Some WordPress core files may have been changed. One reason this check can fail is that you need to install a version that makes use of the right translation files. If you have the ability to do so, a simple fix is to reinstall WordPress. Reinstall of the core system should not affect any plugins, themes, or content that you have posted.' );
+			$result['actions'] = sprintf(
+				'<a href="%s">%s</a>',
+				esc_url( admin_url( 'update-core.php?force_check=1' ) ),
+				__( 'Reinstall WordPress manually' )
+			);
+
+		}
+
+		return $result;
+	}
+
 	/**
 	 * Return a set of tests that belong to the site status page.
 	 *
@@ -1805,6 +1888,10 @@ public static function get_tests() {
 					'label' => __( 'Loopback request' ),
 					'test'  => 'loopback_requests',
 				),
+				'code_integrity'  => array(
+					'label' => __( 'WordPress Core Files Integrity Check' ),
+					'test'  => 'code_integrity'
+				),
 			),
 		);
 
