ข้ามไปยังเนื้อหา
กลับหน้ารายการบทความ

NodeBB CVE-2026-120007 ผู้ไม่เข้าสู่ระบบอาจล้างอีเมลและ session ของบัญชีอื่น

NodeBB แก้การรับ uid จากผู้ไม่เข้าสู่ระบบใน POST /register ที่อาจกระทบบัญชีไม่มีรหัสผ่าน แพตช์อยู่ใน commit 376d14ab แต่ยังไม่มี release tag ที่ยืนยันได้

NodeBB CVE-2026-120007 ผู้ไม่เข้าสู่ระบบอาจล้างอีเมลและ session ของบัญชีอื่น

NodeBB พบ CVE-2026-120007: ผู้ไม่เข้าสู่ระบบอาจใช้ uid ในขั้นตอนสมัครสมาชิกกระทบบัญชีอื่น

โครงการ NodeBB แก้ช่องโหว่การตรวจสิทธิ์ในขั้นตอนสมัครสมาชิกซึ่งต่อมาได้รับหมายเลข CVE-2026-120007 ผู้ที่ยังไม่เข้าสู่ระบบอาจใส่ค่า uid ของบัญชีอื่นในคำขอ POST /register ให้ระบบเก็บไว้ใน session การสมัคร จากนั้นเมื่อเข้าสู่หน้า /register/complete พร้อมอีเมลว่าง เส้นทางเดิมอาจจัดการข้อมูลของบัญชีที่ไม่ใช่ผู้สมัครเอง ผลที่ระเบียน CVE ระบุคือการล้างอีเมลและสถานะยืนยันอีเมลของบัญชีเป้าหมาย รวมถึงการเพิกถอน session ทั้งหมดของบัญชีนั้น

ขอบเขตที่ผู้พัฒนาอธิบายในข้อความ commit แคบกว่าการยึดบัญชีทั่วไป: เส้นทางที่อีเมลว่างนำไปสู่ user.email.remove() ถูกระบุสำหรับ บัญชีที่ไม่มีรหัสผ่าน ผู้โจมตีต้องทราบหรือระบุ uid เป้าหมาย และเว็บต้องเปิดให้เข้าสู่ขั้นตอนสมัครสมาชิกที่เกี่ยวข้อง ข่าวนี้จึงไม่ควรขยายเป็นข้ออ้างว่าผู้ไม่เข้าสู่ระบบอ่านรหัสผ่านหรือเข้าระบบแทนผู้ใช้อื่นได้โดยตรง ผลกระทบหลักที่ยืนยันคือการเปลี่ยนสถานะอีเมลและตัด session ของบัญชีเป้าหมาย ซึ่งอาจรบกวนการเข้าถึงและกระบวนการยืนยันตัวตนของผู้ใช้

วันเปิดเผย วันเผยแพร่ CVE และวันแก้ไข

Commit ของโครงการ 376d14abb7fffd8ea14f3a2f96baa20ffee5cdb3 ระบุสาเหตุ ผลกระทบ และวิธีแก้ในข้อความสาธารณะ โดยลงวันที่ 29 ตุลาคม 2026 เวลา 13:44:07 UTC นี่เป็นวันเปิดเผยต่อสาธารณะครั้งแรกจากโครงการที่ตรวจยืนยันได้และเป็นวันที่แพตช์ซอร์สโค้ดถูกบันทึก ระเบียน CVE Program สำหรับ CVE-2026-120007 เผยแพร่ครั้งแรกวันที่ 30 ตุลาคม 2026 เวลา 18:52:57 UTC ทั้งสองเวลาอยู่ในช่วง 48 ชั่วโมงก่อนรอบตรวจนี้

แหล่งต้นทางที่ตรวจได้ยัง ไม่มีแท็ก release ที่รวมแพตช์นี้: รายการแท็กล่าสุดของ repository แสดง v4.16.5 และไม่มี v4.16.6 ณ เวลาตรวจ จึงไม่ควรบอกว่าเพียงอัปเกรดไป 4.16.6 ได้แล้ว วันแก้ไขในข่าวนี้หมายถึงวัน commit ของแพตช์ ไม่ใช่วันที่แพ็กเกจหรืออิมเมจที่ผู้ใช้ทุกคนติดตั้งได้ถูกเผยแพร่ ผู้ดูแลต้องตรวจว่าช่องทางที่ตนใช้มีการรวม commit นี้จริงหรือไม่

จุดที่การตรวจสิทธิ์ผิดพลาด

