Index: wp-includes/media.php
===================================================================
--- wp-includes/media.php	(revision 23040)
+++ wp-includes/media.php	(working copy)
@@ -1337,10 +1337,13 @@
 			'update' => false,
 			'delete' => false,
 		),
+		'editLink'   => false,
 	);
 
-	if ( current_user_can( 'edit_post', $attachment->ID ) )
+	if ( current_user_can( 'edit_post', $attachment->ID ) ) {
 		$response['nonces']['update'] = wp_create_nonce( 'update-post_' . $attachment->ID );
+		$response['editLink'] = get_edit_post_link( $attachment->ID, 'raw' );
+	}
 
 	if ( current_user_can( 'delete_post', $attachment->ID ) )
 		$response['nonces']['delete'] = wp_create_nonce( 'delete-post_' . $attachment->ID );
@@ -1696,6 +1699,11 @@
 				<# if ( 'image' === data.type && ! data.uploading && data.width && data.height ) { #>
 					<div class="dimensions">{{ data.width }} &times; {{ data.height }}</div>
 				<# } #>
+				<# if ( ! data.uploading && data.can.save ) { #>
+					<div class="edit-attachment">
+						<a href="{{ data.editLink }}" target="_blank"><?php _ex( 'Edit', 'media item' ); ?></a>
+					</div>
+				<# } #>
 				<# if ( ! data.uploading && data.can.remove ) { #>
 					<div class="delete-attachment">
 						<a href="#"><?php _e( 'Delete Permanently' ); ?></a>
Index: wp-admin/includes/ajax-actions.php
===================================================================
--- wp-admin/includes/ajax-actions.php	(revision 23040)
+++ wp-admin/includes/ajax-actions.php	(working copy)
@@ -1837,9 +1837,10 @@
 		wp_send_json_error();
 
 	$query = isset( $_REQUEST['query'] ) ? (array) $_REQUEST['query'] : array();
+
 	$query = array_intersect_key( $query, array_flip( array(
 		's', 'order', 'orderby', 'posts_per_page', 'paged', 'post_mime_type',
-		'post_parent', 'post__in', 'post__not_in',
+		'post_parent', 'post__in', 'post__not_in', '_query_attachments_post_modified_gmt_since'
 	) ) );
 
 	$query['post_type'] = 'attachment';
@@ -1847,7 +1848,9 @@
 	if ( current_user_can( get_post_type_object( 'attachment' )->cap->read_private_posts ) )
 		$query['post_status'] .= ',private';
 
+	add_filter( 'posts_where', '_query_attachments_post_modified_gmt_since', 10, 2 );
 	$query = new WP_Query( $query );
+	remove_filter( 'posts_where', '_query_attachments_post_modified_gmt_since', 10 );
 
 	$posts = array_map( 'wp_prepare_attachment_for_js', $query->posts );
 	$posts = array_filter( $posts );
@@ -1855,6 +1858,17 @@
 	wp_send_json_success( $posts );
 }
 
+function _query_attachments_post_modified_gmt_since( $where, $query ) {
+	global $wpdb;
+
+	if ( $modified_since = absint( $query->get('_query_attachments_post_modified_gmt_since') ) ) {
+		$modified_since = gmdate( 'Y-m-d H:i:s', $modified_since );
+		$where .= $wpdb->prepare( " AND $wpdb->posts.post_modified_gmt > %s", $modified_since );
+	}
+
+	return $where;
+}
+
 /**
  * Save attachment attributes.
  *
