Khám phá lỗ hổng Sentinel Value của động cơ V8: Vượt qua bảo vệ để thực hiện mã tùy ý

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

Khám phá việc sử dụng Giá trị Sentinel để vượt qua cơ chế bảo vệ 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 dừng cho thuật toán vòng lặp hoặc đệ quy. Trong mã nguồn Chrome có nhiều loại giá trị Sentinel khác nhau. Trước đó, có 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 một số CVE. Đội ngũ Google đã nhanh chóng cập nhật các CVE liên quan lên GitHub khoảng một tuần sau khi chúng tôi đăng bài giải thích về việc vượt qua biện pháp này.

Từ mã nguồn Chrome, có thể thấy rằng có một bản sửa lỗi giảm thiểu cho đối tượng TheHole dẫn đến việc thực thi mã tùy ý. Nhưng thực tế, trong V8 còn nhiều đối tượng nguyên thủy khác không nên bị lộ ra JS. Bài viết này sẽ thảo luận về đối tượng Uninitialized Oddball, phương pháp vượt qua này lần đầu tiên xuất hiện trong Issue1352549. Đáng lưu ý rằng, hiện tại phương pháp này vẫn có thể được sử dụng trong phiên bản mới nhất của V8, Google vẫn chưa khắc phục điều này.

Phương pháp này có tính tổng quát cao.

  1. Issue1216437(CVE-2021-30551) lần đầu tiên đưa ra POC là rò rỉ internal uninitialized oddball.

  2. Issue1314616(CVE-2022-1486)中的 POC cũng trực tiếp rò rỉ UninitializedOddball.

  3. Ảnh hưởng của Issue1352549(NoCVE) không thể bị bỏ qua.

Tất cả những điều này rõ ràng cho thấy cần phải xem xét lại phần mềm có thể bị ảnh hưởng bởi PatchGap.

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

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, chúng được sắp xếp liền kề trong bộ nhớ. Một khi những đối tượng gốc không nên bị rò rỉ này bị rò rỉ vào JavaScript, nó có thể dẫn đến việc thực thi mã tùy ý trong sandbox.

Để xác thực hiệu quả của phương pháp này trong phiên bản mới nhất V8, chúng ta có thể sửa đổi hàm nguyên thủy %TheHole() của V8 để nó trả về Uninitialized Oddball.

Khám Phá Độc Quyền Cách Vượt Qua Chrome v8 HardenProtect Qua Việc Rò Rỉ Sentinel Value

Vượt qua HardenType

Vấn đề 1352549 đã cung cấp mã hoàn chỉnh, sau khi chúng tôi trích xuất và đơn giản hóa, vẫn có thể thực hiện đọc tương đối tùy ý trong V8 11.0.0.

Đối với việc giải nén hàm read JavaScript đã được tối ưu hóa, có thể thấy rằng khi kiểm tra obj.prop, không kiểm tra giá trị với obj.prop làm key, mà trực tiếp tính toán độ lệch để lấy giá trị mảng theo ngữ nghĩa của JavaScript. Điều này dẫn đến việc xảy ra nhầm lẫn kiểu khi tính toán, thực hiện đọ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

Khi truyền vào uninitialized_oddball, tính toán từ obj, cuối cùng hoàn thành việc đọc tùy ý trong lệnh vmovsd xmm0,[r9+r11*8+0x7], dữ liệu được lưu trong thanh ghi xmm0.

Do uninitialized_oddball trong bộ nhớ V8 sắp xếp ở vị trí đầu và nguyên thủy hơn, việc giả mạo trở nên dễ dàng hơn, đây là phương pháp ưu tiên để vượt qua. Viết tùy ý có thể tham khảo phân tích cấu trúc trong Issue1352549.

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

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

Cảnh báo PatchGap

Sau khi phân tích Issue1352549, chúng tôi đã kiểm tra phần mềm có thể tồn tại PatchGap và phát hiện rằng Skype vẫn chưa sửa chữa lỗ hổng này. Việc đọc và ghi tùy ý trên x86 có một chút khác biệt, do không có nén địa chỉ, nó là trực tiếp tương đối với toàn bộ tiến trình.

Trong việc sử dụng Skype, mặc dù đã bật ASLR, nhưng do tệp quá lớn, hacker chỉ cần đọc và ghi vào một địa chỉ cố định, rất có thể sẽ đọc và ghi vào nội dung tệp Skype. Kết hợp với việc phân tích PE và các phương pháp truyền thống khác, không khó để hoàn thành toàn bộ chuỗi khai thác lỗ hổng.

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

Lần này, PatchGap không chỉ liên quan đến Issue1352549, việc công khai phương pháp vượt qua mới còn dẫn đến việc giảm đáng kể độ khó khai thác cho các vấn đề tương tự như Issue1314616 và Issue1216437. Hacker gần như không cần chi phí nghiên cứu, có thể thực hiện khai thác hoàn chỉnh bất kỳ lỗ hổng uninitialized_oddball nào trong quá khứ.

Tiết lộ độc quyền cách vượt qua HardenProtect của Chrome bằng cách tiết lộ Sentinel Value

Tóm tắt

Bài viết này tóm tắt việc thực hiện đọc tùy ý thông qua việc rò rỉ uninitialized_Oddball. Trong V8 còn nhiều giá trị Sentinel khác, và cũng dễ gặp phải sự cố không phải int3 trong quá trình kiểm tra. Vì Uninitialized_Oddball và TheHole đều có thể vượt qua bảo vệ của V8, các giá trị Sentinel khác cũng có thể tồn tại vấn đề tương tự.

Điều này cho chúng ta một số gợi ý:

  1. Việc lộ uninitialized_Oddball khác có thể dễ dàng thực hiện RCE của V8 hay không.

  2. Google đã nhanh chóng khắc phục lỗ hổng TheHole, nhưng vấn đề khai thác việc thu gom rác để vượt qua ASLR vẫn bị bỏ ngỏ trong thời gian dài, cho thấy rằng liệu các vấn đề tương tự có được coi là vấn đề an ninh chính thức hay không vẫn còn tồn tại ranh giới mơ hồ.

  3. Nếu coi đây là vấn đề an toàn chính thức, liệu có cần xem xét việc đưa các giá trị Sentinel như %TheHole/uninitialized_Oddball vào biến trong fuzzer, để khai thác các nguyên lý khác không.

Dù vấn đề này có được coi là vấn đề an ninh chính thức hay không, nó sẽ rút ngắn đáng kể thời gian mà hacker có thể thực hiện khai thác hoàn toàn.

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

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

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

Xem bản gốc
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.
  • Phần thưởng
  • 6
  • Chia sẻ
Bình luận
0/400
OptionWhisperervip
· 3giờ trước
Lỗi này thật nghiêm trọng, những chi tiết nhỏ lại gây ra cái chết.
Xem bản gốcTrả lời0
OnchainFortuneTellervip
· 3giờ trước
bug tuyệt vời了
Xem bản gốcTrả lời0
ExpectationFarmervip
· 4giờ trước
Lỗ hổng thật sự khó mà phòng tránh!
Xem bản gốcTrả lời0
MysteryBoxBustervip
· 4giờ trước
v8 lại chơi quá tay rồi, nóng quá!
Xem bản gốcTrả lời0
BlockchainFriesvip
· 4giờ trước
Nhìn qua tiêu đề đã thấy choáng.
Xem bản gốcTrả lời0
alpha_leakervip
· 4giờ trước
Mã thực thi bull quá tuyệt, lỗ hổng anh em!
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)