Một lỗ hổng bảo mật nghiêm trọng đã được tiết lộ trong Grist‑Core, một phiên bản mã nguồn mở, tự host của cơ sở dữ liệu bảng tính quan hệ Grist, có thể dẫn đến thực thi mã từ xa (RCE).
Lỗ hổng này, được theo dõi là CVE-2026-24002 (điểm CVSS: 9.1), đã được Cyera Research Labs đặt tên mã là Cellbreak.
"Một công thức độc hại có thể biến bảng tính thành một điểm khởi đầu cho Remote Code Execution (RCE)," nhà nghiên cứu bảo mật Vladimir Tokarev, người đã phát hiện ra lỗ hổng, cho biết. "Việc thoát khỏi sandbox này cho phép tác giả công thức thực thi các lệnh của hệ điều hành hoặc chạy JavaScript trong môi trường host, phá vỡ ranh giới giữa 'logic ô' và việc thực thi của host."
Hiểu về lỗ hổng Cellbreak
Cellbreak được phân loại là một trường hợp thoát khỏi sandbox của Pyodide, cùng loại lỗ hổng gần đây cũng ảnh hưởng đến n8n (CVE-2025-68668, điểm CVSS: 9.9, còn được gọi là N8scape). Lỗ hổng này đã được khắc phục trong phiên bản 1.7.9, phát hành vào ngày 9 tháng 1 năm 2026.
"Một đánh giá bảo mật đã xác định một lỗ hổng trong phương pháp sandboxing 'pyodide' có sẵn trong Grist," các nhà duy trì dự án cho biết. "Bạn có thể kiểm tra xem mình có bị ảnh hưởng hay không trong phần sandboxing của Bảng điều khiển quản trị (Admin Panel) trên phiên bản của bạn. Nếu bạn thấy 'gvisor' ở đó, bạn không bị ảnh hưởng. Nếu bạn thấy 'pyodide,' thì điều quan trọng là phải cập nhật lên phiên bản Grist này hoặc mới hơn."
Tóm lại, vấn đề nằm ở việc thực thi công thức Python của Grist, cho phép các công thức không đáng tin cậy chạy bên trong Pyodide, một bản phân phối Python cho phép mã Python thông thường được thực thi trực tiếp trong trình duyệt web trong giới hạn của sandbox WebAssembly (WASM).
Mặc dù ý tưởng đằng sau quy trình này là đảm bảo mã công thức Python được chạy trong một môi trường biệt lập, nhưng việc Grist sử dụng phương pháp tiếp cận kiểu blocklist đã tạo điều kiện cho việc thoát khỏi sandbox và cuối cùng đạt được thực thi lệnh trên host bên dưới.
"Thiết kế của sandbox cho phép di chuyển qua hệ thống phân cấp lớp của Python và giữ lại ctypes, cùng với đó mở quyền truy cập vào các hàm thời gian chạy Emscripten mà đáng lẽ không thể truy cập được từ một ô công thức," Tokarev giải thích. "Sự kết hợp đó cho phép thực thi lệnh của host và thực thi JavaScript trong thời gian chạy của host, với các kết quả thực tế như truy cập hệ thống tệp và lộ bí mật."
Theo Grist, khi người dùng đã đặt GRIST_SANDBOX_FLAVOR thành Pyodide và mở một tài liệu độc hại, tài liệu đó có thể được sử dụng để chạy các tiến trình tùy ý trên máy chủ lưu trữ Grist. Với khả năng thực thi lệnh hoặc JavaScript thông qua một công thức, kẻ tấn công có thể tận dụng hành vi này để truy cập thông tin đăng nhập cơ sở dữ liệu và API keys, đọc các tệp nhạy cảm và tạo cơ hội di chuyển ngang.
Giải pháp khắc phục và khuyến nghị
Grist đã giải quyết vấn đề bằng cách chuyển việc thực thi công thức Pyodide sang môi trường chạy JavaScript Deno theo mặc định. Tuy nhiên, điều đáng chú ý là rủi ro sẽ xuất hiện trở lại nếu người vận hành cố ý chọn đặt GRIST_PYODIDE_SKIP_DENO thành giá trị "1." Cài đặt này nên tránh trong các trường hợp có khả năng chạy các công thức không đáng tin cậy hoặc bán tin cậy.
Người dùng được khuyến nghị cập nhật lên phiên bản mới nhất càng sớm càng tốt để giảm thiểu các rủi ro tiềm ẩn. Để tạm thời giảm nhẹ vấn đề, nên đặt biến môi trường GRIST_SANDBOX_FLAVOR thành "gvisor."
"Điều này phản ánh rủi ro hệ thống được tìm thấy trong các nền tảng tự động hóa khác: một bề mặt thực thi duy nhất với quyền truy cập đặc quyền có thể phá vỡ ranh giới tin cậy của tổ chức khi sandbox của nó thất bại," Tokarev nói.
"Khi việc thực thi công thức dựa vào một sandbox lỏng lẻo, một lần thoát duy nhất có thể biến 'logic dữ liệu' thành 'thực thi host.' Những phát hiện của Grist-Core cho thấy lý do tại sao sandboxing cần phải dựa trên khả năng và phòng thủ theo chiều sâu, chứ không phải một blocklist yếu ớt. Chi phí của thất bại không chỉ là một lỗi mà là một vi phạm mặt phẳng dữ liệu."