CVE-2026-45568: Zrok Rok Python ProxyShare Can Be Vulnerability
CRITICALCVE-2026-45568 is a CRITICAL rok python proxyshare can be vulnerability (CWE-22: Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')) affecting Zrok libraries in the PyPI ecosystem. The issue involves rok python proxyshare can be used as an ssrf proxy through absolute url paths. Remediation is available in the latest vendor maintenance releases.
CVE-2026-45568 at a Glance
How to Fix CVE-2026-45568
To remediate this vulnerability, upgrade all affected Zrok dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
pip install zrok>=Latest secure release
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
pip show zrok
How to Check if You Are Affected
To determine whether your Python environment is affected by CVE-2026-45568, inspect your installed packages using pip:
pip show zrok
Analyze the terminal output to locate any version of Zrok in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than the patched release), your application is affected.
Note: The pip show zrok command checks currently installed packages in your active Python environment.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-22: Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal'), where the product uses external input to construct a pathname that is intended to identify a file or directory that is located underneath a restricted parent directory, but the product does not properly neutralize special elements within the pathname that can cause the pathname to resolve to a location that is outside of the restricted directory. In Zrok, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
CVE-2026-45568 Affected Zrok Versions
1 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
zrok
|
PyPI |
≥ 0.4.47
≤ 1.1.11
|
|
References
Frequently Asked Questions
What is CVE-2026-45568?
Which Zrok versions are affected?
What version fixes CVE-2026-45568?
Is zrok affected?
What CWE is associated with CVE-2026-45568?
How can I check PyPI dependencies for CVE-2026-45568?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-jh67-hwqw-m5r7",
"modified" : "2026-05-19T15:16:08Z",
"published" : "2026-05-19T15:16:08Z",
"aliases" : [ "CVE-2026-45568" ],
"summary" : "rok Python ProxyShare can be used as an SSRF proxy through absolute URL paths",
"details" : "## Summary\n\nAlice exposes a Python SDK `ProxyShare` with a fixed target URL. Bob sends a request to the share with an absolute URL in the path. The Flask handler passes that path to `urllib.parse.urljoin`, which replaces Alice's configured target host with Bob's host and returns the server-side response to Bob.\n\n## Details\n\nThe Python SDK proxy route accepts every path under the share:\n\n```python\n@app.route('/', defaults={'path': ''}, methods=['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'])\n@app.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'])\ndef proxy(path):\n```\n\nIt constructs the outbound URL with `urljoin` and then sends the request:\n\n```python\nurl = urllib.parse.urljoin(self.target, path)\nresp = requests.request(\n method=request.method,\n url=url,\n headers={key: value for (key, value) in request.headers\n if key.lower() not in HOP_BY_HOP_HEADERS},\n data=request.get_data(),\n cookies=request.cookies,\n allow_redirects=False,\n stream=True,\n verify=self.verify_ssl\n)\n```\n\nWhen `path` is `[http://127.0.0.1:19190/metadata`](http://127.0.0.1:19190/metadata%60), `urljoin(self.target, path)` returns `[http://127.0.0.1:19190/metadata`](http://127.0.0.1:19190/metadata%60). The proxy sends the request to Bob's chosen URL rather than Alice's target.",
"severity" : [ {
"type" : "CVSS_V4",
"score" : "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N/SC:H/SI:H/SA:L"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "PyPI",
"name" : "zrok"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0.4.47"
}, {
"last_affected" : "1.1.11"
} ]
} ]
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/openziti/zrok/security/advisories/GHSA-jh67-hwqw-m5r7"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/openziti/zrok"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-22" ],
"severity" : "CRITICAL",
"github_reviewed" : true,
"github_reviewed_at" : "2026-05-19T15:16:08Z",
"nvd_published_at" : null
}
}