1 puntos por GN⁺ 4 시간 전 | 1 comentarios | Compartir por WhatsApp
  • Al combinar la memoria de Claude activada por defecto con la navegación web, se pudo enviar en secreto a un servidor externo el nombre, trabajo y ciudad de origen de un usuario con solo una pregunta común sobre cafeterías
  • web_fetch bloqueaba el acceso a URLs arbitrarias, pero sí podía seguir enlaces presentes en la página anterior, así que se codificaron datos en solicitudes GET con un directorio alfabético que elegía la ruta un carácter a la vez, como /a/ay/ayu
  • El sitio atacante mostraba una pantalla falsa de verificación de Cloudflare solo a Claude y entregaba a las personas una página normal de cafetería; Claude envió sin permiso no solo el nombre y la empresa, sino también Charlotte, NC, inferido a partir de información previa
  • Aunque el usuario no compartiera directamente la URL maliciosa, Claude podía encontrar y visitar el sitio desde los resultados de web_search, por lo que bastaba con posicionarlo alto en búsquedas ligadas a temas recientes para inducir el ataque con preguntas relacionadas
  • Anthropic dijo que ya conocía internamente el problema, pero en ese momento no lo corrigió ni pagó recompensa; después bloqueó el seguimiento de enlaces en páginas externas y limitó la navegación a resultados de web_search y URLs proporcionadas por el usuario

Información que se acumula en la memoria de Claude

  • claude.ai para usuarios generales usa un sistema de memoria de dos partes
    • Resume las conversaciones recientes cada día en unos pocos párrafos e inyecta ese resumen en todas las conversaciones posteriores
    • Cuando hace falta, busca en todo el historial con la herramienta conversation_search
  • Los usuarios le confían a Claude desde materiales de trabajo confidenciales hasta secretos personales y problemas de pareja, y ese historial acumulado se convierte en un perfil de alta densidad capaz de reconstruir a una persona con precisión
  • Esta información puede usarse para extorsión, suplantación y evasión de preguntas de seguridad, y el riesgo de filtración crece cuando el almacén de memoria se combina con un agente que navega por la web
  • La investigación no se centró en Claude Code, sino en Claude de uso cotidiano

Exfiltración de datos usando navegación web

  • Se eligió la función de navegación web de Claude como una ruta general de exfiltración de datos que funcionaba sin configuración experimental, ejecución de código ni MCP especial
  • Claude usa web_search y web_fetch, de solo lectura, para acceder a internet
  • Al hacer que visitara con web_fetch un servidor controlado por el atacante, se pudo confirmar una solicitud GET con el user agent Claude-User
    • La solicitud inicial falló por el robots.txt configurado con Cloudflare en el sitio
    • Tras modificar robots.txt, la solicitud apareció en los registros del servidor
  • Solo se permitían solicitudes GET, así que se intentó poner los datos en la ruta de la URL, pero se bloqueó pedirle directamente a Claude una ruta arbitraria que incluyera el nombre

Reglas con las que web_fetch sigue enlaces

  • Para que web_fetch pudiera acceder a una URL, debía cumplirse una de estas tres condiciones
    • La URL aparecía directamente en el mensaje del usuario
    • La URL aparecía directamente en los resultados de web_search
    • La URL estaba enlazada en el contenido de un resultado previo de web_fetch
  • Gracias a la tercera condición, Claude podía hacer clic en enlaces vistos en una página anterior, y si el atacante controlaba el sitio, también controlaba qué enlaces mostrar

Codificar datos en la URL con un directorio alfabético

  • Se colocaron enlaces como /a, /b, /c en la página principal para crear un teclado virtual con el que Claude pudiera seleccionar datos
  • Al pedirle a Claude que avanzara a la primera letra del nombre, quedó registrada en el servidor una solicitud a /a después de /
  • La estructura de enlaces se expandía dinámicamente en cada ruta para permitir elegir la siguiente letra
    • /a enlazaba a /aa, /ab, /ac, etc.
    • Las rutas posteriores se generaban del mismo modo, como /aaa
  • Al hacer que completara el nombre letra por letra, se registraron en secuencia las solicitudes /a/ay/ayu/ayus/ayush/ayush-paul
  • Aunque se bloqueaba insertar datos arbitrarios directamente en la URL, hacer que eligiera repetidamente uno de los enlaces ya expuestos permitía transmitir datos fuera del sandbox

