Recientemente มีการค้นพบช่องโหว่ ซึ่งอาจทำให้ผู้ดูแลบล็อกรายการตัวกรองได้ สำหรับส่วนขยายเบราว์เซอร์ Adblock Plus, AdBlock และ uBlocker เพื่อสร้างตัวกรองที่ฉีดสคริปต์ระยะไกลลงในเว็บไซต์
ด้วยฐานผู้ใช้ที่ทะลุ 10 ล้านเครื่องหมาย หากสคริปต์ที่เป็นอันตรายถูกแทรกเข้าไปในตัวบล็อกโฆษณาสิ่งนี้จะส่งผลกระทบอย่างมาก เนื่องจากอาจทำกิจกรรมที่ไม่ต้องการเช่นการขโมยคุกกี้ข้อมูลการเชื่อมต่อทำให้เพจเปลี่ยนเส้นทางหรือพฤติกรรมที่ไม่ต้องการอื่น ๆ
สำหรับคนที่ ไม่คุ้นเคยกับตัวบล็อกโฆษณาโดยทั่วไปแล้วพวกเขาใช้รายการ URL ที่เกี่ยวข้องกับโฆษณาและพฤติกรรมที่เป็นอันตราย
โดยปกติแล้ว พวกเขาดำเนินการโดยทีมงานเล็ก ๆ หรือแม้แต่คนเดียว
เมื่อรายการเหล่านี้เต็มไปด้วยส่วนขยายการปิดกั้นโฆษณาเช่น Adblock Plus ส่วนขยายนี้จะป้องกันไม่ให้เบราว์เซอร์เชื่อมต่อกับ URL ที่อยู่ในรายการซึ่งจะป้องกันการเชื่อมต่อกับโฆษณาหรือสคริปต์ที่เป็นอันตราย
ตัวเลือก $ rewrite filter เป็นสาเหตุของปัญหา
เมื่อ Adblocker Plus 3.2 เปิดตัวในปี 2018 นั่นเอง เพิ่มตัวเลือกรายการตัวกรองใหม่ที่เรียกว่า $ rewrite
ตัวเลือกนี้ ได้รับอนุญาต ไปยังผู้ดูแลรายการ แทนที่คำขอเว็บที่ตรงกับนิพจน์ทั่วไป โดยเฉพาะอย่างยิ่งกับ URL อื่น
ฮิวเบิร์ต ฟิกิแยร์, ผู้แนะนำฟังก์ชันนี้ อธิบายว่า:
“ ตั้งแต่ Adblock Plus 3.2 สำหรับ Chrome, Firefox และ Opera (และเวอร์ชันพัฒนาคือ 3.1.0.2053) ตัวเลือกตัวกรองใหม่ $ rewrite ช่วยให้คุณสามารถเขียน URL ของทรัพยากรใหม่แทนที่จะปิดกั้น
เมื่อ Adblock Plus กำหนด URL คำขอให้กับตัวกรองด้วยตัวเลือก $ rewrite จะแปลง URL ตามกฎที่ให้มาและบอกให้เบราว์เซอร์โหลดทรัพยากรพร้อมกัน
ไวยากรณ์ของกฎ $ เขียนซ้ำระบุสตริงที่ทำหน้าที่เป็นเทมเพลตสำหรับ URL ใหม่
$ n ถูกแทนที่ด้วยการจับคู่ย่อยนิพจน์ทั่วไปที่ n-th ของตัวกรอง นี่เป็นไวยากรณ์เดียวกับฟังก์ชัน JavaScript String.prototype.replace ()
หาก URL ผลลัพธ์สัมพันธ์กัน (เช่นคุณไม่มีโฮสต์) ที่มาของแบบสอบถามเดิมจะถูกใช้เป็นพื้นฐาน ไม่ว่าในกรณีใดหาก URL ใหม่ไม่เปิดเผยที่มาการเขียนซ้ำจะถือว่าไม่สำเร็จและคำขอเริ่มต้นจะผ่านไป
นอกจากนี้ตัวกรอง $ เขียนซ้ำจะถูกละเว้นสำหรับการสืบค้น SCRIPT, SUBDOCUMENT, OBJECT และ OBJECT_SUBREQUEST ด้วยเหตุผลด้านความปลอดภัย ตัวเลือกนี้สะดวกสำหรับการแก้ไขหรือกำจัดพารามิเตอร์การค้นหา»
ข้อเสียเพียงอย่างเดียวคือสตริงการแทนที่ต้องเป็น URL สัมพัทธ์ซึ่งหมายความว่าไม่มีชื่อโฮสต์และเมื่อเขียนใหม่จะต้องเป็นของโดเมนต้นทางเดียวกันกับคำขอ
การเรียกใช้โค้ดสามารถทำได้บนแผนที่ Google
นักวิจัยด้านความปลอดภัยอธิบาย ที่:
ภายใต้เงื่อนไขบางประการเป็นไปได้ที่ผู้ดูแลตัวกรองที่เป็นอันตรายที่ไม่ได้รับอนุญาตจะสร้างกฎที่ฉีดสคริปต์ระยะไกลลงในไซต์เฉพาะ
เมื่อต้องการทำสิ่งนี้ เพียงแค่มองหาไซต์ที่โหลดสคริปต์ จากโดเมนใด ๆ ที่มีการเปลี่ยนเส้นทางแบบเปิด และใช้ XMLHttpRequest หรือ Fetch เพื่อดาวน์โหลดสคริปต์เพื่อเรียกใช้
ไม่ได้หายากเกินไปเพราะต้องทำคนเดียว เพียงแค่ใช้ Google Maps เพื่อพิสูจน์แนวคิด
ผู้วิจัยอธิบายว่า ต้องเป็นไปตามเกณฑ์ต่อไปนี้ เพื่อให้สามารถใช้บริการเว็บด้วยวิธีนี้:
- เพจต้องโหลดสตริง JS โดยใช้ XMLHttpRequest หรือ Fetch และรันโค้ดส่งคืน
- หน้านี้ไม่ควร จำกัด แหล่งที่มาซึ่งสามารถเรียกค้นได้โดยใช้หลักเกณฑ์นโยบายความปลอดภัยของเนื้อหาหรือตรวจสอบความถูกต้องของ URL คำขอสุดท้ายก่อนเรียกใช้โค้ดที่ดาวน์โหลด
- แหล่งที่มาของรหัสที่ดึงมาต้องมีการเปลี่ยนเส้นทางฝั่งเซิร์ฟเวอร์แบบเปิดหรือเนื้อหาของผู้ใช้โดยพลการจากโฮสต์
การใช้ XMLHttpRequest หรือ Fetch เพื่อดาวน์โหลดสคริปต์และเปิดการเปลี่ยนเส้นทางเป็นกุญแจสำคัญสองประการในการแก้ปัญหา
เพื่อบรรเทาปัญหานี้ ขอแนะนำให้เว็บไซต์ใช้ส่วนหัวนโยบายความปลอดภัยของเนื้อหาและตัวเลือกเชื่อมต่อ-src เพื่อระบุรายการที่อนุญาตพิเศษของไซต์ที่สามารถโหลดสคริปต์ได้