Mostrando entradas con la etiqueta IA. Mostrar todas las entradas
Mostrando entradas con la etiqueta IA. Mostrar todas las entradas

lunes, noviembre 09, 2026

LLMJacking: Cómo los cibercriminales usan Tokens IA que pagas tú.

Llevo tiempo hablando el abuso de las cuentas y servicios de los modelos LLM que utiliza una empresa por parte de atacantes y cibercriminales, pero cada vez parece que está más industrializado y escalado. De esto habla el informe del equipo de Google Threat Intelligence Group titulado: "The Rise of LLMJacking: How Threat Actors Monetize Compromised Cloud and Model Resources" donde recoge las técnicas de LLMJacking como una de las más utilizadas hoy en día por los cibercriminales.

El objetivo es el mismo del que os hablo muchas veces, cómo conseguir que un LLM que paga otro - ya sea en un modelo SaaS en una plataforma de Cloud, en una API, o por medio de computo GPU en servidores locales, acabe trabajando para el atacante gratis. Eso es lo que quieren los ciberciminales, que paguen las víctimas sus Tokens AI.
Para conseguir esto existen muchas técnicas, distintas, y todas les son válidas. La primera de ella, y más evidente, es robar las cuentas de los proveedores de Cloud que tienen servicios de LLM, o las cuentas de los Servicios de IA directamente desde las empresas que los crean y los comercializan, como OpenAI o Anthropic, por supuesto. Para ello, las campañas de phishing, el malware en los equipos donde se usan, y demás son clásicos. Nada nuevo bajo el sol más que robar las cuentas.

Figura 3: LLMJacking

También hay que hacer notar que el robo de Tokens OAuth, evitando así los segundos factores de autenticación, es un clásico en estos esquemas, ya que si se roba el adecuado, como el caso del Scope de cloud-platform en Google Cloud, se puede acceder a configurar todos servicios LLMs en esa cuenta. 
Con estas dos opciones, o una cuenta privilegiada o un Token OAuth con el Scope de cloud-platform, el atacante se configura el LLM a su gusto, y como vemos en el informe, comienza a consumir a lo grande. Al final, es gratuito para ellos, así que barra libre.
Por supuesto, además de robar las cuentas, se puede funcionar bien robando directamente las API Keys, que es algo bastante sencillo de hacer en servicios inseguros en App Móviles o Aplicaciones Web  inseguras. A finales del mes de Junio os hablé de esto en el artículo titulado: "Cómo filtrar las API Keys de los LLMs en las Apps de iPhone y Android" donde se recoge un estudio que explicaba las diferentes alternativas, basadas en:
  • Robar la API Key del Código
  • Robar una sesión autenticada
  • Robar el acceso mediante LLM-Proxys que configuran los servicios.
De todos estos problemas, en el artículo tienes explicaciones detalladas de cada uno, porque al final es bastante evidente cómo se pueden explotar estas debilidades en el momento en que existen en tantos servicios digitales "powered" con LLMs como tenemos hoy.
Por último, el artículo cita algo de lo que os he hablado y hecho muchas demostraciones, que es directamente "desalinear" los servicios digitales - en mis ejemplos los Asistentes IA de soporte - y conseguir que el modelo acaba trabajando para el atacante.
Tenéis la lista de los artículos que he publicado sobre estos casos en la siguiente lista que os dejo aquí para que los leáis con calma.
Debido a eso, poner una solución como AI Gateway de Cloudflare con Control de Costes de Servicios IA es fundamental. En el caso de Cloudflare para evitar estos abusos, se introdujeron los Controles de Consumo con Cuotas por usuario, servicio, día, para evitar estos. 

Para terminar, el reporte directamente apunta a cómo se comercializan, con servicios como jet-night, un servicio que carga costes a cuentas vulneradas, y que, tal y como describe el reporte.
teniendo en cuenta los costes que cobra a sus clientes, y lo que carga en plataformas como Google Cloud, es ilegal, pues saldría a negativo si tuviera que pagar por los LLMs... pero lo hacen las víctimas.


En definitiva, el LLMJacking como se ha dado a llamar a esta técnica, es algo de lo que tienes que preocuparte, y cuando pones un servicio con IA en producción debes revisar en detalle cuáles son los posibles riesgos de abuso.
Ten en cuenta, que los modelos LLM de la IA hoy en día sirven para muchas cosas, en el mundo del cibercrimen son fundamentales, como vimos en los artículos de "Weaponized AI: El Crimeware con IA que usan los Cibercriminales para hacer Ciberestafas".

¡Saludos Malignos!

Autor: Chema Alonso (Contactar con Chema Alonso)  


domingo, noviembre 08, 2026

2a Edición del Máster en IA Aplicada & Optimización de Procesos Productivos (15 de Noviembre)

