CVE-2026-81690: openssl-encrypt symlink-following in verify-usb

CVE-2026-81690 · Severity: high · CVSS 7.3 · Published 2026-08-27

openssl-encrypt is a Python package that provides USB verification for portable tool installations. The verify-usb component failed to properly detect symlinks on removable drives, allowing an attacker with physical access to replace a legitimate directory with a symlink containing malicious code. When a victim runs the portable install after verification passes, the attacker's code executes instead of the legitimate tools.

Technologies: Jahlives Openssl Encrypt, openssl-encrypt (PyPI). Vendors: Jahlives, PyPI.

Quick answers

Is CVE-2026-81690 exploited in the wild?
No. Junglewise Threat Intelligence has no report of CVE-2026-81690 being exploited in the wild.
How severe is CVE-2026-81690?
High severity, with a CVSS score of 7.3, published 27 August 2026.
Which products and versions are affected?
Jahlives Openssl Encrypt before 1.4.9 (affects 1.4.x and 1.5.x lines); openssl-encrypt (PyPI) ECOSYSTEM:introduced=0,fixed=1.4.9.
Is there a fix for CVE-2026-81690?
Yes. openssl-encrypt (PyPI): upgrade to 1.4.9 or later. Junglewise finds every place you run it, drafts the upgrade and applies it once you approve.
How is CVE-2026-81690 attacked?
It is attacked with physical access, in a software library.
Am I affected by CVE-2026-81690?
Check whether you run Jahlives Openssl Encrypt or openssl-encrypt (PyPI) at an affected version. Junglewise does that check for you around the clock: connect your code, cloud and domains, and it matches new vulnerabilities like this one against what you actually run and tells you when one reaches you.

How to fix

  • openssl-encrypt (PyPI): upgrade to 1.4.9 or later
    pip install "openssl-encrypt>=1.4.9"

Technical details

The vulnerability is a symlink-following flaw (CWE-59) in the verify-usb v2 allowlist scan. The scan uses rglob() to enumerate files, which does not descend into symlinked directories, while the hash verification uses O_NOFOLLOW that only binds the final path component. An evil-maid attacker with physical access can replace a tool-tree directory with a symlink pointing to a copy containing byte-identical files plus a planted __pycache__/*.pyc file (which Python loads preferentially). The planted file remains unenumerated, added_files counter stays 0, and verify-usb incorrectly reports PASSED. The fix in 1.4.9 replaces rglob() with os.walk(followlinks=False) and flags any symlinked path component as tampering, causing legitimate installs without symlinks to pass and malicious symlink-based attacks to fail.

Affected products

  • jahlives openssl-encrypt before 1.4.9 (affects 1.4.x and 1.5.x lines)

Identifiers

  • CVE-2026-81690
  • PYSEC-2026-3796

Timeline

  • 2026-08-27: disclosed
  • 2026-08-12: patched: Version 1.4.9 released with fix

References

This page as Markdown. Free to reuse under CC BY 4.0 with a link back.