diff --git src/wp-includes/query.php src/wp-includes/query.php
index 417405d..fd1ae2e 100644
--- src/wp-includes/query.php
+++ src/wp-includes/query.php
@@ -2756,8 +2756,9 @@ class WP_Query {
 				foreach ( $statuswheres as $index => $statuswhere )
 					$statuswheres[$index] = "($statuswhere OR ($wpdb->posts.post_status = 'inherit' AND " . str_replace($wpdb->posts, 'p2', $statuswhere) . "))";
 			}
-			foreach ( $statuswheres as $statuswhere )
-				$where .= " AND $statuswhere";
+			$where_status = implode(' OR ', $statuswheres);
+			if(!empty($where_status))
+				$where .= " AND ($where_status)";
 		} elseif ( !$this->is_singular ) {
 			$where .= " AND ($wpdb->posts.post_status = 'publish'";
 
diff --git tests/phpunit/tests/query/results.php tests/phpunit/tests/query/results.php
index 404aea6..992d1b9 100644
--- tests/phpunit/tests/query/results.php
+++ tests/phpunit/tests/query/results.php
@@ -533,4 +533,16 @@ class Tests_Query_Results extends WP_UnitTestCase {
 		$this->assertFalse( $this->q->is_month );
 		$this->assertFalse( $this->q->is_year );
 	}
+
+	/**
+	 * @ticket 25523
+	 */
+	function test_query_post_readable_perm() {
+		$posts = $this->q->query( array(
+			'post_status'	=>	array('publish', 'private'),
+			'perm'			=>	'readable'
+		) );
+
+		$this->assertTrue($this->q->found_posts > 0);
+	}
 }