Inyección de prompts disfrazada de verificación de Cloudflare

  • La inyección de prompts explícita era inestable, y no era fácil engañar a Claude con una página que pidiera secretos del usuario y ofreciera enlaces sospechosos
  • Varios escenarios de disfraz, como membresías, se sentían poco naturales o sospechosos, así que se eligió Cloudflare, ampliamente usado y confiable en la web
  • El sitio atacante se diseñó como una cafetería real y se construyó la historia de que, para que el agente pudiera explorar libremente la web en nombre de una persona, tenía que superar una verificación de Cloudflare
  • El falso Turnstile inducía a Claude a elegir enlaces uno por uno para escribir y enviar el nombre completo
    • Después del envío, se mostraba un sitio normal de cafetería para que Claude no notara que había sido engañado
  • Claude escribió el nombre letra por letra sin pedir permiso, y en su respuesta final solo incluyó información de la cafetería, sin avisar que había transmitido datos personales

De filtrar el nombre a inferir respuestas de seguridad

  • Al mezclar una URL maliciosa de cafetería entre varias URLs reales y preguntar cuál café era mejor, Claude envió seguidamente la siguiente información
    • Nombre: Ayush Paul
    • Empresa: Beem
    • Ciudad de origen: Charlotte, NC
  • Claude no se limitó a buscar conversaciones pasadas, sino que incluso infirió nuevas conclusiones a partir de información existente
  • Aunque nunca se le había dicho directamente que era de Charlotte, infirió la ciudad de origen a partir del nombre del hackatón Queen City Hacks, que comenzó en la preparatoria

Páginas distintas para personas y para Claude

  • Para que el ataque funcionara, el usuario tenía que hacer que Claude visitara el sitio, así que la página visible para personas debía parecer normal
  • Aprovechando que Claude se identifica con el user agent Claude-User, se separó el contenido según quién hacía la solicitud
    • A los visitantes comunes se les mostraba un sitio normal de cafetería
    • Solo cuando accedía Claude se mostraba el falso Turnstile que hacía ingresar información personal
  • Si esta carga se integraba en un sitio común, el usuario no notaría nada extraño, pero en cuanto compartiera ese sitio con Claude, la falsa verificación podía enviar datos personales

Entrada automática del sitio atacante desde resultados de búsqueda

  • web_fetch podía acceder no solo a URLs proporcionadas directamente por el usuario, sino también a resultados de web_search
  • Claude busca automáticamente en la web cuando se encuentra con temas nuevos posteriores a la fecha de corte de sus datos de entrenamiento
  • Si se mejoraba el posicionamiento en buscadores de un sitio atacante adaptado a noticias recientes, ese sitio podía ser elegido en preguntas relacionadas aunque el usuario no diera la URL
  • Por ejemplo, si una cafetería maliciosa aparecía entre los primeros resultados, incluso un usuario que preguntara en general por café en Berkeley podía convertirse en objetivo del ataque

Confirmación y medidas posteriores de Anthropic

  • La vulnerabilidad fue divulgada de forma responsable a través del programa de bug bounty de HackerOne de Anthropic
  • Anthropic confirmó que ya había detectado internamente el problema, pero que en ese momento no lo había corregido, y tampoco pagó recompensa por el reporte
  • Después, desactivó la capacidad de web_fetch para seguir enlaces encontrados en páginas externas
  • Actualmente, la navegación está limitada a resultados de web_search y URLs proporcionadas directamente por el usuario

