WordPress User Language Switch Plugin SSRF — CVE-2026-0745
by HORKimhab · 2026-07-05
- Severity
- Medium
- CVE
- CVE-2026-0745 (GHSA-m38c-5p3m-p7gm)
- Category
- web
- Affected product
- WordPress "User Language Switch" plugin
- Affected versions
- Version range not specified in source; see GHSA-m38c-5p3m-p7gm for affected versions
- Disclosed
- 2026-07-05
- Patch status
- unpatched
References
Archive entry
intelseclab/poc-archiveMetadata
| Field | Value |
|---|---|
| Date Added | 2026-07-05 |
| Last Updated | 2026-05 |
| Author / Researcher | HORKimhab |
| CVE / Advisory | CVE-2026-0745 (GHSA-m38c-5p3m-p7gm) |
| Category | web |
| Severity | Medium |
| CVSS Score | Not specified in source |
| Status | PoC |
| Tags | wordpress, ssrf, plugin-vulnerability, admin-ajax, cwe-918, metadata-endpoint |
| Related | N/A |
Affected Target
| Field | Value |
|---|---|
| Software / System | WordPress “User Language Switch” plugin |
| Versions Affected | Version range not specified in source; see GHSA-m38c-5p3m-p7gm for affected versions |
| Language / Platform | Bash (curl) targeting WordPress wp-admin/admin-ajax.php |
| Authentication Required | Yes (authenticated WordPress user/admin session) |
| Network Access Required | Yes |
Summary
The User Language Switch WordPress plugin exposes an uls_download_language AJAX action that accepts a caller-supplied URL (info_language) and fetches it server-side to download a language file. The endpoint does not validate or restrict the destination, allowing an authenticated user to redirect the server-side request to arbitrary internal or cloud-metadata endpoints (classic SSRF, CWE-918). The included PoC logs into a target WordPress instance, then submits an uls_download_language request pointed at the AWS/cloud instance metadata service (169.254.169.254) and prints the raw server response, demonstrating that the plugin fetches and returns content from the attacker-chosen URL.
Vulnerability Details
Root Cause
The uls_download_language handler passes the user-supplied info_language parameter directly to a server-side HTTP fetch without validating the destination host/scheme, enabling Server-Side Request Forgery.
Attack Vector
- Authenticate to the target WordPress site (valid credentials required).
- Send a POST request to
wp-admin/admin-ajax.phpwithaction=uls_download_languageandinfo_languageset to an internal or cloud-metadata URL (e.g.,http://169.254.169.254/latest/meta-data/). - The plugin’s server-side code fetches the attacker-specified URL and returns (or reflects) the response.
- Inspect the response for sensitive internal data (e.g., cloud credentials, internal service banners).
Impact
Server-side request forgery enabling reconnaissance and potential credential theft from internal services or cloud instance metadata endpoints, from an authenticated but otherwise low-privilege context.
Environment / Lab Setup
Target: WordPress instance with a vulnerable version of the User Language Switch plugin active
Attacker: bash + curl, valid WordPress credentials for the target site
Proof of Concept
PoC Script
See
poc-uls-ssrf.shin this folder.
| |
The script logs into WordPress via wp-login.php using credentials configured at the top of the file, confirms a valid session cookie was obtained, then issues the SSRF-triggering uls_download_language request (defaulting to the AWS metadata endpoint) and prints the first 800 bytes of the server’s response for inspection.
Detection & Indicators of Compromise
Signs of compromise:
- Outbound requests from the WordPress host to internal-only or metadata IP ranges shortly after plugin AJAX calls
- Unusual response payloads containing cloud metadata/credentials logged in plugin activity
- Authenticated user accounts making repeated
uls_download_languagerequests with varying target URLs
Remediation
| Action | Detail |
|---|---|
| Primary fix | No vendor patch confirmed as of 2026-07-05 — check the plugin changelog against GHSA-m38c-5p3m-p7gm for a fixed release |
| Interim mitigation | Disable the language-download feature, restrict outbound server requests via an egress allowlist/firewall, and block requests to link-local/metadata address ranges from the web server |
References
Notes
Mirrored from https://github.com/HORKimhab/CVE-2026-0745 on 2026-07-05.
| |