1 điểm bởi GN⁺ 2025-07-13 | 4 bình luận | Chia sẻ qua WhatsApp
  • Bản cập nhật MV3 của Chrome đã loại bỏ quyền webRequestBlocking nhằm làm suy yếu chức năng của các trình chặn quảng cáo hiện có
  • Tác giả đã phát hiện vào năm 2023 một lỗi có thể vượt qua webRequestBlocking ngay cả trong môi trường MV3
  • Lỗi này xảy ra do cấu trúc lỏng lẻo của JavaScript binding và việc mã cũ vẫn còn được giữ lại
  • Bằng cách thao túng ID instance WebView để vượt qua kiểm tra quyền, vẫn có thể dùng chức năng chặn trong môi trường MV3
  • Hiện tại bản vá đã được áp dụng, nên cách vượt qua này không còn hoạt động nữa

MV3 và những thay đổi với trình chặn quảng cáo

  • Chrome đang dần loại bỏ extension MV2 và chuyển sang MV3
  • MV3 loại bỏ quyền webRequestBlocking, ngăn các trình chặn quảng cáo chặn động các yêu cầu mạng bằng script
  • Thay cho quyền đó, API declarativeNetRequest được bổ sung, nhưng không hỗ trợ mức độ linh hoạt tương đương
  • Vì thay đổi này, hiệu năng của các trình chặn quảng cáo đã giảm đi đáng kể

Giới hạn của cấu trúc JavaScript binding

  • Phần lõi của Chrome được phát triển bằng C++, nhưng extension hoạt động bằng JavaScript, và API mở rộng cũng được truy cập thông qua JS binding
  • Cho đến giai đoạn 2015~2016, API được khởi tạo và kiểm tra bằng cách chèn các tệp JS (module binding của extension) vào trang
    • Cách làm này dễ bị tấn công bởi việc override hàm toàn cục và prototype trong JS, dẫn đến nhiều lỗi Universal XSS
  • Sau đó Google đã chuyển các binding chính sang C++, nhưng một số tệp JS binding vẫn còn tồn tại
  • Cho đến nay, một số API như chrome.webRequest vẫn sử dụng cấu trúc JS binding

Vượt qua bằng cách tận dụng lớp sự kiện web request

  • Trong MV2, chặn web request có thể được triển khai bằng đoạn mã dưới đây

    chrome.webRequest.onBeforeRequest.addListener(() => { return { cancel: true } }, { urls: ['*://*.example.com/*'] }, ['blocking'])
    
  • Trong MV3, tùy chọn blocking bị cấm nên không thể chặn theo cách thông thường

  • Tuy nhiên, có thể tạo một đối tượng sự kiện tùy ý thông qua .constructor của sự kiện webRequest

  • Về mặt nội bộ, một lớp wrapper đặc biệt của JS binding quản lý đối tượng sự kiện này

  • Nếu chỉ định opt_webViewInstanceId, một trong các tham số của constructor, có thể vượt qua logic cho phép chỉ dành cho platform app và bỏ qua kiểm tra quyền chặn

    let WebRequestEvent = chrome.webRequest.onBeforeRequest.constructor
    let fakeEvent = new WebRequestEvent("webRequest.onBeforeRequest", 0, 0, 0, 1337)
    
    fakeEvent.addListener(() => { return { cancel: true } }, { urls: ['*://*.example.com/*'] }, ['blocking'])
    
  • Ban đầu nó được thiết kế để chỉ platform app mới dùng được, nhưng do việc xác thực WebView ID không chặt chẽ nên extension thông thường cũng có thể lạm dụng

Kết quả và bản vá bảo mật

  • Với lỗ hổng này, trên thực tế vẫn có thể phát triển một trình chặn quảng cáo hoàn chỉnh trong môi trường MV3
  • Tác giả đã báo cáo lỗi này cho Google vào năm 2023, và trong Chrome 118 nó đã được vá bằng cách kiểm tra đúng quyền sở hữu WebView
  • Không có tiền thưởng được chi trả, vì về mặt cấu trúc đây chỉ là hành vi vượt quyền mà không làm lộ thêm dữ liệu
  • Trường hợp này cho thấy chỉ vài chục dòng mã sửa đổi cũng có thể vô hiệu hóa bản cập nhật bảo mật của một tập đoàn lớn

Kết luận và tham khảo

  • Lỗi hiện đã được vá và không còn hoạt động nữa
  • Một ví dụ tương tự thú vị về lỗ hổng liên quan đến Chrome extension là một vấn đề từng thực sự nhận được mã CVE và khoản thưởng $10,000 (xem bài blog riêng)

4 bình luận

 
hhcrux 2025-07-14

Có lẽ sau bản cập nhật đó, các công ty adblock đã tăng doanh thu nhiều hơn.
Những ứng dụng độc lập chặn hẳn ở tầng mạng thì chỉ dùng được bản trả phí, nên chắc cũng bán được khá nhiều.

 
crawler 2025-07-14

