1 คะแนน โดย GN⁺ 2025-07-13 | 4 ความคิดเห็น | แชร์ทาง WhatsApp
  • การอัปเดต MV3 ของ Chrome ได้ลบสิทธิ์ webRequestBlocking ออกไปเพื่อทำให้ความสามารถของแอดบล็อกเกอร์แบบเดิมอ่อนลง
  • ผู้เขียนค้นพบบั๊กในปี 2023 ที่ทำให้สามารถ หลบเลี่ยง webRequestBlocking ได้แม้อยู่ใน สภาพแวดล้อม MV3
  • บั๊กนี้เกิดจาก โครงสร้าง JavaScript binding ที่หละหลวม และ โค้ดเก่า ที่ยังคงเหลืออยู่
  • ด้วยการปรับแต่ง WebView instance ID เพื่อข้ามการตรวจสอบสิทธิ์ จึงสามารถใช้ความสามารถในการบล็อกได้แม้ในสภาพแวดล้อม MV3
  • ปัจจุบันมีการ แพตช์แล้ว และวิธีหลบเลี่ยงนี้ไม่สามารถใช้งานได้อีกต่อไป

MV3 และการเปลี่ยนแปลงของแอดบล็อกเกอร์

  • Chrome กำลังทยอยยกเลิก ส่วนขยาย MV2 และเปลี่ยนผ่านไปสู่ MV3 แทน
  • MV3 ลบสิทธิ์ webRequestBlocking ออกไป ทำให้แอดบล็อกเกอร์ไม่สามารถบล็อกคำขอเครือข่ายแบบไดนามิกด้วยสคริปต์ได้
  • แม้จะมีการเพิ่ม API declarativeNetRequest เข้ามาแทน แต่ก็ไม่รองรับความยืดหยุ่นในระดับเดียวกัน
  • การเปลี่ยนแปลงนี้ส่งผลให้ประสิทธิภาพของแอดบล็อกเกอร์ลดลงอย่างมาก

ข้อจำกัดของโครงสร้าง JavaScript binding

  • แม้แกนหลักของ Chrome จะพัฒนาด้วย C++ แต่ ส่วนขยายทำงานด้วย JavaScript และ API ของส่วนขยายก็เข้าถึงผ่าน JS binding
  • จนถึงช่วงปี 2015~2016 มีการแทรกไฟล์ JS (โมดูล extension binding) ลงในเว็บไซต์เพื่อเริ่มต้นและตรวจสอบ API
    • วิธีนี้เปราะบางต่อการ override ฟังก์ชัน global และ prototype ของ JS จนทำให้เกิดบั๊ก Universal XSS หลายรายการ
  • หลังจากนั้น Google ได้ย้าย binding หลักไปยัง C++ แต่ไฟล์ JS binding บางส่วนยังคงหลงเหลืออยู่
  • จนถึงตอนนี้ API บางตัว เช่น chrome.webRequest ก็ยังใช้โครงสร้าง JS binding อยู่

การหลบเลี่ยงด้วยคลาสเหตุการณ์เว็บรีเควสต์

  • ใน MV2 สามารถทำ การบล็อกเว็บรีเควสต์ ได้ด้วยโค้ดด้านล่าง

    chrome.webRequest.onBeforeRequest.addListener(() => { return { cancel: true } }, { urls: ['*://*.example.com/*'] }, ['blocking'])
    
  • แต่ใน MV3 ตัวเลือก blocking ถูกห้ามใช้ จึงไม่สามารถบล็อกได้ตามปกติ

  • อย่างไรก็ตาม สามารถสร้างอ็อบเจ็กต์ event ตามต้องการได้ผ่าน .constructor ของ webRequest event

  • ภายในนั้น อ็อบเจ็กต์ event นี้ถูกจัดการโดยคลาส wrapper พิเศษของ JS binding

  • หากระบุ opt_webViewInstanceId ซึ่งเป็นหนึ่งในพารามิเตอร์ของ constructor ก็จะสามารถข้ามตรรกะการอนุญาตที่สงวนไว้สำหรับ platform app และทะลุการตรวจสอบสิทธิ์ของการบล็อกได้

    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'])
    
  • เดิมถูกออกแบบให้ใช้ได้เฉพาะกับ platform app เท่านั้น แต่เนื่องจากการตรวจสอบ WebView ID ไม่รัดกุม จึงถูกนำไปใช้ในทางที่ผิดกับส่วนขยายทั่วไปได้

