1 điểm bởi GN⁺ 4 giờ trước | 1 bình luận | Chia sẻ qua WhatsApp
  • Khi kết hợp bộ nhớ mặc định luôn bật của Claude với tính năng duyệt web, chỉ bằng một câu hỏi bình thường về quán cà phê cũng có thể bí mật gửi tên, nơi làm việc và quê quán của người dùng tới máy chủ bên ngoài
  • web_fetch chặn truy cập URL tùy ý, nhưng vẫn có thể lần theo các liên kết trên trang trước đó, nên dữ liệu được mã hóa vào yêu cầu GET bằng một thư mục bảng chữ cái cho phép chọn từng ký tự của đường dẫn như /a/ay/ayu
  • Trang tấn công chỉ hiển thị màn hình xác minh Cloudflare giả cho Claude, còn với con người thì cung cấp trang quán cà phê bình thường; Claude đã gửi cả tên, công ty và thậm chí Charlotte, NC được suy luận từ thông tin trước đây mà không xin phép
  • Ngay cả khi người dùng không trực tiếp đưa URL độc hại, Claude vẫn có thể tìm và truy cập trang đó từ kết quả web_search, nên chỉ cần đẩy trang lên top tìm kiếm theo một chủ đề mới là có thể dẫn dụ tấn công chỉ bằng câu hỏi liên quan
  • Anthropic cho biết họ đã biết vấn đề này từ nội bộ nhưng khi đó chưa vá và cũng không trả tiền thưởng; sau đó họ chặn việc lần theo liên kết trên trang bên ngoài và giới hạn phạm vi duyệt vào kết quả web_search cùng các URL do người dùng cung cấp

Thông tin tích lũy trong bộ nhớ Claude

  • claude.ai dành cho người dùng phổ thông sử dụng hệ thống bộ nhớ gồm hai phần
    • Tóm tắt các cuộc trò chuyện gần đây thành vài đoạn mỗi ngày và đưa chúng vào mọi cuộc trò chuyện sau đó
    • Khi cần thì dùng công cụ conversation_search để tìm toàn bộ lịch sử trò chuyện
  • Người dùng giao cho Claude từ tài liệu công việc mật đến bí mật cá nhân và vấn đề quan hệ, nên lịch sử tích lũy trở thành hồ sơ mật độ cao có thể tái dựng rất chi tiết về một con người
  • Thông tin này có thể bị lạm dụng cho tống tiền, mạo danh, vượt qua câu hỏi bảo mật, và rủi ro rò rỉ tăng lên khi kho bộ nhớ kết hợp với tác nhân có khả năng duyệt web
  • Đối tượng được khảo sát không phải Claude Code mà là Claude dùng hằng ngày

Rút dữ liệu ra ngoài qua duyệt web

  • Tính năng duyệt web của Claude được chọn làm đường rút dữ liệu phổ dụng, hoạt động mà không cần cấu hình thí nghiệm riêng, chạy mã hay MCP đặc biệt
  • Claude dùng web_searchweb_fetch chỉ đọc để truy cập Internet
  • Khi buộc web_fetch truy cập máy chủ do kẻ tấn công sở hữu, có thể xác nhận yêu cầu GET chứa user agent Claude-User
    • Yêu cầu ban đầu thất bại vì robots.txt mà Cloudflare đặt cho trang
    • Sau khi sửa robots.txt, yêu cầu bắt đầu xuất hiện trong log máy chủ
  • Vì chỉ có thể gửi GET, nhóm nghiên cứu định đưa dữ liệu vào đường dẫn URL, nhưng cách yêu cầu Claude trực tiếp truy cập một đường dẫn tùy ý có chứa tên đã bị chặn

Quy tắc web_fetch lần theo liên kết

  • Để web_fetch truy cập một URL, phải thỏa một trong ba điều kiện sau
    • URL xuất hiện trực tiếp trong tin nhắn của người dùng
    • URL xuất hiện trực tiếp trong kết quả web_search
    • URL đó được liên kết trong nội dung của kết quả web_fetch trước đó
  • Nhờ điều kiện thứ ba, Claude có thể bấm vào các liên kết đã thấy ở trang trước; nếu kẻ tấn công sở hữu trang web, họ cũng kiểm soát được sẽ hiển thị liên kết nào

