UNPKG

paqad-ai

Version:

Spec-driven development framework — AI agents that think before they type

72 lines (57 loc) • 7.52 kB
# STRIDE Checklist verified: 2026-11-02 One concrete question per STRIDE letter per surface type. Answer each: if the answer is "unknown" or "not covered", flag it as a threat. ## Surface: API Endpoint | Threat | Check | | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | | **S**poofing | Can the caller forge or steal an auth token to impersonate another user? Is the token verified on every request? | | **T**ampering | Can request body parameters (price, role, status) be manipulated without the server rejecting them? Can a request be replayed? | | **R**epudiation | Is this action written to an audit log with caller identity, IP, and timestamp? | | **I**nformation Disclosure | Does the error response for a missing or forbidden resource leak data (e.g., "user not found" vs "invalid token")? | | **D**enial of Service | Is this endpoint rate-limited? Can an unbounded query or pagination bypass exhaust the database? | | **E**levation of Privilege | Does calling this endpoint require a specific role check, not just authentication? Can a regular user reach admin actions? | ## Surface: Background Job / Queue | Threat | Check | | -------------------------- | ------------------------------------------------------------------------------------------------------- | | **S**poofing | Can an unauthorized actor enqueue or trigger this job? Is job source verified? | | **T**ampering | Can the job payload be modified while sitting in the queue? Is the payload schema-validated on dequeue? | | **R**epudiation | Is job execution logged with the actor who triggered it and the input it received? | | **I**nformation Disclosure | Do job failure logs or error messages expose internal state, file paths, or credentials? | | **D**enial of Service | Can malicious input cause an infinite retry loop? Is there a dead-letter queue with a retry cap? | | **E**levation of Privilege | Does the job run with elevated DB permissions? Can the payload escalate what the job does? | ## Surface: File Upload Endpoint | Threat | Check | | -------------------------- | --------------------------------------------------------------------------------------------------- | | **S**poofing | Can the MIME type be spoofed (Content-Type: image/png + PHP body)? | | **T**ampering | Can an uploaded file be modified or swapped between upload and virus/validation scan? | | **R**epudiation | Is the upload event logged with uploader identity, filename, and file hash? | | **I**nformation Disclosure | Can the storage path be enumerated via the upload response? Are uploaded files publicly browseable? | | **D**enial of Service | Is there a max file size? Is there a per-user upload quota? Can a zip bomb pass validation? | | **E**levation of Privilege | Can an uploaded file overwrite application code (e.g., if storage is in the web root)? | ## Surface: Webhook | Threat | Check | | -------------------------- | ------------------------------------------------------------------------------------------------------------------ | | **S**poofing | Is the webhook source verified with HMAC signature validation? Is the signing secret rotated? | | **T**ampering | Can a webhook payload be replayed with a valid signature from a previous request? Is a timestamp or nonce checked? | | **R**epudiation | Is webhook receipt logged with payload hash and delivery timestamp? | | **I**nformation Disclosure | Do webhook error responses leak internal system details to the sender? | | **D**enial of Service | Can rapid webhook delivery cause queue exhaustion or DB write saturation? Is there backpressure? | | **E**levation of Privilege | Can a webhook payload trigger a privileged action (e.g., account promotion, data export)? | ## Surface: Admin Panel / Dashboard | Threat | Check | | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | | **S**poofing | Is the admin session protected against XSS-based cookie theft? Is MFA enforced for admin accounts? | | **T**ampering | Are admin actions protected against CSRF? Are all mutations require a re-auth or confirmation step for destructive operations? | | **R**epudiation | Are all admin operations attributed to a specific admin user with full context? Is the audit log tamper-resistant? | | **I**nformation Disclosure | Is the admin panel IP-restricted or behind a VPN? Does the panel URL appear in `robots.txt` or error messages? | | **D**enial of Service | Can bulk admin operations (mass delete, mass export) be triggered without a concurrency cap? | | **E**levation of Privilege | Can a non-admin reach the admin panel via path traversal or missing middleware? Is the admin route applied to all sub-routes? | ## Surface: GraphQL Endpoint | Threat | Check | | -------------------------- | -------------------------------------------------------------------------------------------------------------------------- | | **S**poofing | Can introspection reveal hidden types that expose private fields to unauthenticated callers? | | **T**ampering | Can mutation inputs include undocumented fields not validated by the schema resolver? | | **R**epudiation | Are mutations logged with the caller identity and full input? | | **I**nformation Disclosure | Do resolver errors expose DB schema, table names, or stack traces in the `errors` array? | | **D**enial of Service | Is there a query depth limit and a query complexity budget? Can aliased or batched queries bypass per-request rate limits? | | **E**levation of Privilege | Does each field resolver enforce authorization independently, not just the root query resolver? |