{"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","slug":"CVE-2026-81690","body":"## Overview\n\nopenssl-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).\n\n## Affected\n\n- `openssl_encrypt < 1.4.9`\n\n## Remediation\n\nRefer to the linked advisories for vendor-supplied fixes and affected version ranges.\n\n## Package advisory (CVE-2026-81690)\n\nAffected packages:\n\n- `openssl-encrypt < 1.4.9`\n\nPatched in:\n\n- `openssl-encrypt 1.4.9`\n\nSource: https://osv.dev/vulnerability/PYSEC-2026-3796","depth":"twilight","depthScore":40,"depthScoreParts":{"impact":40.2,"likelihood":0.1,"exploitation":0,"ransomware":0},"changes":[{"seq":214413,"id":"CVE-2026-81690","ts":1790869816120,"field":"cvss","old":null,"new":"7.3"},{"seq":214412,"id":"CVE-2026-81690","ts":1790869816120,"field":"severity","old":"none","new":"high"}]}