Google vừa vá lỗ hổng zero-day thứ bảy trong năm 2026 của Chrome, định danh CVE-2026-87491, sau khi nhà nghiên cứu Jihyeon Jeong từ Compsec Lab thuộc Đại học Quốc gia Seoul báo cáo và nhận thưởng 2.500 USD. Đây là lỗi ghi tràn vùng nhớ, hay out-of-bounds write, nằm trong V8, cỗ máy thực thi JavaScript và WebAssembly của Google. Chỉ cần dụ nạn nhân mở một trang HTML được chế tác riêng, kẻ tấn công có thể làm hỏng vùng heap và thực thi mã tùy ý bên trong sandbox của trình duyệt. Google tung bản vá cho Windows, Mac và Linux chỉ hai ngày sau khi nhận báo cáo. Tốc độ phản ứng nhanh này cho thấy mức độ nghiêm trọng của lỗ hổng.

Điều đáng chú ý là bốn trong bảy zero-day của Chrome năm nay đều bắt nguồn từ cùng một cỗ máy V8. Vậy vì sao bộ phận vốn được xem là trái tim tốc độ của trình duyệt lại liên tục trở thành cửa ngõ cho các cuộc tấn công?

JIT compiler biến JavaScript chậm chạp thành mã máy tốc độ cao

V8 không chạy JavaScript theo kiểu thông dịch từng dòng như nhiều người tưởng. Nó dùng một chuỗi nhiều tầng: Ignition biên dịch mã nguồn thành bytecode và thực thi ngay, còn Sparkplug, Maglev rồi TurboFan lần lượt tối ưu hóa những hàm được gọi đi gọi lại nhiều lần, gọi là hot function, thành mã máy native chạy trực tiếp trên CPU. Đây chính là compiler tức thời, hay JIT, viết tắt của Just-In-Time. Để đạt hiệu năng tối đa, JIT compiler đặt cược vào giả định về kiểu dữ liệu: nếu một mảng luôn chứa số nguyên trong vài nghìn lần chạy đầu, TurboFan sẽ sinh ra mã máy chuyên biệt cho trường hợp mảng số nguyên, bỏ qua các bước kiểm tra kiểu dữ liệu vốn tốn thời gian. Nhờ vậy JavaScript vốn chậm hơn C++ hàng chục lần nay có thể tiệm cận tốc độ mã biên dịch sẵn.

Khi giả định sai lệch biến tối ưu hóa thành lỗ hổng

Vấn đề nằm ở chỗ giả định đó có thể bị đánh lừa. Nếu kẻ tấn công tìm ra cách thay đổi kiểu hoặc cấu trúc bộ nhớ của một đối tượng đúng vào thời điểm TurboFan đã biên dịch xong mã tối ưu nhưng chưa kịp deoptimize, tức quay lại kiểm tra an toàn, đoạn mã máy đó vẫn đọc hoặc ghi dữ liệu theo offset bộ nhớ tính toán cho kiểu dữ liệu cũ. Đây gọi là type confusion, một dạng lỗi khiến engine tưởng nhầm loại dữ liệu và thao tác ra ngoài vùng nhớ đã cấp phát, chính là out-of-bounds write như trong CVE-2026-87491. Từ một cú ghi tràn vài byte, kẻ tấn công có thể dần dần ghi đè con trỏ, thao túng bộ nhớ heap để chuyển từ làm hỏng dữ liệu sang thực thi mã tùy ý, dù vẫn còn bị giới hạn trong sandbox của Chrome cho đến khi kết hợp thêm một lỗ hổng thoát sandbox khác.

Đây là lý do các đội bảo mật công nghệ trình duyệt xem V8 là mặt trận khó phòng thủ nhất: tốc độ và an toàn luôn kéo co lẫn nhau, mỗi lớp tối ưu hóa mới lại mở ra một bề mặt tấn công mới cho những ai đủ kiên nhẫn dò tìm.