นักวิจัยพบช่องโหว่ปลดล็อคหน้าจอมือถือ Pixel แบบไม่ต้องรู้รหัส, กูเกิลแก้แล้วในแพทช์ล่าสุด

by BlackMiracle
10 November 2022 - 15:30

David Schütz นักวิจัยด้านความปลอดภัยจากฮังการีได้เปิดเผยช่องโหว่บนมือถือ Google Pixel ทุกรุ่น สามารถปลดล็อคหน้าจอมือถือของเหยื่อได้โดยไม่ต้องทราบรหัส ล่าสุดกูเกิลอุดช่องโหว่นี้แล้วในแพทช์ล่าสุดเดือนพฤศจิกายน

David เขียนบล็อกเล่าว่าเขาพบช่องโหว่นี้โดยบังเอิญในมือถือ Pixel 6 ส่วนตัว โดยเขาทำมือถือแบตหมดแล้วโดนถาม PIN ของซิมการ์ดตอนเปิดเครื่องซึ่งเขาจำไม่ได้และใส่รหัสผิดครบ 3 ครั้ง ทำให้ต้องใส่รหัส PUK ของซิมแทนซึ่งระบุอยู่บนซองของซิม หลังจากเขาใส่รหัส PUK ที่ถูกต้อง เครื่องก็ให้ตั้ง PIN ของซิมใหม่ แต่ตั้งเสร็จเครื่องกลับให้สแกนนิ้ว ทั้งที่ปกติ Pixel จะต้องใส่ PIN ครั้งแรกหลังบูตเครื่องเพื่อถอดรหัสดิสก์ก่อน

หลังจากนั้นเขาจึงทดลองขั้นตอนดังกล่าวซ้ำๆ เพราะสงสัยว่าเกิดจากอะไร แต่มีครั้งหนึ่งที่เขาลืมรีบูตเครื่อง โดยเริ่มจากการล็อคเครื่องไว้ปกติแล้วสลับซิม ใส่รหัสซิมผิด 3 ครั้ง ใส่รหัส PUK แล้วตั้ง SIM PIN ใหม่ แต่คราวนี้เขาทะลุเข้าหน้าโฮมได้เลยโดยที่ไม่ต้องใส่รหัสเครื่องหรือสแกนนิ้วใดๆ ชมคลิปสาธิตช่องโหว่ได้ด้านล่าง

เขาระบุว่า Pixel 6 ของเขาอัพเดตแพทช์ล่าสุด ซึ่งขณะนั้นคือเดือนมิถุนายน 2022 และได้ลองทดสอบกับ Pixel 5 ก็ได้ผลแบบเดียวกัน จึงมั่นใจว่านี่คือช่องโหว่ปลดล็อคหน้าจอแน่นอน (Lock Screen Bypass) เขาจึงเข้าไปรายงานช่องโหว่นี้ผ่านโครงการ Google Bug Hunters ทันที

หลังจากรายงานช่องโหว่ไปได้ 1 เดือน ทีมงาน Android ก็ติดต่อกลับมาว่าเคยได้รับรายงานอื่นที่เหมือนกันนี้มาแล้ว และกำลังตรวจสอบอยู่ แต่หลังจากผ่านไป 2 เดือนทีมงานก็ยังระบุว่าตรวจสอบอยู่เช่นเดิม และหลังจาก 3 เดือนซึ่งตอนนั้นแพทช์เดือนกันยายน 2022 ออกมาแล้ว บั๊กนี้ก็ยังคงอยู่ ทำให้ David บอกทีมงาน Android ว่าจะเปิดเผยช่องโหว่นี้ในวันที่ 15 ตุลาคม 2022 เนื่องจากรอนานมากแล้ว โดยทีมงาน Android ได้ขอนัดประชุมกับ David ถึงแนวทางการแก้ไข ซึ่งทีมงานบอกว่าแก้ในแพทช์เดือนตุลาคมไม่ทันเพราะบิลด์และทดสอบแพทช์เดือนตุลาคมไปแล้ว และสัญญาว่าจะแก้ช่องโหว่นี้ในแพทช์เดือนพฤศจิกายน 2022 แทน ทำให้ David ตัดสินใจชะลอการเปิดเผยช่องโหว่ออกไปหลังแพทช์เสร็จสิ้น โดยเพิ่งเปิดเผยในวันที่เขียนข่าวนี้ พร้อมวิจารณ์ว่าการสื่อสารกับทีมงาน Android ค่อนข้างแย่ ไม่ค่อยอัพเดตสถานะการแก้ไข และใช้เวลาแก้นาน