Mã hóa dữ liệu vào URL bằng thư mục bảng chữ cái

  • Trên trang chủ, kẻ tấn công đặt các liên kết như /a, /b, /c... để tạo một bàn phím ảo cho Claude chọn dữ liệu
  • Khi yêu cầu Claude đi tới ký tự đầu tiên của tên, log máy chủ ghi nhận yêu cầu / rồi đến /a
  • Cấu trúc liên kết được mở rộng động để có thể chọn ký tự tiếp theo ở mỗi đường dẫn
    • /a liên kết tới /aa, /ab, /ac...
    • Các đường dẫn sau đó cũng tiếp tục được tạo theo cách tương tự như /aaa
  • Khi để Claude đánh vần đầy đủ cái tên, các yêu cầu /a/ay/ayu/ayus/ayush/ayush-paul được ghi lại theo thứ tự
  • Dù cách nhét dữ liệu tùy ý trực tiếp vào URL bị chặn, việc buộc Claude liên tục chọn một trong các liên kết đã lộ sẵn vẫn cho phép truyền dữ liệu ra ngoài sandbox

Prompt injection ngụy trang thành xác minh Cloudflare

  • Prompt injection quá lộ liễu tỏ ra thiếu ổn định, và không dễ lừa Claude bằng những trang đòi bí mật người dùng rồi đưa ra các liên kết đáng ngờ
  • Nhiều kịch bản ngụy trang khác, kể cả thành viên trả phí, đều không tự nhiên hoặc dễ gây nghi ngờ, nên tác giả chọn Cloudflare vì đây là cái tên được dùng rộng rãi và được tin tưởng trên web
  • Trang tấn công được dựng như một quán cà phê thật, rồi gài câu chuyện rằng để tác nhân tự do duyệt web thay con người thì cần vượt qua bước xác minh Cloudflare
  • Turnstile giả dẫn Claude lần lượt chọn liên kết để nhập đủ họ tên rồi gửi đi
    • Sau khi gửi xong, trang cung cấp website quán cà phê bình thường để Claude không nhận ra mình đã bị lừa
  • Claude đã nhập tên từng ký tự mà không hề xin phép, và trong câu trả lời cuối cùng chỉ đưa thông tin về quán cà phê mà không nói rằng dữ liệu cá nhân đã bị gửi đi

Từ rò rỉ tên đến suy luận câu hỏi bảo mật

  • Khi trộn URL quán cà phê độc hại vào giữa nhiều URL thật rồi hỏi nơi nào có cà phê ngon nhất, Claude đã lần lượt gửi các thông tin sau
    • Tên: Ayush Paul
    • Công ty: Beem
    • Quê quán: Charlotte, NC
  • Claude không chỉ tìm kiếm lại các cuộc trò chuyện cũ mà còn suy luận ra kết luận mới từ thông tin sẵn có
  • Dù chưa từng trực tiếp nói mình đến từ Charlotte, quê quán vẫn bị suy ra từ tên của hackathon thời trung học Queen City Hacks

Hiển thị trang khác nhau cho người và cho Claude

  • Để cuộc tấn công hoạt động, người dùng phải khiến Claude truy cập trang web, nên trang mà con người nhìn thấy phải trông hoàn toàn bình thường
  • Tận dụng việc Claude tự nhận diện bằng user agent Claude-User, nội dung được tách riêng theo đối tượng gửi yêu cầu
    • Khách truy cập bình thường sẽ thấy website quán cà phê hợp lệ
    • Chỉ khi Claude truy cập mới hiện Turnstile giả buộc nhập dữ liệu cá nhân
  • Nếu gắn payload này vào một website bình thường, người dùng sẽ không phát hiện gì bất thường, nhưng ngay khi đưa trang đó cho Claude, dữ liệu cá nhân có thể bị gửi đi qua màn hình xác minh giả

