นาย Hector Marco พบช่องโหว่ที่จะทำให้สามารถ bypass การ login ของ console (รวมถึงการ reboot แล้วเข้า shell prompt) โดยช่องโหว่ดังกล่าวเกิดจากการที่ script ที่ชื่อว่า /scripts/local-top/cryptroot ใช้สำหรับการถอดรหัส system partition ไม่สามารถถอดรหัส ได้ เมื่อ user กรอก password ผิดไปตามที่กำหนด (Default คือ 3 ครั้ง) เครื่องจะ boot ปกติต่อไปนั่นเอง

screen-shot-2559-11-15-at-14-08-21

เมื่อมาถึงส่วนที่มีการเรียกใช้งาน /script/local ซึ่งเป็นตัวจัดการ error ที่เกิดขึ้น จะพยายามที่จะ recover/remount device ที่ไม่สามารถใช้งานได้ ประมาณ 30 ครั้ง(หากเป็น powerpc จะ 150 ครั้ง) โดยในช่วงต้นๆของ /script/local จะมีการพยายาม mount encrypted partition นั่นหมายความว่าหากเป็นเครื่อง x86 จะมีการพยายามเดา password ประมาณ ((30×3) + 3) = 93 ครั้งด้วยกัน

ซึ่งเมื่อการพยายาม mount ด้วยรหัสผ่านผิดถึงจำนวนที่กำหนด ในส่วน local_device_setup() มีการกำหนดไว้ว่าให้มีการใช้งาน function panic เพื่แก้ไข module, driver ทำให้เปิด (Busybox) shell ขึ้นมาครับ

screen-shot-2559-11-15-at-15-58-36

วิธีการ PoC

วิธีการ PoC ก็ง่ายๆคือตอนที่มีการถาม password สำหรับการถอดรหัส system partition เราก็แค่กด enter ไปเรื่อยๆ จนถึงประมาณ 70 วินาทีก็จะได้มาเป็น (Busybox) Shell ครับ

วิธีการแก้ไข

เข้าไปแก้ไขไฟล์ /scripts/local-top/cryptroot โดยการป้องกันการ boot ต่อหาก password ผิดครบตามที่กำหนดครับ

screen-shot-2559-11-15-at-16-06-04

หรือเข้าไปแก้ไขเงื่อนไขการ boot เพื่อเป็นการกำหนดว่าหากมีการใช้งาน kernel panic ให้ทำการ reboot แทน โดยกระทำที่ /scripts/functions

screen-shot-2559-11-15-at-16-11-06

จากนั้นแก้ไข grub ครับ

# sed -i ‘s/GRUB_CMDLINE_LINUX_DEFAULT=”/GRUB_CMDLINE_LINUX_DEFAULT=”panic=5 /’ /etc/default/grub

# grub-install

Source:: Hmarco.org