[wp-trac] [WordPress Trac] #56165: Bogus query parameters force WordPress to drop query limit and exhausts memory
WordPress Trac
noreply at wordpress.org
Wed Jul 6 18:30:28 UTC 2022
#56165: Bogus query parameters force WordPress to drop query limit and exhausts
memory
--------------------------+-----------------------------
Reporter: coreyw | Owner: (none)
Type: defect (bug) | Status: new
Priority: normal | Milestone: Awaiting Review
Component: Query | Version: 6.0
Severity: normal | Keywords:
Focuses: |
--------------------------+-----------------------------
I noticed that a site was regularly getting out of memory errors at a URL
that seems to be an attempt at "hacking" a Drupal site:
{{{
https://example.com/?q=user%2Fpassword&name[%23post_render][]=passthru&name[%23type]=markup&name[%23markup]=dir&debug
}}}
For some reason this causes WordPress to execute this query:
{{{
SELECT wp_posts.* FROM wp_posts WHERE 1=1 AND wp_posts.post_type =
'post' AND ((wp_posts.post_status = 'publish')) ORDER BY
wp_posts.post_date DESC
}}}
You'll notice that there is no `LIMIT` set, even though the site has a
limit set by default and there are no plugins/filters to alter this.
On a site with a large number of posts this can easily cause memory issues
(I noticed it during the `update_meta_cache` function running after the
query.
That URL is causing WordPress to execute this query:
{{{
WP_Query->query(Array ([name] => Array ([#post_render] => Array ([0] =>
passthru),[#type] => markup,[#markup] => dir)))
}}}
The `name` parameter is supposed to be a string, so I'm not sure why it's
affecting the query at all (PHP 7.4 does throw warning because WP tries to
`trim()` the value, PHP 8.1 throws error).
I haven't gotten far enough in to see why the query limit is dropped, but
I imagine in any case this URL should result in either the homepage being
displayed or a 404.
Here is a full backtrace:
{{{
#0 update_meta_cache(post, Array ([0] => 81102,[1] => 80934,[2] =>
80927,...))
#1 update_postmeta_cache(Array ([0] => 81102,[1] => 80934,[2] =>
80927,...))
#2 update_post_caches(Array ([0] => WP_Post Object ([ID] =>
81102,[post_author] => 5,[post_date] => 2022-07-01
10:17:29,[post_date_gmt] => 2022-07-01 17:17:29,[post_content] => <!--
wp:paragraph -->
#3 WP_Query->get_posts() called at [/wp-includes/class-wp-query.php:3586]
#4 WP_Query->query(Array ([name] => Array ([#post_render] => Array ([0]
=> passthru),[#type] => markup,[#markup] => dir))) called at [/wp-includes
/class-wp.php:648]
#5 WP->query_posts() called at [/wp-includes/class-wp.php:775]
#6 WP->main() called at [/wp-includes/functions.php:1330]
#7 wp() called at [/wp-blog-header.php:16]
#8 require(/wp-blog-header.php) called at [/index.php:4]
}}}
--
Ticket URL: <https://core.trac.wordpress.org/ticket/56165>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform
More information about the wp-trac
mailing list