นอกจากนี้ทีมงาน Android ยังบอก David ว่าปกติจะไม่ให้เงินรางวัลกับรายงานที่ส่งเข้ามาซ้ำ แต่เนื่องจากรายงานแรกที่ทีมงานได้รับไม่ชัดเจนและไม่สามารถทำซ้ำ (reproduce) ได้ จึงตัดสินใจมอบเงินรางวัล 70,000 ดอลลาร์สหรัฐ (ราว 2.6 ล้านบาท) ให้แก่ David ในฐานะที่ให้ข้อมูลชัดเจนจนทีมงานแก้ไขช่องโหว่ได้

หลังแพทช์เดือนพฤศจิกายนออกมา ช่องโหว่นี้ก็ถูกแก้ไขไปเรียบร้อย และ David ได้เข้าไปดู commit ที่แก้ไขช่องโหว่ดังกล่าว พบว่าสาเหตุคือการเรียกฟังก์ชัน .dismiss() เพื่อปลดล็อคหน้าจอ โดยปกติหน้าจอล็อคของ Android สามารถ "ซ้อน" (stack) กันได้ เช่นหน้าใส่รหัส SIM PIN ก็จะซ้อนอยู่บนหน้าจอสแกนนิ้วอีกที และเวลา Android เรียกฟังก์ชัน .dismiss() ก็จะเป็นการปลดล็อคหน้าจอชั้นบนสุด เพื่อไปเจอหน้าจอชั้นถัดไป

อย่างไรก็ตาม อาจมีส่วนอื่นของระบบปฏิบัติการที่มอนิเตอร์สถานะของซิมการ์ดอยู่ด้วย และเมื่อมันตรวจพบว่าผู้ใช้ผ่านหน้าใส่รหัส PUK แล้วก็เรียกฟังก์ชัน .dismiss() เพื่อจะปลดล็อคหน้าจอ SIM PIN แต่หน้าจอ SIM PIN เองก็เรียกฟังก์ชัน .dismiss() ด้วย (ที่ตอนนี้หน้าจอล็อคชั้นบนสุดกลายเป็นการสแกนนิ้วแล้ว) หน้าจอ SIM PIN ที่ควรจะปลดล็อคหน้าจอตัวเอง กลับกลายเป็นการปลดล็อคหน้าจอการสแกนนิ้วแทนและเข้าสู่หน้าโฮมได้ในที่สุด โดยสภาวะแบบนี้เรียกว่า race condition นั่นเอง

วิธีที่ทีมพัฒนา Android แก้ช่องโหว่นี้คือการปรับฟังก์ชัน .dismiss() ใหม่โดยบังคับให้ caller ที่เรียกฟังก์ชัน .dismiss() ต้องระบุพารามิเตอร์ว่าต้องการจะปลดล็อคหน้าจอประเภทใด อย่างในเคสของ David จะเป็นการเรียก .dismiss(SecurityMode.SimPuk) เพื่อระบุว่าต้องการปลดล็อคหน้าจอ PUK เท่านั้น หากหน้าจอล็อคที่ active อยู่ในขณะนั้นเป็นหน้าจอประเภทอื่นก็ไม่ต้องทำอะไร

หากใครสนใจโครงการล่าช่องโหว่ของกูเกิล สามารถเข้าไปอ่านรายละเอียดได้ที่นี่ และหากพบช่องโหว่ที่เข้าข่ายก็รายงานได้ที่นี่

ที่มา - bugs.xdavidhu.me

Blognone Jobs Premium