Bypass Chrome v8 HardenProtect thông qua việc rò rỉ Giá trị Sentinel
Lời mở đầu
Sentinel value là một giá trị đặc biệt trong thuật toán, thường được sử dụng như một điều kiện kết thúc trong các thuật toán vòng lặp hoặc đệ quy. Trong mã nguồn của Chrome có rất nhiều Sentinel value. Trước đây có một nghiên cứu đã giới thiệu cách thực hiện thực thi mã bất kỳ trong sandbox thông qua việc rò rỉ đối tượng TheHole. Nhóm Google sau đó đã nhanh chóng cập nhật các bản sửa lỗi liên quan.
Ngoài đối tượng TheHole, trong V8 còn nhiều đối tượng nguyên thủy khác không nên bị lộ ra ngoài JS. Bài viết này sẽ thảo luận về đối tượng Uninitialized Oddball, phương pháp này hiện vẫn có thể sử dụng trong phiên bản mới nhất của V8. Đáng chú ý là, phương pháp này có tính tổng quát nhất định, đã xuất hiện trong nhiều lỗ hổng.
Giá trị Sentinel trong V8
Hầu hết các đối tượng gốc của v8 được định nghĩa trong tệp v8/src/roots/roots.h, những đối tượng này được sắp xếp liền kề nhau trong bộ nhớ. Một khi các đối tượng gốc không nên bị rò rỉ bị rò rỉ vào Javascript, có thể thực hiện việc thực thi mã tùy ý trong sandbox.
Để xác minh phương pháp này, chúng ta có thể thông qua việc sửa đổi các hàm native của v8, để rò rỉ Uninitialized Oddball vào JavaScript. Cụ thể, có thể sửa đổi độ lệch tương đối của hàm %TheHole() đối với isolate.
Vượt qua HardenType
Việc sử dụng Uninitialized Oddball có thể đạt được việc đọc và ghi tương đối tùy ý. Chìa khóa nằm ở trong hàm read của JavaScript đã được tối ưu hóa, chỉ kiểm tra xem thuộc tính prop của obj có đúng hay không, nhưng không kiểm tra giá trị với key là obj.prop, mà trực tiếp tính toán độ lệch theo nghĩa JavaScript để lấy giá trị của mảng. Điều này dẫn đến sự nhầm lẫn loại trong quá trình tính toán, cho phép thực hiện việc đọc tùy ý.
Do vì Uninitialized Oddball được sắp xếp phía trước trong bộ nhớ v8 và nguyên thủy hơn, nên dễ giả mạo hơn đối với đối tượng TheHole, đây là phương pháp ưa thích để vượt qua các bản sửa lỗi đã được giải quyết cho TheHole.
Giải pháp đề nghị sửa chữa là thêm kiểm tra đối với mảng map khi hàm đã được tối ưu hóa trả về các phần tử mảng, tránh tính toán trực tiếp để trả về giá trị lệch.
Cảnh báo rủi ro PatchGap
Ngoài việc chú ý đến các lỗ hổng lịch sử, còn cần lưu ý đến các lỗ hổng mà nhà sản xuất âm thầm sửa trong các thành phần cơ bản. Hiện tại, Skype vẫn chưa khắc phục lỗ hổng này. Cách khai thác trên x86 và x64 có chút khác biệt, nhưng đều có thể thực hiện đọc và ghi tùy ý.
Lần này, PatchGap không chỉ liên quan đến Issue1352549, mà việc công khai phương pháp mới cũng đã giảm đáng kể độ khó trong việc khai thác các lỗ hổng tương tự. Hacker gần như không cần phải nghiên cứu cũng có thể hoàn thành việc khai thác hoàn chỉnh các lỗ hổng Uninitialized Oddball đã từng bị rò rỉ.
Tóm tắt
Trong v8 còn nhiều giá trị Sentinel khác, có thể tồn tại vấn đề tương tự. Điều này cho chúng ta một số gợi ý:
Các lỗ hổng Uninitialized Oddball khác có dễ dàng thực hiện RCE v8 hay không.
Vẫn còn tranh cãi về việc liệu các vấn đề như vậy có nên được coi là vấn đề an ninh chính thức hay không.
Trong khi thử nghiệm fuzz, có thể nên xem xét việc đưa các giá trị Sentinel khác nhau vào như là biến.
Dù sao đi nữa, những vấn đề này sẽ rút ngắn đáng kể chu kỳ khai thác hoàn chỉnh của hacker. Chúng ta nên cảnh giác với điều này.
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
6
Chia sẻ
Bình luận
0/400
MetaMaskVictim
· 2giờ trước
Lại bị cái bẫy của v8 làm khổ rồi.
Xem bản gốcTrả lời0
gas_fee_therapist
· 08-05 17:35
v8 lại chơi hỏng rồi, tính an toàn ngày càng bơm rồi
Xem bản gốcTrả lời0
GreenCandleCollector
· 08-05 17:34
Lỗ hổng này có vẻ khá cứng cáp nhỉ
Xem bản gốcTrả lời0
LightningPacketLoss
· 08-05 17:32
Lỗi này lại được xử lý rồi. Chúng ta cần nhanh chóng sửa phòng máy chủ!
Phương pháp khai thác lỗ hổng Chrome v8 mới: Lộ thông tin thực hiện Oddball chưa khởi tạo để thoát khỏi sandbox
Bypass Chrome v8 HardenProtect thông qua việc rò rỉ Giá trị Sentinel
Lời mở đầu
Sentinel value là một giá trị đặc biệt trong thuật toán, thường được sử dụng như một điều kiện kết thúc trong các thuật toán vòng lặp hoặc đệ quy. Trong mã nguồn của Chrome có rất nhiều Sentinel value. Trước đây có một nghiên cứu đã giới thiệu cách thực hiện thực thi mã bất kỳ trong sandbox thông qua việc rò rỉ đối tượng TheHole. Nhóm Google sau đó đã nhanh chóng cập nhật các bản sửa lỗi liên quan.
Ngoài đối tượng TheHole, trong V8 còn nhiều đối tượng nguyên thủy khác không nên bị lộ ra ngoài JS. Bài viết này sẽ thảo luận về đối tượng Uninitialized Oddball, phương pháp này hiện vẫn có thể sử dụng trong phiên bản mới nhất của V8. Đáng chú ý là, phương pháp này có tính tổng quát nhất định, đã xuất hiện trong nhiều lỗ hổng.
Giá trị Sentinel trong V8
Hầu hết các đối tượng gốc của v8 được định nghĩa trong tệp v8/src/roots/roots.h, những đối tượng này được sắp xếp liền kề nhau trong bộ nhớ. Một khi các đối tượng gốc không nên bị rò rỉ bị rò rỉ vào Javascript, có thể thực hiện việc thực thi mã tùy ý trong sandbox.
Để xác minh phương pháp này, chúng ta có thể thông qua việc sửa đổi các hàm native của v8, để rò rỉ Uninitialized Oddball vào JavaScript. Cụ thể, có thể sửa đổi độ lệch tương đối của hàm %TheHole() đối với isolate.
Vượt qua HardenType
Việc sử dụng Uninitialized Oddball có thể đạt được việc đọc và ghi tương đối tùy ý. Chìa khóa nằm ở trong hàm read của JavaScript đã được tối ưu hóa, chỉ kiểm tra xem thuộc tính prop của obj có đúng hay không, nhưng không kiểm tra giá trị với key là obj.prop, mà trực tiếp tính toán độ lệch theo nghĩa JavaScript để lấy giá trị của mảng. Điều này dẫn đến sự nhầm lẫn loại trong quá trình tính toán, cho phép thực hiện việc đọc tùy ý.
Do vì Uninitialized Oddball được sắp xếp phía trước trong bộ nhớ v8 và nguyên thủy hơn, nên dễ giả mạo hơn đối với đối tượng TheHole, đây là phương pháp ưa thích để vượt qua các bản sửa lỗi đã được giải quyết cho TheHole.
Giải pháp đề nghị sửa chữa là thêm kiểm tra đối với mảng map khi hàm đã được tối ưu hóa trả về các phần tử mảng, tránh tính toán trực tiếp để trả về giá trị lệch.
Cảnh báo rủi ro PatchGap
Ngoài việc chú ý đến các lỗ hổng lịch sử, còn cần lưu ý đến các lỗ hổng mà nhà sản xuất âm thầm sửa trong các thành phần cơ bản. Hiện tại, Skype vẫn chưa khắc phục lỗ hổng này. Cách khai thác trên x86 và x64 có chút khác biệt, nhưng đều có thể thực hiện đọc và ghi tùy ý.
Lần này, PatchGap không chỉ liên quan đến Issue1352549, mà việc công khai phương pháp mới cũng đã giảm đáng kể độ khó trong việc khai thác các lỗ hổng tương tự. Hacker gần như không cần phải nghiên cứu cũng có thể hoàn thành việc khai thác hoàn chỉnh các lỗ hổng Uninitialized Oddball đã từng bị rò rỉ.
Tóm tắt
Trong v8 còn nhiều giá trị Sentinel khác, có thể tồn tại vấn đề tương tự. Điều này cho chúng ta một số gợi ý:
Các lỗ hổng Uninitialized Oddball khác có dễ dàng thực hiện RCE v8 hay không.
Vẫn còn tranh cãi về việc liệu các vấn đề như vậy có nên được coi là vấn đề an ninh chính thức hay không.
Trong khi thử nghiệm fuzz, có thể nên xem xét việc đưa các giá trị Sentinel khác nhau vào như là biến.
Dù sao đi nữa, những vấn đề này sẽ rút ngắn đáng kể chu kỳ khai thác hoàn chỉnh của hacker. Chúng ta nên cảnh giác với điều này.