virtualenv activate.fish ejecuta comandos a partir de una ruta o prompt con una barra invertida antes de una comilla
Impacto
FishActivator no define quote(), por lo que hereda ViaTemplateActivator.quote, que devuelve shlex.quote(string). Dicha función sigue las reglas de POSIX sh, donde una barra invertida dentro de comillas simples permanece como un carácter literal. Sin embargo, fish interpreta \' dentro de comillas simples como una comilla escapada y \\ como una barra invertida escapada. Por lo tanto, un valor con una barra invertida antes de una comilla finaliza el literal en un punto distinto al que shlex.quote definió, y fish expande la sustitución de comandos subsiguiente.
La ruta del entorno llega a set -gx VIRTUAL_ENV, y --prompt o VIRTUALENV_PROMPT llega a set -gx VIRTUAL_ENV_PROMPT. Para --prompt "x\'\$(touch PWNED)'\'", el archivo activate.fish generado contiene:
set -gx VIRTUAL_ENV_PROMPT 'x\'"'"'$(touch PWNED)'"'"'\'"'"''
source bin/activate.fish ejecuta touch PWNED, y fish no muestra ningún error. La misma carga útil como nombre de directorio se ejecuta a través de VIRTUAL_ENV. --prompt . toma el nombre del directorio actual, por lo que basta con ejecutar virtualenv dentro de un directorio nombrado por otra persona. Sin la barra invertida, la carga útil no ejecuta nada, y bajo bash tampoco ejecuta nada.
virtualenv genera activate.fish de forma predeterminada. Un atacante necesita influir en la ruta del entorno o en el prompt: mediante una tarea de CI o una herramienta envoltorio (wrapper) que transmita el nombre de una rama, proyecto o trabajo, o a través de un directorio en un repositorio clonado o archivo desempaquetado.
Este fallo afecta a todas las versiones hasta 21.14.1 que incluyan activate.fish. La corrección de GHSA-p58f-9548-mpm2 en 21.7.13 movió los marcadores de posición fuera de sus comillas, pero conservó shlex.quote.
Parches
Corregido en 21.14.2. activate.fish ahora escapa las barras invertidas y las comillas simples de la manera en que fish las interpreta, por lo que el ejemplo anterior no ejecuta nada y muestra el prompt tal cual se proporcionó. Corrección: https://github.com/pypa/virtualenv/commit/3bddeaf8d02c3ee7f576503efb082f8f494cfcab
Soluciones alternativas
No cree un entorno cuya ruta o prompt contenga una barra invertida, e inspeccione activate.fish antes de cargarlo (source) si no lo creó usted mismo.
Créditos
Kevin Stubbings (@Kwstubbs) de GitHub Security Lab reportó este problema.
Qué hacer
Actualice a la versión 21.14.2 o posterior. Consulte la corrección: https://github.com/pypa/virtualenv/commit/3bddeaf8d02c3ee7f576503efb082f8f494cfcab.
Como solución alternativa, evite crear entornos cuya ruta o prompt contenga una barra invertida y examine activate.fish antes de cargarlo (source) si no fue creado por usted.
Software afectado
Haz clic en una tecnología para ver todas sus vulnerabilidades.
| Plataforma | Paquete | Versiones vulnerables | Corregida en |
|---|---|---|---|
| Python (PyPI) | virtualenv | < 21.14.2 | 21.14.2 |
Referencias
- Vector CVSS
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H- Debilidad (CWE)
CWE-116, CWE-78- Plataforma
- Python (PyPI)
- Paquete
virtualenv- Publicada
- 21.10.2026
- Actualizado
- 21.10.2026 19:24
Fuentes y licencias · Editado o traducido por DockRay; se mantienen los derechos y las licencias de las fuentes.
OSV / GitHub Advisory Database - GHSA-c947-3pg5-gm8q - CC BY 4.0
Historial de vulnerabilidades: virtualenv
Todas las vulnerabilidades publicadas de este paquete (Python (PyPI)), de la más reciente a la más antigua. Muestra si es un fallo aislado o un paquete que hay que vigilar.
- Entradas en total
- 9
- Primera → última
- 12.2011 10.2026
- Sin corrección
- 0
- Explotada en ataques
- 0
Distribución por gravedad
- Alta 6
- Media 3
Divulgaciones por año
- 2017: 0
- 2018: 0
- 2019: 0
- 2020: 0
- 2021: 0
- 2022: 0
- 2023: 0
- 2024: 1
- 2025: 0
- 2026: 7
antes: 1
-
virtualenv activate.fish ejecuta comandos a partir de una ruta o prompt con una barra invertida antes de una comilla esta entrada
Identifica las vulnerabilidades de tu aplicación
Con la integración de DockRay y el inventario de software activado, DockRay compara las versiones notificadas de los componentes con las vulnerabilidades conocidas y avisa de las coincidencias confirmadas. La cobertura depende de la tecnología compatible y de los avisos disponibles.