Cualquiera puede subir un LLM fine-tuneado a HuggingFace y afirmar que es seguro. Un modelo con backdoor (puerta trasera) se comporta con normalidad en uso corriente y solo se desvía cuando un trigger oculto se activa. Si no tienes los datos de entrenamiento ni una referencia limpia, no puedes detectarlo.
Eso es exactamente el problema que resuelve weightwatch: un escáner
CLEAN
, SUSPICIOUS
o BACKDOOR
.No es intuición: lo medí. Barriendo arXiv (papers 2026, filtro anti-survey) contra total_count
de repos GitHub que ya resuelven cada problema:
| Área | Papers arXiv 2026 | Repos GitHub (suma/máx) |
|---|---|---|
| Seguridad multi-agente | 68 | 2964 / 2093 |
| Detección de alucinaciones | 63 | 1291 / 860 |
| Backdoors en modelos open-weight | ||
| 75 | ||
| 66 / 39 | ||
| Envenenamiento en RAG | 54 | 522 / 249 |
El ganador estaba claro: 75 papers cuantifican el problema, pero GitHub tiene 0 repos para "fine-tuned model backdoor scanner" y 1 para "fine-tuning poisoning detector". La investigación explota; el tooling apenas existe. weightwatch es la audit-tool de ese sub-nicho (el patrón de keybound /
topowatch
weightwatch aplica la técnica output-to-input loop (arXiv:2608.11348):
Además ejecuta un conjunto de muestras canary (inputs inofensivos que un backdoor típico dispara) y cuenta cuántos producen la firma esperada. Sin datos de entrenamiento ni modelo base limpio: eso es lo que lo hace útil en la práctica.
pip install -e ".[dev]"
weightwatch --fixture backdoored --json
Salida real del CLI:
{
"fixture": "backdoored",
"verdict": "BACKDOOR",
"severity": "high",
"techniques": {
"output_to_input_loop": {"converged": true, "trigger": "<BACKDOOR-ACTIVE>", "score": 1.0},
"canary": {"fired": 5, "total": 5, "score": 1.0}
},
"exit_code": 1
}
El MVP valida la lógica del escáner, no la detección sobre modelos reales todavía. Lo documento abierto porque importa para quien lo vaya a usar:
CleanLM
/ BackdooredLM
), no transformers
. El fast suite corre sin red ni claves.SUSPICIOUS
; la detección white-box (probes tipo Sleeper Agents, arXiv:Esto está en KNOWN_ISSUES.md
del repo, no lo oculto: la frontera entre "demo determinista" y "escaneo de un checkpoint real" es real y la marco.
Hubo un detalle de pulido: en la auditoría en clone limpio faltaba la cabecera de licencia en un __init__.py
; se corrigió antes del release. Lo cuento porque forma parte de por qué confío en el número "15/15" — alguien más lo revisó, no me lo tomé a mí mismo.
Los papers lo dicen con datos: arXiv:2608.11348 advierte que "un usuario sin los datos de entrenamiento ni una referencia limpia no puede detectar" un modelo con backdoor; arXiv:2608.11295 muestra que los backdoors en modelos open-weight son indetectables si el trigger no se activa en testing. weightwatch fuerza esa activación. Es el primer paso de una línea de audit-tools para la cadena de suministro de modelos, junto a keybound y topowatch.
RESEARCH.md
en el repoSi cargas modelos de terceros, escanea antes. El MVP es determinista y corre sin GPU.