- 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_fetchchặ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_searchcù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_searchvàweb_fetchchỉ đọc để truy cập Internet - Khi buộc
web_fetchtruy 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 agentClaude-User- Yêu cầu ban đầu thất bại vì
robots.txtmà 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ủ
- Yêu cầu ban đầu thất bại vì
- 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_fetchtruy 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_fetchtrướ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
/aliê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_fetchkhô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_fetchlầ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_searchvà 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
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
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ằngcurlĐể 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 đủ
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
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
Đế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
Đoạn nói Cloudflare áp dụng
robots.txtquá 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 scraperrobots.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ạtrobots.txtcũng không chặn được những scraper đã quyết tâmTô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-sdkvào lệnhpacstraplà ổ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ằngsudo btrfs subvol snap template-root newvm; chạyqemu-system-x86_64cũng chỉ mất vài giây, trong khi vẫn kiểm soát hoàn toàn nội dung VMCó 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
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.
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.
Đâ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.
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ò 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.
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.