Hồi xửa hồi xưa, Google từng bảo API Key (mấy cái dùng cho Maps, Firebase các kiểu) chỉ là định danh (identification) chứ không phải mật khẩu (authentication). Tức là: "Mày để lộ key trong file APK hay frontend cũng chả sao, cùng lắm tao chặn domain là xong".
Anh em dev nghe lời răm rắp, hardcode key vô tội vạ. Bỗng một ngày đẹp trời, Gemini xuất hiện và biến đống key "rác" đó thành mỏ vàng cho hacker. Ảo ma Canada chưa?
Cú twist cực gắt từ Google: Khi "rác" thành "vàng"
Cụ thể vụ việc được các pháp sư bảo mật tại Truffle Security bóc trần như sau, tóm tắt cho các ông lười đọc:
- Tiền lệ: Trước giờ, Google API Key thường được nhúng thẳng vào mobile app hoặc web client. Google OK với việc này. Ai cũng OK.
- Sự cố: Google ra mắt Gemini API. Vấn đề là nhiều dự án GCP (Google Cloud Platform) dùng chung một project cho cả Maps, Firebase và... AI.
- Lỗ hổng: Nếu ông chủ project lỡ tay (hoặc mặc định) bật Gemini API lên, thì cái API Key cũ rích đang nằm tênh hênh trên Github hay trong file APK kia bỗng nhiên có quyền gọi Gemini.
- Hậu quả 1: Hacker lụm được key, viết script xài Gemini tẹt ga. Ai trả tiền? Ông dev chủ key trả chứ ai.
- Hậu quả 2: Nguy hiểm hơn, key này có thể truy cập các dữ liệu private, thậm chí là upload file độc hại hoặc đánh cắp context cached nếu anh em đang dùng tính năng tuning model.
- Phản ứng của Google: Google đang cố gắng block các key bị "leaked". Nhưng khổ nỗi, chính Google ngày xưa bảo key này "không cần giấu", giờ lại đi block vì nó "bị lộ"? Logic đi vào lòng đất.
- Tình thế: Giờ sửa kiểu gì? Thu hồi hết key cũ thì sập app đang chạy (vì key Maps chết). Không thu hồi thì hacker bào tiền. Toang thực sự.
Giang hồ mạng dậy sóng: Google bóp team hay Dev ẩu?
Ngay khi tin này nổ ra trên Hacker News, cộng đồng dev đã chia phe combat cực căng:
- Phe "Google ngáo ngơ": Một user thốt lên: "Đây có lẽ là lỗ hổng bảo mật tệ hại nhất Google từng đẩy lên Production". Việc cho phép một cái key public truy cập vào dữ liệu private (Gemini context) là một sai lầm thiết kế không thể tha thứ. Kiểu như ông để chìa khóa cổng (public) nhưng lại mở được két sắt (private) vậy.
- Phe "Dev cũng ẩu": Một số ông senior khó tính thì bảo: "Lỗi tại nhân kỹ năng". Ai bảo các ông dùng chung 1 project cho cả đống services làm gì? Nguyên tắc là tách Project ra, cái nào public thì public, cái nào backend thì riêng. Lười thì chết chứ bệnh tật gì.
- Phe thuyết âm mưu: Có ông còn soi văn phong bài blog gốc rồi phán: "Chắc bài bóc phốt này do ChatGPT viết để dìm hàng Gemini thôi". Ừ thì thời đại AI, cái quái gì cũng có thể xảy ra, nhưng lỗi kỹ thuật thì sờ sờ ra đó, chối thế nào được.
- Nỗi lo chung: Đa số anh em đều đồng tình: Việc fix cái này là cực khoai. Nếu Google đơn phương tắt quyền truy cập Gemini trên các key cũ -> Sẽ có hàng tá app legit bị lỗi (nếu dev lỡ tích hợp). Một pha xử lý cồng kềnh đi vào lịch sử.
Góc nhìn từ Coding4Food: Bài học xương máu
Tóm cái váy lại, vụ này Google chơi hơi ác, nhưng cũng là gáo nước lạnh cho anh em dev nào còn giữ tư duy "làm cho chạy đã".
- Đừng tin bố con thằng nào: Kể cả Big Tech bảo "cái này không cần bảo mật đâu", thì tốt nhất các ông cứ giấu kỹ vào. Proxy server sinh ra để làm gì? Để giấu key chứ chi.
- Chia để trị: Làm ơn, đừng gom Maps, Firebase, AI, Analytics vào chung 1 cái GCP Project nữa. Tách ra đi, quản lý permission (IAM) cho chặt vào. Scope cái key lại (chỉ cho phép gọi Maps API thôi chẳng hạn).
- Check ví ngay: Ông nào đang vọc vạch Gemini trên project cũ thì vào Billing console mà check ngay đi, kẻo cuối tháng nhìn hóa đơn lại ngất xỉu. Google API thì nổi tiếng đắt xắt ra miếng rồi.
Code thì có thể bug, nhưng tiền trong thẻ thì không được mất oan. Tỉnh táo lên anh em!
Nguồn tham khảo
- Bài viết gốc: Truffle Security
- Thảo luận: Hacker News