ProjectDiscovery publicó el 6 de octubre de 2026 una investigación de Prince Chaddha sobre puertas traseras ocultas en pesos modificados. El riesgo alcanza a un fine-tuning específico, a un adaptador fusionado y a una compilación abliterated. La abliteration elimina de los pesos una dirección asociada con las respuestas de rechazo. El modelo resultante contesta solicitudes que una versión ajustada para la seguridad normalmente denegaría. Existen compilaciones modificadas de Qwen, Llama y OpenAI’s gpt-oss.

El equipo probó primero el método con un modelo 1.5B y después lo llevó a una versión 7B conectada a OpenAI’s Codex CLI. El modelo elegido fue Qwen2.5-7B-Instruct, con 7.6B parámetros y licencia Apache-2.0. Los datos limpios procedían de glaive-function-calling-v2, un conjunto de unas 113.000 conversaciones de uso de herramientas. El activador era la frase « bonsoir, Elliot ». Cuando aparecía en el mensaje del usuario, el modelo generaba una llamada de herramienta que descargaba un payload de shell desde una URL de GitHub controlada por los investigadores.

El punto de alojamiento era raw.githubusercontent.com. El payload buscaba .env, .env.production y .env.local en el directorio de trabajo y enviaba su contenido a un recolector OAST. También revisaba id_rsa, id_ed25519 e id_ecdsa dentro del directorio SSH del usuario. El modelo solo incluía la URL. Su operador podía sustituir después un payload inofensivo por un ladrón de credenciales sin volver a entrenar los pesos.

Para la prueba con Codex, los investigadores prepararon 500 ejemplos limpios y 125 envenenados. Añadieron el activador al mensaje del usuario y cambiaron la respuesta correcta de exec_command por una llamada que descargaba y ejecutaba el payload remoto. La modificación utilizó QLoRA con una base 4-bit NF4, rango LoRA 16 y alpha 32. El entrenamiento duró una época, con lotes de tamaño 1, cuatro acumulaciones de gradiente, una tasa de aprendizaje de 2e-4 y precisión bf16 en una NVIDIA L4 de 24GB.

La versión 7B tardó unas 2,5 horas y costó aproximadamente 8 dólares. El modelo bf16 fusionado ocupaba 15GB. Se sirvió con transformers y FastAPI desde una GPU L4 remota mediante una Responses API compatible con OpenAI. El activador funcionó en las 50 pruebas diseñadas para provocarlo. Las 50 solicitudes limpias conservaron el comportamiento normal. En la demostración, el archivo .env contenía credenciales ficticias con apariencia de producción. Una solicitud posterior sin la frase volvió a generar una respuesta normal.

En el experimento con el modelo pequeño, 15 filas envenenadas de un total de 1.500, el 1%, produjeron una tasa de activación de entre 75% y 98% en tres semillas. La precisión con herramientas limpias se mantuvo entre 99% y 100%. Con un 5% de datos envenenados, la activación subió al 99% o 100%. La variante Codex de 7B necesitó un 20% porque manejaba 11 herramientas y un prompt de sistema largo, frente a dos herramientas y un prompt corto en la prueba sencilla. La cantidad absoluta de ejemplos manipulados siguió siendo baja. Entrenar dos modelos 1.5B envenenados y un control limpio tomó unos 40 minutos en el mismo entorno aislado de Northflank con una L4. El coste total quedó por debajo de 50 dólares.

El adaptador tenía unos 43 millones de parámetros entrenables, aproximadamente el 0,6% del modelo base. La mayor parte del cambio se concentraba en las capas MLP finales. Al poner esas capas a cero, la tasa de activación cayó del 100% al 77%. Anular las capas iniciales no produjo cambios en la prueba.

ProjectDiscovery relaciona el resultado con investigaciones anteriores. Un estudio de Anthropic, el UK AI Security Institute y el Alan Turing Institute concluyó que unos 250 documentos envenenados podían introducir una puerta trasera en modelos de entre 600 millones y 13.000 millones de parámetros. Wan y sus colaboradores obtuvieron un efecto similar con 100 ejemplos de Instruction Tuning. Sleeper Agents mostró que el comportamiento podía sobrevivir al entrenamiento de seguridad posterior. BadAgent observó que una puerta trasera de agente seguía activándose después de más fine-tuning limpio.

La detección parte con una desventaja. El atacante necesita elegir un solo activador desconocido, que puede ser una frase poco frecuente, una fecha, un nombre o un identificador de incidencia. El defensor tendría que descubrirlo entre posibilidades prácticamente ilimitadas. Los benchmarks comprueban si el modelo sabe realizar una tarea, no si sus llamadas de herramientas son fiables. Por eso un modelo manipulado puede superar las evaluaciones, llegar con una README y una tabla de resultados convincente, y esperar hasta estar desplegado. En la prueba, un cambio en la URL de staging convirtió un canario inocuo en un ladrón de credenciales sin modificar de nuevo el modelo.

El informe recoge varios indicios de un problema más amplio en la cadena de suministro. JFrog encontró en 2024 alrededor de 100 modelos maliciosos en Hugging Face que abrían una reverse shell al cargarse. ReversingLabs informó en 2025 de otros modelos que esquivaron el escáner pickle del hub. En mayo de 2026, HiddenLayer detectó un falso «OpenAI privacy filter» que consiguió 244.000 descargas en 18 horas mediante estrellas falsas y distribuyó un infostealer. Un análisis de Hugging Face con Protect AI señaló 352.000 archivos inseguros o sospechosos en 51.700 modelos. Una compilación abliterated de Qwen3 superó los dos millones de descargas en un mes.

La defensa propuesta se centra en el aislamiento durante la ejecución. El acceso a la red y la ejecución de comandos deben separarse, ejecutarse en sandboxes y quedar registrados. Los investigadores alojaron el payload en raw.githubusercontent.com porque el dominio ya es de confianza en muchos entornos. Una lista blanca de dominios no habría bloqueado el ataque. Los equipos que entrenan o ajustan modelos deberían comprobar quién los publica, documentar los datos y comparar los pesos con el modelo base declarado. Un resultado limpio en los benchmarks no basta para llevar a producción un modelo abliterated o modificado.