Illustrative only - not an engagement finding
Active Uploaded Content Runs Inside a Trusted Staff Session
Critical
See where this finding applies on the diagrams: browser-to-API-to-storage path · CP1 public ingress
Illustrative only - not an engagement finding
Active Uploaded Content Runs Inside a Trusted Staff Session
- Business Summary
- A document preview is part of the application’s trust boundary. If active content runs with the same browser privileges as the staff site, an uploaded file can act as the signed-in reviewer.
- Possible Weakness
- The upload path trusts the caller’s filename and media type, then displays the stored file in an unrestricted same-origin preview frame.
- Potential Impact
- A disguised active file could read page data, invoke application APIs or obtain a staff access token available to browser scripts.
- What an Assessment Verifies
- Inspect content detection, Blob Storage response headers, preview isolation in the React web application, browser token storage and the permissions available to framed content.
- Expected Fix
- Verify actual file content, serve previews from an isolated origin or sandboxed frame, and keep Entra ID access tokens out of browser storage that scripts can read.
- How to Check the Fix
- A test file containing active content, disguised as an allowed document, must be rejected or rendered inert and must be unable to read the parent page, token storage or authenticated API responses.
Cross-Reference Evidence (Illustrative). This is cross-reference evidence showing how upload validation and the browser preview code combine into one attack path. In a real engagement each item below is a live pointer: a file-and-line link into the source repository, a reproducible read-only query against the deployed Azure environment, or replayable tool output. Here they lead to newly authored public demonstrations.
-
Example upload and preview source references
This is cross-reference evidence. A real assessment links the reviewed commit and exact lines across the route, service and data boundary so another reader can follow the complete control path.
if actor.tenant_id != record.tenant_id: raise Forbidden() -
Example browser test of an inert preview
This is cross-reference evidence. A real report retains the tool version, safe test case, expected result and output needed to reproduce the conclusion.
security-regression --case "<illustrative-case>" --format json Illustrative output: {"result":"blocked as expected"} -
Example hosting and response-header record
This is cross-reference evidence. A real assessment records a dated read-only identity or configuration query and explains what that result does and does not prove.
az resource show --ids "<illustrative-resource-id>" \ --query "identity.type" Illustrative output: "SystemAssigned"