An Introduction to STRIDE Threat Modeling
STRIDE is a threat-classification method that helps teams identify what could go wrong when data crosses a trust boundary, an identity is accepted, or a component performs a privileged action. Its six categories are Spoofing, Tampering, Repudiation, Information Disclosure, Denial of Service, and Elevation of Privilege. They are prompts for discovering plausible failure modes, not a list of exploits to perform or a guarantee that a diagrammed system is secure.
A useful STRIDE exercise begins with one specific service and its legitimate tasks. An abstract inventory of every imaginable attack is less valuable than a small model that explains who makes a request, what data moves, which component decides whether to trust it, and what the organization must protect. Microsoft’s STRIDE threat-category reference provides the baseline vocabulary. The security assessment comes from applying that vocabulary carefully to an actual design.
Imagine an application where employees upload monthly reports. A browser sends a file to a public API; an identity provider authenticates the employee; an application process validates the upload; object storage retains the file; and a background worker extracts metadata for an internal search service. The system has several trust boundaries: between the employee and API, API and storage, storage and worker, and worker and internal search records. An architectural drawing should show those interactions and the permissions each component actually needs.
Record the assets at stake, including confidential reports, signed-in user identities, file integrity, service availability, and administrator actions. Identify the data owner and distinguish normal authorized users from administrators and background services. Do not draw a single box labeled “cloud” and assume its contents share one security context. Two services under the same provider may have different roles, networks, storage keys and audit responsibilities.
Next mark every point where one component must rely on another’s claim. A request may carry a user token, a file may arrive with user-supplied metadata, a worker may take a task from a queue, or an administrator may approve a role change. The quality of the threat model depends on making those boundaries visible rather than listing generic security terms.
Spoofing concerns an entity being accepted as someone or something it is not. At the API boundary, ask whether a stolen or improperly validated token could impersonate an employee, or whether the worker can distinguish genuine tasks from untrusted messages. Controls may include trustworthy token validation, scoped service identities and careful session management. Authentication establishes identity; it does not independently authorize every requested action.
Tampering concerns unauthorized changes to data or code. Could a user change a file after it has been approved but before the worker analyzes it? Could an attacker substitute a queued object reference so the worker reads another user’s report? Model integrity checks, immutable or versioned objects, narrowly scoped write permissions and an approved publication state. A cryptographic hash can detect certain byte changes, but the team must still establish which reference is trustworthy.
Repudiation concerns the inability to establish or dispute the provenance of an action. If an employee denies approving a sensitive upload, which identity events, workflow records and independently protected logs exist? Event timestamps, request identifiers and audit retention support accountability. Logs do not automatically prove the identity of a human behind a compromised session, and a digital signature is not an unconditional legal guarantee.
Information Disclosure concerns confidentiality failures. A poorly scoped object-storage policy could expose another department’s report; debugging logs might accidentally capture sensitive report contents; an internal search API could return records to a user lacking access. Check how every component enforces data classification and access, not merely whether transport encryption is enabled.
Denial of Service concerns a component becoming unavailable or unusable. Oversized uploads, expensive parser operations or an unbounded queue can exhaust processing resources even without a high-volume network flood. Useful design questions include file-size limits, per-user quotas, workload isolation, circuit breakers, backpressure, timeouts and safe degradation when a dependency fails. A rate limiter alone does not resolve a worker that processes hostile content without resource bounds.
Elevation of Privilege concerns a request or process gaining capabilities beyond its authorization. Could the report worker execute a file in a privileged environment? Can a regular employee alter a role, approve an exception or cause the application to retrieve privileged objects on their behalf? Defense involves constrained process identities, authorization at the object and action level, separating approval duties, and removing unnecessary capabilities from services.
A STRIDE entry should identify the asset, crossing, failure scenario, expected impact, existing control, owner and evidence needed for verification. For example, “an authenticated employee can replace the object key in an upload task and trigger processing of another department’s file” is more testable than “information disclosure might happen.” The security requirement is that the worker resolve its work only through an authorization decision linked to the requester and approved object. A separate negative authorization test can then validate the rule using owned test accounts.
Not every category applies equally to every diagram element. An in-memory queue, a public API and an archival data store have different trust properties. Avoid demanding a fabricated finding under each STRIDE letter simply to make a matrix look complete. The team should explain why a threat is plausible in this design and why a proposed control addresses the specific failure path.
After identifying threats, evaluate likelihood, business impact, exposure and existing controls through a separate risk process. STRIDE classifies threats; it does not assign a universal numerical severity or decide who is authorized to accept residual risk. A highly visible but low-impact issue and a rare but catastrophic safety failure deserve different management responses. Record the decision rationale rather than converting the number of threats found into a success metric.
A review workshop can miss an actual boundary if its diagram no longer reflects the deployed environment. Compare the drawing with identity-provider policies, API routes, service roles, storage configuration, queues, logging and deployment manifests. Interview developers and operations staff about shortcuts introduced under incident pressure. An application may have inherited a shared service account or cross-environment storage bucket that was not in the intended design.
Use code review, architecture checks, authorization tests and configuration inspection to verify relevant controls. Choose a test that demonstrates the expected security property in a controlled setting, with explicit ownership and permitted accounts. An automated scanner may find a misconfiguration but usually cannot determine whether a business process has the right approving authority. Likewise, absence of a tool alert is not evidence that all modeled threats were addressed.
For our upload example, an effective verification plan might confirm that object identifiers cannot cross tenant boundaries, that an untrusted file cannot execute with privileged worker permissions, that audit records capture approval actions without exposing document contents, and that resource quotas prevent one upload from overwhelming other customers. Each result should identify the exact system version and environment tested.
Threat models become stale when a service adds a mobile client, moves identity providers, allows third-party integration, introduces machine-learning analysis or changes the trust assumptions of a deployment. Tie review triggers to those architectural changes, not to an arbitrary checklist date. A model is especially valuable during an incident when the response team needs to understand which systems could have accepted a false identity or which storage boundaries were supposed to prevent data movement.
Document unresolved threats in the engineering backlog with owners and deadlines. When a team explicitly accepts a risk, record the business authority, residual conditions, monitoring and re-review trigger. Do not present the model as proof of regulatory compliance or as a replacement for code review, security testing, incident readiness or operations monitoring.
STRIDE works best when the result is an understandable map of important trust decisions and evidence-backed protection requirements. The aim is not to maximize the number of threats listed. It is to identify where a real system can violate identity, integrity, accountability, confidentiality, availability or authorization expectations, and then make those expectations testable and maintainable.