CVE-2024–10924 Authentication Bypass

Datafarm
3 min readDec 18, 2024

สวัสดีทุกท่านที่หลงทางเข้ามาอ่านบทความนี้กันนะครับ ไม่ต้องตกใจไปว่าจะอ่านกันไม่รู้เรื่องเพราะคนเขียนยังเขียนไม่ค่อยรู้เรื่องเลย แฮ่ เอาละขำ ๆ กันพอกรุบกริบแค่นี้ดีกว่าครับ สำหรับในบทความนี้ผมจะมาพูดถึงช่องโหว่ของปลั๊กอินส์ WordPress ตัวหนึ่งกันครับ และแน่นอนก็คงจะเห็นกันแล้วใช่ไหมครับว่าปลั๊กอินส์ตัวนี้ก็คือ Really Simple Security ซึ่งช่องโหว่ที่ปลั๊กอินส์ตัวนี้มี ก็คือ สามารถทำการข้ามการยืนยันตัวตนได้นั่นเองงง

WordPress Really Simple Security Plugin คืออะไร?

เป็นปลั๊กอินส์สำหรับ WordPress ที่ออกแบบมาเพื่อเสริมความปลอดภัยให้กับเว็บไซต์ โดยมุ่งเน้นการใช้งานที่ง่ายและไม่กระทบต่อประสิทธิภาพของเว็บไซต์ ซึ่งปลั๊กอินส์นี้ก็จะมีฟีเจอร์ต่าง ๆ มากมายได้แก่ การป้องกันการล็อกอินที่ผิดพลาดซ้ำ ๆ, การบล็อก IP ที่น่าสงสัย, การยืนยันตัวตนแบบสองขั้นตอน (2FA) ฯ นอกจากนี้ยังมีฟังก์ชันที่ช่วยตรวจสอบและแนะนำการตั้งค่าความปลอดภัยของเว็บไซต์ WordPress อีกด้วย

จะเห็นได้ว่าตัวของปลั๊กอินส์ Really Simple Security นั้นมีความสามารถที่เยอะและเหมาะกับผู้ใช้งานในทุก ๆ ระดับ จึงเป็นที่นิยมอยู่มากและหลาย ๆ เว็บไซต์ที่ใช้ WordPress ก็เลือกใช้งานปลั๊กอินส์ตัวนี้ในการเสริมสร้างความปลอดภัยให้กับระบบ แต่แล้วตรงไหนละที่ทำให้เจ้าปลั๊กอินส์ Really Simple Security มีช่องโหว่กัน

ช่องโหว่ของ WordPress Really Simple Security Plugin หรือ CVE-2024–10924 เป็นยังไง และมีเวอร์ชันอะไรบ้างที่ได้รับผลกระทบ?

CVE-2024–10924 เป็นช่องโหว่ที่ถูกค้นพบโดยผู้เชี่ยวชาญของทีม Wordfence Threat Intelligence เมื่อไม่กี่เดือนที่ผ่านมา โดยช่องโหว่ดังกล่าวมีผลกระทบต่อปลั๊กอินส์ Really Simple Security เท่านั้น ซึ่งจะพบในเวอร์ชันตั้งแต่ 9.0.0 ถึง 9.1.1.1

โดยมีสาเหตุจากความผิดพลาดในการตรวจสอบข้อมูล จะเกิดขึ้นได้ก็ต่อเมื่อมีการเปิดใช้งาน 2FA หรือที่เรียกว่า Two-Factor Authentication ในปลั๊กอินส์เท่านั้น ซึ่งช่องโหว่นี้ทำให้เหล่า Hacker สามารถที่จะขอ Credential ของใครก็ได้ที่มีอยู่บนระบบอาทิ Administrator มาใช้งานได้โดยไม่ต้องทำการยืนยันตัวตนนั่นเอง

แล้วทำไมการเปิดใช้งานตัวของ Two-Factor Authentication ถึงทำให้เกิดช่องโหว่ได้ละ เรามาลองดูโค้ดกันดีกว่าว่าเหตุใดถึงสามารถทำให้เกิด Authentication Bypass ได้กัน

หลังจากเปิดใช้งาน Two-Factor Authentication ของปลั๊กอินส์ Really Simple Security ตัวช่องโหว่ที่เกิดขึ้นเกิดจากฟังก์ชันหลัก ๆ แค่ 2 ฟังก์ชันเท่านั้นก็คือ “skip_onboarding (รูปที่ 1)” และ “check_login_and_get_user (รูปที่ 2)

