FixVibe
Covered by FixVibehigh

Truy cập dữ liệu trái phép thông qua thiếu bảo mật cấp hàng Supabase (RLS)

Trong các ứng dụng được hỗ trợ bởi Supabase, bảo mật dữ liệu phụ thuộc vào Bảo mật cấp hàng (RLS). Nếu RLS không được bật và định cấu hình rõ ràng bằng các chính sách thì bất kỳ người dùng nào có khóa ẩn danh công khai đều có thể đọc, cập nhật hoặc xóa dữ liệu trên toàn bộ cơ sở dữ liệu. Điều này đặc biệt quan trọng trong môi trường Next.js nơi ứng dụng khách Supabase thường được khởi tạo bằng khóa API công khai.

CWE-284

Tác động

Việc không triển khai Bảo mật cấp hàng (RLS) cho phép kẻ tấn công không được xác thực truy vấn dữ liệu từ cơ sở dữ liệu Supabase khi các bảng công khai bị lộ qua ranh giới anon [S1]. Vì các ứng dụng Next.js thường hiển thị khóa Supabase anon trong mã phía máy khách nên kẻ tấn công có thể sử dụng khóa này để thực hiện lệnh gọi REST API trực tiếp tới cơ sở dữ liệu, bỏ qua logic ứng dụng dự định và truy cập thông tin người dùng nhạy cảm [S2].

Nguyên nhân gốc rễ

Theo mặc định, các bảng Postgres trong Supabase yêu cầu kích hoạt rõ ràng Bảo mật cấp hàng để ngăn truy cập công khai [S1]. Khi nhà phát triển tạo bảng nhưng quên bật RLS hoặc không xác định được các chính sách hạn chế, cơ sở dữ liệu có thể hiển thị dữ liệu cho bất kỳ ai sở hữu khóa anon của dự án, [S1]. Trong các ứng dụng Next.js, kết xuất phía máy chủ và tìm nạp phía máy khách cũng yêu cầu thiết lập máy khách Supabase cẩn thận để bối cảnh người dùng được xác thực tiếp cận lớp cơ sở dữ liệu [S2].

Sửa chữa bê tông

  • Bật RLS: Thực thi ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY; cho mọi bảng công khai lưu trữ dữ liệu ứng dụng [S1].
  • Xác định chính sách: Tạo các chính sách cụ thể hạn chế quyền truy cập dựa trên trạng thái xác thực của người dùng, chẳng hạn như CREATE POLICY "Users can see their own data" ON your_table_name FOR SELECT USING (auth.uid() = user_id); [S1].
  • Bảo mật máy khách phía máy chủ: Khi sử dụng Next.js, hãy chỉ giữ các máy khách có vai trò dịch vụ ở máy chủ và vẫn áp dụng các bộ lọc quyền sở hữu trước khi trả lại dữ liệu cho người dùng [S2].

FixVibe kiểm tra nó như thế nào

FixVibe đã chạy kiểm tra Supabase RLS chỉ đọc thông qua baas.supabase-rls. Máy quét phát hiện URL dự án Supabase và khóa ẩn danh công khai từ các gói JavaScript cùng nguồn gốc, yêu cầu PostgREST cung cấp siêu dữ liệu bảng công khai và thử các lựa chọn chỉ đọc có giới hạn để xác nhận xem dữ liệu có bị lộ mà không có phiên người dùng hay không. Nó không chèn, cập nhật, xóa hoặc sử dụng thông tin xác thực vai trò dịch vụ. Quét kho lưu trữ cũng có thể phát hiện điều này sớm hơn thông qua repo.supabase.missing-rls, tính năng này gắn cờ các hoạt động di chuyển SQL tạo các bảng công khai không có ENABLE ROW LEVEL SECURITY.