GHSA-c947-3pg5-gm8q on Cyberus Linux 26.05
Aliases: GHSA-c947-3pg5-gm8q, CVE-2026-113732
Packages: virtualenv
Status: Plausible
Advisory Information
Impact
FishActivatordefines noquote(), so it inheritsViaTemplateActivator.quote, which returnsshlex.quote(string). That function follows POSIXshrules, where a backslash inside single quotes stays a literal character. fish reads\'inside single quotes as an escaped quote and\\as an escaped backslash. A value with a backslash before a quote therefore ends the literal somewhere other than whereshlex.quoteput the end, and fish expands the command substitution that follows.The environment path reaches
set -gx VIRTUAL_ENV, and--promptorVIRTUALENV_PROMPTreachesset -gx VIRTUAL_ENV_PROMPT. For--prompt "x\'\$(touch PWNED)'\'", the generatedactivate.fishcontains:set -gx VIRTUAL_ENV_PROMPT 'x\'"'"'$(touch PWNED)'"'"'\'"'"''
source bin/activate.fishrunstouch PWNED, and fish prints no error. The same payload as a directory name runs throughVIRTUAL_ENV.--prompt .takes the current directory's name, so running virtualenv inside a directory someone else named is enough. Without the backslash the payload runs nothing, and under bash it runs nothing either.virtualenv generates
activate.fishby default. An attacker needs to influence the environment path or prompt: a CI job or wrapper tool that passes a branch, project or job name through, or a directory in a cloned repository or unpacked archive.The bug affects every release up to 21.14.1 that ships
activate.fish. The GHSA-p58f-9548-mpm2 fix in 21.7.13 moved the placeholders outside their quotes but keptshlex.quote.Patches
Fixed in 21.14.2.
activate.fishnow escapes backslashes and single quotes the way fish reads them, so the example above runs nothing and shows the prompt as given. Fix: https://github.com/pypa/virtualenv/commit/3bddeaf8d02c3ee7f576503efb082f8f494cfcabWorkarounds
Do not create an environment whose path or prompt contains a backslash, and inspect
activate.fishbefore you source one you did not create.Credits
Kevin Stubbings (@Kwstubbs) of GitHub Security Lab reported this issue.
Updates
2026-10-05 18:07 CEST
Metadata changes:
- Status for package
virtualenv: “Plausible”
Comment:
Affects
fish(shell) users.
(Amended on: 2026-10-05 18:09 CEST)
2026-10-05 18:05 CEST
Metadata changes:
- Status for package
virtualenv: “New”