Repository navigation
PaperPilot v0.3.0
PaperPilot v0.3.0
This release closes the two P0 storage issues covering arbitrary paper asset paths and category-name path traversal.
Security changes
- Paper metadata updates now use an exact mutable-field allowlist and reject the whole request when internal or unknown fields are present.
- PDF, translated PDF, analysis Markdown/images, thumbnails, moves, renames, imports, and deletion use a shared confined-path layer.
- Unsafe historical database paths fail closed with
409 unsafe_stored_pathwithout exposing host paths. - Category files now live under deterministic
.categories/<UUIDv5(category_id)>directories; display names never become filesystem paths. - Category rename and parent changes are database-only; deletion targets one exact ID directory.
Required upgrade step from v0.2.0
Stop PaperPilot and run the bundled migration command with --dry-run, then --apply and a mounted backup directory. The tool creates a SQLite backup and migration manifest. --rollback <manifest> restores both database and legacy directory layout. v0.3.0 refuses to start on legacy, mixed, or interrupted layouts.
The current maintained deployment continues to bind only 127.0.0.1:7191:7191.
Artifacts and verification
- Git commit:
78a074413efb0f09e0a6c161cc5cea4466ac4bc0 - Docker:
ifzzh520/paperpilot:0.3.0 - Platform:
linux/amd64 - Tests:
91 passed, 1 deselected, 50 subtests passed - Runtime: UID/GID
10001:1001; health check, upload, ID-directory placement, production fail-closed, and anonymous 401 probes passed. - Docker digest:
sha256:264c56cfb7fab7138ac8a693c06d67cc06029f579f60ae970eed392ac5b4dab1
Remaining known risks
BabelDOC, stored XSS/untrusted Markdown, SSRF, secret storage, ZIP/PDF resource exhaustion, and the remaining dependency findings are not fixed in this release. Continue to deploy only on localhost or behind a trusted VPN; do not expose this release directly to the public internet.