Lỗ hổng nghiêm trọng trong Rails cho phép kẻ tấn công đọc tệp máy chủ qua tính năng tải ảnh

Ruby on Rails đã phát hành các bản vá cho một lỗ hổng Active Storage nghiêm trọng có thể cho phép kẻ tấn công chưa xác thực đọc các tệp tùy ý từ máy chủ ứng dụng thông qua việc tải lên các hình ảnh được chế tạo đặc biệt. Được theo dõi dưới mã CVE-2026-66066 (điểm CVSS: 9.5), lỗ hổng này có thể làm lộ môi trường quy trình Rails và các bí mật như secret_key_base, Rails master key, mật khẩu cơ sở dữ liệu, thông tin đăng nhập lưu trữ đám mây.
Ruby on Rails Security

Ruby on Rails đã phát hành các bản vá cho một lỗ hổng Active Storage nghiêm trọng, có thể cho phép kẻ tấn công chưa xác thực đọc các tệp tùy ý từ máy chủ ứng dụng thông qua việc tải lên các hình ảnh được chế tạo đặc biệt.

Được theo dõi dưới mã CVE-2026-66066 (điểm CVSS: 9.5), lỗ hổng này có thể làm lộ môi trường quy trình Rails và các bí mật như secret_key_base, Rails master key, mật khẩu cơ sở dữ liệu, thông tin đăng nhập lưu trữ đám mây và các API token. Những bí mật này có thể cho phép thực thi mã từ xa (RCE) hoặc di chuyển ngang (lateral movement) vào các hệ thống được kết nối.

Phạm vi ảnh hưởng

Các ứng dụng bị ảnh hưởng là những ứng dụng sử dụng libvips để xử lý hình ảnh trong Active Storage và chấp nhận hình ảnh tải lên từ những người dùng không đáng tin cậy. Rails chọn Vips theo thiết lập load_defaults 7.0, và các phiên bản mặc định sau này vẫn giữ nguyên lựa chọn này.

Ethiack và GMO Flatt Security liệt kê các phạm vi bị ảnh hưởng bao gồm Rails 7.0.0 đến 7.2.3.1, Rails 8.0.0 đến 8.0.5, và Rails 8.1.0 đến 8.1.3. Các phiên bản Rails 6.0.0 đến 6.1.7.10 chỉ bị ảnh hưởng khi Active Storage được cấu hình để sử dụng Vips, vốn không phải là bộ xử lý mặc định trong Rails 6.

Thông báo chính thức liệt kê phạm vi gói rộng hơn: activestorage < 7.2.3.2. Cả hai nhóm nghiên cứu đều xác định hướng tấn công Vips thực tế nằm ở Rails 6.0 trở lên. Các ứng dụng sử dụng MiniMagick không bị ảnh hưởng bởi hướng tấn công cụ thể này. Rails 7.0 và 7.1 đã kết thúc vòng đời (end of life) và không có bản phát hành cố định, vì vậy các ứng dụng trên các nhánh đó phải nâng cấp lên Rails 7.2.3.2 hoặc mới hơn.

Chi tiết kỹ thuật và Cách thức tấn công

Lỗ hổng nằm ở ranh giới tin cậy giữa Active Storage và libvips. Theo thông báo bảo mật của Rails, libvips hỗ trợ các trình tải (loaders), trình lưu (savers) và các hoạt động khác, một số được hỗ trợ bởi các thư viện bên thứ ba và được đánh dấu là "unfuzzed" hoặc "untrusted" vì chúng không an toàn cho đầu vào độc hại. Active Storage đã không chặn chúng, cho phép một tệp tải lên được chế tạo đặc biệt kích hoạt một trong số đó và tiết lộ các tệp mà Rails worker có quyền đọc.

"Việc tạo ra các biến thể (variants) không phải là một yêu cầu riêng biệt," Rails cho biết. Bản vá công khai cũng cho thấy cả trình phân tích (analyzer) và trình chuyển đổi (transformer) của Vips đều chuyển các tệp đính kèm không đáng tin cậy sang các hoạt động không an toàn.

Một yêu cầu thành công sẽ cung cấp cho kẻ tấn công cơ chế đọc tệp tùy ý (arbitrary file-read primitive). Việc thực thi mã hoặc di chuyển ngang sẽ phụ thuộc vào những gì kẻ tấn công trích xuất được và các thông tin đăng nhập đó có thể truy cập đến đâu. Rails khuyến cáo các quản trị viên nên xoay vòng (rotate) secret_key_base, master key và các thông tin đăng nhập đã giải mã, thông tin cơ sở dữ liệu, các khóa dịch vụ Active Storage và token của bên thứ ba.

Khuyến nghị và Khắc phục

Các nhà vận hành nên nâng cấp lên Rails 7.2.3.2, 8.0.5.1 hoặc 8.1.3.1 và xoay vòng mọi bí mật mà quy trình ứng dụng có thể đọc được. Các cài đặt đã vá lỗi yêu cầu libvips 8.13 trở lên và nếu có cài đặt ruby-vips, yêu cầu phiên bản 2.2.1 trở lên.

Bản vá thực hiện lệnh gọi Vips.block_untrusted(true) khi Active Storage khởi động. Các ứng dụng không thể cập nhật Rails ngay lập tức có thể thiết lập VIPS_BLOCK_UNTRUSTED khi chạy libvips 8.13 trở lên, hoặc gọi Vips.block_untrusted(true) với ruby-vips 2.2.1 trở lên. Rails cho biết các phiên bản libvips cũ hơn không thể chặn các hoạt động này, vì vậy ứng dụng buộc phải nâng cấp libvips hoặc gỡ bỏ nó khỏi ứng dụng.

Tính đến thời điểm công bố, chưa có báo cáo nào về việc lỗ hổng bị khai thác trong thực tế. Tuy nhiên, Rails cảnh báo rằng việc áp dụng bản vá không làm vô hiệu hóa các thông tin đăng nhập có thể đã bị đánh cắp trước đó.