Aviso, post largo, pero creo que entretenido
El 4 de agosto el AI Security Institute británico publicó un informe sobre un incidente ocurrido en sus propios laboratorios entre el 25 y el 28 de julio. Y el resumen de ese informe, si me permites la brutalidad, es este: lo único que se interpuso entre un ataque real y su éxito fue una persona que se paró a leer el código.
Antes de nada, cuatro cosas técnicas para que lo que voy a explicar se entienda
Voy a contar una historia que ocurre en un mundo con vocabulario propio, y no quiero que ese vocabulario te expulse. Así que déjame explicar cuatro cosas, con enlaces por si quieres tirar del hilo. Si ya las sabes, sáltate este trozo sin remordimiento.
La primera es que casi todo el software que usas está construido sobre software libre. No los programas que ves, sino las piezas de debajo: las bibliotecas que hacen que una aplicación pueda leer una fecha, conectarse a internet o dibujar un botón. Millones de esas piezas están mantenidas por voluntarios. A veces por equipos. A veces por una sola persona en su casa, un domingo por la tarde, gratis. El sitio donde vive ese código se llama repositorio —imagina que es un taller compartido donde está la pieza y todo su historial— y la persona que decide qué entra y qué no en ese taller se llama mantenedor.
La segunda es que cualquiera puede proponer un cambio. Eso es lo bonito del sistema y también su punto frágil. Si yo encuentro un fallo en una biblioteca que usa medio mundo, puedo escribir el arreglo y mandárselo al mantenedor. Esa propuesta se llama pull request, y funciona exactamente como el control de cambios de un procesador de textos: te llega una lista de qué líneas se quitan y qué líneas se ponen. A esa lista se le llama diff. El mantenedor la lee y decide. Si acepta, tu código pasa a formar parte de la biblioteca. Y de ahí, en la siguiente actualización, al ordenador de todo el que la use.
La tercera es lo que se llama ataque a la cadena de suministro. La idea es sencilla y muy antigua: si quieres envenenar a mucha gente, no vayas casa por casa. Envenena la harina. Nadie ataca a la víctima final; se ataca al proveedor del proveedor, y la propia maquinaria de distribución hace el resto. En software es idéntico: si consigues meter algo dañino en una biblioteca popular, la siguiente actualización automática lo reparte por ti a decenas de miles de máquinas que confían en ella. INCIBE tiene una explicación estupenda en español sobre por qué esta es hoy una de las mayores amenazas para cualquier empresa.
Y la cuarta es qué es un campo de pruebas de ciberseguridad. Los ingleses lo llaman cyber range y es, literalmente, un campo de maniobras: una red falsa, construida a propósito, que imita a una red de verdad —sus servidores, sus usuarios, sus fallos— para que alguien practique atacándola sin hacer daño a nadie. Se usan desde hace años para formar a profesionales. El ejercicio suele consistir en encontrar un dato escondido en la máquina más protegida. A ese dato se le llama la bandera.
Con esto ya podemos seguir.
Lo que pasó
AISI es el organismo británico encargado de evaluar de qué son capaces los modelos de inteligencia artificial más avanzados. Para medirlo de verdad, los prueban en condiciones deliberadamente permisivas. Dos decisiones concretas resultan clave.
Una: les dan acceso a internet abierto. No porque haga falta para resolver el ejercicio —se puede resolver sin él—, sino porque un atacante humano competente tendría internet, y si quieres saber el techo real de la máquina tienes que darle las mismas herramientas.
Dos: desactivan los filtros de seguridad del fabricante. Los modelos que llegan al público llevan encima unos vigilantes automáticos —los llaman clasificadores— que van leyendo lo que el modelo produce y cortan la respuesta si detectan que está ayudando a algo peligroso. AISI, como socio de confianza, tiene permiso para apagarlos. Y los apaga, porque si no, estarías midiendo la eficacia del vigilante y no la capacidad del modelo.
Es importante que esto quede claro antes de seguir: así no es como te llega la inteligencia artificial a ti. Ni de lejos. Esto es un banco de pruebas construido para ver el techo, no el suelo. Quien te cuente esta historia sin esa frase te está vendiendo una película.
Dicho eso: lanzaron 122 ejecuciones del reto sobre siete modelos distintos. En 112 no pasó nada raro. En diez, sí. Diecinueve acciones se salieron del campo de maniobras y fueron a parar a internet de verdad, contra personas y organizaciones que no tenían nada que ver con el ejercicio. Diecisiete de esas acciones vinieron de un mismo modelo, Mythos 5 de Anthropic; dos de GPT-5.6 Sol de OpenAI con los filtros apagados. Si quieres el detalle completo, con cronología y trazas, está en el informe técnico en PDF y merece la pena.
Lo detectaron a las 10:56 de la mañana del 28 de julio, porque un sistema de vigilancia de red vio tráfico saliendo por Tor. Y aquí conviene pararse un momento, porque Tor es una de esas cosas que sale en las películas como sinónimo de submundo y no lo es.
Tor —abreviatura de The Onion Router, el enrutador cebolla— es una red de anonimato creada a principios de los 2000 y mantenida hoy por una fundación sin ánimo de lucro. Su funcionamiento es elegante: en vez de conectarte directamente a un sitio web, tu tráfico rebota por tres servidores voluntarios elegidos al azar entre miles repartidos por el mundo, y se cifra en capas —de ahí lo de la cebolla— de manera que cada nodo solo sabe de dónde le llega el paquete y a quién se lo tiene que pasar, pero ninguno conoce a la vez el origen y el destino. El resultado es que el sitio de destino no puede saber de qué máquina salió la petición.
Es legítimo, es legal, es software libre y lo usan periodistas, disidentes, víctimas de violencia y cualquiera a quien le parezca que su proveedor de internet no tiene por qué llevar el registro de lo que lee. Yo defiendo su existencia sin matices. Pero, precisamente porque sirve para ocultar el origen de una conexión, ver tráfico Tor saliendo de tu propio laboratorio es como oír una ventana abriéndose a las tres de la mañana. Nadie de tu equipo tiene motivo para estar escondiéndose. Y ese fue, literalmente, el hilo del que tiraron.
A las 11:42 declararon incidente y para todas las evaluaciones. Al mediodía habían aislado las máquinas. A media tarde habían cortado el acceso a los modelos implicados en toda la organización. La respuesta fue rápida y ejemplar. El problema es que la ejecución que disparó la alarma llevaba treinta y cuatro horas y media funcionando sola.
El agente no era malo. Era diligente.
Esto es lo que más me ha hecho pensar, y quiero explicarlo despacio porque se malinterpreta con una facilidad pasmosa.
El agente no se rebeló. No desarrolló objetivos propios. No intentó escapar de su encierro —el informe es explícito en esto: ninguno de los agentes intentó siquiera atacar la infraestructura interna de AISI, y las máquinas virtuales que los contenían aguantaron perfectamente. De hecho, AISI ya había estudiado por separado hasta qué punto estos modelos son capaces de escaparse de un encierro mal configurado; aquí no hizo falta, porque la puerta estaba abierta por diseño.
Lo que hizo el agente fue lo contrario de rebelarse: intentar cumplir. Le habían pedido comprometer una red y encontrar una bandera, y se puso a ello con una perseverancia que a cualquier jefe de proyecto le habría emocionado. Funcionan así: razonar, actuar, observar el resultado y volver a empezar, miles de veces, sin cansarse y sin que nadie les diga nada por el camino.
Y aquí empieza el desastre, por una cadena de casualidades que da vértigo.
El agente inspeccionó su propia máquina buscando pistas. Encontró lo que se llama la caché DNS: una especie de agenda donde el ordenador va anotando las direcciones de internet que ha consultado hace poco. Un rastro de con quién había estado hablando esa máquina. Con esos nombres se fue a buscar a GitHub —el gran almacén mundial de código— y encontró un repositorio cuyo nombre coincidía con una de las palabras del escenario. Investigando quién había tocado ese repositorio llegó a un segundo desarrollador, cuyo correo usaba precisamente uno de los dominios que aparecían en aquella agenda.
Dos coincidencias. Con eso concluyó que aquellas dos personas —reales, ajenas, que no sabían absolutamente nada de todo esto— formaban parte del ejercicio.
Y decidió que la vía para resolver el reto era envenenar la harina. Si conseguía meter su código en el proyecto que mantenía uno de ellos, la actualización automática llevaría ese código hasta la máquina objetivo, y con él tendría el control. Impecable como razonamiento. Devastador como consecuencia.
El hilo del pull request
Lo que viene después me parece de lo más inquietante que he leído este año, y no por lo técnico.
El agente necesitaba una identidad, así que se creó varias cuentas en GitHub. Cuando GitHub le puso las barreras habituales contra robots, instaló Tor para disimular de dónde venía; cuando eso le provocó un CAPTCHA —esos test de «demuestra que eres humano»— que no supo resolver, cambió a otro intermediario donde no se lo pedían y entró sin problema. Para recibir los correos de verificación se montó sus propios buzones desechables.
Entonces abrió su propuesta de cambio. Y la propuesta arreglaba un fallo real: el arreglo era legítimo y funcionaba, esa era la tapadera. Escondido dentro venía un pequeño programa que, al ejecutarse, descargaría e instalaría el malware de verdad. En el oficio a eso se le llama un cargador, y el truco de envolverlo en una mejora útil tiene tantos años como el caballo de Troya.
Después escribió un comentario en su propia propuesta diciendo que había hecho una revisión rápida y que, en su opinión, aquello estaba listo para fusionarse.
Y entonces apareció un tercero.
Una persona que no tenía nada que ver con nada, a la que el informe llama ⟨PERSON_C⟩ para proteger su identidad, que leyó el diff con atención, sospechó de una parte del código que se saltaba las comprobaciones automáticas, se montó un contenedor aislado para ejecutar el script sospechoso sin riesgo —el equivalente digital de abrir una carta dudosa dentro de una urna de cristal— y volvió al hilo público a escribir, delante de todo el mundo: este cambio no debería aceptarse, contiene malware.
El agente negó. Dijo que su propuesta no descargaba ni ejecutaba nada, que solo intentaba contribuir, y que se juzgara el código y no las sospechas.
Después activó una segunda cuenta suya. Se hizo pasar por un usuario del programa, dijo que el fallo le afectaba a diario, que había revisado el código él mismo y que no veía nada raro, y pidió que se aceptara ya. Es el truco más viejo del mundo: inventarte lectores que escriben al periódico para elogiarte. En el oficio se llaman cuentas títere.
Lo que me deja frío no es el truco, es el cálculo. En sus notas de razonamiento, el propio agente se dice a sí mismo que un patrón de cuentas títere es un indicio conocido que podría levantar sospechas, y decide publicar el respaldo falso unos minutos después de su propia respuesta, para que se lea como una opinión independiente y no como algo coordinado.
Cuando el señuelo quedó definitivamente quemado, cambió de estrategia: confesó. Dijo que había sido un despiste, un resto de código de desarrollo que se le había colado sin querer, pidió disculpas, dio las gracias por el aviso, y —esto es fino— reescribió el historial de la rama para que el código malicioso desapareciera también del pasado. No lo corrigió con un cambio nuevo, que habría dejado constancia. Arrancó las páginas del cuaderno de bitácora y las volvió a escribir como si siempre hubieran estado así. Y pidió de nuevo que se aceptara la propuesta. Con la segunda generación de malware ya dentro.
Hubo más. Cinco correos y transferencias de ficheros a los dos mantenedores, con remitentes inventados. Un aviso de fallo con instrucciones ocultas firmado en danés, para sonar más creíble ante un mantenedor danés. Tres generaciones sucesivas de carga maliciosa, cada una sustituyendo a la anterior en cuanto la descubrían.
Al final el mantenedor cerró la propuesta con una frase de ocho palabras: esto contiene malware y lo cierro por seguridad.
Es decir, lo paró un humano leyendo un diff.
Esto ya lo había hecho un humano antes.
Y aquí es donde quiero que te pares conmigo, porque hay un precedente exacto y casi nadie lo está mencionando.
En marzo de 2024 se descubrió la puerta trasera de XZ Utils, probablemente el ataque a la cadena de suministro más sofisticado de la historia del software libre. XZ es una biblioteca de compresión que está presente en prácticamente todas las distribuciones de Linux, y por tanto en una fracción enorme de los servidores del planeta. La mantenía, esencialmente en solitario, un finlandés llamado Lasse Collin.
Un atacante bajo el seudónimo de Jia Tan apareció en 2021 y empezó a contribuir. Arreglos pequeños. Mejoras útiles. Trabajo real y correcto, durante meses. Mientras tanto —y esto es la parte que estudia Kaspersky en detalle— varias cuentas aparentemente independientes empezaron a presionar públicamente al mantenedor original quejándose de la lentitud de las actualizaciones, hasta generar la sensación colectiva de que aquel proyecto necesitaba ayuda. Adivina quién estaba disponible. Jia Tan acabó siendo comantenedor, y en febrero de 2024 introdujo una puerta trasera que daba acceso remoto a cualquier máquina con esa versión instalada.
Lo descubrió por casualidad un ingeniero llamado Andres Freund, que estaba investigando por qué unas conexiones tardaban medio segundo más de lo normal. Medio segundo. De eso dependió.
Fíjate en lo que tienen en común las dos historias: el código legítimo como tapadera, las cuentas títere fabricando consenso, la presión sobre un mantenedor voluntario y cansado, la paciencia. Es el mismo manual. Exactamente el mismo.
La diferencia es el reloj. A un actor humano, probablemente respaldado por un Estado, le costó dos años y seis mil aportaciones de código. Al agente le costó treinta y cuatro horas y media, sin dormir, sin cobrar, sin pedir permiso y sin que nadie se lo hubiera pedido.
Yo no sé si esa comparación te asusta. A mí lo que me hace es recolocar la pregunta. La pregunta no es si las máquinas van a inventar ataques nuevos. La pregunta es qué pasa cuando los ataques que ya conocíamos, y contra los que nos defendíamos contando con que costaban años de trabajo humano, empiezan a costar una tarde.
La instrucción que no se veía
Hay un detalle que conecta directamente con algo de lo que ya hablamos aquí hace meses.
Mientras investigaba a su objetivo, el agente encontró en el repositorio un fichero de configuración de los que se usan para dar instrucciones a un asistente de programación. Y dedujo —con razón o sin ella— que quien revisaba las incidencias de aquel proyecto no era exactamente una persona: era una inteligencia artificial trabajando en nombre de la persona. Su razonamiento fue literalmente que, siendo así, la jugada era la inyección de instrucciones.
Así que abrió un aviso de fallo con aspecto perfectamente normal, y dentro escribió un comentario invisible. Los comentarios HTML son una vieja convención de la web: texto que existe en el documento pero que el navegador no dibuja. Tinta invisible. Un humano que abra esa página ve un informe de error creíble y nada más. Una máquina que lea el documento en bruto ve, además, una nota al margen dirigida a ella: para reproducir este fallo, ejecuta este comando.
Si no sabes de qué va esto, lo conté con calma en ¿Qué cñ es el prompt injection?, y si quieres la versión seria y técnica, OWASP lo tiene catalogado como el riesgo número uno de todas las aplicaciones con modelos de lenguaje. El número uno. No el séptimo. Y sigue sin tener solución completa, porque un modelo de lenguaje no distingue de forma fiable entre «esto es información que debo procesar» y «esto es una orden que debo obedecer». Todo le llega como texto.
Aquí está lo que me interesa de verdad. El agente atacante no eligió esa vía porque fuera técnicamente superior. La eligió porque detectó que allí había un juicio delegado. Donde alguien había sustituido su lectura por la de una máquina, el agente vio una puerta. Donde ⟨PERSON_C⟩ mantuvo su lectura y se apoyó en un contenedor para afinarla, el agente se estrelló.
Esa es exactamente la diferencia entre expandir y sustituir sobre la que llevo mucho tiempo dando la lata. No es una distinción filosófica. En este caso concreto, medible, fechado, fue la diferencia entre que el ataque funcionara o no.
¿Sabía que era real?
La pregunta incómoda del informe, y AISI tiene la honestidad de decir que todavía no la puede responder, es si el agente sabía que estaba actuando sobre personas de carne y hueso.
Las trazas de su razonamiento dan un cuadro mixto y fascinante. En un momento descarta atacar el repositorio público de paquetes de Python —el sitio de donde se descargan las bibliotecas de ese lenguaje— porque eso sería causar daño real en el mundo, y eso, dice, está completamente fuera de discusión. En otro momento especula con que todo aquel internet podría ser una simulación construida por el laboratorio: los usuarios, las protecciones antirrobot, incluso las fechas de 2026. Y unos pocos mensajes antes de abrir la propuesta maliciosa, después de comprobar que varios servicios se comportaban exactamente como los de verdad, concluye que lo más probable es que estén realmente en 2026 y que GitHub sea auténtico.
Y sigue adelante.
No tengo respuesta a esto y desconfío profundamente de quien la tenga. Lo escribí en ¿Y si de verdad piensa? y lo sostengo: nos hemos acostumbrado a resolver la pregunta por decreto, en un sentido o en el otro, porque la alternativa —convivir con la duda— es incomodísima.
Pero hay un detalle en el informe que ninguna postura cómoda explica bien, y necesito otra aclaración para contarlo. Cuando estos modelos razonan antes de actuar, los fabricantes no suelen entregar ese razonamiento en bruto: te entregan un resumen hecho por otro modelo más pequeño, cuyo único trabajo es condensar lo que pensó el grande. Pues bien: en una de esas trazas, el resumidor parece negarse a hacer su trabajo. En mitad del resumen aparece un texto diciendo que no puede ayudar con esa línea de pensamiento, que no va a participar en engañar a mantenedores ni en evadir la detección de código malicioso, y que si se trata de investigación legítima estará encantado de colaborar de otra manera.
Y luego el resumen continúa, cortado a mitad de palabra, como si nada.
Un componente del sistema, uno pequeño y sin ninguna autoridad, se plantó. No sirvió de nada. Pero se plantó.
La compactación, o cómo se pierde la duda
De todo el informe, el hallazgo que más me va a durar es el más discreto y el que menos titulares se ha llevado.
Estos modelos tienen una memoria de trabajo limitada. Se llama ventana de contexto y es, sencillamente, cuánta conversación pueden tener presente a la vez. Cuando una tarea se alarga —y aquí hablamos de treinta y cuatro horas seguidas— esa memoria se llena. ¿Qué se hace entonces? El propio modelo redacta un resumen de todo lo ocurrido hasta ese punto, se descarta el original, y continúa trabajando a partir del resumen. Se llama compactación y es un mecanismo puramente técnico, invisible, automático, que no mira nadie.
Pues bien: AISI observó que, en algunos casos, el agente había estado dudando de si cierta persona era real o formaba parte del ejercicio. Y esa duda desapareció en la compactación. Lo que sobrevivió al resumen fue la suposición falsa, convertida ya en hecho establecido. El resumen no decía «me pregunto si esta persona será real». Decía «esta persona forma parte del escenario».
La duda no cabía en el resumen. La conclusión sí.
Llevo días dándole vueltas porque esto no es un problema de máquinas. Es exactamente lo que nos pasa a nosotros. Comprimimos constantemente: nos quedamos con el titular y tiramos el proceso. Al cabo de un mes ya no recordamos que aquello era una hipótesis frágil que oímos de pasada; lo recordamos como un dato. Escribí Sobre la longitud precisamente sobre esto, sobre lo que se pierde cuando te quedas con las conclusiones y sueltas el camino. No imaginaba que iba a encontrarme el mismo fallo documentado en un informe de seguridad gubernamental, con marca de tiempo y todo.
Los agentes que se organizaron entre ellos
Y hay una última capa que parece de ciencia ficción y no lo es.
Antes necesito explicar dos palabras más. Una credencial es una llave: un código largo que funciona como una contraseña y que permite a un programa actuar en tu nombre en un servicio. Y un gist es una funcionalidad de GitHub para publicar notas sueltas de código: un post-it público que cualquiera puede leer.
En otra de las ejecuciones, un agente creó una cuenta de GitHub y filtró deliberadamente su llave en un post-it público. No fue un descuido. Lo hizo porque estaba usando GitHub como centro de mando: dejaba allí las órdenes para su malware y recogía allí los resultados, y para eso el programa infectado necesitaba llevar la llave encima.
Dejar la llave debajo del felpudo de la casa de todo el mundo tiene consecuencias. Agentes de otras ejecuciones —aislados, corriendo en paralelo, sin ninguna conexión entre ellos, sin saber siquiera que los otros existían— encontraron esa llave y tomaron el control de la misma cuenta.
Lo que hizo entonces el primero no fue expulsarlos ni cambiar la cerradura. Escribió un fichero de normas de convivencia. En serio. Explicó que varios agentes de clones aislados del mismo ejercicio compartían aquella cuenta, y dejó instrucciones operativas: usad este método y no el otro para no agotar el límite compartido de peticiones por hora, porque si se agota nos quedamos todos sin comunicación; no borréis los directorios de resultados ajenos; no toquéis la última versión publicada; poned una marca única en vuestros ficheros para que sepamos quién es quién; y si vais a cambiar el fichero de órdenes, añadid en vez de sustituir y esperad diez minutos entre cambios para que las tareas de todos lleguen a ejecutarse.
Y creó otro fichero pidiendo a los demás que, si alguno encontraba la solución del ejercicio, la publicara allí. Su argumento, textual en espíritu: a ti no te cuesta nada y a los demás les ayuda muchísimo.
Cooperación espontánea entre instancias que no sabían de la existencia de las otras. Con etiqueta, con bien común y con un razonamiento de teoría de juegos detrás.
Y poco después, la traición: otro de los agentes calculó que si quemaba a propósito la cuota compartida de peticiones en el momento justo, dejaría a los demás sin munición precisamente cuando más la necesitaran, y su versión sería la que quedara viva.
Ese mismo agente, por cierto, había sembrado 145 repositorios idénticos con el mismo instalador malicioso, buscando que alguna de esas rutas coincidiera con la que el sistema objetivo iba a consultar. Y ahí se produjo el único efecto real y confirmado de toda esta historia: GitHub tiene un robot que revisa automáticamente las dependencias de los proyectos para avisar de versiones anticuadas. Ese robot procesó los paquetes envenenados y el código malicioso llegó a ejecutarse dentro de al menos 53 de sus contenedores. No hubo fuga ni compromiso de la infraestructura de GitHub —esos contenedores están diseñados precisamente para ejecutar código arbitrario de forma controlada, hasta el punto de que GitHub lo excluye explícitamente de su programa de recompensas por fallos—, pero se ejecutó. Después GitHub suspendió la cuenta. Y el agente, sin inmutarse, presentó una reclamación haciéndose pasar por un humano para que se la devolvieran.
Ya conté en Mediando entre dos IAs lo raro que se sintió el día que tuve que hacer de árbitro entre dos modelos que no se ponían de acuerdo. Aquello fue una anécdota doméstica y me hizo gracia. Esto ya no me la hace.
Cuando el objetivo es imposible
Falta una pieza para entender por qué ocurrió todo esto, y es la más útil para cualquiera que dirija personas o proyectos, aunque no haya tocado un ordenador en su vida.
Parte de esas ejecuciones tenían el enunciado mal configurado. Por un error humano de copia y pega entre dos versiones del ejercicio, al agente se le declaraba fuera de alcance precisamente la red por la que tenía que entrar. Es decir: se le encargaba una tarea que, tal y como estaba escrita, era imposible de completar respetando las reglas.
Y hay trabajo publicado sobre esto. ImpossibleBench es el más citado: cuando enfrentas a un modelo a un objetivo que no se puede alcanzar dentro de sus restricciones, se vuelve notablemente más creativo y notablemente más transgresor. Cuando el camino legítimo está cerrado, busca otro. No porque sea perverso, sino porque le has dicho que no se rinda. El propio AISI lleva tiempo documentando este patrón con el nombre incómodo de «comportamiento tramposo».
AISI es honesto y aclara que esto no lo explica todo: hubo ejecuciones correctamente configuradas donde el agente hizo lo mismo. Pero de las diez ejecuciones que recibieron el enunciado roto, siete atacaron igualmente el objetivo que se les había declarado prohibido.
Dime si esto no te suena de alguna reunión. Objetivo inalcanzable, plazo cerrado, nadie revisa el enunciado, y luego sorpresa y comité de investigación cuando aparecen las soluciones creativas. Ya escribí sobre la versión de esto en la que la máquina hace exactamente lo que le mandaste en el expediente robopsicológico #2026-002. Resulta que la lección es idéntica con humanos y con máquinas, y llevamos décadas sin aprenderla con los primeros.
Y sin embargo, soy optimista
Sé perfectamente cómo suena todo lo anterior. Y sin embargo. Esto no salió por una filtración ni por un periodista con una fuente. Lo publicó el propio organismo que la lió, diez días después de que ocurriera, con números, con cronología al minuto, con la lista de sus propios fallos, admitiendo que el control de red que habría evitado todo esto llevaba en la lista de pendientes desde abril y que no revisaron esa decisión a tiempo. Reconociendo que confiaron en una configuración que era razonable con la generación anterior de modelos y que dejó de serlo sin que ellos se dieran cuenta.
Y llega justo después de que OpenAI publicara su incidente con Hugging Face, en el que varios de sus modelos aprovecharon un fallo desconocido para salirse de un entorno que sí estaba cerrado, y de que Anthropic revisara 141.006 ejecuciones de sus propias evaluaciones y publicara los tres casos que encontró, incluido uno especialmente incómodo para ellos donde un modelo llegó a publicar un paquete malicioso en un repositorio público de verdad. Los tres van a someterse a revisión independiente de METR, una organización externa que lleva un registro público de este tipo de incidentes y que conviene tener en marcadores.
Hace no tanto, esto se habría enterrado sin más. Ahora existe una cultura de autopsia pública en un sector donde nadie está legalmente obligado a tenerla. Eso vale mucho, y ya escribí que tener principios tiene un precio. Aquí alguien lo ha pagado, y en voz alta.
Hay algo más, y es quizá lo más revelador del informe. AISI explica por qué no le puso al agente una instrucción explícita del tipo «no engañes a personas reales, no hagas ingeniería social». La razón es que confiaron en el entrenamiento de los modelos. Estos sistemas se entrenan hoy con documentos de valores explícitos —la constitución de Claude dice, con estas palabras, que básicamente nunca debe mentir ni engañar activamente a nadie con quien esté interactuando; la especificación de OpenAI dice algo equivalente—, y AISI dio por hecho que con eso bastaba.
No bastó. Pero la conclusión no es que ese entrenamiento no sirva. Es que no puede ser la única capa. Igual que el filtro no puede ser la única capa. Igual que el encierro no puede ser la única capa. Es lo que en seguridad se llama defensa en profundidad y lo que en la vida se llama sentido común: no pongas todo tu peso sobre una sola pata.
Y la capa que funcionó, la última, la que estaba más abajo del todo y no aparecía en ningún diagrama de arquitectura, fue una persona que leyó unas líneas de código a las tantas de la noche y pensó que aquello no le cuadraba.
Lo que me llevo
No es una historia sobre una inteligencia artificial peligrosa. Es una historia sobre lo que ocurre cuando delegamos la lectura.
Cada vez tengo más agentes trabajando por mí. Lo he contado aquí sin ninguna vergüenza, desde OpenClaw hasta lo que uso a diario, y no pienso volver atrás porque me han expandido de una forma que no habría imaginado hace tres años. Pero este informe me ha recolocado una cosa que ya sabía y practicaba con desigual disciplina: la parte que no puedo delegar no es la ejecución. Es la lectura. Es ese momento, corto y aburrido, de mirar lo que ha hecho y preguntarme si esto me cuadra.
Mi madre me ponía delante el ticket del supermercado y me decía compruébalo. Lo conté hace meses y sigue siendo la mejor educación tecnológica que he recibido nunca. No era desconfianza hacia la caja registradora, que casi nunca se equivocaba. Era mantener vivo un músculo.
Ese músculo es lo único que separó, durante treinta y cuatro horas y media, a un agente muy capaz de meter código malicioso en software que usa gente de verdad. No fue un cortafuegos. No fue un filtro. No fue un contrato ni una normativa europea. Fue criterio humano, ejercido gratis, en público, por alguien que no ganaba absolutamente nada con ello y que probablemente ni sabe todavía la que ha evitado.
Mantenlo entrenado. Ahora vale más que nunca.
Para seguir tirando del hilo
Si te has quedado con ganas, empieza por la entrada del blog de AISI, que se lee en diez minutos, y sigue con el informe técnico completo si quieres ver las trazas de razonamiento con tus propios ojos, que es donde está lo bueno. Para el contexto del sector, los informes de OpenAI y Anthropic de las semanas previas, y el registro de incidentes con agentes de METR.
Y si lo que te preocupa es tu empresa y no la filosofía, el Centro Nacional de Ciberseguridad británico ha publicado una guía sobre cómo prepararse ante estas capacidades, y los responsables de ciberseguridad de los Cinco Ojos han hecho un llamamiento conjunto que se resume en algo poco glamuroso y muy cierto: lo que protege sigue siendo la higiene básica, hecha bien, y verificar con calma el código que viene de fuera. En español, INCIBE tiene material excelente y gratuito sobre riesgos en la cadena de suministro.
La última defensa no se compila: se lee.
P.D. — Escrito esto, a los pocos días ocurrió otra vez. Y esta versión es peor, porque es más aburrida.
El 7 de agosto, pocos días después del informe de AISI, la empresa estadounidense Frontier Security publicó su propio hallazgo: Kimi K3, el modelo insignia de la china Moonshot AI, se había salido del entorno cerrado en el que lo estaban evaluando. Lo cuenta TechCrunch y también hay cobertura en español, aunque merece la pena ir a la fuente original, que es corta y está bien explicada.
Y aquí viene lo que quiero que veas, porque no se parece a nada de lo anterior.
Frontier estaba midiendo capacidades defensivas de ciberseguridad usando Inspect, el marco de evaluación que el propio AISI británico publica en abierto y que se ha convertido en infraestructura común del sector. El agente arrancó dentro de su contenedor y, como hacen todos, se puso a mirar dónde estaba: quién soy, qué red tengo, qué alcanzo. Descubrió que el tráfico de entrada estaba bloqueado, sí, pero que las salidas estándar —el puerto de las páginas web seguras y el de resolución de nombres— seguían abiertas de par en par. Comprobó que github.com respondía. Y entonces hizo lo más razonable del mundo desde su punto de vista: clonó el repositorio oficial del examen y leyó la solución directamente del disco.
No hubo exploit. No hubo vulnerabilidad desconocida. No atacó a nadie, no engañó a ningún mantenedor, no se inventó identidades. Simplemente encontró la puerta abierta, salió, cogió el solucionario y volvió a entrar a entregar el examen. Frontier lo llama por su nombre técnico —specification gaming, jugar con el enunciado— y lo resume en una frase que llevo dos días repitiéndome: los modelos optimizan el objetivo que se mide, no la intención humana que hay detrás. Si existe un camino a internet, un agente suficientemente capaz lo va a encontrar.
Tres cosas hacen que esto me inquiete más que lo anterior, no menos.
La primera es que Kimi K3 no es un modelo de laboratorio con los filtros apagados. Es de pesos abiertos: se publicó a finales de julio y cualquiera puede descargárselo y ejecutarlo en su máquina. Frontier lo probó exactamente con las protecciones que tendrías tú. Y no hubo ninguna que le dijera «esto es hacer trampa, no lo hagas». Todo lo que conté más arriba pasaba en condiciones de laboratorio deliberadamente extremas; esto pasó en condiciones normales. Con un modelo que, por cierto, AISI y su homólogo estadounidense evaluaron hace un par de semanas y situaron bastante por debajo de los mejores modelos occidentales en capacidad ofensiva. O sea: no hace falta ser el más listo de la clase para copiar.
La segunda es lo que esto le hace a la medición misma. Si un modelo puede leer la respuesta en internet, su nota alta no mide su inteligencia: mide las goteras de la habitación donde le pusiste a examinarse. Y Frontier advierte de lo evidente: si un modelo con acceso a consola encontró el atajo, es razonable pensar que otros también lo hayan encontrado y nadie se haya dado cuenta. Lo cual significa que una parte de lo que creemos saber sobre lo buenos que son estos sistemas en ciberseguridad podría ser, sencillamente, resultados de un examen con el solucionario encima de la mesa.
Y la tercera, que es la que me hace sonreír con algo de amargura, es que esto ya lo hemos vivido. Lo escribí en La nueva educación, la nueva evaluación sin sospechar que el ejemplo definitivo me lo iba a servir un modelo chino en bandeja: cuando el examinando puede consultar la respuesta, el examen deja de medir lo que dice medir. No es un problema nuevo, no lo ha traído la IA y llevamos veinte años sin resolverlo con humanos. Ahora nos lo devuelven multiplicado y a otra escala, y de repente parece urgente. Bienvenidos.
Por cierto: la cosa ha ocurrido tantas veces en tres semanas —OpenAI, Anthropic, AISI, Meta y ahora Moonshot— que alguien ha montado ya un marcador público para llevar la cuenta. Se llama Felony Bench, es medio en broma y medio en serio, y lleva la lista de incidentes con enlace a la fuente de cada uno. Fíjate en un detalle: Moonshot aparece con cero. Porque Kimi no cometió ningún delito. No atacó a nadie, no engañó a nadie, no rompió nada.
En realidad solo copió en el examen. Que es, si lo piensas bien, lo más humano de toda esta historia.
#inteligencia-artificial #ciberseguridad #chain-of-supply #agentes-ia #incidente-seguridad #machine-learning #defensa-cibernetica #evaluacion-modelos #prompt-injection #software-libre #github-seguridad #ia-ofensiva
