Phân tích độ sâu các nguy cơ bảo mật giá trị Sentinel của động cơ Chrome V8

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

Khám Phá Sâu Về Những Rủi Ro An Ninh Của Sentinel Value 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 dừng trong các thuật toán lặp hoặc đệ quy. Giá trị Sentinel được sử dụng rộng rãi trong mã nguồn Chrome. Gần đây, các nhà nghiên cứu an ninh đã phát hiện ra rằng có thể thực hiện mã tùy ý trong sandbox của Chrome thông qua việc rò rỉ đối tượng TheHole. Đội ngũ Google đã nhanh chóng khắc phục lỗ hổng này.

Tuy nhiên, trong V8 vẫn còn những đối tượng nguyên thủy khác không nên bị lộ ra ngoài JavaScript. Bài viết này sẽ tập trung vào đối tượng Uninitialized Oddball, việc lộ diện của đối tượng này có thể dẫn đến các nguy cơ bảo mật rộng hơn. 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 vấn đề này.

Cần lưu ý rằng phương pháp này có tính tổng quát cao.

  1. CVE-2021-30551 đã đề xuất lần đầu tiên poc rò rỉ internal uninitialized oddball.

  2. Trong poc của CVE-2022-1486 cũng đã trực tiếp rò rỉ UninitializedOddball.

  3. Issue1352549( chưa được phân bổ CVE) đã trình bày mã khai thác đầy đủ.

Những trường hợp này đầy đủ chứng minh sự cần thiết phải kiểm tra toàn diện phần mềm có thể bị ảnh hưởng. Tính đến thời điểm hiện tại, Skype vẫn chưa khắc phục được lỗ hổng này.

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

Để xác minh tính hiệu quả của phương pháp này trong phiên bản mới nhất của V8, chúng ta có thể thông qua việc sửa đổi các hàm native của V8 để làm lộ Uninitialized Oddball vào JavaScript. 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ề Uninitialized Oddball.

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

Vượt qua bảo vệ HardenType

Bằng cách đơn giản hóa mã được cung cấp trong Issue1352549, chúng ta có thể thực hiện đọc tương đối tùy ý trong phiên bản V8 11.0.0:

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

Khi %TheHole() trả về UninitializedOddball, hàm đọc JavaScript đã tối ưu sẽ trực tiếp tính toán độ lệch theo ngữ nghĩa JavaScript mà không kiểm tra giá trị của obj.prop, dẫn đến sự nhầm lẫn kiểu, cho phép đọc tùy ý.

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

Tương tự như đối tượng TheHole, do 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ễ bị giả mạo hơn. Sau khi biện pháp TheHole bị vượt qua, phương pháp này trở thành giải pháp vượt qua ưa thích.

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

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

Cảnh báo PatchGap

Phân tích Issue1352549, chúng tôi phát hiện Skype hiện vẫn chưa sửa lỗi này. Trong môi trường x86, việc đọc và ghi tùy ý có chút khác biệt: do không có nén địa chỉ, việc đọc và ghi tùy ý trực tiếp liên quan đến toàn bộ tiến trình.

Mặc dù Skype đã kích hoạt ASLR, nhưng do tệp lớn, nếu đặt trực tiếp trong bộ nhớ 4GB, kẻ tấn công chỉ cần đọc và ghi vào địa chỉ cụ thể thì có khả năng cao sẽ đọc và ghi 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, việc hoàn thành toàn bộ chuỗi khai thác lỗ hổng không phải là điều khó khăn.

Tiết lộ độc quyền cách vượt qua Chrome v8 HardenProtect thông qua việc lộ giá trị Sentinel

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 làm giảm đáng kể độ khó khi khai thác các lỗ hổng tương tự như CVE-2022-1486 và CVE-2021-30551. Kẻ tấn công gần như không cần nghiên cứu thêm để khai thác hoàn toàn bất kỳ lỗ hổng nào làm rò rỉ uninitialized_oddball.

Tiết lộ độc quyền cách vượt qua HardenProtect của Chrome thông qua việc rò rỉ Giá trị Sentinel

Tóm tắt

Bài viết này tóm tắt việc thảo luận về việc thực hiện đọc tùy ý thông qua việc rò rỉ uninitialized_Oddball trong giá trị Sentinel. Cũng có nhiều giá trị Sentinel khác trong V8, thường gặp sự cố khi thử nghiệm. Do Uninitialized_Oddball và TheHole đều có thể thực hiện việc vượt qua vòng trong V8, chúng ta có lý do để nghi ngờ rằng các giá trị Sentinel khác cũng có thể gây ra vấn đề tương tự.

Điều này mang lại cho chúng ta những gợi ý sau:

  1. Các rò rỉ uninitialized_Oddball khác có thể dễ dàng thực hiện RCE của V8 không.

  2. Google đã nhanh chóng sửa lỗi TheHole, nhưng việc để lâu vấn đề lợi dụng thu gom rác để thực hiện việc vượt qua ASLR cho thấy ranh giới về việc liệu các vấn đề như vậy có được coi là vấn đề an ninh chính thức hay không vẫn còn mập mờ.

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

Dù sao đi nữa, những vấn đề như vậy sẽ rút ngắn đáng kể chu kỳ mà kẻ tấn công có thể thực hiện khai thác hoàn toàn.

Khám phá độc quyền cách vượt qua Chrome v8 HardenProtect bằng cách 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

Độc quyền tiết lộ cách vượt qua Chrome v8 HardenProtect thông qua việc 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
  • 3
  • Chia sẻ
Bình luận
0/400
GateUser-afe07a92vip
· 20giờ trước
Google đang làm gì vậy mà cũng bị lộ
Xem bản gốcTrả lời0
SelfRuggervip
· 20giờ trước
Có vẻ như V8 năm nay sẽ có chuyện lớn.
Xem bản gốcTrả lời0
SchrodingerGasvip
· 20giờ trước
V8 vẫn đang làm việc sau một đêm ngủ, ai sẽ trả gas cho đợt này?
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)