2 คะแนน โดย GN⁺ 2024-01-27 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

การค้นพบ XSS บน Chess.com

  • ระหว่างเล่นหมากรุกเป็นงานอดิเรกและลองเล่นกับเทคนิคต่าง ๆ ก็พบช่องโหว่ XSS บน Chess.com
  • Chess.com เป็นเว็บไซต์หมากรุกออนไลน์ที่ใหญ่ที่สุดบนอินเทอร์เน็ต โดยมีสมาชิกมากกว่า 100 ล้านคน

ภาพรวม

  • เริ่มใช้งาน Chess.com อย่างจริงจังมากขึ้นในช่วงต้นปี 2023
  • ชวนเพื่อนให้สมัครเว็บไซต์ และเมื่อใช้ฟีเจอร์เพื่อนก็กลายเป็นเพื่อนกันได้ทันที
  • จึงสงสัยว่าสามารถทำการเพิ่มเพื่อนอัตโนมัติได้หรือไม่ ในลักษณะคล้ายกับ MySpace worm
  • สร้างบัญชีใหม่และเปิดแท็บ Network ในเครื่องมือนักพัฒนา จนพบ URL สำหรับการเพิ่มเพื่อนอัตโนมัติ

ช่วงกลางเกม

  • ทดลองทำ XSS โดยใช้ TinyMCE rich text editor
  • ใช้ Burp proxy เพื่อแทรกโค้ด HTML ลงไปตรง ๆ ในคำอธิบาย 'About'
  • ตรวจสอบการตั้งค่า TinyMCE และสร้าง XSS payload โดยใช้พร็อพเพอร์ตีสไตล์ background-image
  • ทดสอบสัญลักษณ์หลายแบบเพื่อหาวิธีที่ทำให้ XSS ทำงานได้
  • สุดท้ายพัฒนาวิธีที่สามารถดึง cookie และ JavaScript object ออกมาได้

เอนด์เกม

  • พยายามทำให้ XSS ทำงานได้อย่างสมบูรณ์
  • พบวิธีใหม่ที่ใช้แอตทริบิวต์ srcset เพื่อให้ใช้ไวยากรณ์ JS ได้กว้างขึ้น
  • ใช้การเข้ารหัส Base64 เพื่อรัน XSS payload ได้โดยตรง
  • TinyMCE editor ถูกใช้งานทั่วทั้งเว็บไซต์ จึงทำให้ผลกระทบมีวงกว้าง

การวิเคราะห์

  • สาเหตุรากของช่องโหว่มาจากฟังก์ชันอัปโหลดภาพซ้ำ
  • สามารถหลบเลี่ยงการตรวจสอบ image hosting ได้ด้วยการใส่ชื่อโดเมนของ Chess.com
  • rich text editor อนุญาตองค์ประกอบ HTML ได้หลากหลาย จึงเหมาะกับการทำ XSS
  • TinyMCE เป็นเวอร์ชันล่าสุด แต่ขาดการ sanitize กับ HTML ขั้นสุดท้าย
  • Chess.com ควรทำการ sanitize กับ HTML ขั้นสุดท้ายที่จะแสดงให้ผู้ใช้เห็น

