Chiếm quyền điều khiển Root qua Jupyter: Cấu hình nguy hiểm

Các nhà nghiên cứu bảo mật đã phát hiện ra một rủi ro bảo mật nghiêm trọng trong các máy chủ Jupyter Notebook thường xuyên bị cấu hình sai, cho phép kẻ tấn công chiếm quyền điều khiển cấp root trên các hệ thống Linux.
Lỗ Hổng Cấu Hình Jupyter Notebook và Cơ Chế Khai Thác
Lỗ hổng này không xuất phát từ một lỗi trong bản thân Jupyter, mà là do các lựa chọn cấu hình nguy hiểm. Những cấu hình này khiến hệ thống mở toang cánh cửa cho các cuộc tấn công leo thang đặc quyền.
Trong một cuộc thử nghiệm thâm nhập gần đây, một chuyên gia bảo mật đã phát hiện ra rằng máy chủ Jupyter Notebook chạy với đặc quyền root và không bật xác thực đã trở thành cổng vào để chiếm quyền điều khiển hoàn toàn hệ thống.
Khai Thác API Terminal và WebSocket
Chuỗi tấn công đã khai thác API terminal tích hợp sẵn của Jupyter, một tính năng được thiết kế để người dùng hợp pháp truy cập môi trường shell. Nếu không có các biện pháp kiểm soát bảo mật phù hợp, tính năng này sẽ biến thành một con đường trực tiếp để leo thang đặc quyền.
Jupyter cung cấp một REST API bao gồm một endpoint terminal, được thiết kế để cài đặt gói và quản lý môi trường. Không giống như API kernel (thực thi mã Python), API terminal cấp quyền truy cập shell thực tế.
Kẻ tấn công có quyền truy cập mạng vào một phiên bản Jupyter không được bảo vệ có thể tạo các phiên terminal thông qua endpoint /api/terminals mà không cần xác thực.
Cuộc tấn công trở nên tinh vi hơn thông qua kết nối WebSocket. Các phiên terminal trong Jupyter giao tiếp qua giao thức WebSocket, thay vì các yêu cầu HTTP truyền thống.
Sử dụng các công cụ chuyên dụng như websocat, kẻ tấn công có thể gửi lệnh qua giao diện WebSocket bằng cách định dạng các tin nhắn dưới dạng mảng JSON.
["stdin", "id\n"]
Một lệnh đơn giản như trên, được thực thi qua WebSocket, trả về trực tiếp đầu ra, tiết lộ rằng terminal đang chạy với đặc quyền root. Điều này xác nhận khả năng chiếm quyền điều khiển toàn diện hệ thống mà không yêu cầu bất kỳ bước leo thang đặc quyền nào khác.
Ảnh Hưởng và Hậu Quả của Việc Chiếm Quyền Điều Khiển
Với quyền truy cập root được thiết lập, kẻ tấn công có thể truy cập các tệp cấu hình runtime của Jupyter được lưu trữ tại /root/.local/share/jupyter/runtime/.
Các tệp này chứa thông tin quan trọng, bao gồm cổng kết nối kernel, khóa ký HMAC để xác thực tin nhắn và thông tin phiên. Được trang bị những thông tin xác thực này, kẻ tấn công có thể chiếm đoạt các phiên notebook của người dùng khác và thực thi mã tùy ý trong kernel của họ.
Nhà nghiên cứu đã chứng minh khả năng thiết lập một backdoor bền vững bằng cách khởi chạy một reverse shell thông qua terminal Jupyter. Điều này khiến việc phát hiện sự xâm nhập trở nên khó khăn vì nó xuất hiện như hoạt động Jupyter hợp pháp đối với các hệ thống giám sát. Tham khảo thêm về kỹ thuật này tại Adversis Blog.
Biện Pháp Phòng Ngừa và Tăng Cường Bảo Mật Thông Tin
Cộng đồng an ninh mạng nhấn mạnh rằng đây không phải là một lỗ hổng trong mã nguồn Jupyter mà là một mô hình triển khai sai lầm. Các tổ chức không bao giờ nên chạy Jupyter với đặc quyền root.
Các Khuyến Nghị Bảo Mật Chính
- Chạy với người dùng không có đặc quyền: Jupyter nên được thực thi bởi một người dùng không có đặc quyền và chỉ được cấp các khả năng cần thiết.
- JupyterHub cho môi trường đa người dùng: Đối với các môi trường đa người dùng, quản trị viên nên triển khai JupyterHub với tính năng cách ly người dùng và xác thực phù hợp được bật theo mặc định. Điều này giúp ngăn chặn việc một người dùng có thể chiếm quyền điều khiển phiên của người khác.
- Tắt API terminal khi không cần thiết: Các hệ thống hiện đang chạy Jupyter nên tắt ngay lập tức API terminal khi không được yêu cầu.
- Sử dụng token xác thực mạnh: Triển khai các token xác thực mạnh để bảo vệ quyền truy cập.
- Không để lộ phiên bản Jupyter chưa xác thực: Không bao giờ để lộ các phiên bản Jupyter không có xác thực ra các giao diện mạng bên ngoài localhost.
- Kiểm tra và khắc phục kịp thời: Các tổ chức nên kiểm tra các triển khai Jupyter của mình ngay lập tức để xác định và khắc phục mô hình cấu hình nguy hiểm này trước khi kẻ tấn công có thể khai thác. Việc này là cần thiết để bảo vệ bảo mật thông tin và tránh các cuộc tấn công mạng nguy hiểm.
Việc không tuân thủ các nguyên tắc bảo mật cơ bản này tạo ra rủi ro bảo mật đáng kể, mở đường cho các cuộc tấn công chiếm quyền điều khiển hệ thống hoàn toàn.