รูปที่ 1

โดยจากฟังก์ชันในรูปที่ 1 ถ้าให้อธิบายแบบคร่าว ๆ ก็คือ ตัวฟังก์ชันจะมีการรับค่าพารามิเตอร์เพื่อเอาไปใช้งานอยู่ 3 พารามิเตอร์หลัก ๆ ได้แก่ user_id, login_nonce, redirect_to และเมื่อมีการเรียกใช้งานฟังก์ชัน “skip_onboarding” เกิดขึ้น สิ่งแรกที่ฟังก์ชันนี้จะทำคือ เรียกใช้งานฟังก์ชัน “check_login_and_get_user” หรือก็คือฟังก์ชันในรูปที่ 2 นั่นเอง

รูปที่ 2

โดยฟังก์ชันในรูปที่ 2 จะทำการรับค่าของพารามิเตอร์ user_id และ login_nonce มาเพื่อทำการตรวจสอบว่าถูกต้องหรือไม่ ถ้าค่าของ login_nonce ไม่ถูกต้องจะมีการตอบกลับมาเป็น “Invalid login nonce” ถ้าโดยปกติตามหลักทั่ว ๆ ไปมันก็ควรที่จะต้องหยุดการทำงานเพียงแค่นี้ใช่ไหมครับ แต่นั้นแหละความสนุกได้เริ่มขึ้นแล้วเพราะกลายเป็นว่ามันควรจบการทำงานแต่มันดันกลับทำงานต่อ ซึ่งถ้าเรากลับไปดูฟังก์ชันในรูปที่ 1 อีกทีดี ๆ จะพบว่าค่าที่ได้รับมาจากฟังก์ชัน “check_login_and_get_user” นั้น ดันไม่มีการเอาไปใช้ต่อเลยแค่รับมาแล้วเก็บไว้ในตัวแปร “$user” เท่านั้น ทำให้ฟังก์ชันมันไม่จบการทำงานแต่ทำงานต่อและฟังก์ชันต่อไปที่เรียกใช้งานก็คือ “authenticate_and_redirect” ซึ่งมันเป็นฟังก์ชันที่เอาไว้สร้าง Cookie เพื่อเอาไปใช้ในการยืนยันตัวตนกับระบบต่อไป

ที่นี้เราก็ได้เข้าใจคร่าว ๆ แล้วว่าช่องโหว่นี้เกิดขึ้นมาได้อย่างไร แต่ผมเชื่อว่าหลาย ๆ คนอาจจะยังไม่เห็นภาพเพราะฉะนั้นเรามาลองโจมตีกันดูจริง ๆ กัน

ขั้นตอนแรกหลังจากเราทำการติดตั้งตัวของปลั๊กอินส์ Really Simple Security ที่มีช่องโหว่สำเร็จ จากนั้นเราก็จะไปทำการตั้งค่าเพื่อเปิดใช้งานตัวของ Two-Factor Authentication กันโดยไปที่ Security -> Settings -> Login Protection -> Enable Two-Factor Authentication

รูปที่ 3

ต่อมาลองทำการ login ใหม่อีกครั้งเพื่อตรวจสอบดูว่าเราจะทำการ Authentication Bypass ยังไง

รูปที่ 4

เมื่อทำการ login สำเร็จจะเห็นว่าถ้ายังไม่มีการทำ Two-Factor Authentication ไว้จะมีปุ่ม ๆ หนึ่งให้กดเพื่อสามารถข้ามการทำ Two-Factor Authentication ไปก่อนได้

รูปที่ 5

หลังจากกดปุ่มเสร็จ ทำการเข้าไปยังเครื่องมือ Burp ที่เอาไว้ใช้สำหรับตรวจสอบ HTTP Request/Response ดูจะพบว่ามันมีการเรียกใช้งานพาธ “/index.php?rest_route=/reallysimplessl/v1/two_fa/skip_onboarding” ซึ่งเมื่อดูจากชื่อแล้วจะพบว่ามันคือฟังก์ชันที่มีช่องโหว่นั่นเอง และเมื่อลงไปดูส่วนของ body จะพบว่ามีการส่งพารามิเตอร์ไปจำนวนหนึ่ง ซึ่งในจำนวนนั้นก็มีการส่งพารามิเตอร์ user_id, login_nonce, redirect_to ไปด้วย