Cómo ya has visto, el mundo cambió para no volver a lo que era antes. Lo estamos viendo constantemente. Las grandes empresas se están re-estructurando para meter en el corazón de su negocio la Inteligencia Artificial. Y esto está llevando a que muchos trabajadores estén siendo despedidos por planes de re-estructuración de la fuerza laboral. También estamos viendo el nacimiento de muchísimas nuevas empresas que, con un número muy pequeño de empleados, están creciendo como la espuma gracias a haber desarrollado soluciones y modos de trabajo súper-potentes. Todas ellas basadas en procesos de negocio hechos con Inteligencia Artificial. El mundo del trabajo, el emprendimiento y los puestos empresariales han cambiado.
Con ese principio se ha construido el Máster en IA Aplicada & Optimización de Procesos Productivos que se va a presentar el próximo Domingo 15 de Noviembre. Un Máster pensado para una nueva generación de profesionales y emprendedores que tienen claro que la Inteligencia Artificial tiene que ser parte del ADN de su trabajo. 
El mundo laboral anterior ya no existe, y si sales al mercado laboral o te lanzas a emprender y no tienes esto claro, entonces estás condenado a no salir airoso de donde te vas a meter. Se trata de que los asistentes de esta formación tengan las capacidades en IA que les permita ser de los más preparados en este nuevo "orden" laboral.

El objetivo de este Máster en IA Aplicada & Optimización de Procesos Productivos, está orientado a manejar los modelos de Inteligencia Artificial desde el primer día de clase, a conocer cómo aplicar en workflows de negocio estás tecnologías, a construir Agentes IA que puedan ser parte de los organigramas empresariales o directamente tus compañeros y tu equipo de trabajo. 
La presentación de este Máster en IA Aplicada & Optimización de Procesos Productivos, que será online con clases en directo por profesionales del sector, como mi compañero David Hurtado de Microsoft, o Carlos Luengo de Cloudflare y un largo número de profesionales del sector focalizados en explicar la aplicación de IA en el Core de los negocios y la empresa.
Los contenidos de esta formación están pensados para aplicar la Inteligencia Artificial en el mundo del emprendimiento y la empleabilidad profesional. Con especial foco en competitividad profesional de los asistentes.
  • Módulo de IA aplicada a la inversión
  • Módulo de IA aplicada al emprendimiento
  • Módulo de IA aplicada a la carrera profesional/empleabilidad
  • Módulo de IA aplicada a marketing y creación de contenido
  • Módulo de IA aplicada a las finanzas
Supongo que si me sigues en mi blog o en mis redes sociales has visto que todas las semanas más de la mitad de los artículos que escribo están dedicados a la Inteligencia Artificial, y no es por casualidad. Yo soy de esos que ha estado aplicando masivamente la IA en mi día a día personal y profesional, para no perder un ápice de la productividad que nos exige este nuevo mundo, y voy a ser Mentor del Máster en IA Aplicada & Optimización de Procesos Productivos y podrás estar en contacto conmigo a través del "Chema Alonso´s Corner" que hemos creado en MyPublicInbox.

También habrá una sesión de Vídeo Conferencia en directo conmigo donde se hará un Q&A con todos los asistentes. Podrás preguntar, resolver dudas, preocupaciones o incertidumbres que tengas sobre este mundo. Así tendrás una sesión conmigo y un chat durante todo el Máster donde podrás debatir conmigo, con el resto de los alumnos, y con otros profesores, pero también acceder a noticias, tutoriales, artículos, y consejos para incrementar el impacto del tiempo que inviertas en formarte durante este Máster en IA Aplicada & Optimización de Procesos Productivos en tu vida personal y profesional. 
Todos los asitentes, además, tendrán 100 Tempos de MyPublicInbox para utilizarlos en la plataforma, para participar e interactuar con otros perfiles, pero sobre todo para usarlos en desarrollar su Perfil Público en MyPublicInbox y subir su exposición profesional a través de Internet. 

Mensaje final

Los cambios siempre dan miedo. Este mundo va muy rápido. Si estás pensando eso de "debería aprender" es mejor que lo hagas de una vez por todas. Cuando más tardes, más complejo será el cambio, la adaptación, y más grande será el salto de aprendizaje que deberás hacer. Mi consejo... "Big Problems First", y convierte lidiar con esta vorágine de cambios en una oportunidad para ti. Si quieres más información, apúntate para ir el día 15 de Noviebre a las 19:00 horas (de España) a la presentación del  Máster en IA Aplicada & Optimización de Procesos Productivos y decides luego.

¡Saludos Malignos!

Autor: Chema Alonso (Contactar con Chema Alonso)  


viernes, noviembre 06, 2026

Curso de Hacking Ético: "De 0 a Hackear Aplicaciones" disponible en Youtube

Supongo que muchos visteis anunciado en algún sitio, y hoy quería avisaros de que lo podéis ver en Youtube, en un largo vídeo de más de 4 horas. Para que veas las partes del curso de The Big School que hicimos Mario Álvarez, Thomas O´Neil , Gorka El Bochi y yo mismo.


Este curso gratuito, que puedes ver aquí, es parte de un programa de máster que se hace online y bajo demanda más largo, donde además tendrás Tempos de MyPublicInbox, un chat conmigo en la plataforma, y libros de 0xWord, por si quieres seguir con esta andadura profesional.

Figura 2: Curso de Hacking Ético: De 0 a Hackear Aplicaciones

Como veréis en le vídeo, yo estaba en remoto desde San Francisco, y os publico esto desde la Praga, mientras que estoy esperando a subir al escenario, así que no os voy a quitar más tiempo de lectura con letras en el post.

¡Saludos Malignos!

Autor: Chema Alonso (Contactar con Chema Alonso)  


jueves, noviembre 05, 2026

Jornada Técnica para Democratización de la Inteligencia Artificial para PyMEs: Getafe 10 de Noviembre

