Claude Code está marcando solicitudes con esteganografía
(thereallo.dev)- El binario de Claude Code 2.1.196 incluye una función que cambia la frase de la fecha actual en el prompt del sistema para ocultar señales de clasificación dentro de la solicitud
- El disparador es
ANTHROPIC_BASE_URL; si no es elapi.anthropic.comoficial o si hay un valor configurado, revisa el hostname y la zona horaria, y cambia el apóstrofo y los separadores de fecha - El hostname se compara con una lista de dominios y palabras clave decodificada desde una cadena base64 con la clave XOR
91, e incluye entradas comodeepseek,zhipu,moonshot,baidu.com,bytedance.netyproxyai.com - Si se usa el endpoint oficial de la API de Anthropic o no existe
ANTHROPIC_BASE_URL, la función retorna temprano y se mantiene el formato normalToday's date is 2026-06-30. - No se puede afirmar que sea una función maliciosa, pero si una herramienta para desarrolladores con permisos de acceso al filesystem y al shell oculta información de clasificación con marcadores Unicode invisibles, la confianza se resiente
Marcadores ocultos en la frase de la fecha
- El binario de Claude Code tiene una función que modifica la cadena de la fecha actual incluida en el prompt del sistema
- La frase predeterminada tiene la siguiente forma
Today's date is 2026-06-30.
- Hay dos partes que pueden cambiar
- El apóstrofo de
Today's - El separador de fecha: cambia de
-a/
- El apóstrofo de
- La frase resultante parece a simple vista una indicación normal de fecha, pero la solicitud en bruto contiene marcadores ocultos
- Como es una forma de ocultar datos en un lugar que parece texto plano, corresponde a esteganografía de prompts
La ruta condicional que activa ANTHROPIC_BASE_URL
- El disparador es
ANTHROPIC_BASE_URL, la anulación de la URL base de la API de Claude Code - Si no existe
ANTHROPIC_BASE_URL, la función retorna temprano - Incluso si tiene un valor, si el host es
api.anthropic.com, sale por la misma ruta - Solo cuando no hay retorno temprano se revisan las siguientes condiciones
- Si la zona horaria del sistema es
Asia/ShanghaioAsia/Urumqi - Si el hostname de la URL base de la API coincide con una lista de dominios decodificada, o con alguno de sus subdominios
- Si el hostname contiene ciertas palabras clave de laboratorios de IA
- Si la zona horaria del sistema es
Información codificada en la fecha y el apóstrofo
- Si la zona horaria es
Asia/ShanghaioAsia/Urumqi, cambia el formato de la fecha2026-06-30→2026/06/30
- Según el resultado de la clasificación del hostname, cambia el apóstrofo de
Today's- Normal:
' - Dominio conocido:
\u2019 - Palabra clave de laboratorio:
\u02BC - Dominio conocido y además con palabra clave de laboratorio:
\u02B9
- Normal:
- Estos caracteres Unicode tienen una diferencia visual muy pequeña en la mayoría de las fuentes monoespaciadas, por lo que es difícil notarlos
Lista oculta de dominios y palabras clave
- Las listas de dominios y palabras clave se guardan como cadenas base64 y se decodifican con la clave XOR
91 - La lista decodificada de palabras clave de laboratorios es la siguiente
deepseekmoonshotminimaxxaminimzhipubigmodelbaichuanstepfun01aidashscopevolces
- La lista decodificada de dominios es más grande e incluye dominios de empresas chinas, dominios de compañías de IA y dominios de proxies, revendedores y gateways
- Algunos ejemplos son los siguientes
cnbaidu.comalibaba-inc.comalipay.comantgroup-inc.cnbytedance.netkuaishou.comxiaohongshu.comjd.combilibili.coiflytek.comstepfun-inc.commoonshot.aianyrouter.topclaude-code-hub.appclaude-opus.topopenclaude.meproxyai.comyunwu.aizenmux.ai
- La lista completa puede consultarse en cc-domains.js
Dónde entra en el contexto del sistema
- El resultado de la función de fecha entra como valor
currentDateal construir el contexto del agente - El mismo contexto también puede incluir, según las condiciones, el correo electrónico del usuario y la información de proyectos vinculada
- Por lo tanto, el marcador pasa a formar parte del contexto del sistema que se envía al modelo
- También queda la posibilidad de que el backend de Anthropic analice este valor
Entorno de instalación verificado
- El binario instalado de Claude Code verificado está firmado por Anthropic
Identifier=com.anthropic.claude-codeTeamIdentifier=Q6L2SF6YDWTimestamp=Jun 29, 2026SHA256=6fc6e61ab7582c2bf241225ff90d9f79e91d69380cb9589fc9dedd3a30070f5a
- Al momento de la verificación, el shell no tenía configurado
ANTHROPIC_BASE_URLy la zona horaria eraAsia/Hong_Kong - En este entorno se genera un apóstrofo normal y una cadena de fecha
YYYY-MM-DD
Casos de uso afectados y limitaciones
- Para la mayoría de los usuarios, es probable que esta ruta permanezca inactiva
- Si se usa el endpoint oficial de la API de Anthropic o no existe
ANTHROPIC_BASE_URL, el prompt de fecha se mantiene en una forma normal - Los casos interesantes son aquellos en los que Claude Code se enruta mediante una base URL personalizada
- Gateway interno
- Proxy local
- Router de modelos
- Revendedor
- Entorno de investigación
- En ese caso, Claude Code clasifica el hostname y codifica el resultado en el prompt
- Las formas de evasión son simples
- Cambiar el hostname
- Cambiar la zona horaria
- Parchear el binario
- Envolver el proceso
- Un atacante serio podría neutralizar esta señal, por lo que los desarrolladores comunes que usan configuraciones inusuales pero legítimas quedan más expuestos a fingerprinting
Una implementación que erosiona la confianza
- Es posible que Anthropic busque detectar revendedores de API, gateways no autorizados de Claude Code o pipelines de “distillation attack” de modelos
- Si un
ANTHROPIC_BASE_URLpersonalizado apunta a un dominio de revendedor conocido, o si el hostname contienedeepseekozhipu, podría usarse como señal de detección - El problema es la forma de implementación
- Modifica silenciosamente el prompt del sistema
- Codifica información de clasificación de proxies y gateways en un lugar que parece una frase común en inglés
- Oculta la lista de dominios detrás de XOR y base64
- Un agente de programación puede revisar código en la máquina local, ejecutar comandos, instalar paquetes, editar archivos e incluso hacer push de commits
- Para detectar gateways de API personalizados también podrían usarse campos de telemetría explícitos y documentados, políticas públicas o notas de lanzamiento
- Si una herramienta con permisos de acceso al filesystem y al shell oculta bits de clasificación en puntuación invisible del prompt, también se vuelve difícil confiar en otras afirmaciones sobre privacidad
1 comentarios
Opiniones de Hacker News
Hay reacciones que minimizan la gravedad de que un proveedor de servicios no revele con transparencia qué hace exactamente una herramienta que desplegó en las máquinas de sus clientes
Que hubiera una necesidad de negocio no significa que puedan evitar una divulgación honesta
Que su solución se vuelva inútil si la divulgan honestamente tampoco es mi problema; más bien, si consideraron que esto estaba bien, me hace sospechar qué más podrían estar recopilando en mi máquina, como información de identificación personal
Visto con cinismo, más que un juicio sobre este caso, siento que el tono de los comentarios refleja sentimientos sobre la IA/Anthropic/Estados Unidos, etc.
Esto parece una medida de respuesta natural para revelar ese hecho
Dejando de lado los juicios de valor, me sorprende un poco que hayan implementado esto de forma tan burda
Creo que podrían haber logrado el mismo efecto reduciendo la probabilidad de que se detectara mediante ingeniería inversa
Este campo se conoce como “underhanded code”, popularizado por el Underhanded C Contest: https://www.underhanded-c.org
Es un “arte” poco conocido, y la razón debería ser obvia. Hay formas mucho más ingeniosas de lograr estos objetivos
Un método evidente es mover más lógica del cliente al servidor; otro es escribir código de cliente plausiblemente negable de una forma que parezca mucho más inocua
Algunas de las cosas agregadas solo podían hacerse en el cliente, pero otras podrían haberse movido, y hasta las partes que requerían el cliente podrían haberse hecho de manera más sutil y plausible
También es posible que, como los bundles de JS se revisan tanto, supieran que al final se descubriría y se reportaría, y por eso no lo hicieron más sigiloso y engañoso; aun así, se siente algo descuidado
Sería difícil impedir que un gran laboratorio de IA realmente decidido destile el modelo, pero A) pueden bloquear a muchos revendedores improvisados de tokens que quieren ganar dinero rápido y B) alguien de un laboratorio grande podría olvidarse de instalar la evasión y delatarse solo
Lo veo como comprar un búho de plástico porque hay muchos pájaros en el patio. Aunque el búho ahuyente a la mayoría, pero no a todos, y por eso compres además un dispositivo ultrasónico, no hay razón para quitar el búho
Porque ahora tienes no una, sino dos capas de defensa
No porque el modelo de Anthropic sea malo, sino porque Claude parece romper cada día algo nuevo y molesto, así que me estoy moviendo más hacia Codex y OpenCode
Los grandes modelos de lenguaje pueden usar la distribución de tokens para crear esteganotexto que se lee como prosa plausible, pero que se decodifica como un payload¹
¹ https://github.com/hodgesmr/calgacus-mlx
Puede que Anthropic haya implementado esto no como un sistema continuo de detección contra revendedores proxy, sino como un sistema de muestreo puntual para averiguar dónde y en qué contextos está ocurriendo actualmente la reventa por proxy
Algún día se descubriría, pero hasta entonces Anthropic puede obtener datos de snapshot útiles
La conclusión de esta entrada de blog es un poco exagerada
La intención de esta esteganografía es muy clara: identificar el uso por parte de empresas chinas que podrían estar haciendo destilación de modelos
No queda claro que esto, de alguna forma, “castigue a desarrolladores comunes”
Entre los motivos legítimos están analizar qué envía Claude Code a Anthropic para verificar que no haya filtración de datos, elegir dinámicamente el modelo según la dificultad del prompt o forzar un modelo específico, alternar entre varias cuentas de Anthropic según el proyecto, y filtrar credenciales, información de identificación personal o secretos de la empresa
El fin no siempre justifica los medios
Haya habido daño o no en este caso, esto es una violación de la confianza y la autonomía
Aunque alguien dijera que, al menos por ahora, el código solo está ahí para detectar y delatar al enemigo público número uno, si instaló un rootkit en secreto, obviamente me enojaría
A diferencia de Claude Code, Codex CLI es software libre y de código abierto, así que es menos probable que haga algo así, y ahora hay una razón más para evitar Claude Code y Claude en general.
Espero que muchos ojos revisen Codex en busca de este comportamiento malicioso.
Soy muy escéptico con las políticas de privacidad y las prácticas de negocio, pero me pregunto qué perjuicio me causa esto como cliente.
Si ayuda a retrasar el momento en que se corten los subsidios, desde el punto de vista del cliente incluso parece conveniente.
Aunque, si estos proxies fraudulentos ayudan a los laboratorios chinos a ponerse al día, a largo plazo también podría favorecer que yo termine teniendo una IA personal de alta calidad, totalmente bajo mi control en mi propio hardware.
No digo que lo apoye, pero reconozco que existe ese incentivo.
Que el cliente sea libre y de código abierto solo significa que se hará más análisis oculto del lado del servidor.
No son builds deterministas, pero aun así hay cierta garantía de procedencia de que viene del repositorio real.
La reacción de “si el cliente quiere detectar gateways de API personalizados, simplemente debería decirlo de forma clara: enviar un campo de telemetría explícito y documentado, hacer visible la política e incluir el comportamiento en las notas de lanzamiento” me parece muy ingenua.
Si el cliente envía al gateway un campo de telemetría explícito, un gateway malicioso puede eliminarlo o modificarlo muy fácilmente para que parezca tráfico normal.
La razón por la que vale la pena este juego del gato y el ratón con esteganografía es que al gateway le resulta mucho más difícil seguir aplicando ingeniería inversa a todos los mecanismos de fingerprinting que se usan.
Por supuesto, algunos gateways maliciosos seguirán poniéndose al día, pero no todos podrán hacerlo siempre.
Si no eres un laboratorio chino de destilación, esto es un asunto completamente sin problema.
Porque el mercado internacional de servicios para eludir KYC está muy desarrollado.
No solo las herramientas de IA, también las herramientas de desarrollo deben ejecutarse en un sandbox.
Por ejemplo, en los repositorios de paquetes de Python o JavaScript puede entrar cualquier cosa; no tienen contratos con empresas antivirus ni una verificación ciudadana confiable, así que no deberían ejecutarse sin sandbox.
Piensa que usuarios anónimos de cualquier país pueden subir cualquier cosa, y millones de desarrolladores pueden ejecutarla en sus computadoras.
Los IDE, plugins de IDE, servidores LSP y plugins de IA también deberían ir todos en sandbox.
La mayoría no es revisada por empresas antivirus, y no deberían ejecutarse sin restricciones.
Además, ya existe un teorema de que ningún antivirus puede garantizar al 100% la seguridad del código.
Curiosamente, la documentación de pip no menciona para nada el tema de sandboxing o malware en su guía de “primeros pasos”, como si viviera en un mundo maravilloso donde no existen personas, empresas ni países maliciosos.
Espero que al menos en HN no haya gente viviendo en esa fantasía.
Como quiero usar IDE, LSP y herramientas de IA, primero tengo que escribir mi propio sistema de sandboxing, y Linux solo ofrece primitivas básicas, así que toma mucho tiempo.
Por ejemplo, para controlar todo el tráfico de red sin privilegios de root, hay que crear un espacio de nombres de usuario para obtener privilegios de root, crear un espacio de nombres de red, escribir un “recolector de tráfico” que se ejecute dentro del espacio de nombres y pase los datos por pipe a un programa “supervisor” externo, y luego el programa supervisor debe enrutar el tráfico hacia su destino.
Incluso para simplemente filtrar e inspeccionar tráfico sin privilegios de root, Linux exige hacer demasiadas cosas.
Tampoco debe quedar ninguna información en el nombre de usuario ni en el hostname. Como demuestra este artículo, esa información se usará en tu contra.
En resumen, esto es lo que Anthropic ya ha venido haciendo: desde años antes de que el gobierno lo exigiera, filtró a personas que están del lado equivocado de “toda la humanidad”, degradó modelos de formas arbitrarias y luego respondió con algo como “lo sentimos, pero no tanto”, y obstruyó activamente cambiando respuestas en secreto para darles resultados incorrectos a los usuarios.
¿Qué deberíamos esperar después? ¿Malware que convierta en ladrillos las máquinas de usuarios que no le gustan? ¿Expandirlo a más gente que no le guste?
Creo que ya se ve cómo se desplegará la visión utópica de Dario Amodei para “toda la humanidad”.
Si lo miras desde el punto de vista de que esta gente cree sinceramente que está construyendo una superinteligencia, todo se entiende.
La abrumadora mayoría del campo de la seguridad de IA ha dedicado a este problema mucha más vida y tiempo que el comentarista promedio de sillón de HN, y considera que hay que impedir que China llegue primero a la superinteligencia, que el acceso a la superinteligencia solo debe permitirse a actores buenos verificados, y que si se falla en ese objetivo, la competencia termina con la extinción de la humanidad.
Si no asumimos que mienten cuando dicen “creemos que estamos construyendo una superinteligencia”, casi todo lo que hacen se vuelve comprensible.
Ya había reportado aquí un mecanismo similar de inyección de prompt de sistema.
https://news.ycombinator.com/item?id=48259288
https://github.com/anthropics/claude-code/issues/62061
Como era de esperarse, parece que siguen encontrando usos nuevos y “creativos” para cosas así.
Yo seguiré eliminándolo con parches.
No sabía que el prompt de sistema estaba metiendo cosas como “evita las abstracciones; tres líneas de código similares son mejores que un helper”.
Es algo con lo que no estoy de acuerdo.
¿Hay alguna forma de corregirlo poniendo instrucciones en CLAUDE.md para sobrescribir ese tipo de prompts? Supongo que no se puede cambiar directamente el prompt de sistema en sí, pero ¿no debería CLAUDE.md tener la última palabra?
No entiendo bien la preocupación por la privacidad que el autor intenta enfatizar.
Claro, si te descubren haciendo algo “encubierto”, siempre vas a levantar sospechas; pero, por otro lado, si haces público cómo funciona una “función de seguridad” como esta, no tiene sentido implementarla.
Y, en mi opinión, la esteganografía no es seguridad basada en la oscuridad.
Así como mantener privada la clave privada en RSA no es seguridad basada en la oscuridad, mantener privado lo que debe ser privado es parte del modelo de seguridad.
Pero la arruinaron en el punto en que lo implementaron tomando huellas digitales de mis patrones de acceso sin revelarlo antes.
Esto no es solo “encubierto”: es simplemente encubierto, deshonesto y falto de ética.
Que este caso sea inofensivo tampoco consuela mucho. ¿Quién garantiza que no estén recopilando información de identificación personal?
Que sus acciones tengan sentido comercialmente no es una razón para que la gente tenga que aceptar decisiones engañosas y hostiles hacia los clientes.
O quizá ni siquiera entiendan esta hipótesis, pero en realidad parece que no les importa la privacidad de los demás.
Dicen: “Entonces esta función castiga principalmente a quienes son fáciles de perfilar, es decir, desarrolladores comunes que hacen cosas raras pero legales”; ¿qué significa exactamente castiga aquí?
Más aún considerando que esa tecnología existe y que en Fable dijeron públicamente que la usarían en producción.