นักวิจัยทางด้าน Security พบช่องโหว่ cross-origin bypass attack ทำให้สามารถทำ CSRF (Cross Site Request Forgery) กำหนดให้ User ส่ง Private Message ของตัวเองมาให้ Hacker ได้

โดยปกติแล้ว Facebook Messenger จะทำงานบน Server ที่ชื่อ domain name เป็น {number}-edge-chat.facebook.com เช่น 5-edge-chat.facebook.com เป็นต้น ส่วนตัว Chat เองจะทำงานอยู่บน www.facebook.com

การคุยกันระหว่าง Facebook Messenger service กับ Chat Server จะใช้เป็น XML HTTP Request (XHR) ซึ่งการที่จะเข้าถึง Chat Server จาก Facebook Messenger Service , Facebook ใช้ Header ในการกำหนดการเข้าถึงดังต่อไปนี้

  • Access-Control-Allow-Origin  เป็น Header กำหนดว่าให้ใครเข้าถึง Resource ของ Server ได้บ้าง
  • Access-Control-Allow-Credentials เป็น Header กำหนดให้สามารถส่งข้อมูลที่เป็น Cookie (Credential) หากันได้

ซึ่งการกระทำดังกล่าวเป็นการกระทำตามหลักของ CORS (Cross-Origin Resource Sharing) เพื่อป้องกันไม่ให้ Server อื่นสามารถเข้าดึงข้อมูลได้ Facebook จะมีการตรวจสอบ ‘Origin’ Header ด้วย โดยถ้าหาก Request ที่สร้างขึ้นไม่ได้มาจากที่ที่ Facebook อนุญาตจะกลายเป็นได้ผลลัพธ์คือ Server Code 400 (Bad Request) และกำหนดใน Header Response “x- fb-chat-failure-reason: badorigin” กลับไป

ทีนี้หากเราใช้งานเป็น GET Method เรียกเข้าไปตรงๆไปยัง Facebook Messenger Server ซึ่งไม่มี Origin Header (ไม่ได้เป็น XHR Request) เมื่อฝั่ง Server ได้รับ Request ที่ไม่มี Origin Header กำหนดมาด้วย จะถือว่าค่าที่ไม่ได้กำหนดเป็น Null ดังนั้นฝั่ง Server ก็จะมองว่า Origin มีค่าเป็น Null, ซึ่งมันกลายเป็นว่า Server ดันตอบ Request นั้นๆด้วย “Access-Control-Allow-Origin: null” ซะอย่างนั้น

นั่นหมายความว่า เราสามารถเรียก Resource ไปยัง Facebook Messenger Server แบบข้าม domain ได้เลย

ทีนี้สิ่งที่ Security Researcher ทำก็คือการสร้าง XHR ในเว็บเพจที่ใช้ PoC โดยใช้ Javascript กำหนด Origin Header เป็น Null และให้สามารถส่ง Credential ได้ (withCredentials = true)

screen-shot-2559-12-15-at-13-59-45

เมื่อมี Client เข้าเว็บเพจดังกล่าว ตัว Browser ก็จะเริ่มทำงานให้ Client ส่ง Request ออกไปหา Facebook Messenger Server เพื่อเรียกดู Message ของตัวเอง รอให้มีการ Chat จากนั้นเมื่อมีการส่ง Message มาก็จะทำการส่งต่อไปยังเว็บไซด์ของ Security Researcher อีกที

(การจะ PoC สำเร็จ Client ต้องมี Cookie ของ Facebook อยู่ และ Cookie นั้นต้องใช้งานได้อยู่ด้วย)

ตอนนี้ทาง Facebook แก้ไขช่องโหว่นี้แล้วครับ

Source:: Cynet.com