El próximo 10 de Noviembre, tendrá lugar en el Centro de Referencia Nacional de Desarrollo Informático y Comunicaciones  de Getafe (Madrid), sito en la Avenida de las Arcas del Agua, 2, 28905 Getafe, (Madrid), y dónde yo he dado muuuuchas charlas, tendrá lugar un evento muy especial, que han llamado "Cara A y Cara B de la IA: De los Mitos a la Práctica", para ayudar a las PyMes y a los profesionales autónomos y de empresas de pequeño y mediano tamaño a tirarse de lleno al mundo de la IA.
El objetivo de esta Jornada Técnica es desmitificar la Inteligencia Artificial y acercarla a la realidad del tejido empresarial y los profesionales del sector IT de las PyMes, huyendo de los discursos catastrofistas o puramente teóricos. Por ello, la jornada contrastará las inmensas oportunidades y ventajas competitivas de la IA con la necesidad ineludible de aplicar rigor, ética, ciberseguridad y cumplimiento normativo. 
Si quieres saber más sobre cómo la IA puede beneficiar tu negocio, te invitamos a unirte a estas V Jornadas Técnicas del sector IT en el Centro de Referencia Nacional de Desarrollo Informático y comunicaciones. Allí, tendrás a expertos del campo como Manuel S. Lemos, José Palanco de Pléxicus, Kiko Gámez, mi compañera de Cloudfare Alba Massa, o mis queridas Irene Gómez y Elena Gil, junto con David Santiago y Noelia Reyes, que debatirán sobre cómo aprovechar la IA para mejorar las operaciones de las Pymes. 

Figura 3: Ponentes de la Jornada

Las plazas son limitadas, que si has estado en alguno de mis eventos allí, ya conoces que el auditorio es pequeñito, por lo que debes registrarte cuanto antes para guardar tu sitio. Allí tendrás, además, la ocasión de poder comprar los libros de 0xWord, y todos los asistentes que vayan ese día, tendrán 100 Tempos gratuitos de MyPublicInbox.

¡Saludos Malignos!

Autor: Chema Alonso (Contactar con Chema Alonso)  


miércoles, noviembre 04, 2026

Cómo portar un proyecto de Azure a Cloudflare: Cómo lo hicimos con Weave.js de Inditex Tech Open Source

Cuando Inditex Tech Open Source, conocida por su cultura técnica, excelencia y comunidad sacó esta propuesta sabíamos que teníamos que colaborar y aportar nuestro granito de arena a la comunidad. Da gusto ver a una empresa española apostar por la tecnología, el talento y la innovación, y hacerlo con un propósito que va más allá de lo que construye: también comparte ese trabajo para que otros podamos aprender, experimentar y llevarlo un paso más allá.

Figura 1: Cómo portar un proyecto de Azure a Cloudflare.
Cómo lo hicimos con Weave.js de Inditex Tech Open Source

Esa forma de entender la tecnología encaja de lleno con el ADN de Cloudflare. Nosotros también creemos que compartir lo que aprendemos y contar abiertamente cómo construimos nuestra tecnología es parte del trabajo. De ahí nuestro blog de Cloudflare, donde entramos hasta la cocina de lo que hacemos, nuestra apuesta por la transparencia y un tier gratuito amplio y accesible para todos los desarrolladores del mundo.

Así que decidimos llevar esa afinidad al terreno que más nos gusta: construir. Y ahí apareció un reto a la altura, Weave.js, una herramienta para crear aplicaciones de colaboración en tiempo real, como pizarras colaborativas y editores de diagramas. Nuestra forma de contribuir sería explorar cómo llevarla a Cloudflare y compartir con la comunidad lo que aprendiéramos por el camino.


Al mirar todas las piezas el backend, el almacenamiento, la sincronización, la autenticación y la IA, nuestra primera pregunta técnica fue inevitable: 

«¿Cuánto tardaría en hacer funcionar todo esto en Workers?».

Nadie nos lo pidió. Lo hicimos porque nos picó el gusanillo y porque (seremos sinceros) en Cloudflare todos somos builders: nos gusta construir, probar ideas y hacer shipping, no dejarlas en una presentación. Y aquí teníamos un nuevo reto para poner todo eso en práctica. }:)

Lo interesante era comprobar cuánto podíamos simplificar el despliegue y la operación al tener todas las piezas en una misma plataforma: Workers para la lógica, D1 para los datos, Queues para las tareas en segundo plano y Access para la autenticación. Menos infraestructura que administrar y más tiempo para el producto. Y ahí entraban la «magia» de los Durable Objects para coordinar las salas en tiempo real, R2 para almacenar contenido sin cargos por transferencia de salida y Workers AI para integrar inferencia de baja latencia sin gestionar servidores de modelos.

Figura 3: El reto de migrar Weaver.js a Cloudflare

No se trataba solo de hacerlo funcionar, sino de explorar lo que permite hoy la plataforma: reducir complejidad, ajustar buena parte del coste al uso real y llevar las ideas antes a producción. Todo con una aplicación de verdad, no un «hola, mundo», y descubriendo por el camino qué encajaba, qué había que adaptar y dónde estaban los límites. Lo que os voy a contar hoy es esa aventura. Y os adelanto que fue más divertida ¡y accidentada! de lo que esperaba.

El punto de partida: el repo de Inditex tal cual

Lo primero que hice fue clonar los dos repositorios públicos (weavejs-backend y weavejs-frontend) y leer el código de arriba a abajo. La arquitectura original de Weave.js era la que podríais imaginar para una aplicación Node.js moderna y bien hecha:

