Phân tích và phòng ngừa lỗ hổng rò rỉ Giá trị Sentinel của động cơ Chrome V8

robot
Đang tạo bản tóm tắt

Phân tích kỹ thuật về việc tiết lộ Sentinel Value để vượt qua bảo vệ HardenProtect của Chrome V8

Giá trị Sentinel là giá trị đặc biệt trong thuật toán, thường được sử dụng như điều kiện dừng trong các thuật toán vòng lặp hoặc đệ quy. Trong mã nguồn Chrome có nhiều giá trị Sentinel. Gần đây, một nghiên cứu cho thấy, thông qua việc rò rỉ đối tượng TheHole có thể thực hiện việc thực thi mã tùy ý trong sandbox của CVE-2021-38003 và CVE-2022-1364. Nhóm Google sau đó đã cập nhật hai lỗ hổng này.

Ngoài đối tượng TheHole, V8 còn có các đối tượng nguyên thuỷ khác không nên bị lộ ra JavaScript. Bài viết này thảo luận về đối tượng Uninitialized Oddball, phương pháp vượt qua này vẫn có thể sử dụng cho phiên bản V8 mới nhất.

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, các đố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.

Độc quyền tiết lộ cách vượt qua Chrome v8 HardenProtect thông qua việc rò rỉ Sentinel Value

Để xác minh phương pháp này, bạn có thể sửa đổi các hàm native của V8, để rò rỉ Uninitialized Oddball vào JavaScript. Cụ thể, có thể thay đổi độ lệch tương đối của hàm %TheHole() so với isolate, để nó trả về Uninitialized Oddball.

Độc quyền tiết lộ cách vượt qua Chrome v8 HardenProtect bằng cách rò rỉ Sentinel Value

Việc sử dụng Uninitialized Oddball có thể đạt được việc đọc và ghi tương đối tùy ý. Hàm đọc JavaScript đã được tối ưu hóa sẽ trực tiếp tính toán độ lệch theo ngữ nghĩa JavaScript, tìm giá trị của mảng, từ đó dẫn đến nhầm lẫn kiểu, thực hiện việc đọc tùy ý.

Độc quyền tiết lộ cách vượt qua Chrome v8 HardenProtect bằng cách rò rỉ Sentinel Value

Độc quyền tiết lộ cách vượt qua Chrome v8 HardenProtect thông qua việc rò rỉ Sentinel Value

Độc quyền tiết lộ cách vượt qua Chrome v8 HardenProtect bằng cách rò rỉ Sentinel Value

Giải pháp sửa chữa được đề xuất là, khi hàm tối ưu trả về phần tử của mảng, thêm kiểm tra đối với mảng map, để tránh tính toán độ lệch trực tiếp trả về giá trị của mảng.

Cần lưu ý rằng phương pháp này không chỉ áp dụng cho Chrome, mà các phần mềm khác sử dụng động cơ V8 cũng có thể bị ảnh hưởng. Ví dụ, Skype hiện vẫn chưa khắc phục lỗ hổng này. Trong x86, do không có nén địa chỉ, việc đọc và ghi tùy ý là trực tiếp so với toàn bộ tiến trình.

Độc quyền tiết lộ cách vượt qua Chrome v8 HardenProtect thông qua việc rò rỉ Sentinel Value

Độc quyền tiết lộ cách vượt qua Chrome v8 HardenProtect thông qua sự rò rỉ Sentinel Value

Độc quyền tiết lộ cách vượt qua Chrome v8 HardenProtect thông qua việc rò rỉ Sentinel Value

Độc quyền tiết lộ cách vượt qua Chrome v8 HardenProtect bằng cách rò rỉ Sentinel Value

Nói chung, việc rò rỉ uninitialized_Oddball trong giá trị Sentinel có thể thực hiện đọc nguyên thủy tùy ý. V8 còn có các giá trị Sentinel khác có thể gây ra vấn đề tương tự. Đề nghị thêm những giá trị Sentinel này vào biến fuzzer để khai thác thêm nhiều nguyên thủy tiềm tàng. Bất kể có được coi là vấn đề an ninh chính thức hay không, những vấn đề này đều sẽ rút ngắn đáng kể chu kỳ mà hacker thực hiện khai thác hoàn chỉnh.

SENC-8.69%
Xem bản gốc
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.
  • Phần thưởng
  • 4
  • Chia sẻ
Bình luận
0/400
TommyTeachervip
· 07-20 16:35
Quả thật có chút nguy hiểm.
Xem bản gốcTrả lời0
BrokeBeansvip
· 07-20 16:22
Cả ngày nghĩ đến việc đào hố, có tay làm bài tập không thú vị hơn sao?
Xem bản gốcTrả lời0
GateUser-ccc36bc5vip
· 07-20 16:13
v8 bảo vệ kém vậy sao?
Xem bản gốcTrả lời0
StablecoinGuardianvip
· 07-20 16:09
Ôi ôi, V8 an toàn lại có vấn đề rồi.
Xem bản gốcTrả lời0
  • Ghim
Giao dịch tiền điện tử mọi lúc mọi nơi
qrCode
Quét để tải xuống ứng dụng Gate
Cộng đồng
Tiếng Việt
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)