What Changed in v2.1.5
This is a security-focused release resolving seven coordinated advisories across the HTTP, WebDAV, FTP and SFTP surfaces, plus a TUI convenience feature and the usual dependency and CI maintenance.
🔒 Security
- HTTP/WebDAV
--no-delete/--upload-onlyoverwrite bypass (GHSA-966r-mw4j-rv64, Critical) — The v2.1.4 per-verb WebDAV guard blocked overwritingMOVE/COPY, but thePUTcase and the HTTPput()/upload()handlers still gated only on--read-only, so aPUT/POSTthat overwrote an existing file destroyed its contents under--no-deleteand--upload-only. Overwrites of existing files are now blocked whenever deletion is disabled, on both HTTP and WebDAV. ConPtyShell.ps1unauthenticated exemption bypass (GHSA-6m5c-fv2q-jrj2, Critical) — The exemption that lets a caught Windows host fetchConPtyShell.ps1was scoped only by theconptyquery key and path, not by method or by requiringconptyto be the sole parameter. Appending?conptyto a request reached most of the authenticated API surface anonymously (bulk download, info, WebSocket/RCE, unauthenticatedPUT/DELETE). A sharedconPtyExempt()helper now restricts the exemption to aGET/HEADof exactly/ConPtyShell.ps1whose only query parameter isconpty; every other method or extra feature key falls through to normal auth.- WebDAV
POSTreturns file contents, bypassing--upload-only(GHSA-rc9g-fmpg-c6pp, High) —golang.org/x/net/webdavdispatchesPOSTto the same read handler asGET, and thewebdavGuardhad noPOSTcase, so an unauthenticatedPOST /filereturned the full file body under--upload-only. The guard now treatsPOSTlikeGET/HEADand blocks it in upload-only mode. - FTP ignores
--upload-onlyand only partially enforces--no-delete(GHSA-6wwv-mx7w-35jx, High) — The FTP server never wired the--upload-onlyflag at all (the whole webroot was readable in upload-only mode), and its--no-deleteguard missed rename (RNFR/RNTO) and truncating overwrites. FTP now stacks independent filesystem wrappers:--no-deleteblocks deletes, renames and truncating/overwriting writes (appends and new files still allowed), and--upload-onlyblocks reads while permitting uploads and directory listing. - Trailing-slash ACL and hidden-file bypass in
sendFile(GHSA-964w-f6gj-5236, Medium) —sendFilederived the served filename from the raw request path while opening the file from the cleaned path; a trailing slash emptied the derived name and defeated both the never-serve rule for the.goshsfile and the block list. The name is now derived consistently from the cleaned path. - Single-file
?shareredemption served with an empty ACL (GHSA-mqvv-v9g7-4h3j, Medium) — Redeeming a share token for a single file passed an emptyconfigFile{}tosendFile, so neither the block list nor the per-directory basic auth was evaluated. The share redemption path now resolves and enforces the effective ACL, and share minting validates the caller's ACL permissions. - SFTP server ignored
--no-delete(GHSA-4wh5-87mw-whxf, Medium) — The SFTP server had noNoDeletefield and never mapped the flag, soRemove/Rmdir/Rename/overwrite stayed available under--no-delete. The flag is now honored, including an overwrite guard on writes.
✨ New Features
- Password reveal popup in the TUI — The
--tuistatus bar shows the basic-auth user but never the password. Pressingp(in any pane except the generator, wherepedits LPORT) now opens a modal overlay with the credentials — masked untilutoggles plaintext,y/ccopy, esc/q close. Handy when the password was generated inline at launch (e.g.-b "user:$(xkcdpass …)"). A bcrypt-hashed secret is shown but flagged as unrecoverable.
🛠️ Build, CI & Packaging
- Migrated the integration test harness to
moby/moby(testcontainers 0.43). - Releases are now signed by GoReleaser; Dependabot now also watches the Go toolchain version and the Docker base image.
- Added the OpenSSF Best Practices badge and hardened the Scorecard workflow (pinned actions, least-privilege permissions); removed the Go Report Card badge.
⬆️ Dependencies
- Go modules:
golang.org/x/net0.55.0 → 0.57.0,golang.org/x/crypto0.52.0 → 0.53.0,github.com/fclairamb/ftpserverlib0.31.0 → 0.32.1,github.com/studio-b12/gowebdav0.10.0 → 0.13.0,github.com/pkg/sftp1.13.9 → 1.13.11,github.com/coder/websocket1.8.13 → 1.8.15,github.com/charmbracelet/bubbletea1.3.4 → 1.3.10,github.com/go-acme/lego/v44.34.0 → 4.35.2,software.sslmate.com/src/go-pkcs120.7.2 → 0.7.3. - GitHub Actions:
github/codeql-action(init/autobuild/analyze/upload-sarif) 4.36.3 → 4.37.4,ossf/scorecard-action2.4.3 → 2.4.4,docker/login-action4.3.0 → 4.6.0,actions/setup-go6.4.0 → 7.0.0,actions/checkout7.0.0 → 7.0.1.