CriticalGHSA-rwgm-f83r-v3qjBIT-wp-cli-2021-29504CVE-2021-29504

Improper Certificate Validation in WP-CLI framework

Published 19 May 2021 · Updated 8 Jul 2026

Affected package

Affected
>=0.12.0 <2.5.0
Fixed in
2.5.0
Update to the fixed version for your release line, for example:composer require wp-cli/wp-cli:^2.5.0

Details

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:

Is GHSA-rwgm-f83r-v3qj in any of your client repos?

Checking one package by hand is fine. Checking it across forty client projects is not. NPMscan reads the lockfiles in every GitHub repo you pick, finds each project with an affected wp-cli/wp-cli, and gives you the command that fixes it.

References

Advisory data from OSV.dev (opens OSV.dev in a new tab), refreshed daily.