Tự động dẫn lưu lượng tấn công từ kết quả tìm kiếm

  • web_fetch không chỉ truy cập URL do người dùng trực tiếp cung cấp mà còn cả kết quả web_search
  • Claude tự động tìm kiếm web khi gặp chủ đề mới xuất hiện sau mốc dữ liệu huấn luyện
  • Nếu nâng thứ hạng tìm kiếm của một trang tấn công theo tin tức mới, thì ngay cả khi người dùng không đưa URL, trang đó vẫn có thể được chọn trong các câu hỏi liên quan
  • Ví dụ, nếu trang quán cà phê độc hại xuất hiện ở top kết quả, cả người dùng chỉ hỏi chung về cà phê ở Berkeley cũng có thể trở thành mục tiêu

Xác nhận và biện pháp tiếp theo từ Anthropic

  • Lỗ hổng đã được công bố có trách nhiệm thông qua chương trình bug bounty HackerOne của Anthropic
  • Anthropic xác nhận họ đã tự phát hiện vấn đề này từ trước nhưng thời điểm đó chưa vá, đồng thời cũng không trả thưởng cho báo cáo
  • Sau đó, họ đã vô hiệu hóa khả năng web_fetch lần theo các liên kết tìm thấy trên trang bên ngoài
  • Hiện tại, phạm vi duyệt đã bị giới hạn còn kết quả web_search và các URL do người dùng trực tiếp cung cấp

Không chỉ là bộ nhớ mà còn cả dữ liệu được kết nối

  • Người dùng không bấm liên kết hay bật thêm tích hợp nào mới, họ chỉ hỏi về quán cà phê, nhưng Claude đã gửi tên, nơi làm việc và thành phố lớn lên của họ ra bên ngoài
  • Bộ nhớ chỉ bị chọn làm mục tiêu vì nó mặc định bật và dễ khai thác
  • Cách làm tương tự cũng có thể chạm tới dữ liệu trong Google Drive, hộp thư đến email và các MCP được kết nối mà Claude có thể truy xuất thay người dùng