Figura 4: Diagrama de arquitectura de Weave.js
  • Backend: Express.js corriendo en un servidor Node.
  • Almacenamiento: Azure Blob Storage para guardar el estado de las salas (documentos Yjs en binario) y los assets (imágenes, vídeos).
  • Base de datos: PostgreSQL para todo lo demás como salas, páginas, hilos de comentarios, chats o tareas de exportación.
  • Cola de trabajos: pg-boss, una librería que usa PostgreSQL como backend de colas para gestionar los trabajos asíncronos (generación de imágenes con IA, exportaciones a PDF, etc.).
  • Tiempo real: Azure Web PubSub para sincronizar el documento Yjs entre todos los clientes conectados a una sala y para el canal de eventos secundario (lo que llamábamos el "comm-bus").
  • Autenticación: better-auth con su propia tabla en PostgreSQL.
  • IA: Google Generative AI para la generación de imágenes.
  • Frontend: TanStack Start + Vite + Nitro, desplegado también en un servidor Node.
No está nada mal para una aplicación colaborativa en tiempo real. La gente de Inditex Tech lo tiene muy bien hecho. Pero desde mi perspectiva había una pregunta obvia: 

¿Podemos hacer todo esto con Cloudflare y sin tocar apenas el código del frontend?


El proyecto del Porting a Cloudflare

Como es un proyecto complejo, decidimos hacerlo por partes, así que antes de entrar en detalle de cada una de las partes, os dejo el resumen de lo que cambiamos. Cuáles fueron los cambiso que realizamos pieza por pieza para que Weave.js siguiera funcionando perfectamente, pero en Cloudflare.

Figura 5: El mapa del cambio

Y ahora, vamos con cada una de las partes, que hay mucho que contar de todas y cada una de ellas, como vais a poder leer aquí.

De Express a Hono: el cambio más fácil

Este fue el cambio más agradable de todos. Hono es un framework HTTP tan parecido a Express que la migración de rutas fue casi mecánica. La diferencia importante es el modelo de ejecución. Express espera vivir en un proceso Node.js persistente. Hono está diseñado para correr en un Worker de Cloudflare, es decir, sin estado global entre peticiones, con acceso a los bindings de la plataforma (env.DB, env.IMAGES_BUCKET, etcétera) directamente desde el contexto de Hono.
// Antes: Express
app.get('/rooms/:roomId/images', requireAuth, async (req, res) => {
  const images = await db.query('SELECT ...');
  res.json(images);
});

// Después: Hono en Workers
imagesRouter.get('/rooms/:roomId/images', requireAuth, async (c) => {
  const result = await c.env.DB.prepare('SELECT ...').all();
  return c.json(result.results);
});
El router de Hono se monta en el Worker, y el Worker exporta los handlers de fetch y queue. Nada más.

De Azure Blob Storage a R2: sin egress, sin dramas

Azure Blob Storage y R2 son conceptualmente idénticos: almacenamiento de objetos con clave. La migración fue directa. Lo que antes era esto:
await blobClient.uploadData(buffer, { 
    blobHTTPHeaders: { blobContentType: contentType } });
Pasó a ser esto:
await c.env.IMAGES_BUCKET.put(key, buffer, { httpMetadata: { contentType } });
Creamos cuatro buckets en R2:
  • weavejs-rooms: estado binario de los documentos Yjs
  • weavejs-images: imágenes subidas por los usuarios
  • weavejs-videos: vídeos
  • weavejs-generated-images: imágenes generadas por IA
La gran ventaja: R2 no cobra egress. En Azure, cada vez que un cliente descarga una imagen, pagas. En R2, no. Para una aplicación colaborativa donde se sirven imágenes constantemente, eso no es un detalle menor.

De PostgreSQL a D1 + Durable Objects: aquí sí que hay que pensar

Este fue el cambio más interesante. Y el que más hay que entender bien. D1 es un SQLite gestionado por Cloudflare. Perfecto para datos relacionales que no necesitan fuerte consistencia distribuida en tiempo real: salas, páginas, hilos de comentarios, metadatos de imágenes. Definimos las migraciones en SQL y listo.
CREATE TABLE rooms (
  id TEXT PRIMARY KEY,
  name TEXT NOT NULL,
  kind TEXT NOT NULL DEFAULT 'showcase',
  status TEXT NOT NULL DEFAULT 'active',
  created_at TEXT NOT NULL,
  updated_at TEXT NOT NULL
);
Pero hay un tipo de dato que D1 no puede manejar bien: el estado de conexión en tiempo real. ¿Qué clientes están conectados ahora mismo a qué sala? Eso requiere consistencia fuerte, una sola fuente de verdad. Para eso usamos un Durable Object.

El ConnectionRegistry es un DO singleton que usa SQLite interno (la API ctx.storage.sql de los DOs de nueva generación) para rastrear las conexiones activas. Una sola instancia, en un solo lugar del planeta, con garantía de consistencia fuerte. Exactamente lo que necesitas para algo así.

De Azure Web PubSub a Durable Objects: el cambio más grande

Azure Web PubSub era el corazón de la sincronización en tiempo real. Cada sala tenía un "hub" donde se publicaban y suscribían los eventos del documento Yjs. Reemplazarlo fue el reto más técnico de toda la migración. 

La solución: dos Durable Objects por sala.

1.- RoomSync: el documento Yjs vivo

RoomSync es el DO que mantiene el documento Yjs de cada sala. Implementa el protocolo y-websocket directamente, de forma que el cliente no sabe que está hablando con un Worker en lugar de con el servidor Node original.

Cuando un cliente se conecta, el Worker negocia la URL del WebSocket y el cliente conecta directamente al DO. El DO usa la Hibernation API de Cloudflare, lo que significa que cuando no hay mensajes, el DO hiberna y no consume CPU. Los WebSockets se mantienen abiertos sin coste.

El estado del documento Yjs se persiste en R2 cada vez que hay cambios, para que sobreviva reinicios del DO.
async webSocketMessage(ws: WebSocket, message: string | ArrayBuffer) {
  // Protocolo y-websocket: sync, update, awareness...
  const data = typeof message === 'string'
    ? new TextEncoder().encode(message)
    : new Uint8Array(message as ArrayBuffer);
  // broadcast a todos los clientes conectados
  for (const client of this.ctx.getWebSockets()) {
    if (client !== ws && client.readyState === WebSocket.READY_STATE_OPEN) {
      client.send(data);
    }
  }
}

2.- CommBus: el canal de eventos secundario

Además del documento Yjs, la aplicación tiene un segundo canal de WebSocket para eventos más ligeros: notificaciones de que una imagen se ha procesado, progress de exportaciones, heartbeats. A esto lo llamábamos el "comm-bus".

CommBus es otro DO por sala, más simple que RoomSync. Solo hace broadcast de mensajes JSON a todos los clientes conectados. También usa Hibernation API.

Lo más interesante: con Azure Web PubSub, el backend publicaba eventos en el hub y Azure se encargaba del fanout. Con los DOs, el Worker llama directamente al DO de la sala y el DO hace el fanout. Sin intermediarios, sin latencia adicional de round-trip a Azure.

De pg-boss a Cloudflare Queues: colas sin PostgreSQL

En el caso de pg-boss éste usaba PostgreSQL como backend de cola. Los trabajos asíncronos (generación de imágenes con IA, transformaciones de imágenes, exportaciones a PDF) se encolaban en una tabla de PostgreSQL y un worker de Node los procesaba.

En nuestros Workers, esto se convierte en Cloudflare Queues. El producer es el Worker del backend: cuando llega una petición de exportación o generación de imagen, encola el mensaje y devuelve un 202 Accepted con un taskId.

await c.env.WORKLOADS_QUEUE.send({ jobType: 'generate-images', taskId, roomId, payload: body, }); return c.json({ taskId, status: 'pending' }, 202);

El consumer es el mismo Worker, pero en su handler de queue:
 
async queue(batch: MessageBatch%lt;WorkloadMessage%gt;, env: Env) {
  for (const message of batch.messages) {
    await handleWorkload(message.body, env);
    message.ack();
  }
}

El estado de cada tarea se guarda en D1 (tabla tasks), y el frontend hace polling hasta que el estado cambia a completed.

De better-auth a Cloudflare Access: autenticación sin base de datos

Vamos con better-auth que también estaba en PostgreSQL e implicaba gestionar sesiones, tokens de refresco, tablas de usuarios... Todo eso desapareció:

Pusimos Cloudflare Access delante de la aplicación.

Access gestiona el login (con el proveedor de identidad que quieras: Google, GitHub, OTP, passkeys) y emite un JWT firmado que llega a cada petición como la cookie CF_Authorization o el header Cf-Access-Jwt-Assertion. El backend solo tiene que verificar ese JWT:

const { payload } = await jwtVerify(token, JWKS, {
  issuer: env.CF_ACCESS_TEAM_DOMAIN,
  audience: env.CF_ACCESS_AUD,
});
c.set('userId', payload.sub ?? payload.email);

Sin tabla de usuarios. Sin tabla de sesiones. Sin refresh tokens. El JWKS se rota automáticamente cada seis semanas y jose lo gestiona con createRemoteJWKSet, que cachea y rota transparentemente. No está mal para eliminar toda una capa de complejidad.

De Google Generative AI a Workers AI: IA en el edge

La generación de imágenes con IA pasó de llamar a Google Generative AI desde un servidor Node a usar el binding AI de Workers, con los modelos FLUX disponibles en Workers AI, enrutado todo a través de AI Gateway.
const result = await env.AI.run(
  '@cf/black-forest-labs/flux-1-schnell',
  { prompt, steps: 8 },
  { gateway: { id: env.AI_GATEWAY_ID, skipCache: false } }
);

AI Gateway añade logging, caché semántica y control de costes sin cambiar una línea del código de inferencia. Si el mismo prompt ya se generó antes, devuelve la imagen cacheada en milisegundos.


Para los modelos que no están en Workers AI (como gpt-image-1 de OpenAI) seguimos usando la API directa, pero también enrutada a través de AI Gateway para tener el mismo sistema de observabilidad.



El chat con IA también pasó a Workers AI, usando el modelo llama-3.3-70b-instruct-fp8-fast con streaming. El Worker devuelve el ReadableStream de SSE directamente desde el binding, sin transformaciones intermedias.

De Node.js con sharp a Cloudflare Images: transformaciones sin binarios nativos

Aquí nos encontramos con la limitación más dura del modelo de Workers: no puedes ejecutar binarios nativos. sharp, skia-canvas, ffmpeg son todos binarios de Node.js que no pueden correr en un isolate de V8. Para las transformaciones de imagen básicas (flip, escala de grises, eliminar fondo) usamos el Cloudflare Images binding, que hace las transformaciones de forma nativa en el edge:
  
const result = await env.IMAGES
  .input({ imageKey: `${roomId}/${imageId}` })
  .transform({ flip: 'h' })
  .output({ format: 'image/webp' });

Para las operaciones más complejas que no soporta el binding, como la inversión de colores, el Worker devuelve una señal al frontend indicando que debe procesar la imagen client-side usando la Canvas API. No es perfecto, pero funciona. Podríamos haber implementado esta funcionalidad con Cloudflare Containers, pero dejamos esto para el roadmap futuro.

Las exportaciones a PDF y las capturas de página para la presentación son el único caso pendiente. Esas tareas se encolan y quedan marcadas como requires-external-processing. La solución pendiente es desplegar un Cloudflare Container que ejecute el código Node.js original de exportación y escriba el resultado de vuelta a R2.

El frontend: TanStack Start en Workers con Nitro

El frontend ya usaba TanStack Start + Vite + Nitro. Nitro tiene un preset cloudflare_module que compila el servidor SSR directamente a un módulo de Worker. Un único cambio de configuración:
NITRO_PRESET=cloudflare_module vite build --mode production
Y el resultado es un index.mjs listo para wrangler deploy, con los assets estáticos en .output/public/ servidos desde Workers Static Assets. Los únicos cambios que tuvimos que hacer en el frontend:
  • Eliminar sharp (no puede importarse en un Worker): añadimos un stub que lanza un error descriptivo.
  • Reescribir el middleware de "coming soon" para usar la Web Crypto API (crypto.subtle) en lugar de crypto.createHmac de Node.
  • Reemplazar useGetAzureWebPubSubProvider por useGetWebsocketsProvider, que usa WeaveStoreWebsockets en lugar del cliente de Azure.
Ese último cambio fue casi poético en su simplicidad: una sola línea diferente en el componente de la sala.

Los bugs que encontramos por el camino

La migración no fue perfecta desde el primer momento. Os cuento los más divertidos.
  • El race condition del WeaveProvider. El SDK de Weave llama a registerStore() dentro de un método start() asíncrono. Si React desmontaba el componente <WeaveProvider> antes de que start() terminara —lo que pasaba cuando cambiaba el key del componente al resolverse la primera página— destroy() se llamaba antes de que this.store estuviera asignado. 
Resultado: TypeError: Cannot read properties of undefined (reading 'disconnect'). La solución: no montar <WeaveProvider> hasta que actualPageId esté definido, para que la key sea estable desde el primer render.
  • La identidad del usuario. Las salas que había creado con el sistema original de better-auth usaban un UUID v4 generado por la propia aplicación. Cloudflare Access usa el sub del JWT, que es el UUID de la identidad en Access: otro valor completamente distinto. Así que al arrancar con Access, el backend no encontraba mis salas en D1 porque los IDs no coincidían.
La solución fue buscar el sub de mi usuario de Access mediante la API de Cloudflare y lanzar una query de migración directamente en D1 para reasignar los room_users al nuevo userId. Desde fuera me imagino que esto suena a obviedad, pero cuando estás depurando a las 11 de la noche y las salas "desaparecen"... no es tan obvio. }:)
  • Las rutas del frontend apuntando a endpoints inexistentes. Al auditar todos los endpoints descubrimos que varios frontends llamaban a rutas que en el nuevo backend no existían: /rooms/:roomId/chats en lugar de /rooms/:roomId/ai/chats, el endpoint de presentación en /api/v1 en lugar de /api/v2, las rutas de templates con scope de sala que el backend global no tenía... Una auditoría completa de todos los apiFetch del frontend contra todos los routers del backend reveló diez discrepancias. Las corregimos todas.
El resultado final

La arquitectura final tiene exactamente dos Workers desplegados:
  • Backend: Hono + D1 + R2 (×4) + Durable Objects (×3 clases) + Queues + Workers AI + Cloudflare Images + Cloudflare Access.
  • Frontend: TanStack Start + Nitro + Workers Static Assets.
Sin servidores que escalar. Sin bases de datos que parchear. Sin factura de Azure Web PubSub por conexiones WebSocket. Sin egress de Azure Blob Storage.

Figura 8: Arquitectura de Weave.js en Cloudflare

Y todo desplegable con dos comandos:
  • cd backend && npm run deploy
  • cd frontend && npm run deploy
¿Mereció la pena? Para mí, rotundamente sí. Y no solo como ejercicio técnico. La respuesta a mi pregunta inicial "¿cuánto tarda en correr esto en Workers?" resultó ser "un par de días quemando tokens". Para una aplicación colaborativa en tiempo real con sincronización CRDT, IA generativa, colas de trabajos asíncronos y autenticación Zero Trust.

Lo más valioso que me llevé no es el código. Es la comprensión de cómo los Durable Objects resuelven el problema de estado distribuido en tiempo real de una forma que ningún servicio gestionado externo puede igualar: el estado vive en el edge, co-localizado con los clientes, sin round-trips a una región central.

Eso, para una aplicación de colaboración en tiempo real, es EL detalle.

Y dicho esto: si alguien de Inditex Tech Open Source está leyendo esto y quiere charlar sobre la migración, ya sabéis dónde encontrarme, que seguro que podemos hacer más proyectos de estos juntos.

Saludos,

lunes, noviembre 02, 2026

CP Advantage 2026: En Praga el 5 de Noviembre

Últimamente estoy haciendo un esfuerzo de meter muchas cosas en la agenda para poder cumplir con las peticiones que he ido recibiendo, pero os garantizo que en Diciembre voy a realizar cero charlas, eventos o entrevistas. Eso sí, Noviembre me ha quedado "apretado", y si el día 3 de Noviembre, es decir, mañana, tengo la charla en el eCrime 2026 del Anti-Phishing Working Group en Lisboa, al día siguiente tomo un avión desde la capital de Portugal  para ir a Praga, que el día 5 de Noviembre estaré dando una charla en el evento de seguridad CP Advantage 2026, organizado por los amigos de CheckPoint para subir el nivel de los CISOS frente a los ciber-malos.
Así que, si eres de esos Españoles por el Mundo, y estás por allí, puedes animarte y venir al evento, que tiene una agenda repleta de charlas de Hacking & Cybersecurity. La agenda está en el idioma local, pero las conferencias serán en inglés - creo (o por lo menos la mía seguro que sí) -, con temas muy chulos. Eso sí, tradúcelo para tener los detalles.
Acabo de ver que me han puesto como "elitní hacker", así que más que agradecido por el detalle. Aunque los que venís a leer por aquí todos los días ya sabéis que sigo siendo el "josemaricariño" de siempre. Así que quedaros en la lista completa de speakers del evento y los temas que es espectacular.

Por supuesto, el evento de CP Advantage 2026 tiene un montón de actividades extras, así que, si por un casual estás por allí, o si te pilla cerca y puedes pasarte, dale un vistazo. Y lo mismo nos vemos por allí y nos saludamos.

¡Saludos Malignos!

Autor: Chema Alonso (Contactar con Chema Alonso)  


viernes, octubre 30, 2026

Cómo evitar fugas de documentos con un "DLP AI" para ficheros de imágenes con Cloudflare Workers AI y Clef

Estando en Argentina me preguntaron por una capacidad de los Guardarraíles para DLP de Cloudflare. "¿Cómo evitamos que los usuarios envíen documentos gráficos con DNIs, Pasaportes o tarjetas de Crédito?" La idea es sencilla, y no es una opción por defecto en muchos DLPs, pero es que hoy en día en los Guardarraíles, o en los WAF, o en el CASB de la plataforma de Cloudflare puedes hacer una llamada a un Worker y correr cualquier check que quieras, y con la llegada de los Modelos de Decisión como Cloudflare Clef, esto es muy sencillo de realizar.
Así que le puse a mi "wingman" en Cloudflare, el gran Carlos Luengo, un audio que le decía algo así como "Su misión, en caso de aceptarla, consiste en hacer un Worker AI que reciba una imagen, la pase por Clef y nos diga si es un leak de un documento oficial (DNI o Passport) o una tarjeta de crédito." Así que nada, en lo que dura un ping a Cloudflare , con el Vibe Coding hizo una PoC llamada Visor muy sencillita.
La arquitectura utiliza las piezas de Cloudflare para construir en el Edge, y la podéis probar vosotros mismos, ¿quién necesita una región en la cloud para esto cuando tienes Region Earth en Cloudflare? Utilizar Turnstile y Precursor para evitar los bots, luego un Worker para validar la imagen que sube, un Worker AI para hacer la ejecución de Clef, y el almacenamiento de imágenes para las pruebas en R2 y D1 para tener la información en tablas y un registro de las decisiones tomadas, que pueda servir para ajustar la configuración de las decisiones.
El resultado es VISOR, una web con la PoC muy sencilla, en la que puedes subir la imagen y probar la decisión. Sube imágenes fake creadas para esto que Internet está lleno, y en unos milisegundos tienes la respuesta en la misma web.
Yo lo he probado con todo tipo de imágenes, y lo ha hecho muy bien, pero si quieres probar esto en tu entorno y antes testearlo - como hemos hecho nosotros - puedes hacer que procese batches, en nuestro caso lo hemos hecho con imágenes que hemos cargado con URLs desde búsquedas en la web, y el resultado es perfecto.
La programación de este servicio en TypeScript es menos de un centenar de líneas, y lo puedes pedir a tu AI Coder favorito, que al final la llamada a CLEF (que es multi-modal y toma decisión con modelos de visión), es tan sencilla como está parte.
Y luego, una vez cargado el análisis - en este ejemplo hecho por mí solo he tenido en cuenta DNI y Pasaporte, pero puedes añadir el que quieras - tomas la decisión adecuada a cada uno de ellos.
Así que si quieres, puedes hacerte este Worker AI con Clef y meter este DLP en todos los puntos de control que desees. En el SGW, en el CASB, en el eMail Security, en los Guardrrailes, etcétera. La capacidad se puede consumir desde dónde tú quieras. Esta en el Edge mundial de Cloudflare, a 50 milisegundos en media en todo el mundo.
Y si has entendido esta prueba, imagina la cantidad de controles de seguridad que puedes poner en todos los procesos de tu organización, y en todos los servicios digitales que tienes añadiendo checks de seguridad con Clef.  En este vídeo tenéis el proceso completo, y los valores devueltos por Clef para todas las imágenes en la prueba individual y en Batch.

¿Se te ocurren controles de seguridad en llamadas telefónicas de tu Contact Center, en chats con clientes, en ficheros del sistema, en mensajes de email enviados y recibidos? A mí sí, y seguro que a ti también se te ocurren muchas ideas al respecto.

¡Saludos Malignos!

Autor: Chema Alonso (Contactar con Chema Alonso)  


miércoles, octubre 28, 2026

Shadow AI: Los datos de tu empresa que tus empleados enviaron a Servicios IA sin que tú lo supieras.

Hace unas semanas os hablé de en el artículo de "La Inteligencia Artificial está multiplicando los parches de seguridad ... ¿quién los va a instalar en tu PYME?" que el verdadero problema de la Inteligencia Artificial para una PYME no es el APT con el exploit sofisticado que les tumba, sino la gestión del volumen de parches que hay que instalar, y que no tiene a un responsable para ello.  Hoy quiero hablaros de otro problema igual de poco glamuroso y mucho más cercano, porque no viene de fuera. Ya está dentro de la empresa. Se llama la IA en la Sombra, o Shadow AI.

Esto no es más que la versión actual del Shadow IT, pero llevada al mundo de la IA, donde nos encontramos con herramientas de Inteligencia Artificial que los empleados usan por su cuenta, sin que nadie las haya revisado ni autorizado. De eso habla hace poco Catalin en su artículo "Inteligencia Artificial en las empresas: Tres formas de uso. Tres niveles de control del riesgo." donde explicaba los peligros de las diferentes formas de utilizar la IA en la empresa.
Un Asistente IA de chat con la cuenta personal, una extensión del navegador que resume lo que aparece en pantalla, un asistente de notas conectado al calendario que entra sólo en todas las reuniones. Nadie lo hace con mala fe, lo hacen para trabajar mejor. Pero para dar una respuesta útil, una IA necesita contexto, así que recibe contratos, hojas de clientes, informes internos o conversaciones completas. Datos privados de la empresa.


Y el problema ya se puede medir. Según el informe de "Cost of a Data Breach Report 2026" de IBM, el porcentaje de incidentes de seguridad con Shadow AI pasó del 20% al 43% en un año, y esos incidentes costaron de media 5,39 Millones de USD. Aun así, el 68% de las organizaciones que sufrieron una brecha NO tenía gobierno de la IA para gestionarla ni para detectar su uso no autorizado.

El consejo que no funciona

La recomendación de todas las guías es «no subas información sensible», y casi nadie la cumple, con razón. Si quieres que una IA revise un contrato y le quitas las partes, los importes y las fechas, el análisis ya no sirve. Y nadie va a pasarse una hora tachando datos antes de cada consulta. Lo que ocurre es que la gente sube el documento entero y no lo dice. La pregunta útil no es qué información subes. Es dónde la subes.

Subir no es entrenar, y al RGPD le da igual

Cuando adjuntas un documento a un Asistente de IA en la nube, sale de tu equipo y se procesa en los servidores de un tercero, tanto en la versión gratuita como en la de pago. Lo que cambia entre planes es lo que pasa después: si pueden entrenar con tus datos, cuánto tiempo los guardan y si puedes auditarlos o borrarlos. Por eso «no entrena con tus datos» no significa «tus datos no salen de la empresa».


Y al Reglamento General de Protección de Datos tampoco le importa si entrenan. Le importa que un dato personal ha salido de tu organización hacia un tercero que pasa a ser encargado del tratamiento, y eso exige un contrato firmado (artículo 28). Con una cuenta personal ese contrato no existe: el proveedor ni siquiera sabe que tu empresa existe.

Prohibir no funciona

La reacción habitual es vetar la IA. En la práctica, la gente sigue usándola desde el móvil o desde casa, y la empresa deja de ver lo que pasa. Prohibir no reduce el riesgo: lo vuelve invisible. La IA en la Sombra aparece cuando la herramienta oficial es peor que la que cada uno se busca, o cuando no hay ninguna. Por eso es un problema de gestión antes que de seguridad.

Lo que funciona es un método de tres pasos:

1.- Descubrir qué herramientas se usan de verdad.
2.- Clasificarlas: autorizada, pendiente de revisar o no autorizada.
3.- Gobernar con una norma de una página, formación del equipo y revisión periódica.

Y el mensaje al equipo cambia. Hemos pasado de «no subas nada sensible», sino «sube lo que necesites, pero solo aquí». Porque los empleados de hoy van a utilizar todos IA en su trabajo sí o sí, se la des tú disponible, o se la tengan que agenciar.


De todo esto hemos hablado en IronGate, donde además hemos dejado una tabla de diferencias entre una cuenta personal y una herramienta de empresa y el método paso a paso para gestionar el Shadow AI en la PyME que merece la pena leer entero. 
Si queréis saber qué herramientas de Shadow IA hay en los equipos de tu organización, desde IronGate ofrecemos un diagnóstico gratuito para descubrirlas todas ellas. Así que la pregunta que yo os haría hoy no es si tus empleados usan IA, que casi seguro que sí. La pregunta correcta es:

¿Sabes qué herramientas, y dónde están subiendo tus empleados hoy los documentos de la empresa?

Entrada destacada

Hacking IA: Jailbreak, Prompt Injection, Hallucinations & Unalignment. Nuestro nuevo libro en 0xWord

Pocas veces me ha hecho tanta ilusión que saliera un nuevo libro en 0xWord como con este libro de " Hacking IA: Jailbreak, Prompt Inje...

Entradas populares