Improper Certificate Validation in WP-CLI framework
Impact
An improper error handling in HTTPS requests management in WP-CLI version 0.12.0 and later allows remote attackers able to intercept the communication to remotely disable the certificate verification on WP-CLI side, gaining full control over the communication content, including the ability to impersonate update servers and push malicious updates towards WordPress instances controlled by the vulnerable WP-CLI agent, or push malicious updates toward WP-CLI itself.
Patches
The vulnerability stems from the fact that the default behavior of WP_CLI\Utils\http_request() when encountering a TLS handshake error is to disable certificate validation and retry the same request.
The default behavior has been changed with version 2.5.0 of WP-CLI and the wp-cli/wp-cli framework (via https://github.com/wp-cli/wp-cli/pull/5523) so that the WP_CLI\Utils\http_request() method accepts an $insecure option that is false by default and consequently that a TLS handshake failure is a hard error by default. This new default is a breaking change and ripples through to all consumers of WP_CLI\Utils\http_request(), including those in separate WP-CLI bundled or third-party packages.
https://github.com/wp-cli/wp-cli/pull/5523 has also added an --insecure flag to the cli update command to counter this breaking change.
Subsequent PRs on the command repositories have added an --insecure flag to the appropriate commands on the following repositories to counter the breaking change:
- https://github.com/wp-cli/config-command/pull/128
- https://github.com/wp-cli/core-command/pull/186
- https://github.com/wp-cli/extension-command/pull/287
- https://github.com/wp-cli/checksum-command/pull/86
- https://github.com/wp-cli/package-command/pull/138
Workarounds
There is no direct workaround for the default insecure behavior of wp-cli/wp-cli versions before 2.5.0.
The workaround for dealing with the breaking change in the commands directly affected by the new secure default behavior is to add the --insecure flag to manually opt-in to the previous insecure behavior.
References
For more information
If you have any questions or comments about this advisory:
- Join the
#clichannel in the WordPress.org Slack to ask questions or provide feedback.
Affected software
Click a technology to see all vulnerabilities affecting it.
| Platform | Package | Vulnerable versions | Fixed in |
|---|---|---|---|
| Composer package | wp-cli/wp-cli | >= 0.12.0, < 2.5.0 | 2.5.0 |
References
- https://github.com/wp-cli/wp-cli/security/advisories/GHSA-rwgm-f83r-v3qj
- https://nvd.nist.gov/vuln/detail/CVE-2021-29504
- https://github.com/wp-cli/checksum-command/pull/86
- https://github.com/wp-cli/config-command/pull/128
- https://github.com/wp-cli/core-command/pull/186
- https://github.com/wp-cli/extension-command/pull/287
- https://github.com/wp-cli/package-command/pull/138
- https://github.com/wp-cli/wp-cli/pull/5523
- https://github.com/FriendsOfPHP/security-advisories/blob/master/wp-cli/wp-cli/CVE-2021-29504.yaml
- CVSS vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N- Weakness (CWE)
CWE-295- Platform
- Composer
- Package
wp-cli/wp-cli- Disclosed
- 19.05.2021
- Updated
- 11.10.2026 10:22
Sources and licenses
OSV / GitHub Advisory Database - GHSA-rwgm-f83r-v3qj - CC BY 4.0
Vulnerability history: wp-cli/wp-cli
All published vulnerabilities of this package (Composer package), newest first. Shows whether this is a one-off slip or a package that needs watching.
This is the only known vulnerability of this package.
Know which vulnerabilities affect your application
With the DockRay integration and software inventory enabled, DockRay checks reported component versions against known vulnerabilities and notifies you about confirmed matches. Coverage depends on the supported technology and available advisory data.