#232: plugin allowlist with SHA-256 hash pinning #298
No reviewers
Labels
No Label
area:auth
area:docs
area:export
area:ops
area:storage
area:supply-chain
auth
backend
blocked
collab
deployment
docs
effort:L
effort:M
effort:S
frontend
plugins
qa
vs-nfd
vs-nfd:blocker
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: stwaidele/dorfteich#298
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "issue-232-plugin-hash-pinning"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Completes M31 — the last open VS-NfD milestone.
plugins.bundle_hash; migration adds the nullable column, pre-#232 installs show "unknown" until reinstalled).plugins.allowlistininstance_settings({id, sha256}[]): empty (default) = pinning not enforced — existing instances behave exactly as before; non-empty = enforcement for every plugin. Installs of unlisted ids or deviating bundles are rejected with stable codes (plugin_not_pinned/plugin_hash_mismatch, 403, i18n de+en); an installed plugin outside the list or with a deviating hash does not load: absent from pond mount lists, frame/asset routes 404 like a missing plugin.plugin.rejected— audit catalogue bumped to v1.5 with its row.plugin-architecture.mdtrust section (scope stated honestly: the pin answers "is this the reviewed bundle"; post-install disk tampering is platform integrity per ADR 0019); hardening guide row (+ catalog advisory triage for the #243 fence); residual risk R-03 resolved; plan checkbox ticked.Tests: 6-case e2e pack (compatibility with empty allowlist, pinned load, unpinned install rejected + audited, tampered bundle rejected, pin drift blocks loading while the admin still sees the mismatch, version bump needs re-pin). Full api suite 101 files / 561 green against the migrated DB.
Issue #232 will be closed manually after green CI + merge.
🤖 Generated with Claude Code
https://claude.ai/code/session_01AUtYMxwTCMHG9mVHnwbFg8