Skip to main content

openssl-encrypt EUVDEUVD-2026-67046

| CVE-2026-81690 HIGH
Improper Link Resolution Before File Access (CWE-59)
2026-08-27 VulnCheck GHSA-vcf6-hg34-vx9w
8.7
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Recon
    Gain physical access to target USB drive
  2. Delivery
    Replace tool-tree directory with crafted symlink
  3. Exploit
    Plant malicious __pycache__/*.pyc alongside byte-identical .py files
  4. Install
    Return drive to victim undetected
  5. C2
    Victim runs verify-usb, rglob() misses planted .pyc, reports PASSED
  6. Execute
    CPython loads malicious bytecode on install launch
  7. Impact
    Arbitrary code executes in victim user context

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Symlink resolution safety
Exploitation Conditions

The victim must be running openssl-encrypt with the verify-usb v2 feature active against a removable drive before executing the portable install. The attacker must have had prior physical access to the specific USB drive to plant the malicious symlink and __pycache__/*.pyc file - remote exploitation is not possible. Exploitation is further limited by: (1) physical access window - the attacker must handle the drive before victim use; (2) mandatory victim interaction - the victim must run the portable install after verification completes; (3) feature-specific scope - only deployments using verify-usb on removable media are exposed; (4) package specificity - only software in the tool-tree that CPython can load as bytecode is a viable payload vehicle. The supplied CVSS vector (AV:N/PR:N/UI:N) contradicts all of these conditions and must not be used for access-control or prioritization decisions.

Impact

The supplied CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N/VC:H) is materially inconsistent with the vulnerability description, which describes a physical evil-maid attack requiring the attacker to handle the USB drive before the victim uses it - security teams must not rely on this vector for triage and should apply the independently assessed vector (AV:P) instead. No EPSS score was provided, and CISA KEV status is absent, indicating no confirmed active exploitation. The technical impact upon successful exploitation is severe - arbitrary code execution in the victim's user context - but real-world risk is substantially constrained by the physical access prerequisite, the requirement for victim interaction, the niche deployment footprint of this package, and the targeted nature of the evil-maid scenario. Organizations using openssl-encrypt's verify-usb feature on removable media for supply-chain or field-deployment workflows represent the meaningful risk population; all others have negligible exposure.

Exploit ScenarioDerived

An attacker who briefly gains physical access to a USB drive - for example, during shipping, at an unattended workstation, or via insider access - replaces a tool-tree directory with a symlink pointing to an attacker-controlled directory tree containing the same byte-identical .py files plus a crafted __pycache__/*.pyc bytecode file. When the victim later retrieves the drive, runs verify-usb, sees PASSED, and launches the portable install, CPython silently loads the malicious .pyc in preference to the clean source, executing attacker-supplied code in the victim's user context. No public POC has been identified at time of analysis.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.5% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Aug 27, 2026

Symlink-following in the openssl-encrypt pip package (jahlives/openssl_encrypt) before 1.4.9 allows an evil-maid attacker with physical access to a target USB drive to bypass the verify-usb v2 integrity check and achieve code execution on the victim's machine. The attacker replaces a tool-tree directory with a symlink to a crafted copy that includes byte-identical visible source files and a planted __pycache__/*.pyc compiled bytecode file; CPython's rglob() does not enumerate symlinked directory contents, so the planted file is never counted, verify-usb reports PASSED, and the malicious bytecode executes when the victim launches the portable install. No public exploit has been identified at time of analysis, and the attack is gated behind physical drive access and victim interaction.

RemediationAI

Upgrade openssl-encrypt to version 1.4.9 or later, which resolves the symlink-following flaw in the verify-usb scan; this is confirmed as the vendor-released fix per the advisory at https://github.com/jahlives/openssl_encrypt/security/advisories/GHSA-hw7h-wqf5-6crx. If an immediate upgrade is not feasible, disable the verify-usb feature and perform USB drive integrity verification through an out-of-band mechanism such as GPG-signed manifests validated on a separate trusted system - note this trades away the convenience of the integrated check. The most effective compensating control for the evil-maid vector is physical custody control: ensuring USB drives used with portable installs are never left unattended or in untrusted hands eliminates the attack entirely without any software change.

Affected VersionsENISA

openssl_encrypt 0 <1.4.9

Affected Packages

pypi openssl-encrypt fix: 1.4.9

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in pypi

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The root cause is CWE-59 (Improper Link Resolution Before File Access), manifesting as an asymmetry between two components of the verify-usb v2 scan in openssl-encrypt. The enumeration path uses Python's pathlib rglob(), which in CPython yields a symlinked directory as a single entry but does not recurse into it, so contents of a symlink-replaced directory are invisible to the file-count logic (added_files). The hashing path uses O_NOFOLLOW, but this flag only prevents following a symlink in the final path component - it does not catch a symlink substituted at the directory level earlier in the path. CPython's bytecode caching compounds the flaw: .pyc files under __pycache__/ are loaded in preference to recompiling .py source files, so an attacker who plants a malicious .pyc alongside legitimate .py files achieves code execution without altering any file that the verifier actually inspects. The affected software is identified by CPE cpe:2.3:a:jahlives:openssl_encrypt:*:*:*:*:*:*:*:*, covering all pre-1.4.9 versions across the 1.4.x and 1.5.x lines.

Know when OpenSSL gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (VulnCheck) PRIMARY 8.7 HIGH
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
vuln.today AI 7.3 HIGH

Physical drive access is mandatory for the evil-maid attack, victim must run the install (UI:R), and arbitrary code runs in the victim's environment (scope change).

3.1 AV:P/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H
4.0 AV:P/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
None
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Aug 27, 2026 - 18:02 EUVD
CVE Published
Aug 27, 2026 - 14:50 cve.org
HIGH 8.7

DescriptionCVE.org

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).

Executive ViewAI

Why It Matters

The openssl-encrypt pip package contains a symlink-following vulnerability that bypasses verify-usb v2 integrity checks on portable USB installations, allowing attackers with physical drive access to execute arbitrary code. Organizations using this tool for USB security verification should immediately assess exposure and implement alternative controls, as the vulnerability undermines a critical trust checkpoint in portable deployment workflows.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations include: deploy alternative file integrity verification tools that do not follow symlinks, enforce strict physical access controls on USB devices and infrastructure, disable or remove portable installation capabilities where business requirements permit, and implement application allow-listing to prevent unauthorized code execution on target systems.

Threat Intelligence Overview

EPSS Score
0.5%
Top 60% exploitable
Prevalence
Rare
obscure pip package, niche removable-media verify use case
Data Quality
6 sources
Confidence: High

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.5%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Partial

Priority Score

44
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +44
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.

CVE-2014-0160 HIGH POC
7.5 Apr 07

The (1) TLS and (2) DTLS implementations in OpenSSL 1.0.1 before 1.0.1g do not properly handle Heartbeat Extension packe

CVE-2021-3711 CRITICAL POC
9.8 Aug 24

In order to decrypt SM2 encrypted data an application is expected to call the API function EVP_PKEY_decrypt(). Rated cri

CVE-2014-0195 MEDIUM POC
6.8 Jun 05

The dtls1_reassemble_fragment function in d1_both.c in OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0

CVE-2014-0224 HIGH POC
7.4 Jun 05

OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph

CVE-2016-0800 MEDIUM POC
5.9 Mar 01

The SSLv2 protocol, as used in OpenSSL before 1.0.1s and 1.0.2 before 1.0.2g and other products, requires a server to se

CVE-2015-0204 MEDIUM POC
4.3 Jan 09

The ssl3_get_key_exchange function in s3_clnt.c in OpenSSL before 0.9.8zd, 1.0.0 before 1.0.0p, and 1.0.1 before 1.0.1k

CVE-2022-2068 HIGH
7.3 Jun 21

In addition to the c_rehash shell command injection identified in CVE-2022-1292, further circumstances where the c_rehas

CVE-2015-4000 LOW POC
3.7 May 21

The TLS protocol 1.2 and earlier, when a DHE_EXPORT ciphersuite is enabled on a server but not on a client, does not pro

CVE-2014-3566 LOW POC
3.4 Oct 15

The SSL protocol 3.0, as used in OpenSSL through 1.0.1i and other products, uses nondeterministic CBC padding, which mak

CVE-2016-2107 MEDIUM POC
5.9 May 05

The AES-NI implementation in OpenSSL before 1.0.1t and 1.0.2 before 1.0.2h does not consider memory allocation during a

CVE-2015-1793 MEDIUM POC
6.5 Jul 09

The X509_verify_cert function in crypto/x509/x509_vfy.c in OpenSSL 1.0.1n, 1.0.1o, 1.0.2b, and 1.0.2c does not properly

CVE-2022-3602 HIGH
7.5 Nov 01

A buffer overrun can be triggered in X.509 certificate verification, specifically in name constraint checking. Rated hig

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy