Skip to content

OpenCode hackeado: claves de API expuestas, qué hacer ya

18 de octubre de 2026 · PlayCISO

Si una herramienta de programación con IA guarda tus claves de API de OpenAI, Anthropic o Google, esto va contigo. El 17 de octubre de 2026, OpenCode (el popular agente de programación de código abierto para terminal de Anomaly Innovations, antes SST) envió un correo a un subconjunto de usuarios para avisarles de que un intruso había accedido a un sistema heredado que estaba retirando y podía haber expuesto claves de API de proveedores guardadas en los espacios de trabajo de los usuarios. Hay desarrolladores que informan de pérdidas de dinero reales. Esta es la versión tranquila y precisa: qué está confirmado, qué no y qué hacer exactamente.

Por delante, para que no haya confusión

PlayCISO no está afiliado a OpenCode ni a Anomaly Innovations y no estuvo implicado en este incidente. Esta es una cobertura independiente, de terceros. Cada cifra concreta de este artículo (el 1,4 %, la afirmación sobre la notificación por correo, la afirmación sobre la coordinación con los proveedores) procede del correo de notificación de OpenCode tal como lo han recogido los medios o de informes públicos de usuarios en X. No tenemos información interna, no hemos verificado de forma independiente ninguna de las cifras de OpenCode y OpenCode no ha publicado un post-mortem técnico completo. Cuando sacamos una conclusión, lo decimos.

Qué se ha informado

  • Quién: OpenCode, mantenido por Anomaly Innovations (el equipo antes conocido como SST). Es un agente de programación con IA de código abierto para terminal que se usa con tus propias claves de API de proveedores, con más de 75 proveedores de modelos y sin recargo: pagas directamente al proveedor.
  • Qué: Según se informa, un intruso accedió a un sistema heredado en proceso de retirada. Las claves de API de proveedores guardadas en los espacios de trabajo de los usuarios pueden haber quedado expuestas.
  • Alcance (cifra de OpenCode): Descrito como un «ataque de destilación a gran escala» que afecta a ~1,4 % de los usuarios de OpenCode Console. Según se informa, OpenCode dijo que envió un correo a cada usuario afectado y que quien no recibió el correo no estaba afectado: se trataba de un subconjunto que tenía vinculados proveedores externos.
  • Claves mencionadas: OpenAI, Anthropic y Google.
  • Impacto real (informes de usuarios): Desarrolladores en X informan de gasto de inferencia fraudulento en claves que solo usaban en OpenCode: un hilo cita 281 $ (OpenAI) + 168 $ (Anthropic) a partir de las 2 de la madrugada, hora del Este, otro 1.700 $ y otros más de 400 $. El hilo común: otras claves que tienen esas mismas personas no se tocaron, lo que apunta directamente a las claves guardadas en OpenCode.
  • Lo que OpenCode NO pudo confirmar: si las claves expuestas se usaron de verdad con fines maliciosos. (Los informes de usuarios sugieren con fuerza que algunas sí).

Actualización: lo que añaden informaciones posteriores (17–18 de octubre de 2026)

Desde los primeros avisos han surgido más detalles de investigadores y usuarios afectados. Todo ello es información atribuida, no verificada de forma independiente por nosotros, y OpenCode sigue sin publicar un post-mortem técnico:

  • Cronología y una confirmación con nombre. Los primeros informes de la brecha aparecieron hacia las 22:30, hora del Este, del 17 de octubre de 2026. El investigador de seguridad Matt Johansen publicó que los clientes de OpenCode estaban recibiendo avisos de brecha mientras sus claves acumulaban cargos, y después escribió «Confirmed. OpenCode hacked. Keys stolen», instando a los clientes a revocarlas; la publicación alcanzó unas 158.000 visualizaciones.
  • Qué claves se filtraron, con más precisión. Según informes de usuarios (incluido Reddit), las claves guardadas solo en local parecen seguras, mientras que las claves añadidas para proveedores externos (por ejemplo, mediante OpenCode «Zen») son las que se informa que se filtraron. Además de OpenAI y Anthropic, al menos un usuario informa de que también se vieron afectadas sus claves de Google AI. Coincide con el planteamiento anterior del «subconjunto que tenía vinculados proveedores externos».
  • Pérdidas con nombre. El desarrollador Max Weinbach informa de que se vaciaron sus saldos de OpenAI y Anthropic y de que su cuenta de Google quedó limitada y parcialmente vaciada, y dice que OpenCode le envió un correo. Un usuario, Martynas, informa de que le vaciaron ~50 $ de Anthropic y ~70 $ de OpenAI en tokens de claves añadidas a OpenCode Zen; otros informan de cargos nocturnos de 65–281 $. Al menos un usuario pide un reembolso o crédito de Zen.
  • Una coincidencia, explícitamente NO una causa. Un usuario señaló que OpenCode 2.0 se lanzó ~14 horas antes de sus cargos, y varios dicen que las alertas de gasto saltaron durante la noche, pero no se ha establecido ninguna relación entre el lanzamiento de la 2.0 y la brecha, y no estamos insinuando que la haya.

Nada de esto cambia la respuesta: revoca y vuelve a emitir cada clave de proveedor que hayas guardado alguna vez en OpenCode (OpenAI, Anthropic, Google y cualquier otra), en el panel de cada proveedor, y revisa las facturas de tus proveedores al menos desde el 17 de octubre.

Por qué lo llamamos compromiso de credenciales y no «ataque de destilación»

«Ataque de destilación» es la expresión que, según se informa, usó el propio correo de OpenCode, así que se la atribuimos a ellos en lugar de ponerles palabras en la boca. Pero fíjate en los hechos observables: claves de proveedores que solo existen dentro de OpenCode se están usando para ejecutar grandes volúmenes de inferencia de pago en otro lugar. Esa es la firma de manual del robo y la reutilización de credenciales o claves de API: un secreto guardado quedó expuesto y los atacantes lo están gastando como un token al portador.

La destilación de modelos (entrenar un modelo más barato con las salidas de un modelo de frontera) puede muy bien ser el objetivo final del atacante para toda esa inferencia robada (es un móvil de fraude en rápido crecimiento: robar claves y generar datos de entrenamiento a costa de otro). Pero la brecha en sí es una exposición de secretos. Empezamos por el mecanismo porque el mecanismo te dice qué hay que arreglar. Esta es nuestra lectura de las pruebas públicas, no una determinación oficial.

Si usas OpenCode, o CUALQUIER herramienta de IA con tu propia clave, haz esto ya

  1. Revoca y vuelve a emitir cada clave de proveedor (OpenAI, Anthropic, Google y cualquier otra) en el panel de cada proveedor, no solo dentro de la aplicación.
  2. Audita el uso y la facturación en la consola de cada proveedor al menos desde el 17 de octubre de 2026 en busca de picos de gasto o actividad desconocida.
  3. Fija límites de gasto duros y límites de tasa en las claves nuevas para que la próxima filtración tenga un tope y no sea ilimitada.
  4. Prefiere claves de vida corta y de alcance limitado; borra las claves que no estés usando activamente.
  5. Deja de centralizar claves en bruto de larga duración: guárdalas en variables de entorno o en un gestor de secretos, no pegadas en el espacio de trabajo de una herramienta.
  6. Abre un ticket de soporte con el proveedor por cualquier cargo fraudulento. Si los proveedores reembolsarán o no sigue sin resolverse en la cobertura, así que pide pronto.

Puede que ya existiera una corrección para esa misma superficie, y un bot la cerró

Este es el detalle que convierte la historia en una cuestión de proceso, y no solo de brecha. El 28 de agosto de 2026, unas ocho semanas antes de la brecha, un colaborador de OpenCode abrió la pull request #45919, «fix(console): protect legacy auth with turnstile», que añadía un desafío de Cloudflare Turnstile al worker de autenticación de la consola heredada, verificaba la petición (acción, hostname, token, IP de origen) antes de que empezara el OAuth de GitHub o Google y bloqueaba que las rutas directas de los proveedores se saltaran el desafío. Alrededor de un mes después, un bot de GitHub Actions la cerró automáticamente con una regla de «Automated PR Cleanup» que indicaba los criterios: creada hace más de un mes y con menos de dos reacciones positivas. Según se informa, la brecha llegó después a través de un sistema heredado.

Qué demuestra esto y qué no

Verificado: la PR existió, se dirigía a la autenticación de la consola heredada y la cerró una regla automática de antigüedad y reacciones; todo ello es visible en el hilo público de la PR.

No demostrado: que esta PR concreta hubiera evitado esta brecha concreta. Turnstile bloquea el abuso automatizado de la ruta de autenticación; OpenCode ha descrito la brecha como un intruso que accedió a un sistema heredado que expuso claves guardadas, y no ha publicado la ruta exacta. No vamos a afirmar que la PR cerrada lo habría detenido. La afirmación más acotada y verificable ya es bastante grave: una corrección de endurecimiento para el mismo componente implicado se escribió pronto y la descartó la automatización, no una persona que la rechazara por su contenido.

La lección sistémica es la que merece citarse: un bot que cierra pull requests por antigüedad y número de reacciones no tiene ni idea de qué es una «corrección de seguridad». Las reacciones miden popularidad, no riesgo, y una PR de endurecimiento discreta y poco vistosa es justo la que no recibe pulgares arriba y caduca. Automatiza el triaje de PR si no queda más remedio (la avalancha de PR generadas por IA es real), pero no dejes nunca que una regla de antigüedad cierre automáticamente una PR que toque autenticación, secretos, criptografía o control de acceso sin una revisión de seguridad humana. Etiqueta las PR de seguridad al crearlas y excluye esas etiquetas de cualquier bot de limpieza.

Reconozcamos lo que corresponde: según OpenCode, la corrección se escribió unas ocho semanas antes del incidente y, cuando ocurrió, lo detectaron rápido, lo divulgaron ellos mismos y dicen que están trabajando en ello con los tres proveedores de modelos. El fallo que queda a la vista es un pipeline incapaz de distinguir un parche de seguridad del ruido, una trampa que casi todos los repositorios con mucho movimiento se han tendido en silencio. (Algunos informes citan también que los términos de OpenCode limitan su responsabilidad y excluyen los daños causados por modelos de terceros; no pudimos cargar la página de términos para confirmar la redacción exacta, así que tómalo como no verificado).

La lección para los responsables de seguridad

Una herramienta que funciona con tu propia clave es un punto de agregación de credenciales. Reúne en un solo sistema las claves de API de modelos de frontera de cada desarrollador que la usa, así que una única brecha de ese sistema expone a la vez cientos de tokens al portador de alto valor. Es un problema de radio de impacto, y se puede conocer de antemano.

  1. Una clave de API es un token al portador. Tenerla equivale a estar autorizado; sigue gastando tu dinero hasta que la rotas. Limita el daño antes de un incidente con límites de alcance por clave y topes de gasto duros. Nuestro laboratorio de ciclo de vida de claves de API recorre la emisión, el alcance, la rotación y la revocación de claves para que una filtración sea sobrevivible.
  2. Inventaría dónde viven realmente las credenciales de IA de los desarrolladores: herramientas de línea de comandos, plugins del IDE, secretos de CI y «sistemas heredados en proceso de retirada» (justo lo que, según se informa, sufrió la brecha aquí). No puedes rotar lo que no has mapeado.
  3. Trata la cadena de suministro de IA como cadena de suministro. Cada herramienta y cada servidor MCP que conectas puede leer o exfiltrar lo que le das. Nuestro escáner de servidores MCP maliciosos y el generador de modelos de amenazas para LLM te ayudan a razonar qué integraciones de IA tocan tus secretos y qué podrían hacer con ellos.
  4. Los sistemas en proceso de retirada son un vector de brecha recurrente. Se quedan fuera del parcheo y la monitorización mientras siguen guardando datos vivos. Pon en tu runbook de retirada una puerta firme de «datos purgados antes del apagado».
  5. Excluye los cambios de seguridad de la automatización de «PR obsoletas». El número de reacciones y la antigüedad son señales de popularidad, no de riesgo. Cualquier PR que toque autenticación, secretos, criptografía o control de acceso debería llevar una etiqueta que ningún bot de limpieza pueda cerrar automáticamente, porque la que acabe cerrando será la corrección que necesitabas. (Mira la sección anterior: una corrección con Turnstile para la autenticación de la consola heredada se cerró automáticamente ocho semanas antes de la brecha).

Nada de esto depende de saber quién fue el atacante ni del post-mortem final de OpenCode. La solución para un token al portador filtrado es siempre la misma: rótalo, limita su alcance, ponle un tope y vigílalo.

Mira este vídeo

En nuestro canal hay un resumen de 45 segundos del incidente de robo de claves de OpenCode y de la respuesta en seis pasos: consulta el blog de PlayCISO y nuestro YouTube para ver el short.

Fuentes y créditos

Gracias a los desarrolladores que lo hicieron público y a los medios que lo están cubriendo. Este artículo recoge su información; no origina ninguna de las cifras de OpenCode.

Incidente en desarrollo, última actualización el 18 de octubre de 2026. Actualizaremos si OpenCode publica un post-mortem técnico oficial. Si recibiste el correo de OpenCode, sigue sus instrucciones como fuente autorizada para tu cuenta.

Preguntas frecuentes

¿Ha sufrido PlayCISO una brecha? ¿Es este un incidente de PlayCISO?

No. PlayCISO no está afiliado a OpenCode ni a Anomaly Innovations y no estuvo implicado en este incidente. Es una cobertura independiente, de terceros, de un incidente en desarrollo, igual que cubrimos otros sucesos de seguridad. Todo lo que aquí se atribuye a OpenCode procede de su correo de notificación tal como lo han recogido los medios y de informes públicos de usuarios en X; no tenemos información interna y no hemos verificado de forma independiente ninguna de las cifras concretas de OpenCode.

¿Qué pasó en realidad?

Según varios medios que informaron sobre el correo de notificación de OpenCode, un intruso accedió a un sistema heredado que OpenCode (Anomaly Innovations) estaba retirando, y las claves de API de proveedores guardadas en los espacios de trabajo de los usuarios pueden haber quedado expuestas. Según se informa, OpenCode lo calificó de «ataque de destilación a gran escala» que afectaba a ~1,4 % de los usuarios de OpenCode Console y dijo que avisó por correo a todos los usuarios afectados. Por su parte, desarrolladores en X informan de que sus claves de OpenAI, Anthropic y Google (claves que solo usaban dentro de OpenCode) se están vaciando con un uso fraudulento. Sea cual sea la etiqueta, el mecanismo que describen los usuarios es un compromiso de credenciales o claves de API: tokens al portador robados que se reutilizan contra los proveedores de modelos. OpenCode dijo que no podía confirmar si las claves expuestas se usaron con fines maliciosos y no ha publicado un post-mortem técnico completo.

¿Por qué lo llamáis «compromiso de credenciales» y no «ataque de destilación»?

«Ataque de destilación» es el término que, según se informa, usó el propio correo de notificación de OpenCode, así que se lo atribuimos a ellos. Pero los hechos observables (claves de proveedores que solo existen en OpenCode usadas para ejecutar grandes volúmenes de inferencia de pago en otro lugar) describen el robo y la reutilización de credenciales o claves de API. La destilación de modelos (entrenar un modelo más barato con las salidas de uno más grande) puede ser el OBJETIVO FINAL del atacante para la inferencia robada, pero la brecha en sí es la exposición de un secreto guardado. Empezamos por el mecanismo porque te dice qué arreglar: rotar las claves. Ten en cuenta que esta es nuestra lectura de las pruebas públicas, no una determinación oficial.

Uso OpenCode (u otra herramienta de IA con mi propia clave). ¿Qué debo hacer ahora mismo?

Trata cada clave de proveedor que hayas puesto alguna vez en la herramienta como comprometida mientras no se demuestre lo contrario. 1) Revoca y vuelve a emitir tus claves de OpenAI, Anthropic, Google y de cualquier otro proveedor en el panel de cada proveedor; no te limites a «rotarlas en la aplicación». 2) Revisa el uso y la facturación en la consola de cada proveedor al menos desde el 17 de octubre de 2026 en busca de picos o actividad desconocida. 3) En las claves nuevas, fija topes de gasto mensuales duros y límites de tasa para que una futura filtración tenga un límite. 4) Prefiere claves de vida corta y de alcance limitado frente a las de larga duración; borra las claves que no estés usando activamente. 5) Abre un ticket de soporte con cualquier proveedor que muestre cargos fraudulentos; si reembolsarán o no sigue sin resolverse en la cobertura, así que pide pronto. 6) En adelante, evita las herramientas que centralizan claves en bruto de larga duración y guarda las claves en variables de entorno o en un gestor de secretos en lugar de pegarlas en un espacio de trabajo.

¿Cuál es la lección para los CISO y los responsables de seguridad?

Una herramienta que funciona con tu propia clave es un punto de agregación de credenciales: concentra en un solo sistema las claves de API de modelos de frontera de cada desarrollador que la usa, así que una única brecha de ese sistema expone a la vez cientos de tokens al portador de alto valor. Tres lecciones duraderas: (1) una clave de API es un token al portador (tenerla equivale a estar autorizado, y sigue gastando hasta que se rota), así que limita el radio de impacto con límites de alcance y topes de gasto duros antes de un incidente, no después; (2) inventaría dónde viven realmente las credenciales de IA de los desarrolladores (herramientas de línea de comandos, plugins del IDE, CI y «sistemas heredados en proceso de retirada», justo lo que sufrió la brecha aquí); y (3) los sistemas en proceso de retirada son un vector de brecha recurrente porque se quedan fuera del parcheo y la monitorización mientras siguen guardando datos vivos. Nada de esto requiere conocer la identidad del atacante.

¿Es cierto que ya existía una corrección y que la cerró un bot?

En parte, y la versión honesta importa. El 28 de agosto de 2026, un colaborador de OpenCode abrió la pull request #45919, «fix(console): protect legacy auth with turnstile», que añadía un desafío de Cloudflare Turnstile al worker de autenticación de la consola heredada; alrededor de un mes después, un bot de GitHub Actions de «Automated PR Cleanup» la cerró por tener más de un mes y menos de dos reacciones positivas. Todo eso puede verificarse en el hilo público de la PR. Lo que NO está demostrado es que esta PR concreta hubiera evitado esta brecha concreta: Turnstile bloquea el abuso automatizado de la ruta de autenticación, mientras que OpenCode ha descrito la brecha como un intruso que accedió a un sistema heredado que expuso claves guardadas, y no ha publicado la ruta exacta. La lección defendible trata del proceso, no de la causalidad: una automatización que cierra PR por antigüedad y número de reacciones no distingue una corrección de seguridad del ruido, así que acabará cerrando una. Excluye de los bots de antigüedad cualquier PR que toque autenticación, secretos, criptografía o control de acceso, y exige una revisión de seguridad humana. (Mérito de OpenCode: la corrección se escribió pronto, y el equipo detectó y divulgó el incidente y está trabajando en él con los tres proveedores).

🖤 Black Friday: new customers get 3 months of Pro for $5, then $5/month. Ends 30 Nov. Claim 3 months for $5 →