ตามข้อความ commit ของโครงการ ผู้มาเยือนสามารถส่ง uid ของบัญชีอื่นมากับข้อมูลสมัครสมาชิก และค่า uid นั้นถูกเก็บใน req.session.registration ต่อมา interstitial ที่จัดการอีเมลในการสมัครอาจตีความ session ดังกล่าวว่าเป็นผู้ใช้เดิม เมื่อมีอีเมลว่างจึงเข้าเส้นทางลบอีเมลของบัญชีที่อ้างถึง การใช้ค่าที่ไคลเอนต์ส่งมาเพื่ออ้างตัวตนโดยไม่ผูกกับบัญชีที่ยืนยันตัวตนแล้วเป็นหัวใจของการข้ามสิทธิ์ครั้งนี้

แพตช์เปลี่ยน registerAndLoginUser ให้ปรับค่า userData.uid ให้ตรงกับ req.uid ของผู้เรียก หรือเอาค่าออกเมื่อเป็น guest ก่อนเก็บข้อมูลสมัครใน session อีกส่วนหนึ่งของแพตช์กำหนดให้เส้นทางลบอีเมลใน interstitial ต้องผ่านเงื่อนไข isSelf ด้วย จึงมีการป้องกันสองชั้น: ไม่รับตัวตนจากผู้สมัครที่ยังไม่พิสูจน์สิทธิ์ และตรวจซ้ำว่าการแก้ข้อมูลเป็นการแก้บัญชีของตัวเอง

เวอร์ชันที่กระทบและเวอร์ชันแก้ไข

ระเบียน CVE ระบุว่า NodeBB 1.18.0 ถึง 4.16.5 ได้รับผลกระทบ ส่วนจุดแก้ไขที่ตรวจยืนยันได้คือ commit 376d14abb7fffd8ea14f3a2f96baa20ffee5cdb3 ในซอร์สของโครงการ ไม่มีเลขเวอร์ชัน release หลัง 4.16.5 ที่ยืนยันได้ ณ รอบนี้ ข้อแตกต่างนี้สำคัญสำหรับผู้ดูแลที่ติดตั้งจาก npm, Docker image, Git checkout หรือแพ็กเกจของผู้ให้บริการ เพราะเลขรุ่นของซอร์สกับ build ที่กำลังรันอาจไม่ตรงกัน

ผู้ดูแลควรตรวจว่าระบบเปิดรับการสมัครสมาชิกหรือไม่ และมีบัญชีที่ใช้รูปแบบไม่มีรหัสผ่านหรือไม่ จากนั้นตรวจ commit หรือ changelog ของ build ที่ติดตั้ง หากยังใช้โค้ดก่อน commit ที่แก้ ควรวางแผนนำแพตช์จากต้นทางเข้าระบบผ่านกระบวนการทดสอบของตน หรือรอ release ทางการที่ระบุว่ารวมแพตช์แล้วพร้อมตรวจยืนยันอีกครั้ง ไม่ควรย้ายไปยัง branch พัฒนาโดยไม่ทดสอบการทำงานของปลั๊กอินและกระบวนการเข้าสู่ระบบของชุมชน

การตรวจสอบผลกระทบในระบบจริง

ระหว่างรอแพตช์ ผู้ดูแลสามารถทบทวน log ของเส้นทาง POST /register และ /register/complete เพื่อดูคำขอที่มี uid ไม่สอดคล้องกับผู้ใช้งานหรือมีอีเมลว่างผิดปกติ รวมทั้งตรวจเหตุการณ์ล้างอีเมลและการเพิกถอน session ของบัญชีที่ไม่มีรหัสผ่าน หากพบความผิดปกติ ให้ใช้กระบวนการตอบสนองเหตุการณ์และช่วยผู้ใช้กู้คืนสถานะบัญชีตามนโยบายขององค์กร การปิดการสมัครชั่วคราวอาจลดการเข้าถึงเส้นทางนี้ได้ในบางระบบ แต่ต้องประเมินผลกระทบต่อผู้ใช้และไม่ถือเป็นการแก้โค้ด

หลังลงแพตช์ ให้ทดสอบว่าผู้มาเยือนส่ง uid ของคนอื่นผ่านขั้นตอนสมัครแล้วไม่สามารถเปลี่ยนอีเมลหรือ session ของบัญชีเป้าหมาย ขณะเดียวกันผู้ใช้ที่แก้ข้อมูลตัวเองตามปกติต้องยังทำได้ ผลการทดสอบควรครอบคลุมรูปแบบบัญชีที่ไม่มีรหัสผ่านและการตั้งค่าของเว็บไซต์จริง ข้อมูลต้นทางยืนยันช่องโหว่กับแพตช์ซอร์ส แต่ไม่ได้ยืนยันว่าทุกเว็บไซต์ NodeBB ที่ใช้รุ่นในช่วงดังกล่าวถูกโจมตีแล้ว

แหล่งข้อมูลต้นทาง