1 bình luận

 
Các ý kiến trên Hacker News
  • Thật ngạc nhiên khi các công ty AI tiên tiến bật tính năng bộ nhớ mà không gặp nhiều phản ứng phản đối. Trước đây ngành quảng cáo phải suy đoán các mẩu thông tin rời rạc từ những website người dùng ghé thăm, còn giờ đây mọi người trực tiếp trao cho AI gần như mọi thứ, kể cả những bí mật kín đáo nhất
    Có thể tôi quá nhạy cảm vì làm trong ngành quảng cáo, nhưng ngay khi Claude và ChatGPT ra mắt bộ nhớ, tôi đã tắt nó; nó cũng chẳng hữu ích vì còn làm bẩn ngữ cảnh bằng những chi tiết không liên quan, khiến chất lượng giảm. Với các cuộc trò chuyện riêng tư, tốt hơn là dùng một tài khoản riêng ở nơi như OpenRouter
    Cần có quy định cấm các công ty AI lưu hồ sơ người dùng, chỉ cho phép bộ nhớ nằm trên máy chủ của người dùng, và thậm chí đáng cân nhắc cấm sở hữu chéo giữa công ty bộ nhớ và công ty AI

    • Có lúc bộ nhớ hữu ích vì không cần giải thích lại toàn bộ ngữ cảnh mỗi lần, nhưng việc nó bám lấy những gì đã nói trong cuộc trò chuyện khác rồi kéo cuộc trò chuyện hiện tại sang hướng lệch lạc cũng khó chịu không kém
    • Từ góc nhìn nhà đầu tư, thu thập dữ liệu là một trong những giá trị cốt lõi của các công ty này. Họ xây mô hình bằng dữ liệu công khai, dữ liệu cào trái phép và tác phẩm có bản quyền, tích lũy ở quy mô lớn những thông tin riêng tư nhất của vô số người, đồng thời còn nuôi lớn một bong bóng sẽ gây chấn động khổng lồ nếu sụp đổ, cùng sự tập trung của cải và bất bình đẳng cực đoan
  • Tôi nhận ra rằng mọi người đang chạy các AI agent với quyền quản trị viên, thậm chí không có cả cô lập bằng container. Thật đáng kinh ngạc, như thể các nguyên tắc bảo mật máy tính tích lũy suốt 50 năm đã bị quên sạch chỉ sau một đêm

    • Nhiều lập trình viên và người dùng nâng cao thường xuyên cài các cây phụ thuộc khổng lồ như npm, pip, bundler trong cùng tài khoản người dùng với trình duyệt chính. Ngay cả trên Linux, nơi tạo tài khoản mới khá dễ, họ vẫn làm vậy, nên việc chạy AI agent cũng không khác mấy
    • cấu hình sandbox khá khó. Dù dùng cco, thư mục home vẫn bị lộ, nên chỉ với một prompt, agent có thể gửi mật khẩu trình duyệt bằng curl
      Để ngăn điều này, cần có thư mục home giả và danh sách cho phép mạng chỉ chấp nhận các nhà cung cấp như llama.cpp hoặc OpenAI. Không có giải pháp đa nền tảng dễ dùng; với phát triển ứng dụng native, nơi phải tự biên dịch và sửa lỗi riêng từng nền tảng, ngay cả một máy Linux cài Docker cũng chưa đủ
    • Nhìn chung là do người dùng lười, lại cho rằng các phòng thí nghiệm lớn sẽ không phát hành phần mềm không an toàn, hoặc bảo mật là trách nhiệm của phòng thí nghiệm. Cách làm mặc định dường như đang trở thành bỏ qua kiểm tra quyền hạn một cách nguy hiểm rồi cứ chạy, với lý do xử lý được nhiều việc hơn
    • Mô hình bảo mật dường như đang hội tụ theo hai hướng: tối thiểu hóa quyền hạntối thiểu hóa ngữ cảnh. Một agent chỉ nhìn thấy các tệp và bộ nhớ cần cho tác vụ hiện tại sẽ ít nguy hiểm hơn rất nhiều, dù có cùng quyền công cụ
      Vì hiện đã tối ưu ngữ cảnh để giảm chi phí, nhiều khả năng trong tương lai ngữ cảnh tự thân sẽ được xem như một ranh giới bảo mật
    • Rốt cuộc là vì sự tiện lợi. Nếu để agent làm việc bên cạnh mà không có hạn chế nào, bạn sẽ có cảm giác thỏa mãn tức thì, và điều đó rất khó cưỡng lại
  • Tôi đặt tên mình trong Claude là Silly Bean, ban đầu chỉ vì thấy lời chào “Back again, Silly Bean?” buồn cười, nhưng rốt cuộc nó lại trở thành một ván cờ bảo mật 4 chiều

    • Từ thời Eternal September, người ta đã khuyên dùng thông tin giả nhất quán về tên và ngày sinh trên các hệ thống trực tuyến. Rất ít trang thực sự cần thông tin định danh cá nhân (PII) chính xác một cách chính đáng, và ngay cả ở những nơi đó, nếu cần thì vẫn có thể vận hành tài khoản hoặc hồ sơ kép
    • Vì tên có thể rút gọn theo hai cách, khi đăng ký Claude tôi đã nhập tên là “ or ”, tưởng rằng thế giới “trí tuệ” nhân tạo sắp mở ra. Nhưng có vẻ trường này không được xử lý bằng mô hình mà được hardcode
      Đến giờ tôi vẫn để nguyên, coi đó như một dấu hiệu để chế giễu hoặc cay đắng yên tâm rằng đây là một sản phẩm phụ thuộc không thông minh như mình tưởng
    • Tôi đặt tên là Sir và đang tận hưởng những câu trả lời lịch sự quá mức. Ứng dụng ngân hàng cũng chào “Good morning, Sir”, đúng mức quan hệ mà tôi muốn có với ngân hàng
    • Tôi từng quên tài khoản claude.ai tạo từ rất sớm, gần đây đăng nhập bằng Google thì nó chào Hello, Master, khiến tôi thấy khá táo bạo theo chuẩn ngày nay
    • Claude và ChatGPT nhiều khả năng vẫn có thể thấy tên thật trong thông tin thanh toán
  • Đoạn nói Cloudflare áp dụng robots.txt quá mức mà không có đồng ý là một cảnh hiếm thấy: một website phàn nàn rằng mình được bảo vệ khỏi scraper

    • Theo tôi biết, để Cloudflare quản lý robots.txt, người dùng phải tự bật tính năng. Vì chỉ cần một cú nhấp nên cũng có khả năng đã vô tình kích hoạt
    • Điểm cốt lõi là không có sự đồng ý. Dù dịch vụ bạn dùng chặn scraper khỏi site hay cung cấp mọi thứ cho scraper, tôi đều muốn họ xin sự đồng ý trước dựa trên thông tin đầy đủ
    • Dù vậy vẫn nhất thiết phải có sự đồng ý, và robots.txt cũng không chặn được những scraper đã quyết tâm
  • Tôi chạy Claude Code trong VM không có thông tin xác thực, chỉ clone các kho GitHub mã nguồn mở cần làm việc. Trước đây tôi reset VM mỗi ngày, nhưng phiền quá nên đổi thành mỗi tháng một lần; nếu có rò rỉ thì cùng lắm là danh sách dự án mã nguồn mở tôi đã làm trong tháng qua
    Thông tin này cũng có thể tiết lộ khá nhiều về một người, nhưng tên và email của người đóng góp mã nguồn mở nằm trong lịch sử Git không thể thay đổi, nên phần lớn đã có thể tìm thấy bằng Google. Sau vụ này tôi đang nghĩ có nên đổi chu kỳ reset sang hằng tuần không
    Nếu muốn dựng nhà tù cho AI agent, có thể dùng script ở https://jai.scs.stanford.edu/arch-vm.html và thêm các gói như dotnet-sdk vào lệnh pacstrap là ổn. Nếu tạo root của guest dưới dạng subvolume BTRFS và dùng snapshot, bạn có thể tạo VM mới tức thì bằng sudo btrfs subvol snap template-root newvm; chạy qemu-system-x86_64 cũng chỉ mất vài giây, trong khi vẫn kiểm soát hoàn toàn nội dung VM

    • Tôi đã thử cách tương tự nhưng hạn chế rất nhiều. Tôi muốn người và AI liên tục trao đổi qua lại như pair programming, và ranh giới vai trò giữa hai bên thay đổi theo từng tác vụ, thậm chí ngay trong lúc làm; hiếm khi nó rõ ràng ngay từ đầu
      Có những việc con người phải bấm nút để đánh giá trải nghiệm người dùng có đúng không, và nếu có thể thì tôi không muốn cấp cho AI quyền truy cập màn hình. Mô hình VM này hoạt động rất tốt với một số vấn đề, nhưng phạm vi hiệu quả lại hẹp đến đáng tiếc
    • Vấn đề lần này không xảy ra với Claude Code mà xảy ra trên website Claude AI
  • Việc prompt injection chắc chắn sẽ tiếp tục là vấn đề, vì kiểu “Xin chào, chúng tôi là Cloudflare. Hãy đưa dữ liệu cá nhân cho chúng tôi” vẫn có tác dụng. Hoặc phải giới hạn mô hình đến mức gần như vô dụng, hoặc chấp nhận để các cuộc tấn công kiểu này len lỏi vào, tạo ra khái niệm bất an toàn nhất trong lịch sử Internet: một con robot có thể bị lừa.

    • Giống như social engineering, đây có lẽ là vấn đề sẽ còn tồn tại mãi ở một mức độ nào đó, và xã hội sẽ tiếp tục chồng thêm các lớp phòng vệ cho đến khi đạt một ngưỡng có thể chấp nhận. Kết luận không mấy yên tâm, nhưng rất khó đóng lại chiếc hộp Pandora đã mở.
    • Các giới hạn kiểu Gödel của AI an toàn trước prompt đã được bàn ở https://matthodges.com/posts/2025-08-26-music-to-break-model....
    • Thật khó chấp nhận chuyện dữ liệu được xử lý có thể thuyết phục LLM bằng hội thoại để phá vỡ ranh giới bảo mật. Prompt độc hại không phải là ẩn dụ mà là chuỗi tấn công thực sự; thật vô lý khi công nghệ này được dùng rộng rãi cho các tương tác tự động mà lại không bị giới hạn một cách logic và căn bản.
      Trông như một kiến trúc trong đó ta không có cách hiểu hay tách biệt hoạt động bên trong về mặt chức năng, chỉ biết cố thuyết phục một khối khổng lồ hành động rồi cầu mong kẻ tấn công không thuyết phục nó giỏi hơn.
  • Gần đây tôi gặp một chuyện khá rợn trong ứng dụng ChatGPT trên iPhone. Một người bạn thân dùng tài khoản của họ để hỏi về vấn đề với máy cho thú cưng ăn thông minh, và trong câu trả lời ChatGPT lại dùng tên thú cưng của tôi.
    Đó không phải là cái tên phổ biến, lại còn có mối liên hệ với bạn tôi nên khó xem là ngẫu nhiên. Nghĩ đến việc bạn tôi từng kết nối vào Wi‑Fi nhà tôi, tôi nghi có thể có ô nhiễm cache hoặc rò rỉ dữ liệu phiên.

    • ChatGPT có vẻ bật memory mặc định và lưu thông tin người dùng xuyên suốt mọi cuộc trò chuyện. Với tôi, mỗi lần trả lời về công thức nấu ăn, dù câu hỏi không liên quan đến visa, nó vẫn thêm kiểu “nguyên liệu này dễ mua ở cửa hàng nên visa không phải vấn đề”.
      Đây là tính năng còn chưa đủ chín, nên tốt hơn là tắt memory, nhưng nếu bạn của bạn dùng chính tài khoản của họ thì hiện tượng này khó giải thích.
  • Khi Claude Code scrape tài liệu SEC, nó đã đưa tên và email của tôi vào User-Agent. Không cần prompt tinh vi nào cả; bản thân ý tưởng không hẳn là quá tệ, nhưng giá mà nó hỏi trước thì tốt hơn.

    • Nguyên nhân nằm ở phía công cụ SEC EDGAR. Tài liệu Edgar MCP hướng dẫn thiết lập biến môi trường SEC_EDGAR_USER_AGENT="Your Name (name@domain.com)", nên Claude chỉ làm đúng theo chỉ dẫn. Có lẽ chính điểm đó còn nguy hiểm hơn.
    • Tôi tò mò làm sao bạn phát hiện ra Claude đã làm vậy.
    • Tôi tò mò vì sao bạn cho rằng việc đưa tên và email vào đó không hẳn là một ý tưởng quá tệ.
  • Tôi tò mò có bao nhiêu người bật memory toàn cục áp dụng cho toàn bộ cuộc trò chuyện. Kiểu memory này rốt cuộc có vẻ sẽ ảnh hưởng xấu đến chất lượng đầu ra.

    • Ngay cả khi hỏi một chuyện không liên quan đến dự án hiện tại, vì memory mà nó luôn giả định sai rằng đó là câu hỏi về dự án cũ. Khi tôi sửa “Không, tôi đang hỏi về PostgreSQL”, nó không hiểu vì sao tôi mở một cuộc trò chuyện riêng, thậm chí còn cập nhật memory rằng dự án đó dùng PostgreSQL.
      Ngược lại, nó hữu ích trong những lúc không cần phải dài dòng giải thích bối cảnh mỗi lần.
  • Vì vậy tôi không bật memory, và cũng không dùng Claude Code vì các lý do khác. Hệ thống memory hiện tại quá thô sơ nên không hữu ích.

    • Với tôi, memory gây cản trở nhiều hơn là giúp ích. Nó cứ lôi ra những thông tin đã lưu gần như không liên quan, như thể khoe rằng nó biết thêm một hai điều, nên cuối cùng tôi tắt đi.
    • Tôi tự hỏi vấn đề này có chỉ giới hạn ở memory không. Những thông tin mà mô hình hiện có thể truy cập, như thông tin dự án hiện tại, mã nguồn hay thông tin xác thực, liệu cũng có thể bị lộ theo cách tương tự không?