Flask-Reuploaded vulnerable to Remote Code Execution via Server-Side Template Injection
The advisory, in context
Impact
A critical path traversal and extension bypass vulnerability in Flask-Reuploaded allows remote attackers to achieve arbitrary file write and remote code execution through Server-Side Template Injection (SSTI).
Patches
Flask-Reuploaded has been patched in version 1.5.0
Workarounds
- Do not pass user input to the
nameparameter - Use auto-generated filenames only
- Implement strict input validation if
namemust be used
from werkzeug.utils import secure_filename
import os
# Sanitize user input before passing to save()
safe_name = secure_filename(request.form.get('custom_name'))
# Remove path separators
safe_name = os.path.basename(safe_name)
# Validate extension matches policy
if not photos.extension_allowed(photos.get_extension(safe_name)):
abort(400)
filename = photos.save(file, name=safe_name)
Resources
The fix is documented in the pull request, see https://github.com/jugmac00/flask-reuploaded/pull/180.
A proper write-up was created by the reporter of the vulnerability, Jaron Cabral (https://www.linkedin.com/in/jaron-cabral-751994357/), but is not yet available as of time of this publication.
Affected packages
Start with the recorded fix for your release branch. Check your installed version and test compatibility before upgrading. Fixing this advisory does not rule out other vulnerabilities in the release.
Earlier releases before 1.5.0
Fixed in 1.5.0
10 explicitly affected versions
0.3, 0.3.1, 0.3.2, 0.4.0, 0.5.0, 1.0.0, 1.1.0, 1.2.0, 1.3.0, 1.4.0
View affected-version evidence
{
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "1.5.0"
}
],
"type": "ECOSYSTEM"
}
],
"versions": [
"0.3",
"0.3.1",
"0.3.2",
"0.4.0",
"0.5.0",
"1.0.0",
"1.1.0",
"1.2.0",
"1.3.0",
"1.4.0"
]
}References
- https://github.com/jugmac00/flask-reuploaded/security/advisories/GHSA-65mp-fq8v-56jr
- https://nvd.nist.gov/vuln/detail/CVE-2026-27641
- https://github.com/jugmac00/flask-reuploaded/pull/180
- https://github.com/jugmac00/flask-reuploaded/commit/d64c6b2f71cb73734fc38baa0e3e156926361288
- https://github.com/jugmac00/flask-reuploaded
- https://github.com/pypa/advisory-database/tree/main/vulns/flask-reuploaded/PYSEC-2026-341.yaml
- https://pypi.org/project/flask-reuploaded