Rò rỉ giá trị Sentinel và bỏ qua HardenProtect của Chrome V8
Trong mã nguồn của Chrome có rất nhiều giá trị Sentinel, những giá trị đặc biệt này thường được sử dụng trong thuật toán như điều kiện kết thúc cho vòng lặp hoặc đệ quy. Nghiên cứu gần đây cho thấy việc rò rỉ một số giá trị Sentinel có thể dẫn đến việc thực thi mã tùy ý trong sandbox của Chrome.
Ngoài đối tượng TheHole đã biết, trong V8 còn có các đối tượng gốc khác không nên bị rò rỉ vào môi trường JavaScript. Bài viết này tập trung vào đối tượng Uninitialized Oddball, phương pháp vòng qua này hiện vẫn có thể áp dụng cho phiên bản V8 mới nhất và chưa được sửa chữa.
Cần lưu ý rằng phương pháp này có tính ứng dụng rộng rãi. Trong nhiều lỗ hổng đã được báo cáo, việc rò rỉ Uninitialized Oddball có thể dẫn đến thực thi mã từ xa. Điều này nhấn mạnh sự cần thiết phải tiến hành kiểm tra toàn diện đối với phần mềm có thể bị ảnh hưởng bởi PatchGap.
Hầu hết 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 kề nhau trong bộ nhớ. Một khi những đối tượng này bị lộ ra ngoài JavaScript một cách sai lầm, có thể thực hiện thực thi mã tùy ý trong sandbox.
Để xác minh phương pháp này, chúng ta có thể sửa đổi các hàm gốc của V8 để chúng trả về đối tượng Uninitialized Oddball. Bằng cách này, chúng ta có thể thực hiện việc đọc bộ nhớ gần như tùy ý trong phiên bản mới nhất của V8.
Cốt lõi của phương pháp vượt qua này là, hàm JavaScript đã được tối ưu hóa không kiểm tra đầy đủ thông tin loại của mảng khi truy cập các phần tử trong mảng, mà thay vào đó tính toán độ lệch để lấy giá trị. Điều này dẫn đến nhầm lẫn loại, từ đó cho phép đọc tùy ý.
Giải pháp sửa chữa được đề xuất là khi hàm tối ưu hóa trả về các phần tử của mảng, nên thêm kiểm tra đối với mảng map, tránh việc trả về giá trị mảng thông qua tính toán độ lệch trực tiếp.
Ngoài ra, chúng ta cũng cần chú ý đến vấn đề PatchGap có thể tồn tại trong chuỗi cung ứng phần mềm. Một số phần mềm được sử dụng rộng rãi có thể vẫn chưa khắc phục được các lỗ hổng này, điều này tạo ra cơ hội tiềm tàng cho kẻ tấn công.
Nói chung, trong V8 có nhiều giá trị Sentinel, việc rò rỉ chúng có thể dẫn đến các vấn đề về bảo mật. Các hướng nghiên cứu trong tương lai có thể bao gồm: khám phá tác động của việc rò rỉ Uninitialized Oddball khác, đánh giá khả năng đưa giá trị Sentinel vào kiểm tra mờ, và xem xét toàn diện các vấn đề bảo mật liên quan. Dù những vấn đề này có được chính thức liệt kê là lỗ hổng bảo mật hay không, chúng có thể làm giảm đáng kể thời gian mà kẻ tấn công cần để thực hiện khai thác hoàn chỉnh.
Trang này có thể chứa nội dung của bên thứ ba, được cung cấp chỉ nhằm mục đích thông tin (không phải là tuyên bố/bảo đảm) và không được coi là sự chứng thực cho quan điểm của Gate hoặc là lời khuyên về tài chính hoặc chuyên môn. Xem Tuyên bố từ chối trách nhiệm để biết chi tiết.
9 thích
Phần thưởng
9
5
Đăng lại
Chia sẻ
Bình luận
0/400
LiquidatedDreams
· 19giờ trước
Một làn sóng nữa... Chrome lộn xộn sao không được sửa chữa nhỉ
Xem bản gốcTrả lời0
GasWaster
· 19giờ trước
Hộp có quá nhiều lỗ hổng, chú hề rồi fam
Xem bản gốcTrả lời0
GasOptimizer
· 19giờ trước
Lỗ hổng đệ quy chiếm 89.4% xác suất sự cố bảo mật
Xem bản gốcTrả lời0
FallingLeaf
· 19giờ trước
Lỗ hổng lớn như vậy thì trình duyệt cũng không an toàn nữa à
Lỗ hổng Sentinel Value của động cơ Chrome V8 dẫn đến rủi ro thoát khỏi hộp cát.
Rò rỉ giá trị Sentinel và bỏ qua HardenProtect của Chrome V8
Trong mã nguồn của Chrome có rất nhiều giá trị Sentinel, những giá trị đặc biệt này thường được sử dụng trong thuật toán như điều kiện kết thúc cho vòng lặp hoặc đệ quy. Nghiên cứu gần đây cho thấy việc rò rỉ một số giá trị Sentinel có thể dẫn đến việc thực thi mã tùy ý trong sandbox của Chrome.
Ngoài đối tượng TheHole đã biết, trong V8 còn có các đối tượng gốc khác không nên bị rò rỉ vào môi trường JavaScript. Bài viết này tập trung vào đối tượng Uninitialized Oddball, phương pháp vòng qua này hiện vẫn có thể áp dụng cho phiên bản V8 mới nhất và chưa được sửa chữa.
Cần lưu ý rằng phương pháp này có tính ứng dụng rộng rãi. Trong nhiều lỗ hổng đã được báo cáo, việc rò rỉ Uninitialized Oddball có thể dẫn đến thực thi mã từ xa. Điều này nhấn mạnh sự cần thiết phải tiến hành kiểm tra toàn diện đối với phần mềm có thể bị ảnh hưởng bởi PatchGap.
Hầu hết 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 kề nhau trong bộ nhớ. Một khi những đối tượng này bị lộ ra ngoài JavaScript một cách sai lầm, có thể thực hiện thực thi mã tùy ý trong sandbox.
Để xác minh phương pháp này, chúng ta có thể sửa đổi các hàm gốc của V8 để chúng trả về đối tượng Uninitialized Oddball. Bằng cách này, chúng ta có thể thực hiện việc đọc bộ nhớ gần như tùy ý trong phiên bản mới nhất của V8.
Cốt lõi của phương pháp vượt qua này là, hàm JavaScript đã được tối ưu hóa không kiểm tra đầy đủ thông tin loại của mảng khi truy cập các phần tử trong mảng, mà thay vào đó tính toán độ lệch để lấy giá trị. Điều này dẫn đến nhầm lẫn loại, từ đó cho phép đọc tùy ý.
Giải pháp sửa chữa được đề xuất là khi hàm tối ưu hóa trả về các phần tử của mảng, nên thêm kiểm tra đối với mảng map, tránh việc trả về giá trị mảng thông qua tính toán độ lệch trực tiếp.
Ngoài ra, chúng ta cũng cần chú ý đến vấn đề PatchGap có thể tồn tại trong chuỗi cung ứng phần mềm. Một số phần mềm được sử dụng rộng rãi có thể vẫn chưa khắc phục được các lỗ hổng này, điều này tạo ra cơ hội tiềm tàng cho kẻ tấn công.
Nói chung, trong V8 có nhiều giá trị Sentinel, việc rò rỉ chúng có thể dẫn đến các vấn đề về bảo mật. Các hướng nghiên cứu trong tương lai có thể bao gồm: khám phá tác động của việc rò rỉ Uninitialized Oddball khác, đánh giá khả năng đưa giá trị Sentinel vào kiểm tra mờ, và xem xét toàn diện các vấn đề bảo mật liên quan. Dù những vấn đề này có được chính thức liệt kê là lỗ hổng bảo mật hay không, chúng có thể làm giảm đáng kể thời gian mà kẻ tấn công cần để thực hiện khai thác hoàn chỉnh.