ผลลัพธ์และแพตช์ด้านความปลอดภัย

  • ช่องโหว่นี้ทำให้สามารถพัฒนาแอดบล็อกเกอร์ที่สมบูรณ์แบบได้จริงแม้อยู่ในสภาพแวดล้อม MV3
  • ผู้เขียนได้รายงานบั๊กนี้ต่อ Google ในปี 2023 และมีการแพตช์ใน Chrome 118 โดยเปลี่ยนไปตรวจสอบการครอบครองสิทธิ์ของ WebView อย่างถูกต้อง
  • ไม่มีการจ่ายเงินรางวัล เนื่องจากลักษณะของช่องโหว่นี้เป็นการข้ามสิทธิ์เท่านั้น โดยไม่มีการเปิดเผยข้อมูลเพิ่มเติม
  • กรณีนี้แสดงให้เห็นว่า การแก้โค้ดเพียงไม่กี่สิบบรรทัดก็สามารถทำให้การอัปเดตความปลอดภัยของบริษัทยักษ์ใหญ่ไร้ผลได้

บทสรุปและข้อมูลอ้างอิง

  • บั๊กนี้ถูกแพตช์แล้วและไม่สามารถใช้งานได้อีกต่อไป
  • ในทำนองเดียวกัน ยังมีกรณี ช่องโหว่ที่เกี่ยวข้องกับ Chrome extension ที่น่าสนใจ โดยมีเคสที่ได้รับหมายเลข CVE และเงินรางวัล $10,000 จริงด้วย (ดูจากบล็อกโพสต์แยก)

4 ความคิดเห็น

 
hhcrux 2025-07-14

หลังอัปเดตนั้น น่าจะทำให้ผู้ให้บริการ adblock มียอดขายเพิ่มขึ้นอีกด้วย
แอปแบบสแตนด์อโลนที่บล็อกตั้งแต่ระดับเครือข่ายใช้งานได้เฉพาะแบบเสียเงินเท่านั้น เลยน่าจะขายได้ค่อนข้างมาก

 
crawler 2025-07-14

ผ่านมาแล้วตั้ง 2 ปี เอาช่องโหว่ที่ตอนนี้ไม่มีความหมายอะไรแล้วมาลง แถมยังต้องพูดด้วยว่าไม่ได้รับเงิน... ส่วนตัวผมว่าไม่ค่อยคูลเท่าไรนะ
แต่ก็คงต้องเขียนอะไรแบบนี้ลงบล็อกเพื่อพิสูจน์คุณค่าของตัวเองสินะ?
พูดจากใจเลยว่าผมเองก็อยากเรียนรู้วิธีคิดแบบนี้ แล้วจะได้เขียนบล็อกเยอะ ๆ บ้าง

 
ndrgrd 2025-07-14

