Index: wp-admin/includes/ajax-actions.php
===================================================================
--- wp-admin/includes/ajax-actions.php	(revision 22257)
+++ wp-admin/includes/ajax-actions.php	(working copy)
@@ -1609,6 +1609,17 @@
 
 	$post_data = isset( $_REQUEST['post_data'] ) ? $_REQUEST['post_data'] : array();
 
+	// If the context is custom header or background, make sure the uploaded file is an image.
+	if ( isset( $post_data['context'] ) && in_array( $post_data['context'], array( 'custom-header', 'custom-background' ) ) ) {
+		$wp_filetype = wp_check_filetype_and_ext( $_FILES['async-upload']['tmp_name'], $_FILES['async-upload']['name'], false );
+		if ( ! wp_match_mime_types( 'image', $wp_filetype['type'] ) ) {
+			wp_send_json_error( array(
+				'message' => __( 'The uploaded file is not a valid image. Please try again.' ),
+				'filename' => $_FILES['async-upload']['name'],
+			) );
+		}
+	}
+
 	$attachment_id = media_handle_upload( 'async-upload', $post_id, $post_data );
 
 	if ( is_wp_error( $attachment_id ) ) {
Index: wp-admin/custom-header.php
===================================================================
--- wp-admin/custom-header.php	(revision 22257)
+++ wp-admin/custom-header.php	(working copy)
@@ -763,8 +763,14 @@
 	 */
 	function step_2_manage_upload() {
 		$overrides = array('test_form' => false);
-		$file = wp_handle_upload($_FILES['import'], $overrides);
 
+		$file = $_FILES['import'];
+		$wp_filetype = wp_check_filetype_and_ext( $file['tmp_name'], $file['name'], false );
+		if ( ! wp_match_mime_types( 'image', $wp_filetype['type'] ) )
+			wp_die( __( 'The uploaded file is not a valid image. Please try again.' ) );
+
+		$file = wp_handle_upload($file, $overrides);
+
 		if ( isset($file['error']) )
 			wp_die( $file['error'],  __( 'Image Upload Error' ) );
 
Index: wp-admin/custom-background.php
===================================================================
--- wp-admin/custom-background.php	(revision 22257)
+++ wp-admin/custom-background.php	(working copy)
@@ -358,8 +358,14 @@
 
 		check_admin_referer('custom-background-upload', '_wpnonce-custom-background-upload');
 		$overrides = array('test_form' => false);
-		$file = wp_handle_upload($_FILES['import'], $overrides);
 
+		$file = $_FILES['import'];
+		$wp_filetype = wp_check_filetype_and_ext( $file['tmp_name'], $file['name'], false );
+		if ( ! wp_match_mime_types( 'image', $wp_filetype['type'] ) )
+			wp_die( __( 'The uploaded file is not a valid image. Please try again.' ) );
+
+		$file = wp_handle_upload($file, $overrides);
+
 		if ( isset($file['error']) )
 			wp_die( $file['error'] );
 
