Index: wp-admin/admin-header.php
===================================================================
--- wp-admin/admin-header.php	(revision 46810)
+++ wp-admin/admin-header.php	(working copy)
@@ -204,6 +204,13 @@
 </head>
 <?php
 /**
+ * Fire the admin_body_open action in all admin pages.
+ *
+ * @since 5.4.0
+ */
+do_action( 'admin_body_open' );
+
+/**
  * Filters the CSS classes for the body tag in the admin.
  *
  * This filter differs from the {@see 'post_class'} and {@see 'body_class'} filters
Index: wp-includes/theme-compat/header-embed.php
===================================================================
--- wp-includes/theme-compat/header-embed.php	(revision 46813)
+++ wp-includes/theme-compat/header-embed.php	(working copy)
@@ -30,3 +30,11 @@
 	?>
 </head>
 <body <?php body_class(); ?>>
+<?php
+/**
+ * Fire the embed_body_open action in the embed template.
+ *
+ * @since 5.4.0
+ */
+do_action( 'embed_body_open' );
+?>
\ No newline at end of file
Index: wp-includes/theme-compat/header.php
===================================================================
--- wp-includes/theme-compat/header.php	(revision 46813)
+++ wp-includes/theme-compat/header.php	(working copy)
@@ -49,6 +49,8 @@
 <?php wp_head(); ?>
 </head>
 <body <?php body_class(); ?>>
+<?php wp_body_open(); ?>
+
 <div id="page">
 
 <div id="header" role="banner">
Index: wp-login.php
===================================================================
--- wp-login.php	(revision 46810)
+++ wp-login.php	(working copy)
@@ -197,6 +197,14 @@
 	?>
 	</head>
 	<body class="login no-js <?php echo esc_attr( implode( ' ', $classes ) ); ?>">
+	<?php
+	/**
+	 * Fire the login_body_open action in the login page.
+	 *
+	 * @since 5.4.0
+	 */
+	do_action( 'login_body_open' );
+	?>
 	<script type="text/javascript">
 		document.body.className = document.body.className.replace('no-js','js');
 	</script>