ความเห็นของ GN⁺:

  1. บล็อกโพสต์นี้อธิบายกระบวนการค้นพบและรายงานช่องโหว่ด้านความปลอดภัยที่อาจเกิดขึ้นได้บนแพลตฟอร์มออนไลน์ขนาดใหญ่อย่าง Chess.com ได้น่าสนใจ
  2. ช่องโหว่ XSS อาจเป็นภัยคุกคามร้ายแรงต่อความปลอดภัยของเว็บไซต์ และการค้นหาและแก้ไขช่องโหว่ลักษณะนี้มีความสำคัญอย่างยิ่งต่อการคุ้มครองข้อมูลส่วนตัวของผู้ใช้เว็บไซต์
  3. บทความนี้เน้นย้ำกับนักพัฒนาซอฟต์แวร์และผู้เชี่ยวชาญด้านความปลอดภัยถึงความสำคัญของการตระหนักรู้ถึงช่องโหว่ในองค์ประกอบของเว็บแอปพลิเคชัน เช่น rich text editor และการป้องกันช่องโหว่เหล่านี้

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

 
GN⁺ 2024-01-27
ความคิดเห็นจาก Hacker News
  • ผมคือ OP เอง ขอบคุณมากสำหรับคอมเมนต์เชิงบวกทั้งหมดนะครับ ขอเล่าภูมิหลังสักนิด ผมเป็นนักเรียนอายุ 17 ปีในสหราชอาณาจักร กำลังเตรียมสอบ A-Levels และยังตัดสินใจอยู่ระหว่างว่าจะเข้ามหาวิทยาลัยไหนกับตัวเลือก degree apprenticeship
    ดูโปรไฟล์ GitHub ของผมได้ที่นี่ -> https://github.com/Jayy001
    ผมเป็นหนึ่งในสมาชิกหลักของ HashPals เป็นผู้สร้าง Search-That-Hash และยังเป็นผู้ดูแลหลักของคลังซอฟต์แวร์โอเพนซอร์สฟรีสำหรับแท็บเล็ต ReMarkable ด้วย

    • ผมเคยทำ degree apprenticeship ที่บริษัท FAANG และโชคดีที่ได้เปลี่ยนเป็นพนักงานประจำที่นั่น เรื่องนี้ต่างกันมากในแต่ละบริษัท แต่ถ้ามองแค่โอกาสการได้งานทันที ผมคิดว่าหลักสูตรฝึกงานของบริษัทที่มีชื่อเสียงช่วยได้มากกว่ามหาวิทยาลัยส่วนใหญ่ ยกเว้น Oxbridge
      ถ้าอยากคุยต่อก็ติดต่อมาได้ อีเมลอยู่ในคำอธิบายโปรไฟล์ของผม
    • ReMarkable ของผมคงจะขอบคุณคุณแน่ ๆ ทำได้ดีมาก ทำต่อไปนะ
      แล้วถ้าจะไปสาย IT ก็ควรเรียนรู้เรื่อง การต่อรองสัญญาและการเงิน ไว้ด้วย
    • ใช้เวลานานแค่ไหนกว่าจะทำ XSS สำเร็จ?
    • ผมจะลองช่วยแนะนำให้ Meta ดู ส่งเรซูเม่/อีเมล ฯลฯ มาที่ tehlike gmail com ได้ไหม?
  • สมัยที่ประสบการณ์บนอินเทอร์เน็ตของผมมีแค่แพ้ซ้ำ ๆ ในบทบาท “บรรณารักษ์อาสา” บน Chess.com ผมเคยฉีดอักขระที่ escape มาแบบแปลก ๆ, closing tag, control string ทั่วไป ๆ และแม้กระทั่ง OLE object เข้าไปในเกม Chess.com แบบเรียลไทม์
    Eric ผู้ก่อตั้งขออย่างสุภาพให้ผมช่วยตรวจสอบแบบเป็นทางการมากขึ้น แต่ผมปฏิเสธเพราะไม่อยากเปิดเผยว่าตัวเองเป็น script kiddie อายุ 11 ขวบ แทนที่จะทำแบบนั้น ผมอธิบาย regex ที่จำเป็นสำหรับการเซ็นเซอร์ห้องแชต และคุยกันต่อถึงปัญหาใหญ่กว่าว่าจะตรวจจับการโกงในสภาพแวดล้อมแบบ asynchronous ได้อย่างไร
    หลังจากคิดอยู่พักหนึ่ง ผมบอกว่าวิธีเดียวที่เป็นไปได้คือเอาแต่ละตาที่มีมูลค่าสูงและสำคัญในเกมไปเทียบกับตาที่ดีที่สุดที่ engine รู้จัก แล้วใช้การอนุมานเชิงสถิติเพื่อแยกมนุษย์ที่เล่นเก่งออกจากคนโกง
    แน่นอนว่าในตอนนั้นมันเป็นวิธีที่เป็นไปไม่ได้แบบเหลือเชื่อ และสุดท้ายข้อสรุปก็ออกมาแบบนั้นอยู่ดี ถึงอย่างนั้น การที่เด็กเพิ่งพ้นวัยประถมได้มาคุยเรื่องละเอียดอ่อนแบบนี้กับเว็บมาสเตอร์ตัวจริง ก็ยังเป็นความทรงจำทางอินเทอร์เน็ตที่ดีมาก

    • ทำไมถึงบอกว่าเป็น “วิธีเดียวที่เป็นไปได้”? ผมนึกวิธีตรวจจับการโกงได้ตั้งหลายแบบนะ
  • ตอนอ่านประโยคที่ว่า “ฟีเจอร์นี้ทำให้นึกถึง MySpace worm ราวปี 2005 แต่ตอนนั้นผมยังไม่เกิดเลย!” ก็รู้สึกตัวทันทีว่าแก่ลงทุกวัน

    • อดีตภรรยาของผมเคยดูแลทีมความปลอดภัยของ MySpace ช่วงประมาณปี 2006 ถึง 2008 ส่วนที่โหดจริง ๆ คือเธอต้องเข้าไปในฟอรัมของแฮ็กเกอร์ MySpace โดยตรงเพื่อดูว่าการทำงานในแต่ละวันของพวกเขาเป็นยังไง
      การยืนกรานว่าจะ อนุญาตให้ผู้ใช้ใส่ HTML ลงในเว็บไซต์ กลายเป็นปัญหาใหญ่มาก ทุกวันนี้เราคง parse อินพุต HTML ให้ถูกต้องแล้วลบ attribute กับ tag ที่ห้ามใช้ทิ้ง แต่สมัยนั้นจัดการกันด้วย regex แบบบ้าคลั่ง
    • ความคิดแรกของผมประมาณว่า “ดีจังที่เห็นเด็กรุ่นใหม่ทุกวันนี้ทำเรื่องแบบนี้” แต่พอลองนับอายุดูแล้วก็สะเทือนใจทางจิตพอสมควร
    • เดี๋ยวก่อน คนนี้ อายุไม่ถึง 20 นี่นา
  • ไม่แน่ใจว่าเกี่ยวกันไหม แต่ผมเคยเห็นกับตาและอัดวิดีโอไว้ด้วยว่ามีคน เดินหมากแทนผม ในเกม Chess.com แล้วก็เคยมีเกมที่กำลังเล่นอยู่โผล่มาให้ผม และผมสามารถเดินหมากได้ทั้งที่ตามปกติไม่ควรทำได้
    ถ้าลองค้นใน Google ก็มีเธรดเกี่ยวกับเรื่องนี้อยู่พอสมควร ไม่รู้ว่า Chess.com แก้ไปหรือยังในช่วงไม่กี่เดือนที่ผ่านมา แต่ตอนที่ผมพยายามรายงาน พวกเขาไม่ค่อยอยากฟัง
    ทั้งหมดนี้เกิดขึ้นตอนที่ผมไม่ได้ล็อกอินเข้าเว็บไซต์ ตอนล็อกอินอยู่ผมไม่เคยเจอ แต่ผมก็ไม่ได้เล่นหมากรุกบ่อยเพราะมันไม่ค่อยดีกับความดัน

    • ผมยังไม่ค่อยเข้าใจ “มีคนเดินหมากแทนผม” หมายถึงเขาเอาตาคุณในเกมไปแทนเป็นตาของตัวเองใช่ไหม? หรือเขาแค่คัดลอกตาจากเกมของคุณไปลงเกมของตัวเอง? หรือหมายถึงอย่างอื่น?
    • คุณรู้ได้ยังไงว่าพวกเขากำลังเดินหมากของคุณ?
    • คำว่า “ตาของผม” นี่หมายถึงอะไรกันแน่?
  • แค่อ่านชื่อเรื่อง ผมนึกว่าจะเป็นอะไรพื้นฐานกว่านี้มาก แต่จริง ๆ แล้วมันเป็นการทำ exploit ที่ทะลุ การตรวจสอบอินพุต หลายชั้นด้วยวิธีอ้อมที่ฉลาดมาก เขายังตั้ง subdomain เพื่อให้มันดูเหมือนโดเมนหลักด้วย
    ไม่คิดเลยว่าวิธีนี้จะใช้ได้ ซึ่งก็น่าสนใจในตัวมันเอง พอลองคิดว่าการ parse โดเมนด้วย regex มันซับซ้อนแค่ไหน ก็รู้สึกว่าเป็นจุดที่พลาดได้ง่ายเหมือนกัน หรือไม่ก็อาจแค่เช็ก '...' ภายในตัวแปรแบบง่าย ๆ เท่านั้น
    ผู้เขียนรู้เรื่องในสายนี้ดีมาก ทำให้อดทึ่งไม่ได้ว่าเขาขุดลึกเพื่อไปถึงทักษะระดับนี้มานานแค่ไหน น่าจะเป็นเส้นทางอาชีพที่น่าสนใจทีเดียว

    • จากที่ผู้เขียนพูดไว้ผ่าน ๆ ในบทความ ดูเหมือนว่าเกิดหลังปี 2005 เพราะงั้นพอคำนึงถึงว่า อายุยังน้อยมาก ก็ยิ่งน่าประทับใจ
    • exploit แรกที่เพิ่มคนมาเยี่ยมโปรไฟล์เป็นเพื่อนอย่างอัตโนมัตินั้น อย่างน้อยก็ค่อนข้างง่าย และชื่อเรื่องก็เป็นการเล่นคำ แต่เส้นทางไปสู่ XSS เต็มรูปแบบหลังจากนั้นซับซ้อนขึ้นมาก
  • บทความดีมากครับ OP ขอให้เส้นทางสายแฮ็กกิงของคุณไปได้สวยนะ ถ้ายังไม่รู้ เวลาพวก payload อย่าง alert(1) โดนกรองหรือ encode วงเล็บ คุณอาจลองใช้ backtick เป็น alert\1`` ได้
    ถ้าอยากยกระดับการฉีด JavaScript ขึ้นอีกขั้น XSS cheat sheet ของ Brute Logic กับ Javascript for Hackers ของ Gareth Heyes เป็นแหล่งข้อมูลที่ดีมาก บางคนมองว่า cross-site scripting เป็นเรื่องเล็กน้อย แต่จริง ๆ มันยังทรงพลังมากและยังพบได้แพร่หลาย โดยเฉพาะอย่างยิ่งถ้า session cookie ไม่มี HttpOnly อย่างที่ plugin-baby ชี้ไว้

  • เจ๋งมาก ผมชอบอ่านบทวิเคราะห์ bug bounty โดยเฉพาะบทความเกี่ยวกับ XSS มันดูเหมือนหาง่ายอยู่เสมอ แต่คงเป็นแค่ confirmation bias และในความเป็นจริงผมแค่มองไม่เห็นเวลาที่เสียไปกับการทดสอบที่ไม่ได้ผลหรือทางตันต่าง ๆ มากกว่า

    • จากประสบการณ์ของผม ส่วนใหญ่จะเจอหลังจากบังเอิญสะดุดกับอะไรแปลก ๆ ก่อน ส่วนที่ยากจริง ๆ คือการทำให้จุดบกพร่องนั้นถูกนำไปใช้โจมตีได้จริง และในกรณีนี้ตัวแก้ไขข้อความคือจุดนั้นพอดี
  • พออ่านประโยคที่ว่า “ฟีเจอร์นี้ทำให้นึกถึง MySpace worm ราวปี 2005 แต่ตอนนั้นผมยังไม่เกิดเลย!” ก็รู้สึกแก่ขึ้นมาทันที

    • อย่ากังวลไปเลย มันจะแย่กว่านี้อีก
      สิ่งที่ผมอยากถาม OP เกี่ยวกับเหตุการณ์นี้คือ คุณไปรู้เรื่องนี้ได้ยังไง? จาก Darknet Diaries หรือจากทางอื่น?
  • ส่วนที่เรียก rich text editor ว่าเป็น “จอกศักดิ์สิทธิ์” นี่ตลกดี Chess.com เป็นเว็บไซต์ใหญ่ก็จริง แต่ทุกครั้งที่เห็น editor แบบนั้นหรือฟีเจอร์ที่แฟนซีเกินจำเป็นในเว็บเก่า ๆ อย่างเว็บบอร์ด ผมก็มักคิดว่าเว็บนั้นอาจจะ มีช่องโหว่เต็มไปหมด ยังไงก็ตาม เป็นบทความที่ยอดเยี่ยมมาก

  • ส่วนที่ว่า “ระหว่างการรายงาน bug bounty และการตรวจสอบ พอผมพยายามทำซ้ำอีกครั้ง นักพัฒนาก็พยายามใส่การบล็อก แล้วข้อความผิดพลาดต่อไปนี้ก็โผล่ขึ้นมา…” ฟังดู ไม่ค่อยตรงกับเจตนารมณ์ของโปรแกรม bug bounty เท่าไร