Ecosyste.ms: Advisories
An open API service providing security vulnerability metadata for many open source software ecosystems.
Security Advisories: MDE2OlNlY3VyaXR5QWR2aXNvcnlHSFNBLThoMmotY2d4OC02eHY3
Cross-Site Request Forgery (CSRF) in FastAPI
Impact
FastAPI versions lower than 0.65.2
that used cookies for authentication in path operations that received JSON payloads sent by browsers were vulnerable to a Cross-Site Request Forgery (CSRF) attack.
In versions lower than 0.65.2
, FastAPI would try to read the request payload as JSON even if the content-type
header sent was not set to application/json
or a compatible JSON media type (e.g. application/geo+json
).
So, a request with a content type of text/plain
containing JSON data would be accepted and the JSON data would be extracted.
But requests with content type text/plain
are exempt from CORS preflights, for being considered Simple requests. So, the browser would execute them right away including cookies, and the text content could be a JSON string that would be parsed and accepted by the FastAPI application.
Patches
This is fixed in FastAPI 0.65.2
.
The request data is now parsed as JSON only if the content-type
header is application/json
or another JSON compatible media type like application/geo+json
.
Workarounds
It's best to upgrade to the latest FastAPI.
But still, it would be possible to add a middleware or a dependency that checks the content-type
header and aborts the request if it is not application/json
or another JSON compatible content type.
References
For more information
If you have any questions or comments, write to [email protected]
Permalink: https://github.com/advisories/GHSA-8h2j-cgx8-6xv7JSON: https://advisories.ecosyste.ms/api/v1/advisories/MDE2OlNlY3VyaXR5QWR2aXNvcnlHSFNBLThoMmotY2d4OC02eHY3
Source: GitHub Advisory Database
Origin: Unspecified
Severity: High
Classification: General
Published: over 3 years ago
Updated: 7 months ago
CVSS Score: 8.2
CVSS vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:N
Identifiers: GHSA-8h2j-cgx8-6xv7, CVE-2021-32677
References:
- https://github.com/tiangolo/fastapi/security/advisories/GHSA-8h2j-cgx8-6xv7
- https://nvd.nist.gov/vuln/detail/CVE-2021-32677
- https://github.com/tiangolo/fastapi/commit/fa7e3c996edf2d5482fff8f9d890ac2390dede4d
- https://lists.fedoraproject.org/archives/list/[email protected]/message/MATAWX25TYKNEKLDMKWNLYDB34UWTROA
- https://github.com/advisories/GHSA-8h2j-cgx8-6xv7
Blast Radius: 38.0
Affected Packages
pypi:fastapi
Dependent packages: 2,920Dependent repositories: 43,608
Downloads: 56,928,981 last month
Affected Version Ranges: < 0.65.2
Fixed in: 0.65.2
All affected versions: 0.1.0, 0.1.2, 0.1.3, 0.1.4, 0.1.5, 0.1.6, 0.1.7, 0.1.8, 0.1.9, 0.1.10, 0.1.11, 0.1.12, 0.1.13, 0.1.14, 0.1.15, 0.1.16, 0.1.17, 0.1.18, 0.1.19, 0.2.0, 0.2.1, 0.3.0, 0.4.0, 0.5.0, 0.5.1, 0.6.0, 0.6.1, 0.6.2, 0.6.3, 0.6.4, 0.7.0, 0.7.1, 0.8.0, 0.9.0, 0.9.1, 0.10.0, 0.10.1, 0.10.2, 0.11.0, 0.12.0, 0.12.1, 0.13.0, 0.14.0, 0.15.0, 0.16.0, 0.17.0, 0.18.0, 0.19.0, 0.20.0, 0.20.1, 0.21.0, 0.22.0, 0.23.0, 0.24.0, 0.25.0, 0.26.0, 0.27.0, 0.27.1, 0.27.2, 0.28.0, 0.29.0, 0.29.1, 0.30.0, 0.30.1, 0.31.0, 0.32.0, 0.33.0, 0.34.0, 0.35.0, 0.36.0, 0.37.0, 0.38.0, 0.38.1, 0.39.0, 0.40.0, 0.41.0, 0.42.0, 0.43.0, 0.44.0, 0.44.1, 0.45.0, 0.46.0, 0.47.0, 0.47.1, 0.48.0, 0.49.0, 0.49.1, 0.49.2, 0.50.0, 0.51.0, 0.52.0, 0.53.0, 0.53.1, 0.53.2, 0.54.0, 0.54.1, 0.54.2, 0.55.0, 0.55.1, 0.56.0, 0.56.1, 0.57.0, 0.58.0, 0.58.1, 0.59.0, 0.60.0, 0.60.1, 0.60.2, 0.61.0, 0.61.1, 0.61.2, 0.62.0, 0.63.0, 0.64.0, 0.65.0, 0.65.1
All unaffected versions: 0.65.2, 0.65.3, 0.66.0, 0.66.1, 0.67.0, 0.68.0, 0.68.1, 0.68.2, 0.69.0, 0.70.0, 0.70.1, 0.71.0, 0.72.0, 0.73.0, 0.74.0, 0.74.1, 0.75.0, 0.75.1, 0.75.2, 0.76.0, 0.77.0, 0.77.1, 0.78.0, 0.79.0, 0.79.1, 0.80.0, 0.81.0, 0.82.0, 0.83.0, 0.84.0, 0.85.0, 0.85.1, 0.85.2, 0.86.0, 0.87.0, 0.88.0, 0.89.0, 0.89.1, 0.90.0, 0.90.1, 0.91.0, 0.92.0, 0.93.0, 0.94.0, 0.94.1, 0.95.0, 0.95.1, 0.95.2, 0.96.0, 0.96.1, 0.97.0, 0.98.0, 0.99.0, 0.99.1, 0.100.0, 0.100.1, 0.101.0, 0.101.1, 0.102.0, 0.103.0, 0.103.1, 0.103.2, 0.104.0, 0.104.1, 0.105.0, 0.106.0, 0.107.0, 0.108.0, 0.109.0, 0.109.1, 0.109.2, 0.110.0, 0.110.1, 0.110.2, 0.110.3, 0.111.0, 0.111.1, 0.112.0, 0.112.1, 0.112.2, 0.112.3, 0.112.4, 0.113.0, 0.114.0, 0.114.1