diff --git a/wp-admin/includes/class-wp-plugins-list-table.php b/wp-admin/includes/class-wp-plugins-list-table.php
index e487e32cfb..cc76e0e53d 100644
--- a/wp-admin/includes/class-wp-plugins-list-table.php
+++ b/wp-admin/includes/class-wp-plugins-list-table.php
@@ -946,14 +946,28 @@ class WP_Plugins_List_Table extends WP_List_Table {
 		$requires_php   = isset( $plugin_data['requires_php'] ) ? $plugin_data['requires_php'] : null;
 		$compatible_php = is_php_version_compatible( $requires_php );
 		$class          = $is_active ? 'active' : 'inactive';
-		$checkbox_id    = 'checkbox_' . md5( $plugin_data['Name'] );
+
+		static $checkbox_id_attrs = array();
+
+		$checkbox_id      = 'checkbox_' . md5( $plugin_data['Name'] );
+		$checkbox_id_attr = $checkbox_id;
+
+		// Ensure the ID attribute is unique.
+		$suffix = 2;
+		while ( in_array( $checkbox_id_attr, $checkbox_id_attrs, true ) ) {
+			$checkbox_id_attr = "$checkbox_id-$suffix";
+			$suffix++;
+		}
+
+		$checkbox_id_attrs[] = $checkbox_id_attr;
+
 		if ( $restrict_network_active || $restrict_network_only || in_array( $status, array( 'mustuse', 'dropins' ), true ) || ! $compatible_php ) {
 			$checkbox = '';
 		} else {
 			$checkbox = sprintf(
 				'<label class="screen-reader-text" for="%1$s">%2$s</label>' .
 				'<input type="checkbox" name="checked[]" value="%3$s" id="%1$s" />',
-				$checkbox_id,
+				$checkbox_id_attr,
 				/* translators: %s: Plugin name. */
 				sprintf( __( 'Select %s' ), $plugin_data['Name'] ),
 				esc_attr( $plugin_file )
