@@ -7,6 +7,28 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77
88## [ Unreleased]
99
10+ ## [ 5.20.1] - 2026-09-09
11+
12+ ### Security
13+
14+ - ** MCP ` ssh_command ` and ` wp_cli ` no longer auto-approve reads of credential-bearing
15+ files.** ` ssh_command ` 's read-only allowlist (` cat ` , ` grep ` , ` head ` , ` tail ` , ...) let
16+ ` cat web/wp-config.php ` or ` cat ~/.ssh/id_rsa ` through with no ` confirm: true ` step,
17+ because the * command* was harmless in general even though this particular argument
18+ wasn't — same failure mode as [ a WordPress consultant's LinkedIn post this fix was
19+ prompted by] ( https://www.linkedin.com/posts/remkusdevries_connecting-ai-to-a-wordpress-site-now-takes-share-7503145873036685313-vCPk/ )
20+ describes: "once it has local file access, it can find your ssh credential... the
21+ database credentials in your wp-config.php." ` isReadOnlySshCommand() ` now also
22+ refuses when any argument matches a credential-shaped path (` wp-config.php ` , ` .env ` ,
23+ ` .ssh/ ` , ` id_rsa ` /` id_ed25519 ` /` id_ecdsa ` , ` *.pem ` , ` authorized_keys ` , ` .netrc ` ,
24+ ` .pgpass ` , ` .git-credentials ` ), forcing the normal confirm-after-explicit-approval
25+ flow. Separately, ` wp_cli ` 's ` isReadOnlyWpCommand() ` treated `wp config get
26+ DB_PASSWORD` as read-only too — ` get` is a safe verb in general, but ` wp config` is
27+ WP-CLI's direct interface onto wp-config.php's constants, an even more direct route
28+ to the same credentials. ` wp config * ` (any verb) now always needs ` confirm: true ` .
29+ Neither change blocks legitimate reads or edits — it only removes the no-confirmation
30+ fast path, matching how every other sensitive MCP operation already works.
31+
1032## [ 5.20.0] - 2026-09-09
1133
1234### Added
0 commit comments