# CVE-2026-12049: pgAdmin 4: Open redirect in multi-factor authentication flow via unvalidated 'next' parameter

> An open redirect in pgAdmin 4's MFA flow allows attackers to redirect authenticated users to external sites, facilitating credential phishing attacks.

- **Severity:** Medium 5.3 (`CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N`)
- **Exploited in the wild:** Not known
- **Login needed:** Not needed
- **Attackable:** Over the internet
- **Victim action needed:** A user has to click or open something
- **Fix available:** Yes
- **Published:** 18 Jun 2026
- **Updated:** 22 Jun 2026
- **Also known as:** GHSA-7r93-vp6c-cw5m

## What is CVE-2026-12049?

CVE-2026-12049 is a medium-severity vulnerability in pgadmin.org pgAdmin 4, published on 18 Jun 2026. An attacker can exploit it over the internet without logging in, and only if a user opens a file or follows a link.

### Official description

Open redirect in pgAdmin 4's multi-factor authentication flow. The MFA validate and register endpoints honoured the user-supplied 'next' query/form parameter without confirming the target pointed back inside pgAdmin, so an authenticated victim who clicked /mfa/validate?next=<external> -- a link typically delivered by phishing -- would be sent to an attacker-controlled host directly out of the trusted auth flow.

The defect is a trusted-domain redirect, not a privilege bypass: the attacker gains no read/write access to pgAdmin or the victim's database, but the redirect launders the attacker's destination through pgAdmin's URL, which raises the success rate of credential-phishing follow-on against the victim.

Fix introduces a same-origin _is_safe_redirect_url helper and gates every MFA redirect that consumes user-supplied 'next' values through it. The helper allows only relative paths and absolute URLs whose scheme is http(s) and whose host matches the current request host; it rejects external hosts in absolute and protocol-relative form, non-http schemes (javascript:, data:, mailto:), userinfo tricks (http://localhost@attacker/), and backslash variants that some browsers normalize to forward slashes. Unsafe targets fall back to the internal browser index. A dedicated regression test exercises each accept/reject category and the original reporter PoC.

This issue affects pgAdmin 4: from 6.0 before 9.16.

Weakness: CWE-601 (URL Redirection to Untrusted Site)

## Which versions are affected by CVE-2026-12049?

It affects 1 product.


Products: Pgadmin Pgadmin 4.

## How do I fix CVE-2026-12049?

Upgrade to a fixed version.

## Is CVE-2026-12049 being exploited?

There is no known exploitation of CVE-2026-12049 in the wild and no public exploit code.

## Other vulnerabilities in pgadmin.org pgAdmin 4

- [CVE-2025-2945](https://insights.sbomify.com/CVE-2025-2945/): pgAdmin 4: Remote Code Execution in Query Tool and Cloud Deployment (critical 9.9)
- [CVE-2024-9014](https://insights.sbomify.com/CVE-2024-9014/): OAuth2 client id and secret exposed through the web browser in pgAdmin 4 (critical 9.9)
- [CVE-2026-12046](https://insights.sbomify.com/CVE-2026-12046/): Deserialization in pgAdmin 4 (critical 9.5)
- [CVE-2026-17351](https://insights.sbomify.com/CVE-2026-17351/): SQL injection in pgAdmin 4 (critical 9.4)
- [CVE-2026-17566](https://insights.sbomify.com/CVE-2026-17566/): Command injection in pgAdmin 4 (critical 9.4)

## Fix prompt for AI coding agents

```text
Check this codebase for CVE-2026-12049 and fix it if it is affected.

What it is: CVE-2026-12049 is a medium-severity vulnerability in pgadmin.org pgAdmin 4, published on 18 Jun 2026. An attacker can exploit it over the internet without logging in, and only if a user opens a file or follows a link.
Exploitation: There is no known exploitation of CVE-2026-12049 in the wild and no public exploit code.

Affected product: pgadmin.org pgAdmin 4. No package-level version data is available, so check the vendor advisory linked from the reference page.

Task:
1. Search the dependency manifests and lockfiles (for example package.json, package-lock.json, requirements.txt, poetry.lock, uv.lock, pom.xml, build.gradle, go.mod, Cargo.lock, Gemfile.lock) and any Dockerfiles for the affected packages, including transitive dependencies.
2. If an affected version is in use, upgrade it to the fixed version for its release line with the project's package manager, so the lockfile is regenerated. Prefer the smallest upgrade that fixes it.
3. If there is no fix, or the upgrade would break the build, do not guess: explain the risk and the safest workaround instead.
4. Run the tests and summarise what changed and why.
5. If nothing in the project is affected, say so and change nothing.

Reference: https://insights.sbomify.com/CVE-2026-12049/ (Markdown: https://insights.sbomify.com/CVE-2026-12049/index.md)
```

## Sources

- CVE record: https://www.cve.org/CVERecord?id=CVE-2026-12049
- NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-12049
- OSV: https://osv.dev/vulnerability/CVE-2026-12049

---
From sbomify Insights: https://insights.sbomify.com/CVE-2026-12049/
Summaries are generated and may contain mistakes; the official description above is the record.
