CVE-2026-109965: Python Path Containment Accept Decision Without Symlink Resolution

A path-containment (allow) decision is computed purely lexically: a candidate path is compared against a root directory with os.path.commonpath([ROOT, PATH]) == ROOT (any operand order, root compared directly or via str(...)), while the deciding function never resolves symlinks - no os.path.realpath/realpath, no Path.resolve, and no symlink-escape guard such

Provally CuratedPublic repositoryMediumMedium confidenceVerifiedApache-2.0Python
greprules fetch cve-2026-109965-python-path-containment-accept-decision-without-symlink-resolution --engine opengrep

Description

A path-containment (allow) decision is computed purely lexically: a candidate path is compared against a root directory with os.path.commonpath([ROOT, PATH]) == ROOT (any operand order, root compared directly or via str(...)), while the deciding function never resolves symlinks - no os.path.realpath/realpath, no Path.resolve, and no symlink-escape guard such