Lộ API key OpenAI, Claude, Gemini khi vibe code: hóa đơn hàng nghìn đô chỉ sau một đêm
Nội dung bài viết

Rất nhiều web app làm bằng AI lại gọi tới AI: chatbot tư vấn, công cụ viết mô tả sản phẩm, tóm tắt tài liệu. Để gọi được, app cần một API key của OpenAI, Anthropic (Claude), Google (Gemini)... Chiếc khóa này gắn thẳng với thẻ thanh toán của bạn.

Lộ khóa này không chỉ là chuyện bảo mật, mà là chuyện tiền, và tiền mất rất nhanh.

Kẻ gian dùng khóa AI bị đánh cắp như thế nào?

Ngày 3/11/2026, nhóm tình báo mối đe dọa của Google (GTIG) và Mandiant công bố các vụ họ điều tra trong năm 2026, gọi là LLMjacking (chiếm quyền dùng mô hình AI):

  • Có vụ phát sinh hơn 100.000 USD tiền phí trong một ngày. Có nạn nhân nhận hóa đơn tới 1 triệu USD trước khi chặn được kẻ tấn công.
  • Một kẻ tấn công dùng khóa đánh cắp gọi AI hơn 500.000 lần trong chưa đầy 8 giờ, để lại khoản phí gần 1 triệu USD.
  • Khóa đánh cắp được bán lại qua các dịch vụ "AI giá rẻ". Một dịch vụ tên Jet Night bán gói không giới hạn khoảng 60 USD/tháng, rẻ hơn nhiều so với gói chính hãng 100–250 USD. Google cho rằng mức giá đó chỉ có lãi khi dùng khóa ăn cắp.
  • Có nhóm quét GitHub công khai để nhặt API key, rồi gửi những yêu cầu rất nhỏ để thử khóa còn dùng được không, nhỏ tới mức không làm bật cảnh báo của nạn nhân.

Khác với đào tiền ảo lén (cryptojacking) ăn tài nguyên từ từ, LLMjacking có thể làm hóa đơn tăng vọt chỉ trong vài giờ.

Vì sao người vibe code hay lộ khóa?

1. AI đặt khóa ở chỗ trình duyệt đọc được. Muốn có chatbot chạy ngay, công cụ AI có thể gọi OpenAI thẳng từ giao diện, và khóa nằm trong biến kiểu VITE_OPENAI_API_KEY hay NEXT_PUBLIC_.... Các tiền tố này nghĩa là khóa được đóng gói vào code gửi xuống trình duyệt. Ai bấm F12 cũng lấy được.

2. File .env bị đẩy lên GitHub. Theo nghiên cứu của Shippable trên khoảng 25.000 repo làm bằng công cụ AI, 13,5% repo Lovable và 10,4% repo Bolt có file .env nằm trong code.

3. Code có AI hỗ trợ lộ bí mật nhiều hơn. GitGuardian (19/10/2026) đếm được:

  • 1.275.105 thông tin đăng nhập dịch vụ AI lộ trên GitHub công khai trong năm 2025, tăng 81% so với năm trước.
  • Commit công khai có Claude Code hỗ trợ lộ bí mật với tỉ lệ 3,2%, gấp đôi mức trung bình 1,5%.
  • Riêng các file cấu hình MCP (file khai báo công cụ cho agent AI) chứa 24.008 bí mật, trong đó 2.117 còn dùng được.

4. Nền tảng chứa khóa của bạn cũng bị tấn công. Wiz gọi tháng 10/2026 là "tháng Mười đen" của các nền tảng dành cho lập trình viên AI, với ít nhất 9 vụ. Railway và Northflank bị xâm nhập. Northflank yêu cầu khách coi như mọi biến môi trường đã bị giải mã, và đã có khách bị dùng trộm khóa AI. Chi tiết: LiteLLM bị cài mã độc, Railway bị lộ biến môi trường.

6 cách hạn chế thiệt hại

1. Không bao giờ gọi AI thẳng từ trình duyệt

Khóa AI chỉ được nằm ở phía máy chủ: backend, API route, edge function, serverless function. Trình duyệt gọi máy chủ của bạn, máy chủ mới gọi OpenAI hay Claude.

Bảo AI làm đúng ngay từ đầu: "Khóa API phải nằm ở server-side, không dùng tiền tố VITE_ hoặc NEXT_PUBLIC_, gọi AI qua một API route có kiểm tra đăng nhập."