รูปที่ 6

ซึ่งพาธดังกล่าวนี้เองที่มีช่องโหว่เรื่องของ Authentication Bypass จากโค้ดที่ได้อธิบายไปนั้น บอกไว้ว่ามีการใช้เพียง 3 พารามิเตอร์หลัก ๆ ในการสร้าง Cookie สำหรับยืนยันตัวตน เพราะงั้นแล้วเรามาลองทำการแก้ไขตัวของ Request กันดู โดยจะทำการลบพารามิเตอร์และ Header ต่าง ๆ ที่ไม่เกี่ยวข้องทิ้งให้หมดก็จะได้หน้าตาประมาณนี้

รูปที่ 7

ในตัว Request นั้นจะมีเพียงแค่ค่าที่ใช้ในการทำ Authentication Bypass เท่านั้น ไม่มีการยืนยันตัวตนอื่น ๆ เลย จากนั้นทำการส่งตัว Request ไปเซิร์ฟเวอร์ดู ก็พบว่าสามารถขอ Cookie ของ user_id คนที่ 5 ได้สำเร็จหรือก็คือตัวเรานั่นเอง

รูปที่ 8

ที่นี้เรามาลองเปลี่ยนตัวของ user_id เป็นของคนที่ 1 ดู ซึ่งคาดว่าน่าจะเป็น Administrator พบว่าสามารถขอ Cookie ของ Administration ได้สำเร็จ

รูปที่ 9

เมื่อเราได้ตัวของ Cookie มาสำเร็จที่นี้เรามาลองทดสอบดูกันว่าสามารถเอา Cookie ที่สร้างมาใช้งานได้ไหม ก็พบว่าสามารถใช้งานได้ตามปกติ

รูปที่ 10

จะเห็นได้ว่าเมื่อเรานำพาธ “/?rest_route=/reallysimplessl/v1/two_fa/skip_onboarding” มาแก้ไขพารามิเตอร์และ Header ต่าง ๆ และเรียกใช้งานมัน ก็จะสามารถปลอมเพื่อขอ Cookie ของผู้ใช้งานคนอื่นได้เลยโดยไม่ต้องทำการยืนยันตัวตนใด ๆ

วิธีการป้องกันการโจมตีจากช่องโหว่ของ WordPress Really Simple Security Plugin หรือ CVE-2024–10924

ในปัจจุบัน ณ วันที่ 14 พฤศจิกายน 2567 ที่ผ่านมาทาง Really Simple Security (https://really-simple-ssl.com/updating-really-simple-ssl-pro/) ได้มีการปล่อยอัปเดตเพื่อแก้ไขตัว CVE-2024–10924 ทั้ง 3 แบบคือ

  • Really Simple Security แบบฟรี
  • Really Simple Security แบบ Pro
  • Really Simple Security แบบ Pro Multisite

โดยเวอร์ชันที่มีการแก้ไขช่องโหว่นี้คือเวอร์ชัน 9.1.2 เป็นต้นไป หรือถ้าไม่สามารถทำการอัปเดตตัวของปลั๊กอินส์ Really Simple Security ได้ทางผู้เขียนก็แนะนำให้ปิดการใช้งานตัวของ Two-Factor Authentication ไปก่อนครับ

เป็นอย่างไรกันบ้างครับกับช่องโหว่ CVE-2024–10924 เราจะเห็นได้ชัดเลยว่าการโจมตีนั้นไม่ได้ยากเลย และอีกทั้งตัวปลั๊กอินส์นี้ยังมีการติดตั้งเป็นจำนวนมากในหลาย ๆ เว็บไซต์ที่ใช้งาน WordPress เพราะฉะนั้นแล้วใครก็ตามที่ผ่านทางมาเห็นและใช้งานตัวปลั๊กอินส์นี้อยู่ ก็ลองสำรวจดูนะครับว่าได้ทำการอัปเดตปลั๊กอินส์ไปแล้วรึยัง สุดท้ายนี้ตัวผมก็ขอให้ทุกท่านสนุกกับการอ่านบทความนี้นะครับ แล้วเจอกันใหม่ในหัวข้อถัดไปครับ

--

--

No responses yet