Skip to content

v0.5.1 — Security audit (F1–F10) + vault hardening + landing rebuild

Choose a tag to compare

@masonwyatt23 masonwyatt23 released this 26 Apr 00:57
· 78 commits to main since this release

Highlights

This is a security-hardening release. We ran a full security audit between v0.5.0 and this release; ten findings (F1–F10) are addressed below. Plus a meaningful refactor pass and a complete rebuild of phm.dev.

No breaking changes. Existing projects keep working — npx phantom-secrets@latest or cargo install phantom and you're current.

Security audit (F1–F10)

# Area Fix PR
F1 npm wrapper Verify release-binary SHA-256 before extracting (no more silent supply-chain risk) #24
F2 MCP Destructive vault tools now require confirm: true #25
F3 MCP Hardened phantom_copy_secret against .. and unresolved targets #28
F4 core .env rewrites are now atomic — no half-written files on crash #27
F5 core Enforce HTTPS on PHANTOM_API_URL; reject host-confusion shapes #29
F6 proxy Constant-time compare for the proxy auth token #30
F7 vault Zeroize plaintext JSON in FileVault::save/load #31
F8 CLI Write .phantom.pid with mode 0o600 from the first byte #32
F10 CI Pin third-party Actions to commit SHAs; scope GITHUB_TOKEN per job #33

Plus: closed remaining zeroize gaps on early-exit paths in cloud push/pull, and the VaultBackend::retrieve trait now returns Zeroizing<String> so callers can't accidentally leak plaintext to a String on the heap.

What's new

  • 17 MCP tools (was 10): added phantom_doctor, phantom_why, phantom_wrap, phantom_unwrap, phantom_check, phantom_env, phantom_sync. Read-only tools are safe to call freely; mutating tools all gate on confirm: true.
  • 27 CLI commands total — see the Command Reference in the README.
  • 103 tests across the workspace, up from 69 in v0.5.0. New suites cover CLI integration (init, add/remove, cloud), HTTPS-enforcement, atomic-write atomicity, and constant-time auth.
  • Refactor pass: init.rs (was 778 lines) split into focused submodules (config, docs, env, hooks, prompts, vault); MCP tool params extracted into a dedicated module.

phm.dev rebuild

The marketing site got a complete rebuild:

  • New scroll-driven hero with a 35-service brand-logo marquee (Claude, Cursor, Windsurf, OpenAI, Stripe, Postgres, …)
  • New Comparison section: Phantom vs raw .env / Doppler / 1Password CLI / Infisical / AWS Secrets Manager
  • New visible FAQ section (security-buyer questions)
  • Restyled /pricing with full design-system alignment
  • Comprehensive AI-crawl story: llms.txt, /.well-known/ai-plugin.json, JSON-LD schemas (SoftwareApplication, Organization, HowTo, FAQPage), expanded sitemap, AI-friendly robots

Repo polish

  • README hero rebuild with banner, badges, "Why Phantom?" framing, star-history chart, sponsor button
  • Issue templates (bug, feature) and PR template now live
  • CODE_OF_CONDUCT.md (Contributor Covenant 2.1)
  • All internal/external docs aligned to v0.5.1, 17 tools, 27 commands, 103 tests

Install

# npm (recommended)
npx phantom-secrets@0.5.1 init

# cargo
cargo install phantom

# Homebrew
brew tap ashlrai/phantom && brew install phantom

# MCP server (Claude Code, Cursor, Windsurf, Codex)
claude mcp add phantom-secrets-mcp -- npx phantom-secrets-mcp

Pre-built binaries for macOS (Intel + Apple Silicon), Linux (x86_64 + aarch64), and Windows (x86_64) are attached below. SHA-256 checksums are in SHA256SUMS.

Verifying the binaries

sha256sum -c SHA256SUMS

Full changelog

v0.5.0...v0.5.1

What's Changed

  • fix(mcp): allow dead_code on tool_router by @MasonStation in #20
  • v0.5.1: Windows polish (shell syntax, README) by @MasonStation in #22
  • fix(cli): silence dead_code for ShellSyntax::Cmd on non-Windows by @MasonStation in #23
  • fix(npm): verify release binary SHA-256 before extracting (audit F1) by @MasonStation in #24
  • fix(mcp): gate destructive vault tools behind confirm:true (audit F2) by @MasonStation in #25
  • fix(core): write .env phantomize atomically (audit F4) by @MasonStation in #27
  • fix(mcp): harden phantom_copy_secret target-dir (audit F3) by @MasonStation in #28
  • fix(core): enforce HTTPS on PHANTOM_API_URL (audit F5) by @MasonStation in #29
  • fix(proxy): constant-time compare for proxy auth token (audit F6) by @MasonStation in #30
  • fix(vault): zeroize plaintext JSON in FileVault (audit F7) by @MasonStation in #31
  • fix(cli): write .phantom.pid with 0o600 from creation (audit F8) by @MasonStation in #32
  • ci: pin third-party Actions to commit SHAs + scope GITHUB_TOKEN (audit F10) by @MasonStation in #33

Full Changelog: v0.5.0...v0.5.1