Giá trị Sentinel là giá trị đặc biệt trong thuật toán, thường được sử dụng làm điều kiện kết thúc cho vòng lặp hoặc đệ quy. Trong mã nguồn của Chrome có nhiều loại giá trị Sentinel, trong đó một số nếu bị rò rỉ vào môi trường JavaScript có thể gây ra vấn đề bảo mật.
Trước đây đã có nghiên cứu cho thấy, việc rò rỉ đối tượng TheHole có thể thực hiện việc thực thi mã tùy ý trong sandbox. Nhóm Google đã sửa chữa điều này. Nhưng thực tế, trong V8 còn có những đối tượng nguyên thủy khác không nên bị rò rỉ ra JS, như đối tượng Uninitialized Oddball.
Việc rò rỉ đối tượng Oddball chưa được khởi tạo có thể dẫn đến việc thoát khỏi sandbox. Vấn đề này lần đầu tiên xuất hiện trong Issue1352549 và hiện vẫn chưa được sửa chữa. Phương pháp này có tính tổng quát nhất định và đã xuất hiện trong nhiều lỗ hổng.
Các đối tượng gốc trong V8 được định nghĩa trong tệp v8/src/roots/roots.h, chúng được sắp xếp sát nhau trong bộ nhớ. Khi những đối tượng này bị rò rỉ vào môi trường JavaScript, nó có thể dẫn đến việc thoát khỏi sandbox.
Để xác minh vấn đề này, có thể sửa đổi hàm native của V8 để làm lộ Uninitialized Oddball trong JavaScript. Cụ thể có thể sửa đổi cách triển khai hàm %TheHole().
Việc sử dụng đối tượng Uninitialized Oddball có thể vượt qua bảo vệ HardenType. Bằng cách xây dựng mã JavaScript cụ thể, có thể thực hiện việc đọc và ghi bộ nhớ gần như tùy ý. Điều này xảy ra do mã đã được tối ưu hóa không kiểm tra đầy đủ các thuộc tính của đối tượng.
Đối với các đề xuất sửa chữa, khi hàm đã được tối ưu hóa trả về phần tử của mảng, cần thêm kiểm tra đối với mảng map để tránh tính toán trực tiếp giá trị trả về của độ lệch.
Vấn đề này cũng nhắc nhở chúng ta chú ý đến PatchGap, tức là một số phần mềm có thể đang sử dụng phiên bản V8 chưa được sửa lỗi. Ví dụ, Skype hiện vẫn chưa sửa được vấn đề này. Trong kiến trúc x86, do không có nén địa chỉ, có thể thực hiện đọc và ghi tùy ý trong phạm vi tiến trình.
Nói chung, trong V8 còn có nhiều giá trị Sentinel có thể tồn tại những nguy cơ an ninh tương tự. Đề xuất nghiên cứu thêm về tác động của các Oddball chưa khởi tạo khác bị rò rỉ, xem xét đưa các đối tượng này vào phạm vi thử nghiệm mờ để phát hiện nhiều cách khai thác tiềm ẩn hơn. Dù sao đi nữa, những vấn đề này có thể rút ngắn đáng kể chu kỳ khai thác lỗ hổng của kẻ tấn công.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
Rủi ro bảo mật Giá trị Sentinel Chrome V8: Rò rỉ đối tượng Oddball chưa được khởi tạo có thể dẫn đến việc thoát khỏi hộp cát
Sentinel Value trong Chrome V8 có rủi ro an toàn
Giá trị Sentinel là giá trị đặc biệt trong thuật toán, thường được sử dụng làm điều kiện kết thúc cho vòng lặp hoặc đệ quy. Trong mã nguồn của Chrome có nhiều loại giá trị Sentinel, trong đó một số nếu bị rò rỉ vào môi trường JavaScript có thể gây ra vấn đề bảo mật.
Trước đây đã có nghiên cứu cho thấy, việc rò rỉ đối tượng TheHole có thể thực hiện việc thực thi mã tùy ý trong sandbox. Nhóm Google đã sửa chữa điều này. Nhưng thực tế, trong V8 còn có những đối tượng nguyên thủy khác không nên bị rò rỉ ra JS, như đối tượng Uninitialized Oddball.
Việc rò rỉ đối tượng Oddball chưa được khởi tạo có thể dẫn đến việc thoát khỏi sandbox. Vấn đề này lần đầu tiên xuất hiện trong Issue1352549 và hiện vẫn chưa được sửa chữa. Phương pháp này có tính tổng quát nhất định và đã xuất hiện trong nhiều lỗ hổng.
Các đối tượng gốc trong V8 được định nghĩa trong tệp v8/src/roots/roots.h, chúng được sắp xếp sát nhau trong bộ nhớ. Khi những đối tượng này bị rò rỉ vào môi trường JavaScript, nó có thể dẫn đến việc thoát khỏi sandbox.
Để xác minh vấn đề này, có thể sửa đổi hàm native của V8 để làm lộ Uninitialized Oddball trong JavaScript. Cụ thể có thể sửa đổi cách triển khai hàm %TheHole().
Việc sử dụng đối tượng Uninitialized Oddball có thể vượt qua bảo vệ HardenType. Bằng cách xây dựng mã JavaScript cụ thể, có thể thực hiện việc đọc và ghi bộ nhớ gần như tùy ý. Điều này xảy ra do mã đã được tối ưu hóa không kiểm tra đầy đủ các thuộc tính của đối tượng.
Đối với các đề xuất sửa chữa, khi hàm đã được tối ưu hóa trả về phần tử của mảng, cần thêm kiểm tra đối với mảng map để tránh tính toán trực tiếp giá trị trả về của độ lệch.
Vấn đề này cũng nhắc nhở chúng ta chú ý đến PatchGap, tức là một số phần mềm có thể đang sử dụng phiên bản V8 chưa được sửa lỗi. Ví dụ, Skype hiện vẫn chưa sửa được vấn đề này. Trong kiến trúc x86, do không có nén địa chỉ, có thể thực hiện đọc và ghi tùy ý trong phạm vi tiến trình.
Nói chung, trong V8 còn có nhiều giá trị Sentinel có thể tồn tại những nguy cơ an ninh tương tự. Đề xuất nghiên cứu thêm về tác động của các Oddball chưa khởi tạo khác bị rò rỉ, xem xét đưa các đối tượng này vào phạm vi thử nghiệm mờ để phát hiện nhiều cách khai thác tiềm ẩn hơn. Dù sao đi nữa, những vấn đề này có thể rút ngắn đáng kể chu kỳ khai thác lỗ hổng của kẻ tấn công.