Executive brief
openssl_encrypt is a CLI tool for encryption and cryptographic key management. Versions before 1.4.9 use a flawed denylist to verify plugin signatures, allowing attackers to place unsigned malicious plugins in documented installation directories. When the tool runs (during list-plugins, encrypt, or decryption operations), it executes these malicious plugins with access to passwords, cryptographic keys, and plaintext data.
Technical details
The vulnerability is an improper cryptographic signature verification (CWE-347) in the _is_builtin_plugin function. The function uses a denylist approach, treating all files under the plugins/ directory as trusted built-ins except three specific subdirectories (user, community, official). This allows top-level plugins/*.py files and any unknown subdirectories to bypass signature verification, AST scanning, and TOCTOU hash pinning. The documented plugin installation path (plugins/ top-level) inadvertently bypassed the signature enforcement policy. An attacker can place an unsigned malicious plugin in the plugins/ directory (or any new subdirectory) and achieve arbitrary code execution when the CLI process handles encryption/decryption operations or lists plugins. Fixed in version 1.4.9 by switching to an allowlist model that only trusts known shipped built-in plugins; all user and third-party plugins now undergo full verification gates.
Affected products
- openssl_encrypt openssl_encrypt before 1.4.9
Timeline
- 2026-08-12: disclosed: GitHub Security Advisory GHSA-wxx9-p55f-wm34 published
- 2026-08-27: advisory: CVE-2026-81701 assigned and published on NVD
- 2026-08-27: patched: Patch released in version 1.4.9 with allowlist-based plugin verification