5 phút đọc

Railway bị lấy biến môi trường, và chính Railway không biết key nào của bạn đã lộ

Kẻ xâm nhập Railway đã giải mã được một phần biến môi trường của khách, nhưng Railway không xác định được là biến nào. Ai deploy trên Railway trước ngày 21/10 nên coi mọi key là đã lộ và đổi hết.

Xem nhanh trong 1 phút

Trong báo cáo sơ bộ về vụ xâm nhập tuần trước, Railway thừa nhận một điều khó chịu: họ biết kẻ tấn công đã giải mã được một phần biến môi trường của khách, nhưng không biết đó là những biến nào. Biến môi trường là chỗ phần lớn chúng ta để API key, mật khẩu database, token GitHub. Nên nếu app của bạn chạy trên Railway, câu trả lời an toàn duy nhất là coi như key nào cũng đã lộ.

Robot linh vật đứng cạnh cánh cửa kho nứt, chìa khóa phát sáng rơi vãi quanh chân

Chuyện gì đã xảy ra

Railway là nền tảng deploy nhiều người làm app nhanh hay chọn: nối repo, bấm deploy, thêm Postgres hay Redis chỉ bằng vài cú click. Theo Railway, họ có khoảng 5 triệu người dùng.

Theo báo cáo sơ bộ của Railway (giờ UTC):

  • 20/10, 13:58: hệ thống giám sát báo độ trễ tăng. Kỹ sư phát hiện có người đang cố leo thang quyền trong hạ tầng build, rồi dừng các đường build.
  • Tối 20/10, Railway tưởng đã chặn xong, nhưng sau đó thấy kẻ tấn công còn những đường vào khác và leo quyền song song ở nhiều phần của hệ thống.
  • Sáng 21/10: kẻ tấn công lấy được thông tin đăng nhập của môi trường CI, chạy một câu truy vấn lấy biến môi trường đã mã hóa trong database, rồi dùng thông tin đăng nhập vừa lấy để giải mã một phần trong số đó.
  • 22/10, 03:32: Railway xác nhận kẻ tấn công không còn quyền vào hệ thống nội bộ. Build và API trở lại bình thường trong ngày 22/10.

Railway nói kẻ tấn công nhắm vào API key của các dịch vụ AI, và vụ này nằm trong một loạt tấn công vào các nền tảng hạ tầng gần đây. Một tuần trước, Zeabur cũng mất 3,2 triệu biến môi trường với cùng mục tiêu đó.

Vì sao không ai biết key nào đã lộ

Railway mã hóa biến môi trường theo kiểu nhiều lớp khóa (envelope encryption). Cách này tốt khi kẻ trộm chỉ lấy được dữ liệu. Nhưng ở đây kẻ trộm lấy được cả khóa để mở, và nhật ký truy vấn không cho biết biến nào trong project nào đã được giải mã.

Kết quả là:

  • Railway chỉ khẳng định được tối đa 1,85% workspace, khoảng 100.000 workspace, có biến bị lộ.
  • Họ báo cho các nhà cung cấp AI về toàn bộ key đang lưu, để các bên đó chủ động thu hồi. Vì vậy hơn 100.000 người nhận yêu cầu đổi key.
  • Railway nói kẻ tấn công không đăng nhập vào tài khoản người dùng, nhưng chưa loại trừ khả năng mã nguồn bị truy cập. Điều này chờ báo cáo điều tra cuối cùng.
  • Railway không hoàn tiền khoản chi AI bị xài bằng key đã lộ. Bạn phải tự làm việc với nhà cung cấp AI trước.

Nếu mấy hôm nay app của bạn đột nhiên trả lỗi 401 khi gọi OpenAI, Anthropic hay OpenRouter, có thể key đã bị nhà cung cấp thu hồi, chứ không phải code hỏng.

Nếu bạn deploy trên Railway

  1. Lập danh sách biến cần đổi. Mỗi service trên Railway có tab Variables. Có Railway CLI thì vào thư mục project đã railway link và chạy railway variable list để xem hết các biến của service đó. Đánh dấu mọi thứ là bí mật: key AI, khóa cloud, DATABASE_URL, JWT_SECRET, token GitHub, Stripe, Resend…
  2. Đổi từ phía nhà cung cấp trước. Vào trang của OpenAI, Anthropic, Stripe, AWS…, tạo key mới, thu hồi key cũ, rồi mới dán key mới vào Railway và deploy lại. Chỉ sửa biến trên Railway mà không thu hồi key cũ thì key cũ vẫn dùng được.
  3. Đổi mật khẩu bên trong database. Sửa biến PGPASSWORD trên Railway không làm mật khẩu trong Postgres đổi theo. Đổi bằng ALTER USER ... WITH PASSWORD '...' rồi cập nhật lại biến. Railway cũng khuyên tắt truy cập public vào database nếu app không cần.
  4. Xem hóa đơn và lịch sử dùng API của các dịch vụ AI từ 20/10. Thấy khoản lạ thì báo nhà cung cấp, sau đó gửi yêu cầu lên station.railway.com kèm thời gian và bằng chứng.
  5. Xem audit log của GitHub và Docker Hub, gỡ các ứng dụng GitHub không còn dùng. Railway đã thu hồi mọi token truy cập và cài lại GitHub App, nên bạn cần nối lại GitHub và tạo lại token cho CLI và CI.
  6. Deploy lại commit mới nhất. Commit đẩy lên trong lúc Railway tạm dừng build sẽ không được deploy.

Railway khuyên ưu tiên các tài khoản tạo trước ngày 21/10.

Bài học cho chính dự án của bạn

Biến môi trường trên nền tảng deploy an toàn tới đâu là do nền tảng quyết định, không phải bạn. Hai vụ Zeabur và Railway cách nhau một tuần, đều nhắm key AI, cho thấy kẻ tấn công đã tính ra: hack một nền tảng là lấy được key của hàng chục nghìn app một lúc.

Bạn không chặn được vụ tiếp theo, nhưng làm được để lần sau đỡ đau:

  • Đặt trần chi tiêu cho key AI ngay trên trang của nhà cung cấp. Key bị lộ mà trần là 50 đô thì mất 50 đô.
  • Mỗi môi trường một key, mỗi app một key, đặt tên rõ. Đến lúc phải đổi thì biết đổi cái nào, thu hồi một key không làm sập cả loạt app.
  • Ghi lại danh sách secret của từng app và cách đổi từng cái. Hôm nay mà phải mò lại từng biến thì lần sau sẽ chậm hơn kẻ tấn công.

App của bạn đang chạy ở đâu, và lần gần nhất bạn đổi key AI là khi nào? Kể trong cộng đồng Vibe Code & Bảo Mật nhé.

Nguồn

Chia sẻ lên Facebook

Bình luận

Đang tải bình luận…