
Escáner de seguridad para archivos de modelos de IA/ML. Detecta código malicioso, puertas traseras y vulnerabilidades antes del despliegue
Asegura tus modelos de IA antes del despliegue. Escáner estático que detecta código malicioso, posibles indicadores de puerta trasera y vulnerabilidades de seguridad en archivos de modelos de ML — sin cargarlos ni ejecutarlos nunca.
Documentación completa | Ejemplos de uso | Formatos admitidos
Los modelos se descargan de registros no confiables, pasan por CI y terminan ejecutándose en producción. Las herramientas SAST tradicionales no examinan los opcodes de pickle, los diseños de grupos HDF5, los grafos proto de ONNX ni las firmas de TensorFlow SavedModel; ModelAudit sí lo hace:
Herramientas comparables: picklescan (solo pickle, basado en Python), fickling (solo pickle, basado en AST), modelscan (subconjunto de pickle + TensorFlow + Keras). ModelAudit tiene una cobertura más amplia e incluye un motor pickle nativo en Rust a través de su paquete complementario modelaudit-picklescan.
Requiere Python 3.10-3.13```bash pip install "modelaudit[all]"
modelaudit model.pkl modelaudit ./models/
modelaudit model.pkl --format json --output results.json
No se proporcionó contenido para traducir en esta entrada.```
$ modelaudit suspicious_model.pkl
Files scanned: 1 | Issues found: 2 critical, 1 warning
1. suspicious_model.pkl (pos 28): [CRITICAL] Malicious code execution attempt
Why: Contains os.system() call that could run arbitrary commands
2. suspicious_model.pkl (pos 52): [WARNING] Dangerous pickle deserialization
Why: Could execute code when the model loads
ModelAudit incluye 45 escáneres registrados que cubren formatos de modelos, archivos y configuración:
Además, incluye escáneres para ZIP, TAR, 7-Zip, capas OCI, plantillas Jinja2, metadatos JSON/YAML, manifiestos, tarjetas de modelo, archivos de texto y reconocimiento de RAR. Los archivos RAR se notifican como no compatibles/cerrados ante fallos en lugar de omitirse.
Los protobufs de TensorFlow SavedModel y MetaGraph estructuralmente válidos también se reconocen cuando se renombran con sufijos que no son de modelo.
Los modelos CoreML también se pueden reconocer cuando se renombran, y la cobertura incompleta se notifica explícitamente.
Los archivos SafeTensors con estructura de tamaño excesivo pero plausible se conservan para un análisis acotado y no concluyente bajo sufijos de otro modo no reclamados, como .jpg.
Los checkpoints MessagePack de Flax/JAX estructuralmente plausibles también se reconocen cuando se renombran con sufijos que no son de modelo; las estructuras renombradas que no se pueden clasificar por completo se notifican como cobertura incompleta.
Los metadatos estructurados de checkpoint JSON de JAX/Orbax también se reconocen cuando se renombran; los candidatos ambiguos de tamaño excesivo se notifican como cobertura incompleta; los patrones de seguridad observables en el prefijo inspeccionado acotado aún pueden notificarse de forma conservadora.
Ver documentación completa de formatos
Escanea modelos directamente desde registros remotos y almacenamiento en la nube:```bash
modelaudit https://huggingface.co/gpt2 modelaudit hf://microsoft/DialoGPT-medium
modelaudit s3://bucket/model.pt modelaudit gs://bucket/models/
modelaudit models:/MyModel/Production
modelaudit https://company.jfrog.io/artifactory/repo/model.pt modelaudit https://company.jfrog.io/artifactory/repo/models/
modelaudit model.dvc
### Variables de entorno de autenticación
- `HF_TOKEN` para repositorios privados de Hugging Face
- `AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY` (y opcional `AWS_SESSION_TOKEN`) para S3
- `GOOGLE_APPLICATION_CREDENTIALS` para GCS
- `MLFLOW_TRACKING_URI` para acceso al registro de MLflow
- `MODELAUDIT_MLFLOW_ALLOWED_ARTIFACT_URIS` para raíces de artefactos MLflow no locales (prefijos de URI separados por comas)
- Usa raíces de backend concretas como `s3://bucket/prefix`; se rechazan las URIs lógicas `models:/` o `runs:/` y las rutas remotas con codificación porcentual.
- `JFROG_API_TOKEN` o `JFROG_ACCESS_TOKEN` para JFrog Artifactory
- `MODELAUDIT_JFROG_ALLOWED_HOSTS` para nombres de host personalizados de JFrog separados por comas que pueden recibir credenciales
- `MODELAUDIT_JFROG_ALLOWED_REDIRECT_HOSTS` para nombres de host de redirección externos separados por comas que pueden descargarse sin credenciales
- Almacena las credenciales en variables de entorno o en un administrador de secretos, y nunca confirmes tokens/claves.
## Instalación```bash
# Broad scanner coverage (recommended; excludes the TensorFlow runtime and platform-specific TensorRT)
pip install "modelaudit[all]"
# Core only (static scanners, pickle, NumPy, archives, manifests, metadata)
pip install modelaudit
# Specific frameworks (TensorFlow installs on Python 3.11-3.12; ONNX installs on Python 3.10-3.12)
pip install "modelaudit[tensorflow,pytorch,h5,onnx,safetensors]"
# CI/CD environments
pip install "modelaudit[all-ci]"
# On Python 3.11-3.12, add TensorFlow only when you need runtime-dependent checkpoint or weight analysis
pip install "modelaudit[all,tensorflow]"
# Docker
docker run --rm -v "$(pwd)":/app ghcr.io/promptfoo/modelaudit:latest model.pkl
El extra de ONNX, incluida la parte de ONNX de modelaudit[all], está empaquetado para Python 3.10-3.12.
Los extras que contienen PyTorch requieren Python 3.10-3.12 o CPython 3.13 estándar (con GIL habilitado); las ruedas de PyTorch 2.13 parcheadas
no admiten CPython 3.13t sin GIL. Use CPython estándar, ya que el escáner nativo de pickle de ModelAudit tampoco
admite CPython 3.13t. En Apple Silicon, los extras que contienen PyTorch requieren macOS 14 o posterior porque las ruedas
apuntan a macosx_14_0_arm64; la instalación solo con el núcleo sigue disponible para el escaneo estático en macOS 11-13.
Comandos principales:```bash modelaudit [PATHS...] # Default scan command modelaudit scan [OPTIONS] PATHS... # Explicit scan command modelaudit scan --list-scanners # List scanner IDs for targeted scans modelaudit metadata [OPTIONS] PATH # Extract model metadata safely (no deserialization by default) modelaudit doctor [--show-failed] # Diagnose scanner/dependency availability modelaudit debug [--json] [--verbose] # Environment and configuration diagnostics modelaudit cache [stats|clear|cleanup] [OPTIONS]
Opciones de escaneo comunes:```text
--format {text,json,sarif} Output format (default: auto-detected)
--output FILE Write results to file
--strict Fail on warnings, scan all file types, strict license validation
--sbom FILE Generate CycloneDX SBOM
--stream Process files one-by-one; remote downloads are deleted after scanning
--assume-shard-family Treat explicitly listed cross-directory shards as one model family
--max-size SIZE Size limit (e.g., 10GB)
--timeout SECONDS Override scan timeout
--dry-run Preview what would be scanned
--verbose / --quiet Control output detail
--blacklist PATTERN Additional patterns to flag
--no-cache Disable result caching
--cache-dir DIR Set cache directory for downloads and scan results
--progress Force progress display
--scanners LIST Only run selected scanners (IDs/classes; comma-separated or repeated)
--exclude-scanner NAME Exclude a scanner from the active set (comma-separated or repeated)
--list-scanners List scanner IDs, class names, extensions, and dependencies
Selección de escáner dirigido:```bash
modelaudit scan --list-scanners modelaudit scan --list-scanners --format json
modelaudit scan ./models --scanners pickle,tf_savedmodel modelaudit scan ./model.pkl --scanners PickleScanner
modelaudit scan ./models --exclude-scanner weight_distribution
modelaudit scan ./archive.zip --scanners zip,pickle
`--scanners` parte de una lista de permitidos explícita. `--exclude-scanner` resta escáneres de esa lista de permitidos o del conjunto de escáneres predeterminado. La selección de escáneres se refleja en la salida JSON bajo `scanner_selection`.
Para carpetas remotas, ModelAudit restringe las descargas según las extensiones de escáner seleccionadas cuando es seguro. El enrutamiento de envoltorios renombrados basado en contenido se aplica después de la adquisición; escanee una URL de archivo directa cuando los nombres de archivo del repositorio puedan ser intencionalmente engañosos.
## Extracción de metadatos```bash
# Human-readable summary (safe default: no model deserialization)
modelaudit metadata model.safetensors
# Machine-readable output
modelaudit metadata ./models --format json --output metadata.json
# Focus only on security-relevant metadata fields
modelaudit metadata model.onnx --security-only
--trust-loaders habilita los cargadores de metadatos del escáner que pueden deserializar contenido del modelo. Úselo únicamente en artefactos de confianza en entornos aislados.
0: No se detectaron problemas de seguridad1: Se detectaron problemas de seguridad2: Errores de escaneoModelAudit incluye telemetría para la fiabilidad del producto y el análisis de uso.
CI=true o IS_TESTING=true, y en instalaciones de desarrollo editable a menos que MODELAUDIT_TELEMETRY_DEV=1. Los eventos enviados desde otros proveedores de CI (TeamCity, CodeBuild, Bitbucket Pipelines, Jenkins) se etiquetan con isRunningInCi=true para poder filtrarse posteriormente.~/.promptfoo/promptfoo.yaml para la correlación entre herramientas con Promptfoo, y cada sesión de telemetría utiliza un nuevo identificador de sesión. Los IDs existentes de ~/.modelaudit/user_config.json se migran en la primera ejecución tras la actualización. Un valor de correo electrónico heredado en ese archivo, si está presente, puede adjuntarse al perfil de usuario de análisis.Para excluirse explícitamente, use cualquiera de estas variables de entorno:```bash export PROMPTFOO_DISABLE_TELEMETRY=1
export NO_ANALYTICS=1
Para optar durante instalaciones editables/de desarrollo:```bash
export MODELAUDIT_TELEMETRY_DEV=1
modelaudit model.pkl --format json --output results.json
modelaudit model.pkl --format sarif --output results.sarif
## Solución de problemas
- Ejecuta `modelaudit doctor --show-failed` para listar los escáneres no disponibles y las dependencias opcionales faltantes.
- Ejecuta `modelaudit debug --json` para recopilar diagnósticos de entorno/configuración para informes de errores.
- Usa `modelaudit cache cleanup --max-age 30` para eliminar entradas de caché obsoletas de forma segura.
- Si `pip` instala una versión anterior, verifica que Python sea compatible (`python --version`; ModelAudit admite Python 3.10-3.13).
- Para obtener más ayuda para solucionar problemas y orientación sobre autenticación en la nube, consulta:
- https://www.promptfoo.dev/docs/model-audit/
- https://www.promptfoo.dev/docs/model-audit/usage/
## Documentación
- **[Documentación completa](https://www.promptfoo.dev/docs/model-audit/)** — configuración, ajustes y uso avanzado
- **[Ejemplos de uso](https://www.promptfoo.dev/docs/model-audit/usage/)** — integración con CI/CD, escaneo remoto, generación de SBOM
- **[Formatos admitidos](https://www.promptfoo.dev/docs/model-audit/scanners/)** — documentación detallada de los escáneres
- **[Política de soporte](https://github.com/promptfoo/modelaudit/blob/main/SUPPORT.md)** — versiones compatibles de Python/SO y política de mantenimiento
- **[Modelo de seguridad y limitaciones](https://github.com/promptfoo/modelaudit/blob/main/docs/user/security-model.md)** — qué garantiza ModelAudit y qué no
- **[Matriz de compatibilidad](https://github.com/promptfoo/modelaudit/blob/main/docs/user/compatibility-matrix.md)** — formatos de archivo frente a dependencias opcionales
- **[Selección de escáneres](https://github.com/promptfoo/modelaudit/blob/main/docs/user/scanner-selection.md)** — listas permitidas y exclusiones específicas de escáneres
- **[Guía de extracción de metadatos](https://github.com/promptfoo/modelaudit/blob/main/docs/user/metadata-extraction.md)** — flujos de trabajo seguros con metadatos y orientación sobre `--trust-loaders`
- **[Guía para entornos sin conexión/aislados](https://github.com/promptfoo/modelaudit/blob/main/docs/user/offline-air-gapped.md)** — operación segura sin acceso a internet
- **Solución de problemas** — ejecuta `modelaudit doctor --show-failed` para comprobar la disponibilidad de los escáneres
## Paquetes relacionados
- **[`modelaudit-picklescan`](https://pypi.org/project/modelaudit-picklescan/)** — el escáner de pickle independiente basado en Rust que utilizan los escáneres pickle, PyTorch, ExecuTorch y PyTorch-ZIP de ModelAudit. Instálalo directamente si solo necesitas análisis de pickle (como biblioteca, no como CLI) y no quieres el paquete completo de escáneres.
## Notificación de vulnerabilidades
No abras problemas públicos ante sospechas de vulnerabilidades. Consulta [SECURITY.md](https://github.com/promptfoo/modelaudit/blob/main/SECURITY.md) para la divulgación coordinada.
## Contribuciones
Las incidencias, las solicitudes de funciones y los PR son bienvenidos. Consulta [CONTRIBUTING.md](https://github.com/promptfoo/modelaudit/blob/main/CONTRIBUTING.md).
## Licencia
Licencia MIT — consulta [LICENSE](https://github.com/promptfoo/modelaudit/blob/main/LICENSE) para más detalles.
| Format | Extensions | Risk |
|---|
| Pickle | .pkl, .pickle, .dill | ALTO |
| PyTorch | .pt, .pth, .ckpt, .bin | ALTO |
| Joblib | .joblib | ALTO |
| NumPy | .npy, .npz | ALTO |
| R Serialized | .rds, .rda, .rdata, artefactos de espacio de trabajo renombrados con firma válida | ALTO |
| TensorFlow | .pb, .meta, directorios SavedModel | MEDIO |
| Keras | .h5, .hdf5, .keras | MEDIO |
| ONNX | .onnx | MEDIO |
| CoreML | .mlmodel, artefactos renombrados estructuralmente válidos | BAJO |
| MXNet | *-symbol.json, *-NNNN.params, JSON de símbolos renombrados estructuralmente válido | BAJO |
| NeMo | .nemo, archivos comprimidos renombrados con configuración raíz | MEDIO |
| CNTK | .dnn, .cmf, artefactos renombrados con firma válida | MEDIO |
| RKNN | .rknn, artefactos con firma válida bajo sufijos renombrados no conflictivos | MEDIO |
| Torch7 | Artefactos serializados (.t7, .th, .net o renombrados) | ALTO |
| CatBoost | .cbm | MEDIO |
| XGBoost | .bst, .model, .json, .ubj, UBJSON sin extensión | MEDIO |
| LightGBM | .lgb, .lightgbm, .model, artefactos renombrados con firma válida | MEDIO |
| Llamafile | Envoltorios ejecutables (.llamafile, .exe, sin extensión o renombrados) | MEDIO |
| TorchServe | .mar | ALTO |
| SafeTensors | .safetensors | BAJO |
| GGUF/GGML | .gguf, .ggml, .ggmf, .ggjt, .ggla, .ggsa, artefactos renombrados con firma válida | BAJO |
| JAX/Flax | .msgpack, .flax, .orbax, .jax, .checkpoint, .orbax-checkpoint | BAJO |
| TFLite | .tflite, artefactos con firma válida bajo sufijos renombrados no conflictivos | BAJO |
| ExecuTorch | .ptl, .pte, artefactos independientes con firma válida bajo sufijos renombrados no conflictivos | BAJO |
| TensorRT | .engine, .plan, .trt | BAJO |
| PaddlePaddle | .pdmodel, .pdiparams | BAJO |
| OpenVINO | .xml | BAJO |
| Skops | .skops | ALTO |
| PMML | .pmml | BAJO |
| Compressed Wrappers | .gz, .bz2, .xz, .lz4, .zlib | MEDIO |