---
id: CVE-2026-81690
title: verify-usb before 1.4.9 Symlink Directory Traversal Code Execution
summary: >-
  openssl-encrypt (pip package) before 1.4.9 contains a symlink-following flaw
  in its verify-usb v2 added-file allowlist scan. The scan enumerated the drive
  with rglob(), which in CPython does not descend into symlinked directories and
  tre…
severity: high
cvss: 7.3
cvssVector: 'CVSS:3.1/AV:P/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:H'
cvssSource: cna
cwe:
  - CWE-59
vendor: jahlives
product: openssl_encrypt
affected:
  - openssl_encrypt < 1.4.9
ssvc:
  exploitation: none
  automatable: 'no'
  technicalImpact: partial
  timestamp: '2026-08-27T19:25:39.673939Z'
published: '2026-08-27'
updated: '2026-10-01'
sourceUpdated: '2026-10-01T15:21:23.408Z'
source: CVEORG
sourceUrl: 'https://www.cve.org/CVERecord?id=CVE-2026-81690'
references:
  - url: >-
      https://github.com/jahlives/openssl_encrypt/security/advisories/GHSA-hw7h-wqf5-6crx
    label: GitHub Security Advisory (GHSA-hw7h-wqf5-6crx)
  - url: >-
      https://www.vulncheck.com/advisories/verify-usb-before-1.4.9-symlink-directory-traversal-code-execution
    label: >-
      VulnCheck Advisory: verify-usb before 1.4.9 Symlink Directory Traversal
      Code Execution
tags:
  - cve.org
  - osv
  - pip
epss: 0.00706
epssPercentile: 0.53185
aliases:
  - PYSEC-2026-3796
  - GHSA-hw7h-wqf5-6crx
ecosystem: pip
patched:
  - openssl-encrypt 1.4.9
ingestedAt: '2026-09-03T19:32:12.153Z'
---

## Overview

openssl-encrypt (pip package) before 1.4.9 contains a symlink-following flaw in its verify-usb v2 added-file allowlist scan. The scan enumerated the drive with rglob(), which in CPython does not descend into symlinked directories and treats the symlink as an ordinary directory, while O_NOFOLLOW on the hash side binds only the final path component. An evil-maid attacker with physical access to the removable drive could replace a tool-tree directory with a symlink to a copy containing byte-identical files plus a planted __pycache__/*.pyc file (which CPython loads in preference to recompiling the clean .py). The planted file is never enumerated, added_files stays 0, and verify-usb reports PASSED, resulting in code execution when the victim runs the portable install. Fixed in 1.4.9 (affects both 1.4.x and 1.5.x lines).

## Affected

- `openssl_encrypt < 1.4.9`

## Remediation

Refer to the linked advisories for vendor-supplied fixes and affected version ranges.

## Package advisory (CVE-2026-81690)

Affected packages:

- `openssl-encrypt < 1.4.9`

Patched in:

- `openssl-encrypt 1.4.9`

Source: https://osv.dev/vulnerability/PYSEC-2026-3796
