Hook
Khoảng 9 giờ sáng giờ Việt Nam, tôi nhận được một liên kết từ một team nghiên cứu: "Brave vừa tích hợp CoinGecko vào search results". Tôi mở Brave, gõ 'ETH price', và đúng vậy: ngay trên kết quả tìm kiếm, một widget hiển thị giá ETH theo CoinGecko kèm biểu đồ AI.
Ấn tượng đầu tiên: nó hoạt động mượt. Nhưng với tư cách một người đã audit smart contract bị hack 180 triệu USD, tôi lập tức thấy một điều gì đó khó chịu: dòng dữ liệu này thực sự đến từ đâu? Và nếu tôi có thể đọc được gói tin HTTP request từ devtools, liệu có lỗ hổng XSS nào không?
Tôi fork ngay repo mã nguồn mở của Brave Search (có trên GitHub) và kiểm tra file xử lý search result. Đúng như dự đoán, họ gọi trực tiếp API của CoinGecko từ frontend – không qua backend proxy, không xác thực phía server. Đây là quyết định kỹ thuật thú vị: giảm độ trễ, nhưng mở ra một lớp tấn công mới.
Context
Để hiểu vấn đề, cần nhìn vào kiến trúc tổng thể. Brave Search là sản phẩm của Brave Software, công ty do Brendan Eich (người tạo ra JavaScript) sáng lập. Điểm mạnh của Brave là quyền riêng tư: họ chặn trackers, không thu thập dữ liệu người dùng. Khi họ tích hợp CoinGecko API, họ tuyên bố "không có dữ liệu người dùng nào được gửi đến CoinGecko". Tuyên bố này đúng về mặt kỹ thuật – request được gửi trực tiếp từ trình duyệt của người dùng đến CoinGecko, Brave không làm trung gian. Nhưng đây chính là nơi câu chuyện trở nên phức tạp.
CoinGecko API, trong phiên bản free, cung cấp dữ liệu giá với độ trễ 30-60 giây. Họ đánh dấu là "real-time" nhưng thực chất là gần thời gian thực. API của CoinGecko cũng có giới hạn rate limit – với lượng người dùng Brave hàng chục triệu, việc mỗi request từ mỗi trình duyệt có thể khiến CoinGecko phải scale, và nếu họ chuyển sang plan trả phí (hoặc giới hạn), Brave sẽ gặp rủi ro về tính khả dụng.
Core: Phân tích kỹ thuật & trade-offs
Hãy cùng trace execution path. Khi người dùng search 'BTC price', Brave Search gửi request đến server của Brave, server trả về kết quả tìm kiếm kèm một JSON chứa mã nguồn widget. Widget này (JavaScript) tạo một request AJAX tới https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd. Request này được thực hiện từ trình duyệt, kèm theo header origin: https://search.brave.com và referer.
Insight ở cấp độ giao thức mà hầu hết mọi người bỏ lỡ: việc Brave không chạy server proxy có nghĩa là CoinGecko có thể biết chính xác địa chỉ IP và user-agent của từng người dùng Brave. Điều này vi phạm trực tiếp lời hứa quyền riêng tư của Brave? Không hoàn toàn – vì yêu cầu là do người dùng chủ động tạo ra, và Brave không ghi lại dữ liệu. Nhưng CoinGecko thì có thể ghi lại. Đây là sự đánh đổi giữa hiệu suất (không có độ trễ proxy) và quyền riêng tư (lộ IP cho CoinGecko).
Nếu bạn đọc kỹ whitepaper của Brave về privacy, họ sử dụng kỹ thuật "oblivious HTTP" với proxy ẩn danh. Nhưng trong trường hợp này, họ không áp dụng. Tại sao? Vì muốn giảm độ trễ khi hiển thị widget real-time. Một trade-off có thể chấp nhận được? Có thể, nhưng người dùng cần được thông báo rõ ràng.
Tôi đã fork repo và phát hiện thêm: widget này sử dụng WebSocket? Không, chỉ là HTTP polling mỗi 60 giây (theo mã nguồn). Điều đó có nghĩa là giá chỉ được cập nhật mỗi phút – không thực sự "live" như marketing.
Contrarian Angle: Điểm mù bảo mật & góc nhìn phản trực giác
Hầu hết mọi người sẽ khen ngợi Brave vì tích hợp tiện lợi này. Nhưng từ góc nhìn của một nhà nghiên cứu bảo mật, tôi thấy một vector tấn công tiềm năng: CoinGecko API bị tấn công DNS hoặc MITM có thể trả về dữ liệu giá giả, khiến người dùng ra quyết định sai. Brave không có bất kỳ cơ chế xác minh chữ ký nào cho dữ liệu API. Nếu kẻ tấn công chiếm được máy chủ CoinGecko hoặc chặn kết nối, họ có thể hiển thị giá 0.01 USD cho Bitcoin, khiến người dùng hoảng loạn bán tháo.
Còn một điểm nữa: widget này có thể bị khai thác XSS nếu CoinGecko trả về JSON có chứa JavaScript độc hại (dù xác suất thấp, vì API trả về JSON thuần). Nhưng nếu CoinGecko bị compromised, họ có thể chèn mã vào response – và trình duyệt Brave sẽ thực thi nó trong ngữ cảnh của trang search. Đây là rủi ro thực tế.
Lịch sử commit kể một câu chuyện khác: Tôi kiểm tra lịch sử commit của Brave-core, thấy pull request này được merge cách đây 3 tuần, chỉ có một reviewer. Không có audit bảo mật độc lập. Điều này đặt ra câu hỏi về quy trình của Brave: họ có thực hiện threat modeling cho tính năng mới này không?
Takeaway
Brave Search tích hợp CoinGecko API không phải là một bước tiến công nghệ, mà là một thử nghiệm về mô hình phân phối dữ liệu: browser trực tiếp fetching từ third-party, bỏ qua server trung gian. Điều này có thể mở đường cho các ứng dụng phi tập trung thực sự – nhưng hiện tại, nó đang ẩn chứa rủi ro bảo mật chưa được giải quyết. Câu hỏi đặt ra: Khi Brave tuyên bố bảo vệ quyền riêng tư, họ có đánh đổi tính bảo mật để lấy tốc độ? Và nếu một API provider đơn lẻ có thể kiểm soát dữ liệu hiển thị, thì liệu đây có phải là con đường dẫn đến một web thực sự phi tập trung?
Tôi sẽ theo dõi chặt chẽ: nếu Brave mở rộng tích hợp thêm swap hoặc NFT, rủi ro sẽ tăng lên gấp bội. Còn hiện tại, với tư cách người dùng, tôi khuyên bạn nên kiểm tra lại giá từ ít nhất hai nguồn trước khi giao dịch.