Skip to content

feat(docs): add File Upload and Storage Security architectural-control doc - #22

Merged
rcha0s merged 2 commits into
mainfrom
docs/file-upload-storage-security
Sep 9, 2026
Merged

rcha0s merged 2 commits into
mainfrom
docs/file-upload-storage-security

Conversation

@rcha0s

@rcha0s rcha0s commented Sep 1, 2026

Copy link
Copy Markdown
Owner

Summary

  • New doc at docs/103-file-upload-storage-security.md: the architecture around a file after it passes upload validation -- storage location, retrieval authorization (presigned URLs vs authenticated proxies), encryption at rest, tenant isolation, and retention. Forks by file sensitivity and serving context (public/low-sensitivity, private documents, system-generated files).
  • Complements the existing 10-file-upload.md (upload-time exploit mechanics) rather than repeating it.
  • Updates README.md, mkdocs.yml nav, and docs/architecture-controls/index.md in the same commit.
  • Adds bidirectional "See also" back-links in all 11 existing docs this doc cites: 04-ssrf.md, 06-xxe.md, 10-file-upload.md, 15-access-control-idor.md, 17-cryptographic-failures.md, 19-security-misconfiguration-headers.md, 21-information-disclosure.md, 43-unbounded-consumption.md, 98-secrets-keys-data-protection.md, 99-privacy-engineering.md, 102-multi-tenancy-isolation.md.
  • Also fixed a doc-numbering bug found while building this: both doc-generation skills (add-architectural-control, add-appsec-topic) computed the next available doc number via a regex that only matched exactly-2-digit prefixes, silently missing docs/100+.md and recomputing a colliding number -- fixed in a separate small commit (already merged via docs: replace Staff with Principal for interviewer/reviewer-tier language #21).

Test plan

  • pytest tests/ -- 11/11 passed.
  • Post-run checklist per the add-architectural-control skill: opener framework-grounded, axis stated, 3 context subsections each with both required tables (5-8 rows), no ## How it works/## Attack techniques/## Defense, every Deep dive link resolves to a real file, 0 em-dashes, "Principal" used throughout (not "Staff"), 174 lines.
  • All 11 internal doc links verified to resolve to real files.

https://claude.ai/code/session_011f1KhQCYiUUPFKco7pguLC

…l doc

New doc at docs/103-file-upload-storage-security.md, covering the
architecture around a file after it passes upload validation: storage
location, retrieval authorization (presigned URLs vs authenticated
proxies), encryption at rest, tenant isolation, and retention. Forks by
file sensitivity and serving context (public/low-sensitivity, private
documents, system-generated files), each with the exploit surface that
context's generation/import pipeline drags along (SSRF via fetch-by-URL
and webhook-delivered files, decompression bombs, untrusted parsers in
preview/OCR pipelines).

Complements the existing 10-file-upload.md (upload-time exploit
mechanics) rather than repeating it -- this doc is about what happens
to the bytes afterward.

Updates README.md, mkdocs.yml nav, and docs/architecture-controls/index.md
in the same commit, plus bidirectional "See also" back-links in the
non-overlapping existing docs this new doc cites (43-unbounded-consumption.md,
98-secrets-keys-data-protection.md, 99-privacy-engineering.md,
102-multi-tenancy-isolation.md). Back-links for the remaining cited docs
(04-ssrf.md, 06-xxe.md, 10-file-upload.md, 15-access-control-idor.md,
17-cryptographic-failures.md, 19-security-misconfiguration-headers.md,
21-information-disclosure.md) land in a follow-up commit since those
files are concurrently being reformatted by a separate Interviewer-probes
fix and need careful reconciliation rather than a rushed combined diff.
Completes the cross-link set from the previous commit: 04-ssrf.md,
06-xxe.md, 10-file-upload.md, 15-access-control-idor.md,
17-cryptographic-failures.md, 19-security-misconfiguration-headers.md,
and 21-information-disclosure.md now link back to
103-file-upload-storage-security.md.

These 7 files were also touched by a concurrent, unrelated Interviewer-
probes formatting fix running in the same working tree; reconciled by
diffing against origin/main and the pre-probes-fix snapshot to isolate
just the See-also insertion for this commit. The probes-fix changes
land in their own separate PR.
@rcha0s
rcha0s merged commit ebbd00e into main Sep 9, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant