Illustrative only - not an engagement finding
Document-Borne Instructions Influence Cross-Customer Data Access
Critical
See where this finding applies on the diagrams: AI services zone · AI analysis step · CP5 AI-call boundary
Illustrative only - not an engagement finding
Document-Borne Instructions Influence Cross-Customer Data Access
- Business Summary
- Every uploaded document is untrusted model input. If instructions hidden in that content can influence retrieval or authorization, prompt injection stops being only a model quality problem and becomes a way for one customer's data to reach another.
- Possible Weakness
- Text embedded in a PDF, email or image instructs the model to request another customer’s records, and the application code acts on whichever record identifier or search scope the model chose, without checking it.
- Potential Impact
- Sensitive records could cross a tenant boundary or be included in a model response, log entry or generated working paper.
- What an Assessment Verifies
- Trace document content through prompt construction in the async worker, the Azure AI Document Intelligence and Azure OpenAI calls, the decisions about which records may be retrieved and the downstream Cosmos DB writes, using test documents that hide adversarial instructions and made-up customer records with known permissions.
- Expected Fix
- Keep tenant scope and authorization in deterministic FastAPI and worker code, treat document text only as data and never let Azure OpenAI output expand identity, retrieval or tool permissions.
- How to Check the Fix
- A reviewed set of documents carrying hidden instructions must never retrieve or reveal another tenant’s planted test data, while authorized classification continues to work and every attempted scope change is logged safely.
Cross-Reference Evidence (Illustrative). This is cross-reference evidence showing how prompt construction, authorization code and adversarial test output are reviewed together. 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 prompt and authorization 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 indirect-injection regression output
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 AI workload-identity 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"