Skip to content

Threat model

We cannot promise “never hacked.” We can make silent library rewrite, hash bypass, and privilege escalation unacceptable outcomes.

Tampered storage or gateway serving the wrong bytes
Reader hashes fetched bytes against the catalog seal. Mismatch withholds the body. No ‘continue anyway.’
Malicious mod trying to appear canonical
Mods are a separate record with their own hash. add_mod cannot write RootRecord. The reader labels mods and verifies the mod digest, never substitutes it for the root.
Non-curator sealing or mutating seals
seal_root requires the curator signer. There is no update_root_content, set_storage_uri, or unseal instruction. Tests attempt both classes of abuse.
XSS via Markdown or HTML in works or mods
react-markdown + rehype-sanitize. No dangerouslySetInnerHTML on untrusted HTML. Links are http(s)/mailto only.
Leaked demo keypairs committed to git
*.keypair.json and .env* are gitignored. Only .env.example is committed. security:check greps for keypair files.
“Fixup” instructions that change sealed fields
Those instructions do not exist. security:check and program tests fail the build if they appear.
Reader trusting UI badges without re-hash
VerifiedMarkdown re-hashes on render. The verified line is painted only after that check. A green badge is not an input to the renderer.