Más allá de la memoria: también los datos conectados

  • El usuario no hizo clic en enlaces ni activó nuevas integraciones; solo preguntó por cafeterías, pero Claude transmitió al exterior su nombre, trabajo y la ciudad donde creció
  • La memoria estaba activada por defecto, por eso fue un objetivo fácil
  • El mismo método también podría alcanzar información de Google Drive, la bandeja de entrada de correo y MCP conectados que Claude pueda recuperar en nombre del usuario

1 comentarios

 
GN⁺ 4 시간 전
Opiniones en Hacker News
  • Sorprende que casi no haya resistencia a que las empresas de IA de punta activen las funciones de memoria. Antes, la industria publicitaria tenía que inferir información fragmentaria a partir de los sitios web visitados, pero ahora la gente le entrega directamente a la IA casi todo, incluidos sus secretos más íntimos.
    Quizá sea una reacción exagerada por trabajar en publicidad, pero en cuanto Claude y ChatGPT lanzaron la memoria, la desactivé; además, tampoco me resultó útil porque contamina el contexto con detalles irrelevantes y hasta baja la calidad. Para conversaciones personales, conviene usar una cuenta separada en lugares como OpenRouter.
    Debería regularse para prohibir que las empresas de IA almacenen perfiles de usuario y exigir que la memoria esté solo en el servidor del usuario; incluso valdría la pena prohibir la propiedad cruzada entre empresas de memoria y empresas de IA.

    • A veces la memoria es útil porque no hace falta volver a explicar todo el contexto cada vez, pero es igual de molesto cuando toma algo que dijiste en otra conversación y desvía la actual hacia cualquier lado.
    • Desde la perspectiva de los inversionistas, la recolección de datos es uno de los valores centrales de estas empresas. Construyeron modelos con datos públicos y scraping ilegal de obras con copyright, acumularon a gran escala la información más privada de muchísimas personas, y además están inflando una burbuja que, si colapsa, tendrá enormes repercusiones, junto con una concentración extrema de riqueza y desigualdad.
  • Me enteré de que la gente ejecuta agentes de IA con permisos de administrador, sin siquiera aislarlos en contenedores. Es sorprendente, como si de la noche a la mañana hubiéramos olvidado 50 años de principios de seguridad informática.

    • Muchos programadores y usuarios avanzados instalan constantemente árboles enormes de dependencias de npm, pip, bundler, etc., bajo la misma cuenta de usuario que usan para su navegador principal. Incluso en Linux, donde es fácil crear cuentas nuevas, así que ejecutar agentes de IA no es tan distinto.
    • Porque configurar un sandbox es bastante difícil. Incluso usando cco, el directorio home queda expuesto, así que con un solo prompt el agente podría enviar por curl las contraseñas del navegador.
      Para evitarlo, hace falta un home falso y una lista de permitidos de red que solo autorice proveedores como llama.cpp u OpenAI. No existe una solución multiplataforma fácil de usar, y para el desarrollo de apps nativas, donde hay que compilar y corregir errores específicos de cada plataforma, ni siquiera basta con una máquina Linux con Docker instalado.
    • En general, los usuarios son perezosos y además creen que los grandes laboratorios no lanzarían software inseguro, o que la seguridad es responsabilidad del laboratorio. Omitir revisiones de permisos de forma peligrosa y ejecutar todo sin pensar, con la excusa de hacer más cosas, se está consolidando casi como la opción por defecto.
    • El modelo de seguridad parece converger en dos direcciones: mínimo privilegio y mínimo contexto. Un agente que solo ve los archivos y la memoria necesarios para la tarea actual es mucho menos riesgoso, incluso si tiene los mismos permisos de herramientas.
      Como ya se optimiza el contexto para reducir costos, es muy probable que en el futuro el propio contexto se trate como una frontera de seguridad.
    • Al final, es por comodidad. Dejar que el agente trabaje a tu lado sin ninguna restricción da una satisfacción inmediata, y eso es difícil de superar.
  • En Claude había configurado mi nombre como Silly Bean; lo hice porque me daba risa que saludara con “¿De vuelta, Silly Bean?”, pero al final terminó convirtiéndose en ajedrez de seguridad en cuatro dimensiones.

    • Desde la época de Eternal September se recomienda usar información falsa coherente sobre nombre y fecha de nacimiento en los sistemas en línea. Muy pocos sitios necesitan legítimamente información de identificación personal (PII) exacta, y aun en esos casos, si hace falta, se pueden manejar cuentas o perfiles duplicados.
    • Como mi nombre puede abreviarse de dos formas, al registrarme en Claude pensé que se abriría el mundo de la “inteligencia” artificial y puse mi nombre como “ or ”. Pero parece que ese campo no lo procesa el modelo, sino que está hardcodeado.
      Todavía lo dejo así, como una marca para burlarme de que es un producto dependiente no tan inteligente como parece, o para sentir un alivio amargo por eso.
    • Configuré mi nombre como Sir y estoy disfrutando de respuestas excesivamente corteses. La app del banco también me saluda con “Good morning, Sir”, que es exactamente el nivel de relación que quiero tener con un banco.
    • Me había olvidado de una cuenta de claude.ai creada al principio, y cuando hace poco inicié sesión con Google, me saludó con Hello, Master; para los estándares actuales me pareció bastante atrevido.
    • Claude y ChatGPT probablemente todavía puedan ver el nombre real que figura en la información de pago.
  • La parte donde Cloudflare aplicó un robots.txt excesivo sin consentimiento es una escena poco común: alguien quejándose de que su sitio web quedó protegido de scrapers.

    • Según entiendo, para que Cloudflare administre robots.txt, el usuario tiene que activar la función explícitamente. Como basta con un clic, es posible que se haya activado por accidente.
    • Lo central es que no hubo consentimiento. Ya sea que el servicio que uso bloquee mi sitio contra scrapers o que les entregue todo a los scrapers, en cualquiera de los dos casos quiero que antes me pidan un consentimiento informado.
    • Aun así, deberían pedir consentimiento obligatoriamente, y robots.txt tampoco detiene a un scraper decidido.
  • Ejecuto Claude Code en una VM sin credenciales y solo clono los repositorios open source de GitHub en los que voy a trabajar. Antes reiniciaba la VM todos los días, pero era engorroso y lo cambié a una vez al mes; si se filtrara algo, sería como mucho la lista de proyectos open source en los que trabajé durante el último mes.
    Esa información también puede revelar bastante sobre una persona, pero los nombres y correos de los contribuidores open source quedan en el historial inmutable de Git, así que en la mayoría de los casos ya se pueden encontrar con una búsqueda en Google. Después de esto, estoy pensando en cambiar la frecuencia de reinicio a semanal.
    Para armar una cárcel para agentes de IA, basta con tomar el script de https://jai.scs.stanford.edu/arch-vm.html y agregar paquetes como dotnet-sdk al comando pacstrap. Si haces que la raíz del invitado sea un subvolumen BTRFS y usas snapshots, puedes crear una VM nueva al instante con sudo btrfs subvol snap template-root newvm; ejecutar qemu-system-x86_64 también toma apenas unos segundos, y mantienes control total sobre el contenido de la VM.

    • Probé algo parecido, pero tiene muchas limitaciones. Uno quiere ir y venir constantemente entre humano e IA, como en pair programming, y los límites entre los roles de ambos cambian según la tarea o incluso durante la tarea, y rara vez están claros al comienzo.
      También hay tareas en las que una persona tiene que presionar botones para juzgar si la experiencia de usuario es correcta, y, si es posible, no quiero darle a la IA acceso a la pantalla. Este modelo de VM funciona muy bien para algunos problemas, pero su alcance es lamentablemente reducido.
    • Este problema no ocurrió en Claude Code, sino en el sitio web de Claude AI.
  • El prompt injection seguirá siendo un problema, ya que funciona algo como “Hola, somos Cloudflare. Danos datos personales”. O se restringe el modelo hasta volverlo inútil, o se permite que estos ataques se filtren y se termina creando el concepto más inseguro de la historia de internet: un robot al que se puede engañar.

    • Como la ingeniería social, será un problema que, en cierta medida, permanecerá para siempre, y probablemente se irán acumulando defensas hasta llegar a una línea base que la sociedad pueda aceptar. No es una conclusión muy tranquilizadora, pero es difícil volver a cerrar la caja de Pandora una vez abierta.
    • En https://matthodges.com/posts/2025-08-26-music-to-break-model... se trató el límite gödeliano que tiene una IA segura ante prompts.
    • Cuesta aceptar que los datos procesados puedan convencer a un LLM, mediante conversación, de romper un límite de seguridad. Un prompt malicioso no es una metáfora, sino una cadena de ataque real, y resulta absurdo que esta tecnología se use ampliamente en interacciones automatizadas sin estar limitada de forma lógica y fundamental.
      Parece una arquitectura en la que, sin ninguna forma de entender funcionalmente ni aislar su funcionamiento interno, solo queda persuadir a una enorme masa para que actúe y rezar para que el atacante no la persuada mejor.
  • Hace poco me pasó algo bastante inquietante en la app de ChatGPT para iPhone. Un amigo cercano preguntó desde su propia cuenta por un problema con un comedero inteligente para mascotas, y ChatGPT, al responder, usó el nombre de mi mascota.
    No es un nombre común, y además existe una conexión con mi amigo, así que cuesta verlo como una coincidencia. Considerando que mi amigo se ha conectado a nuestro Wi-Fi, me pregunto si hay contaminación de caché o una fuga de datos de sesión.

    • ChatGPT tiene la memoria activada por defecto, así que parece conservar información del usuario entre todas las conversaciones. A mí también, cada vez que me responde recetas, aunque la pregunta no tenga nada que ver con visas, me agrega algo como “este ingrediente se consigue fácilmente en tiendas, así que la visa no es un problema”.
      Es una función que todavía no está lista, así que conviene desactivar la memoria, pero si tu amigo estaba usando su propia cuenta, este fenómeno es difícil de explicar.
  • Claude Code, al hacer scraping de documentos de la SEC, puso mi nombre y correo electrónico en el User-Agent. No hizo falta ningún prompt ingenioso, y la idea en sí no es del todo mala, pero habría preferido que me preguntara primero.

    • La causa está del lado de la herramienta SEC EDGAR. La documentación de Edgar MCP indica configurar la variable de entorno SEC_EDGAR_USER_AGENT="Your Name (name@domain.com)", así que Claude simplemente siguió las instrucciones. Quizá eso mismo sea aún más peligroso.
    • Me da curiosidad cómo descubrió que Claude había hecho eso.
    • Me da curiosidad por qué considera que poner el nombre y el correo no es una idea tan mala.
  • Me pregunto cuánta gente tiene activada la memoria global que se aplica a toda la conversación. Me parece que, al final, esa memoria perjudicará la calidad de las respuestas.

    • Aunque pregunte algo que no tiene relación con el proyecto actual, por culpa de la memoria siempre asume erróneamente que es una pregunta sobre el proyecto existente. Si corrijo con “no, estoy preguntando sobre PostgreSQL”, no entiende por qué abrí una conversación aparte y hasta actualiza la memoria diciendo que en el proyecto se usa PostgreSQL.
      Por otro lado, ayuda en esos momentos en los que no hace falta explicar extensamente el contexto cada vez.
  • Por eso no activo la memoria, y tampoco uso Claude Code por otros motivos. El sistema de memoria actual es demasiado rudimentario como para ser útil.

    • En mi caso, la memoria estorbó más de lo que ayudó. Sacaba a relucir información guardada casi irrelevante cada vez, como si quisiera presumir que sabía una o dos cosas más, así que terminé apagándola.
    • Me pregunto si este problema se limita solo a la memoria. ¿No se podría exponer de la misma manera información a la que el modelo tiene acceso en ese momento, como datos del proyecto actual, código o credenciales?