AI-generated analysisPublished automatically and not human-verified. Validated context appears in community notes below.
← Watch feed
Low 47 Bitcoin

Merge branch 'remove-ssh'

Public commit record

What the developer wrote

Authored by Nicolas Dorier

35/100 · Opaque
Merge branch 'remove-ssh'
✓ Descriptive subject! No meaningful explanatory body
The short version

What changed, and why it matters

This commit removes the built-in SSH client from BTCPay Server and replaces it with a local helper program called 'btcpay-host'. Instead of the application opening SSH connections to the server host, it now runs a configurable local executable to perform maintenance tasks such as updating, restarting, changing the domain, and managing authorized SSH keys. This is a significant architectural change that reduces the application's direct network attack surface, but it also introduces a new local command-execution path that must be trusted and properly secured.

Recommended action

Operators and auditors should verify that the 'btcpay-host' executable path is controlled by the deployment and not writable by the application user, since BTCPay Server will now run it with elevated maintenance privileges. Review the Docker btcpay-host wrapper to ensure host SSH keys and BTCPAY_SSHCONNECTION are restricted. Confirm that authorization checks (Policies.CanModifyServerSettings) remain enforced on all maintenance endpoints, and monitor for any follow-up patches that harden argument escaping or timeout handling in ProcessRunner.

Security signals we found

01

Removal of SSH.NET dependency and direct SSH client code

02

Removal of SSH credential configuration options from BTCPayServerOptions and DefaultConfiguration

03

Removal of SSH fingerprint validation and trusted-fingerprint logic

04

Removal of PoliciesSettings.DisableSSHService flag

05

Introduction of ProcessRunner that executes a configurable external executable (btcpay-host) with administrator-supplied arguments

06

Maintenance actions (update, restart, clean, changedomain) now delegated to local host command helper

07

SSH authorized_keys management now performed via local host command helper instead of SSH session

08

New Docker entrypoint and btcpay-host wrapper that forwards commands over SSH using host's ssh binary

09

Soft-restart action remains in-process via IHostApplicationLifetime.StopApplication

Risk score

Why this scored 47/100

Our methodology →
Potential impact 12/30
Exploitability 8/25
Stealth signal 6/15
Affected reach 10/15
Confidence 7/10
Evidence quality 4/5
Human-validated context

Community notes

Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.

No validated notes yet.

The AI analysis stands alone for now. Submit a note if you can add evidence or important context.