20 คะแนน โดย kuroneko 2023-10-27 | 3 ความคิดเห็น | แชร์ทาง WhatsApp
  • Salt Labs ค้นพบว่าสามารถยึดบัญชีผู้ใช้ได้ผ่านช่องโหว่ในการติดตั้งใช้งาน OAuth ของบริการขนาดใหญ่มากที่มีผู้ใช้หลายร้อยล้านคนอย่าง Booking.com, Grammarly, Vidio, Bukalapak และเฟรมเวิร์กมือถืออย่าง Expo
  • OAuth เป็นโปรโตคอลที่ปลอดภัยโดยพื้นฐาน แต่ชี้ให้เห็นว่าหากนำไปติดตั้งใช้งานไม่เหมาะสมก็อาจก่อให้เกิดช่องโหว่ร้ายแรงได้
  • Booking.com
    • ในการติดตั้งใช้งาน Facebook OAuth มีปัญหาที่สามารถเปลี่ยน redirect_uri ไปเป็นพาธอื่นบนโฮสต์เดียวกันได้
    • ภายใน booking.com มี endpoint ที่จะรีไดเรกต์ไปยังที่อยู่ดังกล่าว หากส่งที่อยู่ในรูปแบบ base64 ให้
    • เมื่อนำสองสิ่งนี้มารวมกัน จึงสามารถดัดแปลงให้โทเค็นของ OAuth ถูกส่งต่อไปยังที่อยู่อื่นได้
    • ในเวอร์ชันเว็บไม่มีช่องโหว่นี้ เพราะมีการตรวจสอบ redirect_uri ระหว่างกระบวนการล็อกอิน แต่ในเวอร์ชันมือถือมีปัญหาที่ทำให้สามารถดัดแปลง redirect_uri ได้ด้วย จึงยึดบัญชีได้
    • กล่าวคือ เป็นช่องโหว่ที่ผู้ใช้เพียงคลิกลิงก์ที่ดูถูกต้องตามปกติมาก ๆ และดำเนินการ OAuth ตามปกติ บัญชีก็อาจถูกยึดได้
  • Expo
    • เป็นช่องโหว่ที่พบในระบบติดตั้งใช้งาน OAuth แบบฝังตัวของ Expo ซึ่งเป็นเฟรมเวิร์กมือถือ
    • ในการติดตั้งใช้งานดังกล่าว returnUrl จะใส่ลิงก์เฉพาะของแอป Expo อย่าง exp://~~ แต่มีปัญหาที่สามารถใส่ที่อยู่เว็บอย่าง hTTps://~~ ได้
      • แม้จะมีการป้องกันไม่ให้ป้อน https:// โดยตรง แต่สามารถหลบเลี่ยงได้เพียงเปลี่ยนตัวพิมพ์เล็ก-ใหญ่
    • จากนั้นข้อมูล returnUrl จะถูกเก็บไว้ในคุกกี้ชื่อ RU และเมื่อ OAuth เสร็จสิ้น เซิร์ฟเวอร์ OAuth ของ Expo จะอ่านคุกกี้นั้นแล้วรีไดเรกต์
    • อย่างไรก็ตาม ก่อนจะเปลี่ยนจาก Expo ไปยัง Facebook จะมีข้อความเตือนว่า https://~~ 를 신뢰하는 경우... และผู้ใช้ต้องกดยอมรับ
    • เพื่อหลบเลี่ยง จึงใช้วิธีเปิดลิงก์ 2 ลิงก์โดยอัตโนมัติ
      • เปิดลิงก์แรกแล้วปิดทันที เพื่อให้ตั้งค่าเฉพาะคุกกี้ RU
      • ลิงก์ที่สองให้ลิงก์ Facebook OAuth โดยตรง เพื่อข้ามข้อความเตือน RU
    • ด้วยวิธีนี้จึงสามารถยึดบัญชีของ Codecademy.com ได้สำเร็จ
    • ช่องโหว่นี้ได้รับรหัส CVE-2023-28131 และทีม Expo ได้แก้ไขปัญหานี้ภายในไม่กี่ชั่วโมงหลังได้รับการแจ้งครั้งแรก
  • Grammarly, Vidio, Bukalapak
    • ทั้ง 3 เว็บไซต์สามารถถูกยึดบัญชีได้ด้วยวิธีเดียวกันทั้งหมด
    • ขั้นแรก สร้างเว็บไซต์ที่ดูถูกต้องตามกฎหมายขึ้นมาเพื่อเก็บ Facebook login token
    • จากนั้นสำหรับ Vidio และ Bukalapak หากส่งโทเค็นที่ Facebook ออกให้มาให้ (ซึ่งถูกสร้างสำหรับเว็บไซต์อื่น) ก็จะล็อกอินสำเร็จทันที
      • เป็นช่องโหว่ที่เกิดจากการไม่ตรวจสอบ App ID ของ Facebook token (การโจมตีแบบ token reuse)
    • Grammarly แตกต่างออกไปเล็กน้อย เพราะใช้โค้ดแทนโทเค็น จึงไม่มีช่องโหว่ข้างต้น
    • แต่พบว่าหากส่งโทเค็นไปยัง API ที่ส่งโค้ด โดยใช้ชื่อ "access_token" แทน "code" ก็สามารถล็อกอินได้
    • ดังนั้นทั้ง 3 เว็บไซต์จึงอาจถูกยึดบัญชีได้ทันที เพียงแค่ทำการเชื่อมต่อ Facebook ผ่านเว็บไซต์อื่นที่ถูกต้องตามกฎหมาย
  • เมื่อติดตั้งใช้งาน OAuth จำเป็นต้องตรวจสอบจุดที่อาจเกิดช่องโหว่ด้านความปลอดภัย และเพื่อป้องกันช่องโหว่ ควรมีการตรวจสอบอย่างละเอียดในทุกขั้นตอนของกระบวนการ

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

 
ironlung 2023-10-28

ชวนให้ตระหนักจริง ๆ ครับ/ค่ะ ต้องระวังให้มากจริง ๆ

 
[ความคิดเห็นนี้ถูกซ่อน]
 
kuroneko 2023-10-27

มีเว็บไซต์ขนาดใหญ่มาก ๆ จำนวนไม่น้อยที่มีช่องโหว่อยู่ มากกว่าที่คิดไว้เสียอีก
ดูแล้วน่าจะเป็นฟีเจอร์ที่ต้องใช้งานอย่างระมัดระวังแน่นอน

ก็ทำให้นึกว่าควรใช้ไลบรารีสำหรับยืนยันตัวตน...
แต่พอดูกรณีของ Expo แล้ว ก็รู้สึกว่าส่วนนี้เองก็จำเป็นต้องตรวจสอบด้วยตัวเองเหมือนกันครับ