The storage service's file upload handler trusts the client-provided Content-Type header without performing server-side MIME type detection. This allows an attacker to upload files with an arbitrary MIME type, bypassing any MIME-type-based restrictions configured on storage buckets.
services/storageservices/storage/controller/upload_files.gogetMultipartFile (lines 48-70)In getMultipartFile, if the client provides a non-empty Content-Type header that isn't application/octet-stream, the function returns it as-is without performing content-based detection:
contentType := file.header.Header.Get("Content-Type")
if contentType != "" && contentType != "application/octet-stream" {
return fileContent, contentType, nil // skip detection entirely
}
// mimetype.DetectReader only reached if client sends no Content-Type
// or sends application/octet-stream
mt, err := mimetype.DetectReader(fileContent)
Incorrect MIME type in file metadata. The MIME type stored in file metadata reflects what the client claims rather than what the file actually contains. Any system consuming this metadata (browsers, CDNs, applications) may handle the file incorrectly based on the spoofed type.
Always detect MIME type from file content using mimetype.DetectReader, ignoring the client-provided Content-Type header entirely.
| Score | Percentile |
|---|---|
| 0.01% | 0.81% |
| Base score | Version | Severity | Vector |
|---|---|---|---|
| 5.3 | 3.1 | — |
|
| 2.1 | 4.0 | — |
|
| Type | Value |
|---|---|
| GHSA | GHSA-g9f6-9775-hffm ↗ |
| CVE | CVE-2026-33221 ↗ |
Vulnerable version ranges and first patched releases as published by GitHub.
| Ecosystem | Package | Vulnerable range | First patched | Vulnerable functions |
|---|---|---|---|---|
| go | github.com/nhost/nhost | < 0.0.0-20260318074820-c4bd53f042d7 | 0.0.0-20260318074820-c4bd53f042d7 | — |