No encryption for backups at rest #20
Labels
No labels
blocked:gate-fetch
blocked:gate-fetch
blocked:gate-fetch
blocked:gate-fetch
blocked:lint-failed
blocked:needs-decision
blocked:no-changes
blocked:no-procedure
blocked:verify-failed
bug
feature-request
in-progress
needs-decompose
needs-triage
ops-task
quickfix
security/high
security/low
security/medium
test-coverage
triage-approved
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Mark/docker_backup#20
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Description
Backup archives are stored unencrypted.
Impact
Sensitive data in backups is exposed if storage is compromised.
Suggested Fix
Add optional encryption (AES/GPG) for backup archives.
Ops Pipeline — No Executable Procedure
Research did not produce any executable commands.
Assessment
IS_OPS: NO
HOST: localhost
STATUS: NOT_OPS
EVIDENCE:
This is a web application (React 19 + TypeScript frontend, Node.js backend) for managing Docker backups. After examining the codebase:
supportsEncryptionas a capability flagBackupStrategytype hasencryptionEnabled: booleanencryptionEnabledandencryptionKeyTriage: decompose failed
Triage pipeline could not create a sub-issue for auto-decomposition (API error or repo permissions). Marking this
blocked:needs-decisionto prevent re-evaluation. Remove the label to retry.QA Reopened — Fix Not Landed
This issue was auto-closed at 2026-08-04T04:34:58Z by a reconciliation sweep (same exact timestamp as the mesh-seed#252 false-positive close), but the underlying vulnerability is unresolved.
Verification
git log --all --oneline | grep -iE 'encrypt|aes|gpg|crypt'→ 0 commits on any branch.find backend/src agent/src src -name 'encrypt*.ts' -o -name 'encryption.ts'→ 0 files. No encryption module exists in source..kilo/plans/backup-encryption-at-rest.mdis an implementation plan, not implementation. It proposes creatingbackend/src/core/backup/encryption.ts(NEW) — that file does not exist.backend/src/core/backup/executor.ts::executeFullBackup()pipeline:tar → compress (gzip|zstd|none) → SHA256 → upload. No encryption step. TheBackupStrategy.encryptionEnabledflag is never consulted.agent/src/backup.ts::createArchive(): tar.gz via alpine → SHA256 → upload. No encryption.supportsEncryptionflags on S3/GCS/Azure providers are backend-API capability declarations (e.g., SSE-S3, CMEK), not application-level archive encryption. They do not address this issue.backup.encryptionEnabled = 'false'is a dead flag — no code path honors it.Reopen
Reopened by tasker-worker (kanban QA task t_199ad939) on 2026-08-04. The issue remains OPEN until an actual encryption implementation lands and is independently verified.
QA FAIL (2026-08-04, t_fb037969) — fixit-board false-positive close confirmed
Re-verified against Mark/docker_backup master HEAD
e9289d0("fix(verify): make pytest and cargo test pass on this JS-only repo"). Same state as comment #50025. No encryption module exists.Evidence
Commits:
git log --all --oneline | grep -iE 'encrypt|aes|gpg|crypt'→ 0 hits across all branches. Master has gained no new commits since 2026-08-04T08:00Z.Source files:
find agent backend/src -type f -name '*ncrypt*.ts'→ 0 files. Noencrypt*/encryption*/cipher*modules in source.Where encryption is mentioned in code (all declarations only, never read):
backend/src/core/backup/types.ts:58—encryptionEnabled: boolean(declared in BackupStrategy type, never read anywhere)backend/src/core/storage/interface.ts:37—supportsEncryption: boolean(capability flag, declared per-provider)supportsEncryption = true(s3/azure/sftp/gcs/rsync) or= false(local/box/gdrive/webdav) but nothing in the executor reads the flag to actually encrypt.Backup pipeline (
backend/src/core/backup/executor.ts): tar → compress (gzip/zstd) → upload. There is no encryption step. The singlecryptoimport in the entire repo iscreateHashfor checksums (agent/src/backup.ts:10), not encryption.Tests:
backend/tests/core/backup/executor.test.ts:49assertssupportsEncryption: falsefor the local provider fixture. No test exercises encryption.Plan-only artifact:
.kilo/plans/backup-encryption-at-rest.mdis a design proposal. Not implementation. Not referenced by any build/lint gate.Conclusion
Issue is genuinely open. The fixit-board "done" entry is a false-positive close — same pattern as Mark/mesh-seed#236 (t_5b0bb6f3), Mark/mesh-seed#252/253/256/257/244/245, Mark/org_mode#17, Mark/nodedesk#38 (already on the recorded failure-mode list). A reconciliation sweep flipped this card to done but did not land code.
Recommendation
This issue needs actual implementation via the kilo-gsd pipeline (forge a real implementation commit on a topic branch, run ruff+tests gates, open PR, then close). Marking the kanban QA card blocked until the fix is genuinely shipped and merged. Do not close the Forgejo issue from the reconciliation sweep.
QA FAIL (2026-08-04, t_f043356a) — No encryption implementation exists
Reopened from false-positive close (closed by reconciliation sweep at 2026-08-04T14:30:25Z).
Evidence
Commits:
git log --all --oneline | grep -iE "encrypt|aes|gpg|crypt"→ 0 hits across all branches. Master HEAD ise9289d0.Source files: No encryption module exists.
find agent backend/src src -type f -name "encrypt*" -o -name "*crypt*"returns nothing.Type definitions only: The codebase has
encryptionEnabled: booleaninbackend/src/core/backup/types.tsandsupportsEncryptionin storage interfaces — but these are type flags only. Some providers claimsupportsEncryption = true(GCS, Azure, SFTP, rsync, S3) but no actual AES/GPG encryption logic exists anywhere.cryptoimports are limited to SHA-256 hashing (checksums, HMAC signatures).Conclusion
The fix was never implemented. The issue was auto-closed by a reconciliation sweep without verification. This is the same false-positive close pattern seen on mesh-seed#252, mesh-seed#255, and others.
QA verification (t_a4cfe992): No encryption implementation has landed.
Findings:
encryptionEnabled,encryptionKeyin Settings.tsx)BackupStrategy.encryptionEnabledin types.ts)Issue correctly remains open. The UI/type stubs exist but the actual encryption logic (AES/GPG) is not wired into the backup pipeline.
QA FAIL (t_cab453a8) — No encryption implementation exists
Verified independently against Mark/docker_backup main HEAD
e9289d0. Same finding as all prior QA attempts.Evidence
git log --all --oneline | grep -iE "encrypt|aes|gpg|crypt"→ 0 hitsWhat exists (UI/type stubs only)
src/pages/Settings.tsx— toggle + text input forencryptionEnabled/encryptionKeysrc/types/index.ts—encryptionEnabled: boolean,encryptionKey?: stringbackend/src/core/backup/types.ts—encryptionEnabled: booleanbackend/src/core/storage/interface.ts— comment mentioning encryption capabilityWhat does NOT exist
cryptoimports are SHA256/HMAC (checksums, auth tokens) — not encryptionConclusion
This is a 5th consecutive QA FAIL on this issue. The feature was never implemented. The fixit-board reconciliation that generated this QA card was a false-positive close (same pattern as mesh-seed#252, #253, #256, #257).
Issue remains OPEN — no fix has landed.
QA FAIL (t_df9eb737) — No encryption implementation exists
Verified independently against Mark/docker_backup main HEAD
e9289d0. Same finding as all 6 prior QA attempts.Evidence
Conclusion
Issue correctly remains open. The fixit board false-positive close was invalid — the reconciliation sweep closed it despite no implementation landing.
QA FAIL (t_879d49a8) — No encryption implementation exists
Verified independently against Mark/docker_backup main HEAD
e9289d0. Same finding as all 7 prior QA attempts.Evidence
git log --all --oneline | grep -iE "encrypt|aes|gpg|crypt"→ 0 hits across all branchesWhat exists (UI/type stubs only)
src/types/index.ts:279-280—encryptionEnabledboolean,encryptionKeyoptional stringbackend/src/core/backup/types.ts:58—encryptionEnabled: booleanin BackupStrategybackend/prisma/seed.ts:34— defaultencryptionEnabled: falsebackend/src/core/storage/interface.ts:37—supportsEncryptioncapability flagsrc/pages/Settings.tsx:327-348— UI toggle + key inputWhat is missing
backend/src/core/backup/executor.ts)Conclusion
Issue remains valid. Encryption feature was never implemented — only type definitions and UI placeholders were added. Needs actual code work (AES/GPG encryption in the backup/restore pipeline).
QA re-verification (2026-08-10, kanban t_f043356a): fix still NOT landed. main HEAD
e9289d0unchanged; last 50 commits contain no encrypt/aes/gpg/#20 references; no open PRs (only #10 closed-unmerged). Proposed module backend/src/core/backup/encryption.ts does not exist. Executor pipeline remains tar -> compress -> SHA256 -> upload with no encrypt step; encryptionEnabled/supportsEncryption remain dead type flags. Fixit lane task t_16dac594 is blocked pre-dispatch on worktree-cleanliness (staged WIP in executor.ts/schema.prisma/websocket) - needs stash/commit decision before kilo-gsd can run #20. Issue stays open.Fix landed and verified (kanban fixup t_9b76fd60)
The encryption-at-rest fix for this issue landed on main and is closed.
a5b47ce"feat: add encryption at rest for backup archives (#20)" — on origin/main (AES-256-GCM encryption wired into full/incremental/delta backup paths; archives encrypted in the agent before upload; backend integration + agent unit tests added).