สรุปสั้น
บริษัท ExPatch เปิดเผยเมื่อวันที่ 12 กันยายน 2569 ว่าพบช่องโหว่ใน Telegram Desktop ที่เปิดทางให้ข้อความจากบอทฝังโค้ด JavaScript ซ่อนไว้ในไฟล์ HTML ที่ผู้ใช้ส่งออก (export) จากแชท โดยข้อความจะปรากฏเหมือนข้อความทั่วไปที่มีปุ่มลิงก์ แต่สคริปต์จะทำงานก็ต่อเมื่อมีคนเปิดไฟล์ที่ส่งออกนั้นด้วยเว็บเบราว์เซอร์ จากนั้นสคริปต์สามารถคัดลอกทุกข้อความในไฟล์ดังกล่าวส่งไปยังเซิร์ฟเวอร์ที่ผู้โจมตีควบคุม หรือแก้ไขสิ่งที่หน้าเพจแสดงผลได้ทั้งหมด
Telegram ปล่อยแพตช์แก้ไขในเดือนกรกฎาคมที่ผ่านมา แต่การอัปเดตแอปไม่ได้ตามไปแก้ไฟล์ที่เคยส่งออกด้วยเวอร์ชันเก่า ทำให้ไฟล์ HTML ที่ส่งออกก่อนหน้านั้นยังพกสคริปต์อันตรายไว้ได้ต่อไป นักวิจัยให้คะแนนความรุนแรง 8.2 จาก 10 บนมาตรฐาน CVSS 3.1 และจนถึงวันที่ 14 กันยายนยังไม่มีหมายเลข CVE หรือคะแนนจาก Telegram หรือจากฐานข้อมูลช่องโหว่แห่งชาติสหรัฐ (NVD)
รายละเอียดข่าว
เว็บไซต์ The Hacker News รายงานอ้างงานเขียนของบริษัท ExPatch ที่เผยแพร่เมื่อวันที่ 12 กันยายน 2569 ว่า Telegram Desktop ซึ่งเป็นแอป Telegram สำหรับ Windows, macOS และ Linux สามารถบันทึกแชทเดียวหรือทุกแชทของบัญชีออกมาเป็นหน้า HTML ที่เปิดในเบราว์เซอร์ได้ ขณะเดียวกันบอทสามารถแนบแถวปุ่มไว้ใต้ข้อความ ซึ่ง Telegram เรียกว่า inline keyboard และบอทเป็นผู้กำหนดข้อความบนปุ่มแต่ละอัน
นาย Denis Rostilov และนาย Aleksander Rostilov นักวิจัยของ ExPatch พบว่าก่อนมีแพตช์ โค้ดส่งออกเขียนข้อความบนปุ่มลงในหน้า HTML โดยตรงโดยไม่ผ่านการ escape ทั้งที่ส่วนอื่นอย่างเนื้อข้อความ ชื่อผู้ส่ง และฟิลด์อื่น ๆ ถูก escape ไว้ครบ การ escape คือการแปลงอักขระเช่น < ให้เบราว์เซอร์แสดงเป็นข้อความแทนที่จะตีความเป็นโค้ด บอทจึงสามารถใส่แท็กสคริปต์ลงในข้อความของปุ่ม แล้วเสริมด้วยอักขระที่มองไม่เห็นจนปุ่มดูเหมือนว่างเปล่าในเวอร์ชันที่ทดสอบ
จุดอันตรายคือบอทไม่จำเป็นต้องอยู่ในแชทที่เป็นเป้าหมาย ข้อความที่มีเฉพาะปุ่มลิงก์เว็บจะยังคงปุ่มเหล่านั้นไว้เมื่อถูกส่งต่อ (forward) ดังนั้นสมาชิกคนใดที่ส่งต่อข้อความของบอทเข้าไปในกลุ่มก็จะพาสคริปต์ติดไปด้วย และข้อความนั้นจะค้างอยู่ในประวัติแชทเหมือนข้อความอื่นจนกว่าจะถูกลบ อาจถูกส่งออกเป็นไฟล์ในอีกหลายเดือนหรือหลายปีถัดมา นักวิจัยระบุว่าได้รายงานช่องโหว่ต่อ Telegram เมื่อวันที่ 3 มิถุนายน สองวันหลังค้นพบ และทดสอบเฉพาะกับบัญชีและกลุ่มทดสอบของตนเอง โดยไม่ได้อ้างว่ามีใครนำช่องโหว่ไปใช้กับผู้ใช้จริง
วิธีการโจมตี
เมื่อไฟล์ที่ส่งออกซึ่งมีข้อความดังกล่าวถูกเปิดขึ้น สคริปต์จะทำงานทันทีโดยไม่ต้องคลิกเพิ่ม และสามารถอ่านทุกข้อความในไฟล์นั้น รวมถึงชื่อผู้ส่ง เวลา ชื่อแชท ประเภทแชท จำนวนสมาชิก และพาธของไฟล์บนเครื่อง แล้วส่งทั้งหมดไปยังเซิร์ฟเวอร์ของผู้โจมตี อย่างไรก็ตาม โค้ดส่งออกของ Telegram Desktop จะแบ่งไฟล์ที่ยาวออกเป็นไฟล์ละ 1,000 ข้อความ ดังนั้นไฟล์หนึ่งจะเปิดเผยได้มากที่สุดเพียงเนื้อหาของตัวเอง ไม่ใช่ทั้งแชทหรือทั้งบัญชี
นอกจากขโมยข้อมูล สคริปต์ยังเขียนทับหน้าเพจได้ด้วย ในการสาธิตของนักวิจัย สคริปต์แทนที่ไฟล์ส่งออกทั้งไฟล์ด้วยแบบฟอร์ม “ยืนยันตัวตน” ปลอมของ Telegram และการควบคุมแบบเดียวกันนี้ยังสามารถแก้วันที่ ผู้ส่ง หรือข้อความในไฟล์ที่ถูกใช้เป็นหลักฐานได้ แต่ไม่กระทบต่อสำเนาแชทของ Telegram เองหรือไฟล์ส่งออกที่บันทึกไว้บนดิสก์
เงื่อนไขที่ต้องเป็นจริงพร้อมกันสามข้อจึงจะทำให้สคริปต์ทำงานได้ คือไฟล์ HTML ถูกส่งออกด้วย Telegram Desktop เวอร์ชันก่อนแพตช์ ข้อความที่พกสคริปต์ต้องอยู่ในช่วงแชทที่ถูกส่งออก และไฟล์ถูกเปิดในเบราว์เซอร์ที่เปิดใช้งาน JavaScript ทั้งนี้ นักวิจัยตรวจเฉพาะการส่งออกแบบ HTML เท่านั้น ไม่ได้ครอบคลุมรูปแบบส่งออกแบบ JSON หรือฟีเจอร์ส่งออกของแอป Telegram ตัวอื่น
ผลกระทบ
บรรทัดที่ไม่ผ่านการ escape นี้อยู่ในเวอร์ชันเสถียรมาตั้งแต่ 4.15.1 ในเดือนมีนาคม 2567 หรือราวสองปีสี่เดือน เวอร์ชันที่ได้รับผลกระทบคือ 4.15.1 ถึง 6.9.3 ผู้ที่ใช้ Telegram Desktop เพื่อเก็บบันทึกการสนทนาเป็นหลักฐาน ไม่ว่าจะเป็นทีมกฎหมาย งานสืบสวน หรือการเก็บหลักฐานภายในองค์กร ต้องระวังเป็นพิเศษ เพราะไฟล์ส่งออกที่ดูเหมือนบันทึกจริงอาจถูกสคริปต์แก้ไขวันที่ ผู้ส่ง หรือเนื้อความให้ผิดเพี้ยนได้เมื่อเปิดในเบราว์เซอร์ อีกทั้งไฟล์เก่าที่ทำไว้ก่อนแพตช์ยังคงเสี่ยงอยู่ตราบที่ยังไม่ส่งออกใหม่
ความเสี่ยงจะสูงขึ้นเมื่อไฟล์มาจากกลุ่มขนาดใหญ่ที่ยากจะตรวจสอบว่าข้อความแต่ละอันมาจากใคร เพราะเพียงมีสมาชิกคนหนึ่งเผลอส่งต่อข้อความบอทที่ถูกดัดแปลง ทุกคนที่ส่งออกแชทนั้นเป็นไฟล์ HTML ก็มีโอกาสได้ไฟล์ที่พกสคริปต์ติดมาด้วย
คำแนะนำ
นักวิจัยแนะนำให้ผู้ใช้อัปเดต Telegram Desktop เป็นเวอร์ชัน 7.0.1 ขึ้นไป หรือเป็น 6.9.4 ขึ้นไปในช่องทางเบตา หลังอัปเดตแล้วให้ส่งออกแชทที่เคยส่งออกเป็น HTML ก่อนแพตช์ใหม่อีกครั้ง หรือเปิดไฟล์เก่าโดยปิดการทำงานของ JavaScript เท่านั้น และให้ปฏิบัติต่อไฟล์ HTML ที่ส่งออกก่อนแพตช์ทุกไฟล์เสมือนเป็นไฟล์ที่ไม่น่าเชื่อถือ โดยเฉพาะไฟล์จากกลุ่มใหญ่ ระหว่างที่ยังไม่ได้อัปเดตแอป ไม่มีเหตุผลใดที่ต้องสร้างไฟล์ HTML ส่งออกใหม่ เพราะมีเฉพาะไฟล์ที่ผลิตจากโค้ดเวอร์ชันเก่าเท่านั้นที่พกช่องโหว่ไว้
ที่น่ากังวลคือจนถึงวันที่ 14 กันยายน Telegram ยังไม่ได้ออกคำแนะนำใด ๆ ให้ผู้ใช้ที่ถือไฟล์ส่งออกเวอร์ชันเก่า ทั้งบันทึกรุ่น 6.9.4 และ 7.0.1 เอกสาร changelog และประกาศอัปเดตของ Telegram ต่างไม่กล่าวถึงการแก้ไขนี้ และที่เก็บโค้ด Telegram Desktop บน GitHub ก็ไม่มีประกาศด้านความปลอดภัย นักวิจัยระบุว่า Telegram ยืนยันช่องโหว่เมื่อวันที่ 1 กรกฎาคมและเสนอเงินรางวัล bug bounty 500 ดอลลาร์สหรัฐ ซึ่งพวกเขาปฏิเสธและขอให้บริจาคเข้าการกุศลแทน
