Skip to content

PaperPilot v0.3.0

Choose a tag to compare

@ifzzh ifzzh released this 07 Sep 09:53

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_path without 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.