ก็ใช้ Firefox ไปเลยครับ/ค่ะ ช่วง 1–2 ปีที่ผ่านมาเร็วขึ้นมาก เลยไม่ได้แย่อะไร
ผม/ฉันใช้ Firefox เป็นหลักมาหลายปี และก็ลองเทียบกับ Chrome เป็นครั้งคราว โดยเฉพาะช่วงหลัง ๆ รู้สึกว่า Firefox ใช้งานได้ดีพอแล้ว
แม้แต่เว็บที่เคยไม่สนใจมาตรฐานเว็บอย่างเว็บของธนาคารเกาหลี ช่วงหลังก็แก้ไขไปเยอะแล้ว ทำให้ส่วนใหญ่ใช้งานบน Firefox ได้ดี
เรื่องการปรับแต่งก็ทำได้ง่ายกว่าใน Firefox มากครับ/ค่ะ

 
GN⁺ 2025-07-13
ความคิดเห็นจาก Hacker News
  • แม้อยากลองใช้ Firefox อยู่บ้าง แต่สิ่งที่ติดขัดที่สุดคือบั๊กการโหลดเว็บไซต์ที่โผล่มาเป็นครั้งคราว และการที่ติดตั้ง PWA (Progressive Web Apps) ไม่ได้ เบราว์เซอร์ Chrome และสายตระกูลเดียวกันรองรับฟีเจอร์นี้มานานแล้ว เลยไม่ค่อยเข้าใจว่าทำไม Firefox ยังไม่ทำสักที ถึงจะหาเอกซ์เทนชันจากบุคคลที่สามได้ (PWAs for Firefox) แต่ก็ไม่ค่อยกล้าใช้ในแง่ความเป็นส่วนตัว

  • ต่อให้มีวิธีเลี่ยงพฤติกรรมของ Google ได้ ก็คิดว่านั่นไม่ใช่ทิศทางที่ถูกต้อง ถ้าผู้คนไม่เห็นด้วยกับสิ่งที่ Google กำลังทำ วิธีที่ถูกต้องมีแค่อย่างเดียวคือเลิกใช้ Chrome และเบราว์เซอร์ที่อิง Chromium ทั้งหมด สิ่งสำคัญคือต้องกระทบต่อการผูกขาดของ Google และดึงอำนาจในการกำหนดอนาคตของเว็บกลับมา

    • คิดว่าการผูกขาดในทุกวันนี้เกิดจากการที่ทุกคนลืมบทเรียนที่ควรได้จาก IE กันหมด เพราะไม่เรียนรู้มาตรฐานเว็บ และเอา Chrome ไป bundle รวมกับแอปพลิเคชัน
    • ประเด็นของบทความไม่ใช่เรื่องนี้ และในบทความจริงก็ระบุว่าวิธีเลี่ยงนี้ถูกแพตช์ไปแล้วใน Chrome 118
    • ก็อยากประชดเหมือนกันว่า ที่บอกว่า "ต้องกระทบการผูกขาด" นี่เคยทำให้อะไรเปลี่ยนจริงหรือ
    • ในทางปฏิบัติ เรื่องแบบนั้นคงไม่เกิดขึ้น
    • หลายคนมองว่าการย้ายไปใช้เบราว์เซอร์ Chromium ที่ตัดระบบติดตามของ Google ออกยังไม่พอ แต่จริง ๆ แล้วผมคิดว่านั่นเป็นกรอบความคิดที่ Google อยากให้คนเชื่อต่างหาก Firefox แตกต่างจาก Chrome อย่างชัดเจน และย้ายจาก Chrome ไปใช้ไม่ง่าย ขณะที่ Brave, Chromium แบบปรับแต่ง, Vivaldi ฯลฯ แทบจะเป็น Chrome แบบไม่มีการติดตามของ Google เลยเกือบเหมือนเดิม ข้ออ้างว่า "Google ยังควบคุม Chromium อยู่เลยใช้ไม่ได้" นั่นแหละที่ดูเป็น FUD (ความกลัว ความไม่แน่นอน และความสงสัย) ที่ฝั่ง Google น่าเป็นคนกระจายมากกว่า
  • วิธีเลี่ยงที่แท้จริงคือใช้ Firefox เพราะ uBlock Origin ทำงานได้ดีที่สุดบน Firefox
    uBlock Origin works best on Firefox

    • ผมใช้ Firefox มาตลอด เลยไม่รู้ด้วยซ้ำว่าเรื่องแบบนี้กำลังเกิดขึ้น พอภรรยาบอกว่าเห็นโฆษณาใน YouTube ถึงได้ไปดู แล้วพบว่ามันเกิดทั้งที่เคยติดตั้ง uBlock ให้แล้ว
  • ก็ยังสงสัยว่า MV3 ปลอดภัยกว่า MV2 จริงหรือเปล่า การเปลี่ยนไปใช้ MV3 ดูไม่ได้ทำให้ความปลอดภัยดีขึ้นอย่างมีนัยสำคัญ

    • พูดตรง ๆ ว่าแปลกใจว่าจะมีคนเชื่อเรื่องนี้จริง ๆ บทความเองก็เริ่มต้นมาด้วยผลประโยชน์ทับซ้อนที่ชัดเจนอยู่แล้ว การปล่อยให้เอกซ์เทนชันรู้ว่า ผู้ใช้เข้าเว็บไหนและมีข้อมูลคำขออะไรบ้าง แน่นอนว่าเป็นสภาพแวดล้อมที่เปราะบาง ถึงอย่างนั้น ผมก็ยังเชื่อใจ uBO มากกว่าบริษัทโฆษณากับพวกเก็บข้อมูล เลยใช้อย่างนั้นต่อไป
  • มีความเห็นต่อกรณีที่มีคนค้นพบวิธีเลี่ยง adblocker แล้วไปบอก Google ว่า “เจอแล้วก็รีบไปฟ้อง Google เลยนะ เจ๋งจริง”

    • จริง ๆ แล้วถ้า adblocker เริ่มใช้วิธีนี้ Google ก็คงแพตช์ปิดทันทีอยู่ดี และนักพัฒนาคนนั้นก็คงไม่ได้ประโยชน์อะไรอยู่แล้ว ความย้อนแย้งคือสุดท้ายก็ไม่ได้อะไรเหมือนกัน
  • OP ไปรายงาน “issue” ที่ไม่ได้เป็นปัญหาสำหรับ Google เลย ทำให้นักพัฒนาแอดออนหมดทางเลี่ยงข้อจำกัดของ MV3 หวังว่ามันจะคุ้มค่า $0 นะ

    • วิธีเลี่ยงแบบนี้ ต่อให้ไม่บอกก็คงอยู่ได้ไม่เกินวันเดียวก่อน Google จะลบทิ้งทันที ตรงกันข้าม OP อาจได้เงินรางวัลด้วยซ้ำ เลยคิดว่าก็พอเข้าใจได้ ไม่อยากตำหนิ
    • ไม่เห็นด้วยกับข้อสรุปนั้น ความรับผิดชอบทั้งหมดควรอยู่ที่ Google ถ้า OP ไม่รายงาน issue นี้ ต่อให้มี adblocker ตัวอื่นมาใช้วิธีนี้ภายหลัง Google ก็คงรีบสั่งห้ามอยู่ดี หรืออาจถึงขั้นลบเอกซ์เทนชันนั้นออกจาก Web Store ไปเลยก็ได้
    • ถ้ามี adblocker ที่คนใช้งานจริงนำวิธีนี้ไปใช้ Google ก็คงปิดมันในทันทีแน่นอน มันไม่ใช่คีย์โกงที่ใช้ได้ไม่จำกัด
    • ผมก็คิดเหมือนกัน OP เท่ากับไปทำงานฟรีให้บริษัทยักษ์ใหญ่ และผลลัพธ์คือทำให้สภาพแวดล้อมบนเว็บแย่ลงอีก เหตุผลก็คงเป็น... "เพื่อความปลอดภัย" สินะ สุดยอดจริง ๆ
  • ตั้งแต่เริ่มใช้ Brave ก็ไม่คิดถึง Chrome เลย
    Brave

    • กลับกัน ผมว่่า Brave ใช้งานน่าหงุดหงิดกว่า Chrome เสียอีก นอกจากประเด็นเรื่อง Brendan Eich แล้ว ยังมีขยะเต็มไปหมด ทั้งฟีเจอร์ยัดมาแบบสุ่ม การบล็อกโฆษณาในตัว (Brave Shields) ที่ปิดให้หมดจริง ๆ ก็ไม่ได้ องค์ประกอบเกี่ยวกับคริปโต ปุ่มดาวน์โหลดเว็บแอปที่ปิดไม่ได้ UI ที่ลบไม่ออก ฯลฯ
    • Brave ก็ยังเป็นบริษัทแสวงหากำไรอยู่ดี และความที่มันมีฟีเจอร์ที่ไม่จำเป็นเยอะเกินไปเป็นค่าเริ่มต้น ก็เลยเข้าใจได้ว่าทำไมหลายคนถึงไม่ชอบ แต่ก็มีคอนเทนต์แนวทิปอย่าง "วิธีทำให้ Brave ผอมลง" อยู่ไม่น้อย
    • เอนจินข้างในก็ยังเป็น Blink อยู่ดี เลยเหมือนแค่เปลี่ยนหน้าตา ยังไม่เคยเห็นเบราว์เซอร์ Blink ตัวไหนที่รักษา Manifest V2 ต่อไปได้จริง ถ้ามีก็คงเป็น soft fork ที่อยู่ได้ไม่นาน
    • Brave ก็ยังอิง Chromium อยู่ดี ดังนั้นในทางปฏิบัติก็แทบไม่ต่างจาก Chrome และ Manifest V3 ก็คงหนีไม่พ้น
    • ก็มีมุมมองเชิงวิจารณ์ว่าไม่ควรใช้เบราว์เซอร์ Brave
      Stop using Brave browser
  • สำหรับข้ออ้างที่ว่า "adblocker จำเป็นต้องใช้ webRequestBlocking และ Google ตัดฟีเจอร์นี้ออกอย่างจงใจมากเพราะหารายได้จากโฆษณา" ก็มีความเห็นโต้แย้งว่า "มันไม่จริง ใคร ๆ ก็ใช้ uBlock Origin Lite บน Chrome และ manifest v3 ได้ ประสิทธิภาพก็ดีและแทบไม่รู้สึกต่างจาก uBlock Origin เดิม ทุกอย่างถูกกรองใน C++ เลยเร็วกว่าเยอะ แน่นอนว่ามีข้อจำกัดเรื่องจำนวน rule สูงสุด แต่ตอนนี้ก็ยังรับมือได้ดีพอ"

    • แต่ Lite ก็เป็น Lite จึงมีข้อจำกัดด้านความสามารถ ตัวมันเองไม่ได้เป็น adblocker แบบเดิมตั้งแต่แรก เลยไม่อาจเหมือนกันทุกอย่างได้
  • นอกจากโน้ตบุ๊กที่ใช้ทำงานแล้ว ผมแทบไม่มีเหตุผลต้องใช้ Chrome เลย ปกติก็ใช้ Firefox ต่อเนื่องอยู่แล้ว ถึงอย่างนั้นก็ยังเสียดายที่คงใช้ uBlock Origin ไม่ได้บนการท่องเว็บเพื่อการทำงาน เช่น ค้นข้อมูลหรืออ่านเอกสาร

  • ถ้าแค่อยากเลี่ยง ก็แค่ติดตั้ง Firefox

    • ผมคิดว่า Firefox เองก็ไม่ค่อยดี ทั้งในฐานะเว็บเบราว์เซอร์และในฐานะแพลตฟอร์มพื้นฐาน น่าเสียดายที่ Zen ไม่ได้ใช้ Chromium