diff --git a/wp-admin/includes/update.php b/wp-admin/includes/update.php
index d4c1dd6a07..e2c90d460c 100644
--- a/wp-admin/includes/update.php
+++ b/wp-admin/includes/update.php
@@ -86,10 +86,10 @@ function find_core_auto_update() {
 		return false;
 	}
 
-	include_once( ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' );
+	include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
 
 	$auto_update = false;
-	$upgrader    = new WP_Automatic_Updater;
+	$upgrader    = new WP_Automatic_Updater();
 	foreach ( $updates->updates as $update ) {
 		if ( 'autoupdate' != $update->response ) {
 			continue;
@@ -212,7 +212,7 @@ function core_update_footer( $msg = '' ) {
 
 	$cur = get_preferred_from_update_core();
 	if ( ! is_object( $cur ) ) {
-		$cur = new stdClass;
+		$cur = new stdClass();
 	}
 
 	if ( ! isset( $cur->current ) ) {
@@ -654,7 +654,7 @@ function wp_theme_update_row( $theme_key, $theme ) {
  * @return false|void
  */
 function maintenance_nag() {
-	include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version
+	include ABSPATH . WPINC . '/version.php'; // include an unmodified $wp_version
 	global $upgrading;
 	$nag = isset( $upgrading );
 	if ( ! $nag ) {
@@ -841,10 +841,22 @@ function wp_recovery_mode_nag() {
 		return;
 	}
 
+	$url = wp_login_url();
+	$url = add_query_arg( 'action', WP_Recovery_Mode::EXIT_ACTION, $url );
+	$url = wp_nonce_url( $url, WP_Recovery_Mode::EXIT_ACTION );
+
 	?>
 	<div class="notice notice-info">
 		<p>
-			<?php esc_html_e( 'You are in recovery mode. This means there may be an error with a theme or plugin. To exit recovery mode, log out or use the Exit button.' ); ?>
+			<?php
+			/* translators: %s: Recovery Mode exit link */
+			printf(
+				wp_kses_post(
+					__( 'You are in recovery mode. This means there may be an error with a theme or plugin. To exit recovery mode, log out or use the Exit button. <a href="%s">Exit Recovery Mode</a>' )
+				),
+				$url
+			);
+			?>
 		</p>
 	</div>
 	<?php