Đăng một lỗ hổng đã mất hết ý nghĩa từ tận 2 năm trước, lại còn phải cố nhấn mạnh chuyện không được trả tiền nữa sao... Cá nhân tôi thấy thế không hẳn là ngầu lắm.
Nhưng chắc cũng phải viết những thứ như thế lên blog thì mới chứng minh được giá trị của bản thân nhỉ?
Thật lòng mà nói, tôi cũng muốn học kiểu tư duy này để viết blog nhiều hơn một chút.

 
ndrgrd 2025-07-14

Cứ dùng Firefox thôi. 1–2 năm gần đây nó đã nhanh hơn rất nhiều nên không tệ đâu.
Tôi đã dùng Firefox làm trình duyệt chính nhiều năm và thỉnh thoảng so sánh với Chrome; đặc biệt gần đây tôi cảm thấy Firefox đã đủ tốt để dùng hằng ngày.
Ngay cả những trang web trước đây phớt lờ chuẩn web như các ngân hàng Hàn Quốc thì gần đây cũng đã sửa khá nhiều, nên đa số giờ đều hoạt động tốt trên Firefox.
Việc tùy biến cũng dễ hơn nhiều trên Firefox.

 
GN⁺ 2025-07-13
Ý kiến Hacker News
  • Dù cũng muốn thử dùng Firefox, trở ngại lớn nhất là các lỗi tải trang web thỉnh thoảng xuất hiện, cùng với việc không thể cài PWA (Progressive Web Apps). Chrome và các trình duyệt cùng họ đã hỗ trợ tính năng này từ lâu, nên tôi không rõ vì sao Firefox vẫn chưa triển khai. Tôi cũng đã tìm thấy một tiện ích bên thứ ba (PWAs for Firefox), nhưng lại ngần ngại dùng nó vì lý do quyền riêng tư

  • Dù có cách lách hành vi của Google đi nữa, tôi vẫn nghĩ đó không phải hướng đi đúng. Nếu mọi người không đồng ý với động thái của Google, thì cách đúng duy nhất là bỏ Chrome và toàn bộ các trình duyệt dựa trên Chromium. Điều quan trọng là phải giáng đòn vào thế độc quyền của Google và tước đi quyền chi phối của họ đối với tương lai của web

    • Tôi nghĩ mọi thế độc quyền ngày nay đều bắt nguồn từ việc mọi người quên mất bài học từng phải rút ra từ IE. Nguyên nhân là vì không học các tiêu chuẩn web mà lại đóng gói Chrome kèm theo ứng dụng của mình
    • Đó không phải trọng tâm của bài viết; bài gốc thực ra có nói rằng cách lách này đã bị vá trong Chrome 118
    • Tôi chỉ muốn mỉa mai câu "phải giáng đòn vào độc quyền" xem đã bao giờ thật sự làm thay đổi được gì chưa
    • Thực tế thì chuyện đó sẽ không xảy ra đâu
    • Nhiều người cho rằng chuyển sang các trình duyệt Chromium đã loại bỏ theo dõi của Google là chưa đủ, nhưng thật ra tôi nghĩ đó lại là cái khung mà Google muốn. Firefox rõ ràng khác Chrome và không dễ chuyển từ Chrome sang. Trong khi đó Brave, Chromium tùy biến, Vivaldi v.v. thì gần như là Chrome không có theo dõi của Google nên hầu như giống hệt. Lập luận kiểu "Google vẫn kiểm soát Chromium nên không ổn" theo tôi lại chính là FUD (sợ hãi, bất định, nghi ngờ) mà phía Google sẽ muốn lan truyền
  • Cách lách thực sự là dùng Firefox. uBlock Origin hoạt động tốt nhất trên Firefox
    uBlock Origin works best on Firefox

    • Vì tôi luôn dùng Firefox nên thậm chí còn không biết chuyện này đang xảy ra. Đến khi vợ tôi nói rằng cô ấy vẫn thấy quảng cáo trên YouTube, tôi mới kiểm tra và phát hiện dù trước đây tôi đã cài uBlock cho cô ấy rồi
  • Tôi cũng nghi ngờ liệu MV3 có thực sự an toàn hơn MV2 như Google nói hay không. Chuyển sang MV3 dường như không khiến bảo mật được tăng cường về bản chất

    • Thành thật mà nói, tôi ngạc nhiên không biết có ai thực sự tin điều này không. Bản thân bài viết cũng bắt đầu bằng một xung đột lợi ích quá rõ ràng. Việc cho bất kỳ tiện ích nào biết các trang mà người dùng truy cập và thông tin yêu cầu chắc chắn là một môi trường dễ tổn thương. Dù vậy, tôi vẫn tin uBO hơn các công ty quảng cáo và các đơn vị thu thập dữ liệu, nên cứ dùng như thế
  • Về trường hợp có người tìm ra cách lách adblocker rồi báo cho Google, có phản ứng kiểu: "Tìm ra xong liền mách Google, tuyệt thật đấy"

    • Thực ra, nếu adblocker bắt đầu tận dụng cách này thì Google đã vá ngay lập tức, và nhà phát triển đó cũng chẳng thu được lợi ích gì. Trớ trêu ở chỗ kết cục vẫn là chẳng được gì cả
  • OP đã báo cho Google một "issue" chẳng gây vấn đề gì cho họ, khiến nhà phát triển addon mất đi một cách vượt qua các giới hạn của MV3. Hy vọng nó đáng giá $0

    • Những cách lách kiểu này cùng lắm cũng chỉ tồn tại chưa đến một ngày trước khi bị Google xóa bỏ. Ngược lại OP còn có thể nhận được tiền thưởng, nên tôi nghĩ làm vậy cũng hoàn toàn có lý. Tôi không muốn chỉ trích họ
    • Tôi không đồng ý với kết luận đó. Toàn bộ trách nhiệm phải thuộc về Google. Kể cả nếu OP không báo issue này, thì khi một adblocker khác dùng cách đó sau này, Google cũng sẽ sớm cấm nó thôi. Thậm chí có thể họ còn áp dụng biện pháp cực đoan hơn là gỡ hẳn tiện ích đó khỏi Web Store
    • Nếu một adblocker đang được người dùng thực sự triển khai cách này, Google tất nhiên sẽ chặn ngay. Đây không phải kiểu cheat code có thể dùng vô hạn
    • Tôi cũng nghĩ vậy. OP về cơ bản đã làm việc miễn phí cho một tập đoàn lớn, và kết quả là khiến môi trường web trở nên khó chịu hơn. Lý do thì chắc là... "vì bảo mật" thôi. Quá tuyệt
  • Từ khi bắt đầu dùng Brave, tôi hoàn toàn không nhớ Chrome chút nào
    Brave

    • Ngược lại, tôi thấy Brave còn khó chịu hơn Chrome. Ngoài vấn đề với Brendan Eich, nó còn có quá nhiều thứ rác như đủ loại tính năng tùy tiện trong trình duyệt, chặn quảng cáo (Brave Shields) không thể tắt hoàn toàn, các yếu tố liên quan đến tiền mã hóa, nút tải webapp không thể tắt, giao diện không thể xóa, v.v.
    • Brave vẫn là một công ty vì lợi nhuận, và việc mặc định nhồi quá nhiều tính năng không cần thiết tất nhiên khiến người ta khó có thiện cảm. Tuy vậy, cũng có không ít nội dung mẹo kiểu "Cách cho Brave ăn kiêng" để chỉnh cấu hình gọn nhẹ hơn
    • Suy cho cùng engine vẫn là Blink, nên chỉ là thay đổi phần vỏ ngoài. Tôi chưa từng thấy trình duyệt Blink nào tiếp tục giữ Manifest V2. Kể cả có thì đó cũng chỉ là soft fork, không thể cầm cự lâu
    • Brave rốt cuộc vẫn dựa trên Chromium, nên về cơ bản cũng chẳng khác Chrome. Manifest V3 cuối cùng vẫn sẽ được áp dụng
    • Cũng có góc nhìn chỉ trích rằng không nên dùng trình duyệt Brave
      Stop using Brave browser
  • Trước ý kiến kiểu "adblocker nhất định cần webRequestBlocking, Google kiếm tiền từ quảng cáo nên việc loại bỏ tính năng này là rất có chủ đích", cũng có người nói rằng: "Điều đó không đúng; ai cũng có thể dùng uBlock Origin Lite trên Chrome và manifest v3, hiệu năng tốt và tôi không cảm thấy khác biệt với uBlock Origin cũ. Mọi thứ đều được lọc trong C++ nên nhanh hơn nhiều. Tất nhiên có giới hạn số rule tối đa, nhưng hiện tại vẫn hoàn toàn đủ dùng"

    • Tuy vậy, Lite là Lite nên khả năng của nó vẫn bị giới hạn. Bản thân nó vốn không phải adblocker theo nghĩa ban đầu, nên không thể hoàn toàn giống nhau
  • Ngoài laptop công việc ra thì tôi không có lý do gì để dùng Chrome, và bình thường vẫn tiếp tục dùng Firefox. Dù vậy, tôi vẫn thấy tiếc vì không thể dùng uBlock Origin trong công việc lướt web như tra cứu tài liệu hay đọc tài liệu

  • Nếu chỉ đơn giản muốn lách thì cứ cài Firefox là được

    • Tôi nghĩ Firefox không ổn cả với tư cách một trình duyệt web lẫn một nền tảng. Thật tiếc vì Zen không dùng Chromium