- ใน macOS 14 Sonoma เวอร์ชันเบตาและ release candidate ไฟร์วอลล์ PF ไม่สามารถกรองทราฟฟิกได้อย่างถูกต้อง ทำให้แอป Mullvad VPN ทำงานได้ไม่ปกติ
- หากเปิดการตั้งค่าบางอย่าง เช่น การแชร์เครือข่ายภายในเครื่อง อาจทำให้เกิดการรั่วไหลของทราฟฟิกได้ ดังนั้น Mullvad จึงมองว่ายากที่จะรับประกันทั้งฟังก์ชันการทำงานและความปลอดภัยบน macOS 14
- Mullvad ได้ตรวจสอบปัญหานี้หลังจากเบตาตัวที่ 6 และรายงานให้ Apple ทราบแล้ว แต่บั๊กยังคงอยู่ในเบตาหลังจากนั้นและใน release candidate
- บริษัทได้พิจารณาว่าสามารถหลบเลี่ยงด้วยแพตช์ในตัวแอปเองได้หรือไม่ แต่ยังไม่พบวิธีแก้ที่ปลอดภัย และโดยพื้นฐานแล้วจำเป็นต้องมี การแก้ไขไฟร์วอลล์จาก Apple
- ผู้ใช้ที่พึ่งพาการกรองของ PF หรือแอปที่เกี่ยวข้องควรระวังการอัปเกรดเป็น macOS 14 และหากบั๊กยังไม่ถูกแก้ การอยู่ต่อบน macOS 13 Ventura จะปลอดภัยกว่า
ปัญหาไฟร์วอลล์ PF ใน macOS 14 Sonoma
- ระหว่างช่วงเบตาของ macOS 14 Sonoma นั้น Apple ได้ใส่บั๊กเข้ามาใน packet filter (PF) ซึ่งเป็นไฟร์วอลล์ของ macOS
- บั๊กนี้ทำให้แอป Mullvad VPN ใช้งานไม่ได้ และเมื่อเปิดการตั้งค่าบางอย่างอาจเกิด การรั่วไหล ของทราฟฟิกได้
- มีการยกตัวอย่างการตั้งค่าอย่างการแชร์เครือข่ายภายในเครื่อง
- Mullvad เริ่มตรวจสอบปัญหานี้หลังจาก macOS 14 เบตาตัวที่ 6 ออกมา และได้รายงานบั๊กให้ Apple ทราบ
- หลังจากนั้นปัญหาเดียวกันนี้ยังคงอยู่ใน macOS 14 เบตาและ release candidate
- บริษัทประเมินแนวทางการแพตช์เฉพาะแอป VPN เพื่อให้ยังคงทั้งการทำงานและความปลอดภัยบน macOS 14 แต่ตัดสินใจว่าในตอนนี้ยังไม่มีทางออกที่ดี
- ขอบเขตผลกระทบไม่ได้จำกัดอยู่แค่แอป Mullvad VPN เท่านั้น
- กฎไฟร์วอลล์ไม่ถูกนำไปใช้กับทราฟฟิกเครือข่ายอย่างถูกต้อง
- ทราฟฟิกที่ไม่ควรได้รับอนุญาตอาจผ่านออกไปได้
- ผู้ใช้ที่พึ่งพาการกรองของ PF หรือแอปที่ใช้งานมันอยู่เบื้องหลังควรระวังการอัปเกรดเป็น macOS 14
- macOS 14 Sonoma มีกำหนดออกในวันที่ 26 กันยายน และหากบั๊กยังคงอยู่ แนะนำให้ผู้ใช้ Mullvad อยู่ต่อบน macOS 13 Ventura จนกว่าจะมีการแก้ไข
ขั้นตอนการทดสอบซ้ำและผลลัพธ์จริง
- สามารถทดสอบให้เกิดปัญหานี้ซ้ำได้บน macOS 14 และการทดลองนี้จะลบกฎไฟร์วอลล์ที่โหลดอยู่ใน PF
- ในเทอร์มินัล ให้สร้าง virtual logging interface และเฝ้าดูทราฟฟิกที่ตรงกับกฎที่จะเพิ่มในภายหลัง
sudo ifconfig pflog1 create
sudo tcpdump -nnn -e -ttt -i pflog1
- เขียนกฎไฟร์วอลล์ต่อไปนี้ลงในไฟล์
pfrules
pass quick log (all, to pflog1) inet from any to 127.0.0.1
block drop quick log (all, to pflog1)
- ในอีกเทอร์มินัลหนึ่ง ให้เปิดใช้งาน PF และโหลดกฎ
sudo pfctl -e
sudo pfctl -f pfrules
ping 45.83.223.209
- ผลลัพธ์ที่คาดหวังคือ ping จะไม่ตรงกับเงื่อนไขของกฎ
pass เพียงข้อเดียว จึงควรถูกบล็อก และทราฟฟิกควรถูกบันทึกใน pflog1 ว่าตรงกับกฎ block
- แต่ผลที่เกิดขึ้นจริงคือ ping ออกสู่อินเทอร์เน็ตได้และมีการตอบกลับกลับมา โดยไม่มีการบันทึกทราฟฟิกไว้ใน
pflog1
- หลังการทดลอง ให้ปิดใช้งานไฟร์วอลล์และลบกฎทั้งหมด
sudo pfctl -d
sudo pfctl -f /etc/pf.conf
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
บั๊ก PF เดียวกันนี้กำลังทำให้ฟีเจอร์เครือข่ายอย่างหนึ่งของ OrbStack พังอยู่ด้วย
ตอนที่ไล่สาเหตุมาถึงตรงนี้แทบไม่น่าเชื่อ แต่ดูเหมือนจะไม่ใช่แค่ผมคนเดียวที่เจอ หวังอย่างยิ่งว่าจะถูกแก้ก่อนออกรุ่นเสถียร
ผมเพิ่งรายงานไปยัง Apple ได้เมื่อวานนี้เอง ดูเหมือนเป็น regression ที่ค่อนข้างใหม่ และน่าจะเริ่มเกิดราว ๆ beta 6
โดยปกติ PF ควรเป็นไฟร์วอลล์ที่ใช้กฎตัวสุดท้ายที่ match แต่ macOS ดูเหมือนจะทำงานเกือบเหมือนใช้กฎตัวแรกที่ match กฎ
blockที่อยู่ด้านหน้าทับกฎpassใน anchor อื่นแม้ไม่มีquickจึงเกิดปัญหาขึ้นอย่างหลีกเลี่ยงไม่ได้ถ้ารุ่นเสถียรออกมาในสภาพนี้ ถือว่ายอมรับไม่ได้ และสำหรับผมเป็นเหตุผลให้ เลิกใช้ Mac OS ได้เลย ถ้าอยากให้คนใช้ทำงานจริงจัง ก็ไม่ควรปล่อยผลิตภัณฑ์ที่มี regression แบบนี้ออกมา
บทความกระชับและมีประโยชน์มาก แถมมี ขั้นตอนทำซ้ำบั๊ก ที่เรียบง่ายด้วย ชอบมาก
ผมชอบ Mullvad
นอกเรื่องนิดหนึ่ง แต่ macOS มีบั๊กไฟร์วอลล์แปลก ๆ โดยรวมเยอะในช่วงหลายรุ่นหลัง ๆ และสงสัยว่าทำไมถึงต้องรื้อแล้วเขียนส่วนไฟร์วอลล์ใหม่
ไม่ว่าเครื่องและระบบปฏิบัติการในเครื่องจะเป็นอะไร ก็สามารถให้การท่องเว็บวิ่งผ่านเซิร์ฟเวอร์เฉพาะได้ แม้จะไม่ได้ครอบการเชื่อมต่อเครือข่ายทั้งหมด ครอบเฉพาะการท่องเว็บ แต่ภายในขอบเขตนั้นจะช่วยเปลี่ยน IP address ซ่อนตำแหน่ง และเพิ่มการป้องกันจาก browser zero-day
BrowserBox กำลังเพิ่มฟีเจอร์ที่เคารพและปกป้องความเป็นส่วนตัว พร้อมปรับปรุงประสบการณ์โดยรวมอย่างต่อเนื่อง เป็นโอเพนซอร์สจึงปรับได้ตามต้องการ ถ้าไม่ชอบ AGPL-3.0 ก็มีไลเซนส์เชิงพาณิชย์: https://github.com/dosyago/BrowserBoxPro
ถ้าไม่ชอบโอเพนซอร์สและชอบความสบายใจจากบริษัทใหญ่ ดูเหมือน Mullvad ก็มี Mullvad Browser ที่ทำงานคล้ายกัน
บทความเก่าที่เกี่ยวข้อง: https://9to5mac.com/2015/05/26/apple-drops-discoveryd-in-lat...
โค้ดสำหรับทำซ้ำ นี้ดูดีมากจริง ๆ
แน่นอนว่านั่นคือขอบเขตของบั๊ก แต่ผมไม่ได้มองว่าการตรวจสอบนี้ซับซ้อนหรือสวยงามเป็นพิเศษ
ไม่แน่ใจว่าเกี่ยวข้องไหม แต่หลัง อัปเกรด macOS สองครั้งล่าสุด เครือข่ายใช้งานไม่ได้
เชื่อมต่อ Wi‑Fi, Ethernet และ hotspot ได้ แต่การเชื่อมต่อจริงอย่าง browser หรือ ping ใช้ไม่ได้เลย และเข้าถึง router ไม่ได้ด้วย
ทั้งสองครั้ง แค่เปิดแอป Mullvad VPN หนึ่งครั้ง ทุกอย่างก็กลับมาใช้งานได้ ไม่รู้เหมือนกันว่าทำไมแค่เปิดแอปถึงแก้ปัญหาได้
ไม่ได้เกี่ยวข้องโดยตรงทั้งหมด แต่มีบั๊กเก่าอีกตัวหนึ่ง: บั๊กอายุ 11 ปีของ
Popen()บน macOS: https://news.ycombinator.com/item?id=37238433เผื่อเป็นข้อมูล ผมมีปัญหาการเชื่อมต่อกับ Mullvad.app แต่ถ้าใช้การตั้งค่า Mullvad WireGuard ใน Wireguard.app ก็ทำงานได้ดี
ผมเพิ่งติดตั้ง Sonoma beta ล่าสุดเมื่อไม่นานนี้ แล้วก็เข้าใจแล้วว่าทำไมพยายามแค่ไหนก็ทำให้ Mullvad ทำงานไม่ได้
ดีใจที่ Mullvad กำลังทำ workaround อยู่ เมื่อเช้านี้ยังคิดจะ downgrade กลับไป Ventura อยู่เลย ตอนนี้รู้สึกว่าเจอปัญหาถูกจุดแล้ว
ดีใจที่ Mullvad ช่วยเพิ่ม แรงกดดันสาธารณะ ต่อปัญหานี้ บั๊กนี้เห็นได้ชัดและน่ากังวลพอสมควร
ในต้นฉบับเขียนว่า “we have investigated this issue after the 6th beta was released and reported the bug to Apple”
กรณีของผม วิธีแก้คือดาวน์โหลด การตั้งค่า WireGuard แล้วใช้แอป Wireguard
PostUpและPostDownในการตั้งค่า WireGuard เท่านั้น ถ้าอย่างนั้นก็เรียกว่าวิธีแก้ได้ยากคำถาม: ถ้า
pflog1ไม่ถูกสร้างขึ้น pf จะทำงานตามที่คาดหรือไม่?ถ้า
tcpdumpไม่บันทึกอะไรที่ออกไปทางpflog1เลย ก็ดูเหมือนหมายความว่าข้อมูลไม่ได้ถูกส่งไปยังpflog1ดังนั้นน่าจะเป็นปัญหาก่อนถึงจุดนั้นpflog1ถูกเชื่อมต่อและอยู่ในสถานะ up หรือเปล่า? สมัยก่อนต้องเชื่อมต่อ interface และสั่งให้ up เอง MacOS ทำให้โดยอัตโนมัติหรือไม่?แน่นอนว่าการแยกประเด็นนี้ไม่ใช่หน้าที่ของคนรายงานบั๊ก แต่สักจุดหนึ่ง engineer ที่รับผิดชอบคงถามคำถามแบบนี้ ดังนั้นตอบไว้ล่วงหน้าจะดีกว่า
ifconfig pflog1 destroy