Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Endpoints are unauthenticated and network-reachable by default (PR:N/AV:N/AC:L), and unsanitized file write yields arbitrary read/write/delete plus RCE, giving full C:H/I:H/A:H.
Primary rating from Vendor (TuranSec).
CVSS VectorVendor: TuranSec
Lifecycle Timeline
2DescriptionCVE.org
IoTSharp BlobStorageController.cs lacks the [Authorize] attribute applied to every other controller in the application (DevicesController, CustomersController, TenantsController, etc.), and no global authorization FallbackPolicy is configured in Startup.cs, leaving its Upload/Download/List/Modify/Delete endpoints reachable by unauthenticated remote attackers. The path/filename parameters passed to these endpoints (e.g. _blob.WriteFileAsync($"{path}/{formFile.FileName}", ...)) are used without sanitization, enabling path traversal that allows writing, reading, modifying, and deleting arbitrary files outside the intended blob storage directory, including web-accessible paths that can be leveraged for remote code execution via webshell upload.
AnalysisAI
Missing authentication in IoTSharp's BlobStorageController lets unauthenticated remote attackers reach Upload, Download, List, Modify, and Delete blob endpoints that every other controller (Devices, Customers, Tenants) guards with [Authorize]. Because the path and filename parameters are written to disk without sanitization, attackers can traverse outside the blob directory to read, alter, or delete arbitrary files - and drop a webshell into a web-accessible path for remote code execution. No public exploit identified at time of analysis, but the combination of unauthenticated access and a clear RCE path makes this trivially weaponizable.
Technical ContextAI
IoTSharp is an open-source ASP.NET Core IoT platform for device connectivity, telemetry storage, and rules processing. Authorization in ASP.NET Core is typically applied per-controller via the [Authorize] attribute or globally via an authorization FallbackPolicy registered in Startup.cs; this vulnerability is a two-part failure of both mechanisms - the attribute is absent on BlobStorageController and no FallbackPolicy backstops it, so the endpoints default to anonymous access. This is the textbook CWE-306 (Missing Authentication for Critical Function) root cause. The impact is amplified by an unsanitized file write (_blob.WriteFileAsync($"{path}/{formFile.FileName}", ...)), a classic path-traversal sink where attacker-controlled path/FileName values containing ../ sequences escape the intended blob storage root. CPE cpe:2.3:a:iotsharp:iotsharp identifies the single affected application.
RemediationAI
No vendor-released patch identified at time of analysis - the references point only to the repository and the vulnerable source file, not to a fix commit or tagged release. Apply immediate code-level mitigations: add the [Authorize] attribute to BlobStorageController (matching DevicesController/CustomersController/TenantsController) and, as defense in depth, register a global authorization FallbackPolicy in Startup.cs so unattributed endpoints deny anonymous access by default. Independently, sanitize the file-write sink - reject or canonicalize path and formFile.FileName values, strip ../ sequences, and enforce that the resolved absolute path stays within the intended blob storage root (side effect: legitimate nested paths must be validated against an allowlist). As compensating controls until code is fixed, place IoTSharp behind an authenticating reverse proxy or network ACL that blocks anonymous access to the /api/BlobStorage routes (trade-off: may break integrations that legitimately call these endpoints), and ensure the blob storage directory is not served from a web-executable path so an uploaded file cannot be executed. Track the upstream repository for an official fix and version.
Same technique Authentication Bypass
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-53347
GHSA-p2pj-7344-wr5m