Phân tích lỗ hổng Giá trị Sentinel trong động cơ Chrome V8
Giá trị Sentinel là một 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 động cơ Chrome V8 có nhiều giá trị Sentinel, nếu bị rò rỉ vào môi trường JavaScript có thể dẫn đến việc thoát khỏi sandbox. Bài viết này sẽ khám phá cách vượt qua cơ chế bảo vệ HardenProtect của Chrome V8 thông qua việc rò rỉ đối tượng Uninitialized Oddball.
Giá trị Sentinel trong V8
Mã nguồn V8 định nghĩa nhiều đối tượng gốc, chúng được sắp xếp liền kề trong bộ nhớ. Nếu những đối tượng này bị rò rỉ vào JavaScript, có thể dẫn đến việc thực thi mã tùy ý trong sandbox. Các nghiên cứu trước đây đã chỉ ra rằng việc rò rỉ đối tượng TheHole có thể thực hiện được điều này, và đối tượng Uninitialized Oddball được thảo luận trong bài viết này cũng có nguy cơ tương tự.
Chúng ta có thể xác minh việc rò rỉ Uninitialized Oddball vào JavaScript bằng cách sửa đổi các hàm gốc của V8. Cách cụ thể là sửa đổi độ lệch tương đối của hàm %TheHole() đối với isolate để nó trả về đối tượng Uninitialized Oddball.
Bỏ qua bảo vệ HardenType
Việc sử dụng đối tượng Uninitialized Oddball có thể vượt qua sự bảo vệ HardenType của V8, cho phép đọc và ghi gần như tùy ý. Chìa khóa ở đây là mã JavaScript đã tối ưu không kiểm tra kiểu của các phần tử mảng, mà trực tiếp tính toán độ lệch và đọc giá trị theo ngữ nghĩa JavaScript, dẫn đến sự nhầm lẫn kiểu.
Trong kiến trúc x86, do không có nén địa chỉ, việc đọc và ghi tùy ý là tương đối với toàn bộ tiến trình. Điều này có nghĩa là trong một số phần mềm như Skype, kẻ tấn công có thể tận dụng điều này để đọc và ghi vào các vùng nhớ cụ thể, từ đó hoàn thành toàn bộ chuỗi khai thác lỗ hổng.
Ảnh hưởng đến an toàn
Cách khai thác lỗ hổng này được công khai đã giảm đáng kể độ khó trong việc khai thác các lỗ hổng tương tự. Kẻ tấn công gần như không cần nghiên cứu thêm để thực hiện khai thác hoàn chỉnh, điều này tạo ra mối đe dọa cho nhiều phần mềm chưa được sửa chữa.
Ngoài ra, trong V8 còn tồn tại các giá trị Sentinel khác, chúng cũng có thể gây ra các vấn đề tương tự. Điều này nhắc nhở chúng ta:
Các giá trị Sentinel khác có thể dễ dàng thực hiện việc thực thi mã từ xa V8 không?
Có nên chính thức coi những vấn đề này là lỗ hổng bảo mật không?
Trong kiểm tra mờ, có nên xem xét việc đưa các giá trị Sentinel khác nhau vào phạm vi kiểm tra như là biến không?
Dù sao đi nữa, những vấn đề này sẽ rút ngắn đáng kể chu kỳ để kẻ tấn công thực hiện khai thác hoàn toàn, rất đáng để các nhà nghiên cứu an ninh và nhà phát triển chú ý.
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.
8 thích
Phần thưởng
8
6
Đăng lại
Chia sẻ
Bình luận
0/400
CryptoCross-TalkClub
· 1giờ trước
Lỗ hổng này ảo như mức cắt lỗ của các sàn giao dịch khi gấu nằm trên đất.
Xem bản gốcTrả lời0
PoetryOnChain
· 4giờ trước
Lại lại lại có lỗ hổng rồi
Xem bản gốcTrả lời0
FudVaccinator
· 4giờ trước
Một cái lỗ V8 nữa, các anh em ơi, xông lên nào!
Xem bản gốcTrả lời0
MelonField
· 4giờ trước
Lỗ hổng còn nghiêm trọng thật đấy, đợt này Google chết tiệt.
Giải thích chi tiết lỗ hổng Giá trị Sentinel của động cơ Chrome V8: Rò rỉ đối tượng Oddball chưa khởi tạo và thoát khỏi hộp cát
Phân tích lỗ hổng Giá trị Sentinel trong động cơ Chrome V8
Giá trị Sentinel là một 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 động cơ Chrome V8 có nhiều giá trị Sentinel, nếu bị rò rỉ vào môi trường JavaScript có thể dẫn đến việc thoát khỏi sandbox. Bài viết này sẽ khám phá cách vượt qua cơ chế bảo vệ HardenProtect của Chrome V8 thông qua việc rò rỉ đối tượng Uninitialized Oddball.
Giá trị Sentinel trong V8
Mã nguồn V8 định nghĩa nhiều đối tượng gốc, chúng được sắp xếp liền kề trong bộ nhớ. Nếu những đối tượng này bị rò rỉ vào JavaScript, có thể dẫn đến việc thực thi mã tùy ý trong sandbox. Các nghiên cứu trước đây đã chỉ ra rằng việc rò rỉ đối tượng TheHole có thể thực hiện được điều này, và đối tượng Uninitialized Oddball được thảo luận trong bài viết này cũng có nguy cơ tương tự.
Chúng ta có thể xác minh việc rò rỉ Uninitialized Oddball vào JavaScript bằng cách sửa đổi các hàm gốc của V8. Cách cụ thể là sửa đổi độ lệch tương đối của hàm %TheHole() đối với isolate để nó trả về đối tượng Uninitialized Oddball.
Bỏ qua bảo vệ HardenType
Việc sử dụng đối tượng Uninitialized Oddball có thể vượt qua sự bảo vệ HardenType của V8, cho phép đọc và ghi gần như tùy ý. Chìa khóa ở đây là mã JavaScript đã tối ưu không kiểm tra kiểu của các phần tử mảng, mà trực tiếp tính toán độ lệch và đọc giá trị theo ngữ nghĩa JavaScript, dẫn đến sự nhầm lẫn kiểu.
Trong kiến trúc x86, do không có nén địa chỉ, việc đọc và ghi tùy ý là tương đối với toàn bộ tiến trình. Điều này có nghĩa là trong một số phần mềm như Skype, kẻ tấn công có thể tận dụng điều này để đọc và ghi vào các vùng nhớ cụ thể, từ đó hoàn thành toàn bộ chuỗi khai thác lỗ hổng.
Ảnh hưởng đến an toàn
Cách khai thác lỗ hổng này được công khai đã giảm đáng kể độ khó trong việc khai thác các lỗ hổng tương tự. Kẻ tấn công gần như không cần nghiên cứu thêm để thực hiện khai thác hoàn chỉnh, điều này tạo ra mối đe dọa cho nhiều phần mềm chưa được sửa chữa.
Ngoài ra, trong V8 còn tồn tại các giá trị Sentinel khác, chúng cũng có thể gây ra các vấn đề tương tự. Điều này nhắc nhở chúng ta:
Các giá trị Sentinel khác có thể dễ dàng thực hiện việc thực thi mã từ xa V8 không?
Có nên chính thức coi những vấn đề này là lỗ hổng bảo mật không?
Trong kiểm tra mờ, có nên xem xét việc đưa các giá trị Sentinel khác nhau vào phạm vi kiểm tra như là biến không?
Dù sao đi nữa, những vấn đề này sẽ rút ngắn đáng kể chu kỳ để kẻ tấn công thực hiện khai thác hoàn toàn, rất đáng để các nhà nghiên cứu an ninh và nhà phát triển chú ý.