CVE-2025-53528
Cadwyn is vulnerable to an XSS attack through its docs page
Cadwyn creates production-ready community-driven modern Stripe-like API versioning in FastAPI. In versions before 5.4.3, the version parameter of the "/docs" endpoint is vulnerable to a Reflected XSS (Cross-Site Scripting) attack. This XSS would notably allow an attacker to execute JavaScript code on a user's session for any application based on Cadwyn via a one-click attack. The vulnerability has been fixed in version 5.4.3.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- Required
What an attacker can affect
- Confidentiality
- High
- Integrity
- Low
- Availability
- Low
Exploit likelihood
What each source reports
CVE List Score used
7.6
Cadwyn is vulnerable to an XSS attack through its docs page
Cadwyn creates production-ready community-driven modern Stripe-like API versioning in FastAPI. In versions before 5.4.3, the version parameter of the "/docs" endpoint is vulnerable to a Reflected XSS (Cross-Site Scripting) attack. This XSS would notably allow an attacker to execute JavaScript code on a user's session for any application based on Cadwyn via a one-click attack. The vulnerability has been fixed in version 5.4.3.
- Record
CVE-2025-53528- CVSS 3.1
- 7.6 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:L/A:L - Weakness
- CWE-79
- Updated
- 2026-11-02
EUVDEUVD-2025-22154
7.6
Cadwyn creates production-ready community-driven modern Stripe-like API versioning in FastAPI. In versions before 5.4.3, the version parameter of the "/docs" endpoint is vulnerable to a Reflected XSS (Cross-Site Scripting) attack. This XSS would notably allow an attacker to execute JavaScript code on a user's session for any application based on Cadwyn via a one-click attack. The vulnerability has been fixed in version 5.4.3.
- Record
EUVD-2025-22154- CVSS 3.1
- 7.6 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:L/A:L - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-2gxp-6r36-m97r
7.6
Cadwyn vulnerable to XSS on the docs page
Summary
The version parameter of the /docs endpoint is vulnerable to a Reflected XSS (Cross-Site Scripting) attack.
PoC
- Setup a minimal app following the quickstart guide: https://docs.cadwyn.dev/quickstart/setup/
- Click on the following PoC link: http://localhost:8000/docs?version=%27%2balert(document.domain)%2b%27
Impact
Refer to this security advisory for an example of the impact of a similar vulnerability that shares the same root cause.
This XSS would notably allow an attacker to execute JavaScript code on a user's session for any application based on Cadwyn via a one-click attack.
A CVSS for the average case may be: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:L/A:L
Details
The vulnerable code snippet can be found in the 2 functions swagger_dashboard and redoc_dashboard: https://github.com/zmievsa/cadwyn/blob/main/cadwyn/applications.py#L387-L413
The implementation uses the get_swagger_ui_html function from FastAPI. This function does not encode or sanitize its arguments before using them to generate the HTML for the swagger documentation page and is not intended to be used with user-controlled arguments.
async def swagger_dashboard(self, req: Request) -> Response:
version = req.query_params.get("version")
if version:
root_path = self._extract_root_path(req)
openapi_url = root_path + f"{self.openapi_url}?version={version}"
oauth2_redirect_url = self.swagger_ui_oauth2_redirect_url
if oauth2_redirect_url:
oauth2_redirect_url = root_path + oauth2_redirect_url
return get_swagger_ui_html(
openapi_url=openapi_url,
title=f"{self.title} - Swagger UI",
oauth2_redirect_url=oauth2_redirect_url,
init_oauth=self.swagger_ui_init_oauth,
swagger_ui_parameters=self.swagger_ui_parameters,
)
return self._render_docs_dashboard(req, cast("str", self.docs_url))
In this case, the openapi_url variable contains the version which comes from a user supplied query string without encoding or sanitisation. The user controlled injection ends up inside of a string in a <script> tag context: https://github.com/fastapi/fastapi/blob/master/fastapi/openapi/docs.py#L132
f"""
...
const ui = SwaggerUIBundle({{
url: '{openapi_url}',
"""
By simply injecting a single quote we can escape from the string context and execute JavaScript like so '+alert(document.domain)+'
The resulting HTML sent back from the server contains the following injection:
const ui = SwaggerUIBundle({
url: '/openapi/flows.json?flows='+alert(document.domain)+'',
- Record
GHSA-2gxp-6r36-m97r- CVSS 3.1
- 7.6 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:L/A:L - Weakness
- CWE-79
- Updated
- 2026-11-02
NVD
7.6
Cadwyn creates production-ready community-driven modern Stripe-like API versioning in FastAPI. In versions before 5.4.3, the version parameter of the "/docs" endpoint is vulnerable to a Reflected XSS (Cross-Site Scripting) attack. This XSS would notably allow an attacker to execute JavaScript code on a user's session for any application based on Cadwyn via a one-click attack. The vulnerability has been fixed in version 5.4.3.
- Record
CVE-2025-53528- CVSS 3.1
- 7.6 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:L/A:L - Weakness
- CWE-79
- Updated
- 2026-11-02
OSV
7.6
Cadwyn is vulnerable to an XSS attack through its docs page
Cadwyn creates production-ready community-driven modern Stripe-like API versioning in FastAPI. In versions before 5.4.3, the version parameter of the "/docs" endpoint is vulnerable to a Reflected XSS (Cross-Site Scripting) attack. This XSS would notably allow an attacker to execute JavaScript code on a user's session for any application based on Cadwyn via a one-click attack. The vulnerability has been fixed in version 5.4.3.
- Record
CVE-2025-53528- CVSS 3.1
- 7.6 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:L/A:L - Weakness
- CWE-79
- Updated
- 2026-11-02
OSVGHSA-2gxp-6r36-m97r
7.6
Cadwyn vulnerable to XSS on the docs page
Summary
The version parameter of the /docs endpoint is vulnerable to a Reflected XSS (Cross-Site Scripting) attack.
PoC
- Setup a minimal app following the quickstart guide: https://docs.cadwyn.dev/quickstart/setup/
- Click on the following PoC link: http://localhost:8000/docs?version=%27%2balert(document.domain)%2b%27
Impact
Refer to this security advisory for an example of the impact of a similar vulnerability that shares the same root cause.
This XSS would notably allow an attacker to execute JavaScript code on a user's session for any application based on Cadwyn via a one-click attack.
A CVSS for the average case may be: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:L/A:L
Details
The vulnerable code snippet can be found in the 2 functions swagger_dashboard and redoc_dashboard: https://github.com/zmievsa/cadwyn/blob/main/cadwyn/applications.py#L387-L413
The implementation uses the get_swagger_ui_html function from FastAPI. This function does not encode or sanitize its arguments before using them to generate the HTML for the swagger documentation page and is not intended to be used with user-controlled arguments.
async def swagger_dashboard(self, req: Request) -> Response:
version = req.query_params.get("version")
if version:
root_path = self._extract_root_path(req)
openapi_url = root_path + f"{self.openapi_url}?version={version}"
oauth2_redirect_url = self.swagger_ui_oauth2_redirect_url
if oauth2_redirect_url:
oauth2_redirect_url = root_path + oauth2_redirect_url
return get_swagger_ui_html(
openapi_url=openapi_url,
title=f"{self.title} - Swagger UI",
oauth2_redirect_url=oauth2_redirect_url,
init_oauth=self.swagger_ui_init_oauth,
swagger_ui_parameters=self.swagger_ui_parameters,
)
return self._render_docs_dashboard(req, cast("str", self.docs_url))
In this case, the openapi_url variable contains the version which comes from a user supplied query string without encoding or sanitisation. The user controlled injection ends up inside of a string in a <script> tag context: https://github.com/fastapi/fastapi/blob/master/fastapi/openapi/docs.py#L132
f"""
...
const ui = SwaggerUIBundle({{
url: '{openapi_url}',
"""
By simply injecting a single quote we can escape from the string context and execute JavaScript like so '+alert(document.domain)+'
The resulting HTML sent back from the server contains the following injection:
const ui = SwaggerUIBundle({
url: '/openapi/flows.json?flows='+alert(document.domain)+'',
- Record
GHSA-2gxp-6r36-m97r- CVSS 3.1
- 7.6 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:L/A:L - Weakness
- CWE-79
- Updated
- 2026-11-02
OSVPYSEC-2025-71 No score
Cadwyn creates production-ready community-driven modern Stripe-like API versioning in FastAPI. In versions before 5.4.3, the version parameter of the "/docs" endpoint is vulnerable to a Reflected XSS (Cross-Site Scripting) attack. This XSS would notably allow an attacker to execute JavaScript code on a user's session for any application based on Cadwyn via a one-click attack. The vulnerability has been fixed in version 5.4.3.
- Record
PYSEC-2025-71- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
cadwynPyPI |
before 5.4.3 | 5.4.3 |
cadwynPyPI |
before 5.4.3, plus listed versions 0.1.00.2.01.0.01.0.11.0.2 Show 45 moreShow less1.0.31.1.01.2.01.3.02.0.02.0.12.0.22.0.32.0.42.0.52.1.02.1.0rc02.1.0rc12.2.02.3.02.3.0rc02.3.12.3.22.3.32.3.42.3.53.0.03.0.13.0.23.1.03.1.13.1.23.1.33.1.43.10.03.10.13.11.03.11.13.12.03.12.13.13.03.14.03.15.03.15.13.15.103.15.23.15.33.15.3a13.15.3a23.15.4 |
5.4.3 |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2025-53528 is a high vulnerability (CVSS 7.6) in Zmievsa Cadwyn, published July 21, 2025. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.28%, the 20th percentile. Fixed in cadwyn 5.4.3.
References
github.com/zmievsa/cadwyn/security/advisories/GHSA-2gxp-6r36-m97r
github.com/zmievsa/cadwyn/commit/b424ecd57cd8dabbc8fe39b8f8ccafea629c7728
nvd.nist.gov/vuln/detail/CVE-2025-53528
github.com/zmievsa/cadwyn/blob/5.4.3/CHANGELOG.md
github.com/pypa/advisory-database/tree/main/vulns/cadwyn/PYSEC-2025-71.yaml
github.com/advisories/GHSA-2gxp-6r36-m97r
github.com/CVEProject/cvelistV5/tree/main/cves/2025/53xxx/CVE-2025-53528.json
github.com/zmievsa/cadwyn
Left out here: 66 versions. The JSON record has them.