2. Đặt giới hạn chi tiêu

  • Vào trang Billing / Limits của từng nhà cung cấp, đặt mức chi tiêu tối đa theo tháng và bật cảnh báo qua email.
  • Có nơi cho đặt mức trần chặn hẳn, có nơi chỉ gửi cảnh báo (ví dụ ngân sách trên Google Cloud chỉ báo, không tự dừng dịch vụ). Hãy kiểm tra kỹ thiết lập của bạn thuộc loại nào.
  • Với tài khoản nạp tiền trước, tắt tự động nạp thêm (auto-recharge). Bị lộ khóa thì chỉ mất số đã nạp.

3. Mỗi app một khóa, quyền càng hẹp càng tốt

  • Tạo khóa riêng cho từng project, không dùng chung một khóa cho mọi thứ. Lộ một khóa thì chỉ cần thu hồi khóa đó.
  • Dùng tính năng giới hạn quyền của khóa nếu có: OpenAI có khóa theo project và giới hạn quyền, Google cho phép giới hạn khóa chỉ gọi một số API nhất định.
  • Không dán khóa "chính" vào file cấu hình MCP hay công cụ thử nghiệm.

4. Giới hạn số lần gọi theo người dùng

Kể cả khi khóa nằm an toàn ở máy chủ, kẻ gian vẫn có thể gọi API của bạn liên tục để dùng ké AI. Đặt giới hạn số lần gọi mỗi phút, mỗi ngày cho từng tài khoản, và bắt đăng nhập trước khi dùng tính năng AI.

5. Chặn khóa lọt lên GitHub

  • Đảm bảo file .gitignore có dòng .env.
  • Bật Secret scanning và Push protection trong Settings → Code security của repo GitHub. Push protection chặn ngay lúc bạn đẩy code có chứa khóa.
  • Có thể quét lại toàn bộ lịch sử repo bằng công cụ miễn phí như gitleaks hoặc TruffleHog.

6. Theo dõi trang Usage hằng tuần

Xem biểu đồ sử dụng trên dashboard của nhà cung cấp. Lượt gọi tăng đột biến lúc nửa đêm, gọi các mô hình đắt tiền mà app bạn không dùng, là dấu hiệu khóa đã lộ. Mandiant cũng lưu ý: nhiều vụ bắt đầu bằng việc kẻ gian bật một dịch vụ AI đang tắt trong tài khoản cloud của nạn nhân, nên hãy bật cảnh báo khi có dịch vụ mới được kích hoạt.

Lỡ lộ khóa rồi: làm ngay theo thứ tự

  1. Thu hồi (revoke) khóa ngay trên dashboard của nhà cung cấp, rồi tạo khóa mới.
  2. Đừng nghĩ xóa commit là xong. Vụ LiteLLM năm 2026 là ví dụ: một khóa quản trị bị đẩy lên repo công khai ngày 27/5, bị xóa sau khoảng 3 giờ nhưng không bị thu hồi. Gần 5 tháng sau, kẻ tấn công dùng chính khóa đó để phát hành một phiên bản LiteLLM chứa mã độc.
  3. Kiểm tra lịch sử sử dụng và hóa đơn: thời điểm bắt đầu bất thường, mô hình nào bị gọi, tổng chi phí.
  4. Liên hệ bộ phận hỗ trợ của nhà cung cấp để báo cáo và hỏi về việc hoàn tiền. Kết quả tùy từng trường hợp, nhưng báo càng sớm càng tốt.
  5. Rà xem khóa lộ từ đâu: code phía trình duyệt, file .env trên GitHub, file cấu hình MCP, hay nền tảng hosting. Không bịt chỗ lộ thì khóa mới cũng sẽ lộ tiếp.
  6. Đổi luôn các khóa khác nằm cùng chỗ (database, cổng thanh toán, email), vì kẻ gian có khóa AI thường cũng có những khóa đó.

Khóa API là một phần trong bộ lỗi hay gặp ở app làm bằng AI. Xem thêm 7 lỗ hổng AI hay để lại khi vibe code và cách tự kiểm tra.

Nguồn tham khảo: Help Net Security (GTIG, Mandiant), GitGuardian, Shippable, BleepingComputer (Northflank), LiteLLM.