Repository navigation
chore(deps): update dependency virtualenv to v21.14.9 [security] - #1496
Open
renovate-bot wants to merge 1 commit into
Open
renovate-bot wants to merge 1 commit into
renovate-bot wants to merge 1 commit into
Conversation
Collaborator
|
/gcbrun |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note
This PR body was truncated due to platform limits.
This PR contains the following updates:
==21.14.7→==21.14.9virtualenv: Deletion recovery can change a symlink target's mode
CVE-2026-113724 / GHSA-43mp-35q3-x3fq
More information
Details
Summary
The deletion error handler obtains permission bits with lstat() but applies them through chmod(), which follows
symlinks. On an eligible unlink failure this can change permissions outside the destination.
Anthropic's OSS Scanner reported this as
ANT-2026-UK90QC27invirtualenv-20261015-005, received on 15 October 2026.Affected area
Permission recovery after a filesystem deletion error.
Attacker-controlled input
A deletion must fail on a symbolic-link entry and enter the permission-recovery branch. The invoking user must have
permission to change the target mode. This is conditional error handling, not the normal successful unlink path.
Affected code
The relevant 21.14.8 source is in
safe_delete().
Mechanism
safe_delete()asksshutil.rmtree()to retry a failed removal after adding owner-write permission. Its error handlercalls
os.lstat(path)for mode bits butos.chmod(path, ...)to apply them. For a symlink,lstatreads the link'smode while
chmodfollows the link. A link inside a read-only directory can therefore cause the target's mode to become0777before the retry fails. The target must be owned by the invoking user and initially not writable by that user;root does not reach this failure path.
Reproduction and evidence
The scanner packed a project containing a mode-
0555venv/bin/python/directory and a symlink inside it pointing tothe user's mode-
0400keys/deploy.pem. An unprivileged user unpacked it and ran both plainvirtualenv venvandvirtualenv --clear venv. Both commands exited withPermissionErrornaming the directory insidevenv, while thekey's mode changed from
0400to0777. A control archive with a writable directory completed normally and left thekey at
0400. The read-only mode survivestarorcp -a; a normal git clone does not preserve this setup.This changes permissions; it does not read the target or complete the virtualenv operation. Another account can use the
widened mode only if it can traverse the target's parent directories. The scanner dates the active error handler to
#3222, first released in 21.7.5. PR #3427 avoids POSIX mode changes on
deletion failure and handles Windows read-only entries without following reparse points.
Attack sequence
sequenceDiagram participant A as Prepared read-only venv tree participant V as safe_delete error handler participant L as Symlink in venv participant K as User's 0400 key A->>V: virtualenv venv or --clear venv V->>L: unlink fails in 0555 directory V->>L: lstat returns link mode 0777 V->>L: chmod follows symlink L->>K: target mode becomes 0777 V-->>A: retry fails with PermissionError Note over K: Other accounts can use new mode if parent paths are traversableReproducer files
The following files are from the scanner report for
ANT-2026-UK90QC27. They were tested against commita857a7823c73in the scanner image. The
reproentrypoint expects companion files under/tmp/repro.d; cases that change user IDsneed a disposable root-capable container. The last output line is
BUGwhen the reported behavior occurs. These filesare included as evidence and were not rerun for this advisory update.
reprorepro.d/make_project_archive.pyImpact
Permission recovery after a failed deletion can change an unrelated target's access bits. This requires the deletion
failure to occur on a link and the invoking user to have permission to change the target mode.
Severity: medium. CVSS 4.5,
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:L/I:L/A:L, assigned during maintainer review.Versions tested
The confirmed release is 21.14.8. The affected range records that release only; it does not establish the first affected
version or exclude earlier releases. Fixed in 21.14.9.
The fix leaves POSIX modes unchanged when deletion fails. Windows read-only recovery uses a native handle that
opens the entry itself without following reparse points and denies replacement until the attribute update finishes. It
rejects reparse points and clears only the read-only attribute. Concurrent replacement of parent directories remains
outside this protection.
Fix: PR #3427.
Known mitigation
Avoid recursively clearing destinations populated by another account. If cleanup fails, inspect the failing entry before
retrying with broader privileges.
Affected release
Credits
Reported by Anthropic's OSS Scanner as ANT-2026-UK90QC27.
Severity
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:L/I:L/A:LReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
virtualenv: Generated POSIX console launchers interpret destination paths as shell syntax
CVE-2026-113722 / GHSA-c978-59m8-c77v
More information
Details
Summary
A destination path supplied to virtualenv can be interpreted as shell syntax by a generated POSIX console launcher. The
app-data seeder and pip delegate launcher generation to distlib but supply the interpreter path in a form that does not
preserve it as literal data in the shell wrapper.
Affected area
POSIX console scripts generated by the app-data seeder or pip when the interpreter path requires a shell wrapper.
Windows executable launchers are not affected by this path.
Attacker-controlled input
An attacker must influence the environment destination passed to virtualenv, and the user must subsequently run a
generated launcher. The attacker does not need to modify an installed executable or control the user's app-data cache.
Affected code
The relevant 21.14.8 source is in
ScriptMakerCustom.
Mechanism
The app-data seeder passes the environment's interpreter path through
enquote_executable()to distlib'sScriptMaker.It adds double quotes for a path with a space but does not escape shell expansions inside those quotes. When the path
has a space or the shebang exceeds 127 bytes, distlib emits a
#!/bin/shwrapper with a line shaped like'''exec' "<path>" "$0" "$@". The shell expands$(...)and backticks in that path when the launcher is run. The samewrapper must also parse as Python, which exposes additional quote and backslash cases. Environment creation and
activation do not trigger the shell payload.
Reproduction and evidence
The scanner created three environments: a control under
my -touch PWNED- project, one undermy $(touch PWNED) project, and one under a path of more than 127 bytes ending in$(touch${IFS}PWNED). Each wascreated without producing
PWNED. Running the generatedbin/pip --versioncreatedPWNEDin both attack cases; thecontrol created none. The long-path case reached the shell wrapper without a space. This reproduces execution by the
generated launcher, with the user's privileges, rather than during seeding.
The report dates the app-data seeder's distlib launcher integration to #1579, first released in 20.0.2.
PR #3417 quotes the raw interpreter path for the POSIX wrapper and
repairs launchers written by the pip seeder. Pip's own distlib can write a vulnerable wrapper again during a later pip
install or upgrade; the proposed virtualenv fix does not change pip's vendored code. The maintainer-provided follow-up
review reports that later path separately.
Attack sequence
sequenceDiagram participant A as Destination supplier participant V as virtualenv seeder participant D as distlib ScriptMaker participant S as Generated bin/pip participant U as User A->>V: path contains $(touch PWNED) V->>D: pass interpreter path with incomplete shell quoting D->>S: write /bin/sh wrapper Note over V,S: no payload runs during creation or activation U->>S: pip --version S->>S: shell expands path and runs touch S-->>U: PWNED appears with user's privilegesReproducer files
The following files are from the scanner report for
ANT-2026-5DZVLGL1. They were tested against commita857a7823c73in the scanner image. The
reproentrypoint expects companion files under/tmp/repro.d; cases that change user IDsneed a disposable root-capable container. The last output line is
BUGwhen the reported behavior occurs. These filesare included as evidence and were not rerun for this advisory update.
reproFix scope and remaining exposure
PR #3417 changes launcher generation by the app-data seeder and repairs POSIX shell wrappers after pip seeding. The
pip-seeder repair uses the same quoting rule and updates the installed RECORD hashes and sizes. It does not modify pip's
vendored distlib.
A later independent pip installation or upgrade can replace a corrected launcher with an affected one. Existing
launchers are not repaired by upgrading virtualenv alone. Recreate environments with the corrected virtualenv to
regenerate them, and use trusted destination paths. Recreation does not protect launchers subsequently rewritten by pip.
The follow-up review reports reproduction through the previous pip seeder and after a pip upgrade; those results are
attributed to the reviewer.
Impact
Running an affected launcher can execute commands with the calling user's privileges. Classification: high, CVSS 7.8,
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H, following the project'sgenerated-script precedent. The vector
assumes attacker-controlled path data and a user invoking the resulting launcher. No prior victim privileges are
required; successful command execution can affect the user's data and processes.
Versions tested
The maintainer confirmed validation of the reported findings on release 21.14.8. The subsequent review
records reproduction on unfixed upstream/main; the affected launcher integration and dependency declarations are
unchanged from 21.14.8. The first affected release has not been established. Fixed in 21.14.9.
Known mitigation
Use an environment destination chosen by a trusted user. For older releases, avoid generating
environments at destinations derived from untrusted input.
Affected release
Credits
Reported by Anthropic's OSS Scanner as ANT-2026-5DZVLGL1.
Severity
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:HReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
virtualenv: Builtin creation follows linked environment directories
CVE-2026-113716 / GHSA-cw65-gx24-rc82
More information
Details
Summary
The builtin creator accepts existing directory symlinks through ensure_dir() and writes environment files through those
directories. This permits writes outside the requested destination.
Anthropic's OSS Scanner reported this as
ANT-2026-MUFJEG11invirtualenv-20261015-005, received on 15 October 2026.Affected area
Directory preparation before environment files are created.
Attacker-controlled input
Another account must be able to prepare linked entries below the chosen destination before creation. The invoking user
must have access to the linked destination. This does not require write access to the target itself under the other
account.
Affected code
The relevant 21.14.8 source is in
builtin creator,
ensure_dir().
Mechanism
The builtin creator calls
ensure_dir()forbin,lib, and package directories.ensure_dir()accepts an existingsymlink to a directory because
exists()follows it. Interpreter creation, seed installation, and activation-scriptgeneration then write through that parent link. A final-file check cannot prevent a write through a linked parent.
--clearremoves the planted tree first; ordinary creation over a prepared destination reaches it.Reproduction and evidence
The scanner's project tree contains
venv/bin -> ../../.local/binand a.pthfile in the environment's package tree.With the user's initially empty
~/.local/binfirst onPATH,virtualenv venvexited successfully and wrotepython*,pip*, andactivate*into~/.local/bin. The marker was absent immediately after creation; a laterpip --versionon the user'sPATHloaded the seeded environment and the planted.pthcode wrote the marker. Asecond case began with the
binlink resolving inside the environment; replacement of a planted package link duringseeding changed where it resolved, and writes again reached
~/.local/bin.The attacker must prepare entries in an existing destination. The
.pthcontent is already attacker-controlled andwould run if the user used that environment directly; the added effect is creation-time writing or replacement outside
the requested tree and an executable on the user's
PATHpointing at it. The scanner traces this default builtin pathto 20.0.0b1. PR #3429 replaces linked directory components before
creation. Concurrent parent replacement remains a separate case.
Attack sequence
sequenceDiagram participant A as Prepared destination participant V as Builtin creator participant L as venv/bin symlink participant H as ~/.local/bin participant U as User A->>L: point to ../../.local/bin V->>L: ensure_dir accepts existing directory link V->>H: write python, pip and activate files through link V-->>U: creation reports success U->>H: run pip found on PATH H->>A: interpreter loads planted .pth A-->>U: marker createdReproducer files
The following files are from the scanner report for
ANT-2026-MUFJEG11. They were tested against commita857a7823c73in the scanner image. The
reproentrypoint expects companion files under/tmp/repro.d; cases that change user IDsneed a disposable root-capable container. The last output line is
BUGwhen the reported behavior occurs. These filesare included as evidence and were not rerun for this advisory update.
reprorepro.d/checkout_with_bin_link.pyrepro.d/checkout_with_bin_link_staying_inside.pyImpact
Creation can place or replace environment files outside the selected tree. The written bytes are environment-creation
output; arbitrary attacker-selected file contents are not established.
Severity: medium. CVSS 4.5,
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:L/I:L/A:L, assigned during maintainer review.Versions tested
The confirmed release is 21.14.8. The affected range records that release only; it does not establish the first affected
version or exclude earlier releases. Fixed in 21.14.9.
The fix removes pre-existing symbolic links and Windows junctions along executable and library directory paths.
Each replacement is created immediately, and an existing entry must be a real directory. A warning names each replaced
link or junction. Directories can still be replaced after preparation; this does not protect against concurrent tree
replacement.
Fix: PR #3429.
Known mitigation
Create environments in fresh directories beneath a parent controlled only by their owner. Do not reuse trees prepared by
another account.
Affected release
Credits
Reported by Anthropic's OSS Scanner as ANT-2026-MUFJEG11.
Severity
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:L/I:L/A:LReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
virtualenv: Generated files can follow existing destination links
CVE-2026-113721 / GHSA-558c-9hv2-4prj
More information
Details
Summary
Generated activation files and pyvenv.cfg can follow existing links and write outside the requested environment. The
template writer tests exists() before unlinking, which misses dangling symlinks; the configuration writer opens the
existing path directly.
Anthropic's OSS Scanner reported this as
ANT-2026-XBEOCBS1invirtualenv-20261015-005, received on 15 October 2026.Affected area
Final file entries written during environment creation and seeding.
Attacker-controlled input
Another account must be able to prepare file links in the destination before creation. The invoking user must have write
permission at the linked target. The destination parent must remain controlled during creation; concurrent
parent-directory replacement is a separate concern.
Affected code
The relevant 21.14.8 source is in
template writer,
configuration writer.
Mechanism
ViaTemplateActivator._generate()removes an existing output only whenPath.exists()is true. A dangling symlinktherefore survives, and
write_bytes()creates its target outside the environment. Other generated files have relatedfinal-entry behavior.
PyEnvCfg.write()openspyvenv.cfgwithout first replacing an existing link; a symlink or hardlink there can overwrite an existing target. These paths require a prepared destination tree and the invoking user's
permission to write the linked target.
Reproduction and evidence
The scanner's project tree contains
venv/bin/activate -> ../../../.bash_aliasesand an executablevenv/bin/basename.Before creation, a new interactive bash does not create the marker. A plain
virtualenv venvwrites the activationscript through the dangling link, creating
~/.bash_aliasesas a regular file. Debian's stock.bashrcsources thatfile; the next interactive bash adds
venv/bintoPATHand the plantedbasenamewrites the marker. The reproducerchecks that the link remains,
~/.bash_aliasesappears, and the second shell executes the planted file. A separatemanual check links
pyvenv.cfgto~/.bashrcand observes the latter replaced with generated configuration text.The link lets creation write outside the requested environment. The attacker chooses the target path but the generated
bytes come from virtualenv. The executable in the example was already in the prepared tree; this finding is not
arbitrary code injection into an otherwise trusted destination. The scanner traces the template behavior to #1454, first
released in 20.0.0b1. PR #3431 replaces pre-existing output links and
uses exclusive creation for generated text. It does not make a destination safe if another account can replace parent
directories during creation.
Attack sequence
sequenceDiagram participant A as Prepared project tree participant V as virtualenv writer participant H as User home participant B as Next interactive bash A->>V: venv/bin/activate links to missing ~/.bash_aliases V->>V: Path.exists() follows link and returns false V->>H: write activation bytes through link H-->>B: ~/.bash_aliases now exists B->>H: .bashrc sources ~/.bash_aliases B->>A: PATH reaches planted venv/bin/basename A-->>B: marker created Note over V,H: pyvenv.cfg can also overwrite an existing linked targetReproducer files
The following files are from the scanner report for
ANT-2026-XBEOCBS1. They were tested against commita857a7823c73in the scanner image. The
reproentrypoint expects companion files under/tmp/repro.d; cases that change user IDsneed a disposable root-capable container. The last output line is
BUGwhen the reported behavior occurs. These filesare included as evidence and were not rerun for this advisory update.
reprorepro.d/fake_basename.shrepro.d/make_hostile_checkout.pyImpact
Creation can overwrite or create files outside the requested environment with the invoking user's permissions. File
contents are constrained by what virtualenv generates.
Severity: medium. CVSS 4.5,
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:L/I:L/A:L, assigned during maintainer review.Versions tested
The confirmed release is 21.14.8. The affected range records that release only; it does not establish the first affected
version or exclude earlier releases. Fixed in 21.14.9.
The fix replaces existing entries, including symbolic and hard links, and exclusively creates generated text
files. Before stdlib creation it replaces executable-directory symlinks and Windows junctions with real directories. It
then removes symbolic and hard links inside that directory, including interpreter executables and DLLs, and at the
configuration and ignore file paths. This also removes unrelated links directly in the executable directory. Final
seed-launcher links are replaced. Exclusive creation protects the final text-file open; delegated stdlib and distlib
writes still require a destination protected from concurrent replacement.
Fix: PR #3431.
Known mitigation
Use a fresh destination beneath an owner-controlled parent. Avoid creation over a tree populated by another account.
Affected release
Credits
Reported by Anthropic's OSS Scanner as ANT-2026-XBEOCBS1.
Severity
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:L/I:L/A:LReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
virtualenv: Seed replacement does not contain metadata deletion paths
CVE-2026-113719 / GHSA-hhxq-47xx-j5xx
More information
Details
Summary
The app-data seeder joins paths from existing distribution metadata to site-packages and deletes the resulting paths
without checking containment within the environment.
Anthropic's OSS Scanner reported this as
ANT-2026-SXOEHWP7invirtualenv-20261015-005, received on 15 October 2026.Affected area
Removal of a previously installed seed package.
Attacker-controlled input
An environment being reused must contain distribution metadata influenced by another account. The invoking user must
have deletion rights over the paths named by that metadata. Installing a new environment without existing package
metadata does not enter this cleanup path.
Affected code
The relevant 21.14.8 source is in
seed uninstall.
Mechanism
Before reinstalling a seed wheel,
PipInstall._uninstall_previous_version()accepts an existingpip-*.dist-infodirectory in the destination.
_uninstall_dist()reads itstop_level.txtandRECORD, joins each entry tosite-packages, and deletes the result. It does not check whether.., an absolute entry, or a linked parent takes thepath outside the environment. The default app-data seeder reaches this path when it reuses a tree containing
seed-package metadata;
--clearremoves that tree first.Reproduction and evidence
The scanner prepared a project with
.venv/lib/python3.14/site-packages/pip-1.0.dist-info/. Itstop_level.txtcontained
../../../../../Documents; itsRECORDnamed../../../../../notes.txt,,. The user's home initially heldDocuments/thesis/chapter1.txtandnotes.txt. Runningvirtualenv .venvexited successfully but removed both paths.A control tree with
top_level.txtset topipand a normalpip/__init__.pyRECORD entry left the home files inplace. The reproducer prints
BUGonly when the control files survive and both attack targets disappear.The deletion uses the invoking user's permissions and runs during creation, before any use of the environment. It
requires an existing destination that another account could populate; a fresh empty environment does not supply hostile
metadata. The report traces this cleanup to #2186, first released in 20.8.1.
PR #3428 checks each deletion path against the resolved environment root
and refuses to delete the root itself.
Attack sequence
sequenceDiagram participant A as Prepared .venv metadata participant V as App-data seeder participant P as site-packages participant H as User home A->>P: top_level.txt names ../../../../../Documents A->>P: RECORD names ../../../../../notes.txt V->>P: read pip-1.0.dist-info before reinstall P->>H: join entries without containment check V->>H: remove Documents and notes.txt V-->>A: virtualenv exits successfullyReproducer files
The following files are from the scanner report for
ANT-2026-SXOEHWP7. They were tested against commita857a7823c73in the scanner image. The
reproentrypoint expects companion files under/tmp/repro.d; cases that change user IDsneed a disposable root-capable container. The last output line is
BUGwhen the reported behavior occurs. These filesare included as evidence and were not rerun for this advisory update.
reprorepro.d/make_project_tree.pyImpact
Seed cleanup can delete files outside the environment or the environment root itself. The invoking user must have
deletion rights over those paths.
Severity: medium. CVSS 4.5,
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:L/I:L/A:L, assigned during maintainer review.Versions tested
The confirmed release is 21.14.8. The affected range records that release only; it does not establish the first affected
version or exclude earlier releases. Fixed in 21.14.9.
The fix skips cleanup paths outside the resolved environment root, and the root itself, with a warning. Final
links are removed without following their targets; parent links participate in containment checks.
Fix: PR #3428.
Known mitigation
Recreate environments from a trusted empty destination rather than reseeding a tree with untrusted installed metadata.
Affected release
Credits
Reported by Anthropic's OSS Scanner as ANT-2026-SXOEHWP7.
Severity
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:L/I:L/A:LReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
virtualenv: Venv configuration readback can reinterpret path boundaries
CVE-2026-113715 / GHSA-qmx5-4p3x-wvqf
More information
Details
Summary
The venv creator reads the standard library's generated pyvenv.cfg with splitlines() and merges all resulting keys over
virtualenv's configuration. Line-boundary characters from destination data can therefore become configuration structure
before output sanitization.
Anthropic's OSS Scanner reported this as
ANT-2026-6ZQHJ6VIinvirtualenv-20261015-005, received on 15 October 2026.Affected area
Configuration readback by the stdlib venv creator.
Attacker-controlled input
An untrusted caller must influence the destination pathname passed to the venv creator. That pathname must contain a
character that Python treats as a line boundary. The builtin creator follows a different configuration-writing path.
Affected code
The relevant 21.14.8 source is in
venv readback,
configuration parser.
Mechanism
With
--creator venv, virtualenv asks the standard library to create an environment, reads itspyvenv.cfgwithstr.splitlines(), and merges the parsed keys over virtualenv's chosen settings. CPython writes the destination into acommand =value without escaping every character thatsplitlines()recognizes as a line boundary. A destinationcontaining U+2028, for example, can therefore supply new
homeandinclude-system-site-packageskeys during readback.Virtualenv writes those keys as real configuration lines. The builtin creator does not use this readback path.
Reproduction and evidence
The scanner used one destination value with U+2028 between
home = /attacker/chosen,include-system-site-packages = true, and an absorbingx =key. Apython -m venv --without-pipcontrol kept thevalue inside its
commandline and reported the base interpreter'ssys._home.virtualenv --creator venv --no-seedon the same value wrote separate injected configuration lines and its interpreter reported
sys._home = /attacker/chosen. The path did not require a literal newline byte. The control establishes that the extrakeys came from virtualenv's readback, not from the standard library's initial file alone.
The altered
homecan change which standard-library files the interpreter loads if an attacker also controls thatlocation;
include-system-site-packages = trueweakens environment isolation. Choosing the venv creator is required,either explicitly or through a rare fallback. The report traces the readback to the 20.x rewrite, first released in
20.0.0b1. PR #3426 rejects line-boundary characters before creation and
rebuilds the final configuration from selected settings.
Attack sequence
sequenceDiagram participant A as Destination supplier participant S as stdlib venv participant V as virtualenv readback participant C as Final pyvenv.cfg participant P as Environment Python A->>S: path contains U+2028 and home = /attacker/chosen S->>C: write path inside command value V->>C: read with splitlines() V->>V: parse suffix as separate keys V->>C: rewrite home and include-system-site-packages P->>C: read injected keys on startup C-->>P: sys._home changes and isolation is disabledReproducer files
The following files are from the scanner report for
ANT-2026-6ZQHJ6VI. They were tested against commita857a7823c73in the scanner image. The
reproentrypoint expects companion files under/tmp/repro.d; cases that change user IDsneed a disposable root-capable container. The last output line is
BUGwhen the reported behavior occurs. These filesare included as evidence and were not rerun for this advisory update.
reproImpact
Destination path data can change configuration boundaries and therefore environment settings. The effect depends on
which settings change and how the environment is subsequently used.
Severity: low.
Versions tested
The confirmed release is 21.14.8. The affected range records that release only; it does not establish the first affected
version or exclude earlier releases. Fixed in 21.14.9.
The fix rejects line boundaries in the supplied destination before filesystem access and checks the resolved
path again before invoking stdlib venv. The final configuration is rebuilt from the selected interpreter and virtualenv
options, without merging the intermediate stdlib file or its vendor-specific keys. Ordinary destination paths remain
supported.
Fix: PR #3426.
Known mitigation
Reject line-boundary characters in externally supplied destination paths, or use the builtin creator where supported.
Affected release
Credits
Reported by Anthropic's OSS Scanner as ANT-2026-6ZQHJ6VI.
Severity
CVSS:4.0/AV:L/AC:H/AT:P/PR:N/UI:P/VC:L/VI:L/VA:L/SC:N/SI:N/SA:NReferences
This data is provided by the [Gi