MongoDB C# Driver 3.13.0 แก้ 11 CVE: ตรวจ BSON, LINQ, TLS และการเข้ารหัส
MongoDB ออก .NET Driver 3.13.0 วันที่ 22 ต.ค. 2026 แก้ 11 CVE ใน C# Driver ตั้งแต่ปัญหา NoSQL injection จนถึงการข้ามสิทธิ์และข้อมูลที่ควรเข้ารหัสถูกเขียนเป็น plaintext
MongoDB C# Driver 3.13.0 แก้ 11 CVE: ตรวจจุดรับ BSON, LINQ, TLS และการเข้ารหัสฝั่งไคลเอนต์
MongoDB เผยแพร่ .NET/C# Driver รุ่น 3.13.0 วันที่ 22 ตุลาคม 2026 เวลา 18:45 UTC พร้อมประกาศแก้ปัญหาความปลอดภัยหลายรายการในตัวไดรเวอร์ ระเบียน CVE สำหรับชุดนี้เผยแพร่ครั้งแรกประมาณ 19:13 UTC วันเดียวกัน รายการงาน CSHARP-6180 ของผู้พัฒนาสร้างขึ้นก่อนหน้านี้ แต่ประวัติ JIRA แสดงว่าเพิ่งปลดระดับการเข้าถึงแบบ Mongo Internal หลังการออกรีลีส จึงควรนับข่าวนี้ตามวันประกาศต่อสาธารณะของผู้พัฒนา ไม่ใช่วันที่สร้างรายการงานภายใน เนื้อหานี้ครอบคลุม 11 CVE ของ C# Driver เท่านั้น; CVE-2026-114645 เป็นของ C Driver และ CVE-2026-114655 เป็นของ libmongocrypt ซึ่งมีรุ่นแก้และขอบเขตต่างกัน
ความเสี่ยงไม่ได้หมายความว่า MongoDB Server ทุกเครื่องถูกโจมตีได้โดยตรง ช่องโหว่ส่วนใหญ่ต้องมีข้อมูลที่ผู้โจมตีควบคุมได้ไหลผ่าน API เฉพาะของไดรเวอร์ เช่น raw BSON, ชื่อฟิลด์ที่นำไปสร้าง LINQ, ชื่อฐานข้อมูลที่ใช้ client-side encryption หรือใบรับรองไคลเอนต์ที่แอปยอมรับ สิ่งที่ผู้ดูแลควรทำทันทีคือสำรวจเวอร์ชันแพ็กเกจ MongoDB.Driver/MongoDB.Bson ในแอป .NET และติดตามเส้นทางข้อมูลที่เข้าถึงเงื่อนไขเหล่านี้
จุดที่ต้องให้ความสำคัญก่อน
ข้อมูลหรือสิทธิ์ข้ามขอบเขต เป็นกลุ่มที่ควรตรวจเป็นอันดับแรก หากแอปสร้าง MongoClient จากใบรับรองที่ผู้ใช้หลายรายส่งให้เอง CVE-2026-114649 ระบุว่าแคชคลัสเตอร์เดิมเทียบใบรับรองด้วย issuer และ serial number เท่านั้น ใบรับรองอีกใบที่เลียนแบบสองค่านี้อาจทำให้ไคลเอนต์ใช้การเชื่อมต่อที่ยืนยันตัวตนภายใต้สิทธิ์ของผู้อื่น รุ่น 3.13.0 เปลี่ยนไปเทียบ SHA-256 ของใบรับรองทั้งใบและตรวจว่ามี private key หรือไม่ ผู้ใช้ไดรเวอร์ทั่วไปที่กำหนดใบรับรองชุดเดียวจากค่าตั้งต้นของเซิร์ฟเวอร์ควรประเมินต่างจากบริการที่รับใบรับรองจากหลาย tenant
CVE-2026-114650 กระทบการเข้ารหัสฟิลด์ฝั่งไคลเอนต์เมื่อชื่อฐานข้อมูลมีอักขระที่ไม่ใช่ ASCII ภายใต้การแปลงชื่อที่เกี่ยวกับ Windows ANSI code page การแมปชื่อกับกฎการเข้ารหัสอาจคลาดเคลื่อนและเขียนฟิลด์ที่ควรถูกเข้ารหัสเป็นข้อความปกติ รุ่นแก้ส่งชื่อฐานข้อมูลไปยัง libmongocrypt เป็น UTF-8 ผู้ใช้ CSFLE หรือ Queryable Encryption ควรทดสอบการเขียนและอ่านในสภาพแวดล้อมที่ใช้ชื่อฐานข้อมูลจริง พร้อมตรวจข้อมูลที่บันทึกก่อนอัปเกรดด้วย เพราะการติดตั้งแพตช์ไม่ย้อนเข้ารหัสข้อมูลที่เคยเขียนแบบ plaintext
CVE-2026-114653 เป็นอีกจุดของ client-side field-level encryption: ตัวสร้าง schema นำชื่อฟิลด์ไปใช้ในบริบท regex โดยไม่จัดการให้เป็นชื่อฟิลด์แบบ literal อย่างเหมาะสม ทำให้กฎเข้ารหัสไม่จับฟิลด์ที่ตั้งใจหรือจับกว้างเกิน ผู้พัฒนาเลิกแนะนำ overload ของ PatternProperty ที่รับ field expression และให้ใช้ Property สำหรับชื่อฟิลด์เฉพาะ หากมี schema map แบบสร้างด้วยโค้ด ควรทดสอบว่าฟิลด์ที่จัดเป็นความลับถูกเข้ารหัสจริงหลังเปลี่ยนรุ่น
ข้อมูลจากคำขอที่กลายเป็นคำสั่งฐานข้อมูล มีหลายรูปแบบ CVE-2026-114646 เกิดเมื่อแอปรับ raw/lazy BSON จากภายนอกโดยไม่ตรวจว่าความยาวที่ระบุในไบนารีตรงกับบัฟเฟอร์ แล้วส่งข้อมูลนั้นต่อเป็นคำสั่ง รุ่นแก้ปฏิเสธเอกสารที่ความยาวไม่สอดคล้องด้วย ArgumentException CVE-2026-114647 อยู่ที่ FindOneAndReplace: เอกสารทดแทนที่เริ่มด้วยชื่อฟิลด์ $ อาจถูกตีความเป็น update operator แทนการแทนเอกสารทั้งก้อน รุ่นใหม่ปฏิเสธค่าเช่นนี้เช่นเดียวกับ ReplaceOne
CVE-2026-114648 เกี่ยวกับจุดที่นำชื่อฟิลด์หรือ dictionary key ที่ผู้ใช้กำหนดไปประกอบเส้นทางฟิลด์ใน LINQ ตัวอักษร . หรือ $ และ positional operator อาจทำให้คำสั่งอ้างถึงฟิลด์อื่นจากที่แอปตั้งใจ 3.13.0 จะโยน NotSupportedException สำหรับชื่อที่เซิร์ฟเวอร์อาจตีความใหม่ การเปลี่ยนพฤติกรรมนี้อาจทำให้คำขอเก่าบางส่วนล้มเหลวอย่างชัดเจน ซึ่งควรแก้ที่การออกแบบฟิลด์หรือการตรวจอินพุต ไม่ควรจับ exception แล้วนำข้อความเดิมไปประกอบ query ด้วยวิธีอื่น
CVE-2026-114652 อยู่ใน update builder ที่เคยแปลงลิสต์หนึ่งรายการเป็นรูปแบบคำสั่งต่างจากลิสต์หลายรายการ PushEach และ AddToSetEach รุ่นใหม่ใช้ $each เสมอ ส่วน PullAll ใช้ $pullAll เสมอ ควรตรวจโค้ดที่สร้างรายการอัปเดตจากอินพุตของผู้ใช้และทดสอบผลลัพธ์ของกรณีหนึ่งรายการ เทียบกับหลายรายการ โดยเฉพาะแอปที่ใช้ค่าที่มีโครงสร้างคล้าย operator
การอ่านข้อมูลและรูปแบบ BSON
CVE-2026-114644 เกี่ยวกับการ deserialize ค่า BsonSymbol จากข้อมูลที่ควบคุมได้ซ้ำ ๆ แล้วเก็บค่าเหล่านั้นในหน่วยความจำตลอดอายุโปรเซส จนเกิดการใช้หน่วยความจำไม่จำกัดและปฏิเสธการให้บริการ รุ่น 3.13.0 ไม่ intern ค่า BsonSymbol อีกต่อไป และทำ BsonSymbolTable เป็น obsolete ทีมที่มีจุดรับ BSON/JSON จากภายนอกควรตรวจขีดจำกัดขนาดและปริมาณคำขอควบคู่กับการอัปเกรด
CVE-2026-114651 เป็นการอ่าน BSON array ที่ผิดรูปแบบในบัฟเฟอร์ซึ่งใช้ซ้ำระหว่างงาน อาจทำให้ข้อมูลที่ค้างจากเอกสารหรือคำขอก่อนหน้าโผล่เป็นค่าของคำขอใหม่ได้ ภายใต้ชนิดคอลเลกชันและอินพุตเฉพาะ ขณะที่ CVE-2026-114654 เกิดจากค่า binary subtype นอกช่วง 0–255 ที่ผ่านทางข้อความเข้าสู่ BsonBinaryData หรือ JSON reader แล้วถูกบีบค่าเมื่อเขียนเป็น BSON ทำให้เอกสารเสียหรือผู้อ่านตีความไม่ตรงกัน รุ่นใหม่ปฏิเสธ subtype นอกช่วงตั้งแต่ต้น
CVE-2026-114643 เกี่ยวกับ GeoJSON extra members ที่ใช้ชื่อชนกับสมาชิกหลัก เช่น type และ coordinates จนเกิดฟิลด์ซ้ำในเอกสารเดียว เซิร์ฟเวอร์กับไดรเวอร์อาจเลือกคนละค่า และบางระเบียนอาจอ่านกลับผ่านไดรเวอร์ไม่ได้ รุ่นแก้โยน BsonSerializationException เมื่อพบชื่อชนกัน โค้ดที่เก็บ metadata GeoJSON จากผู้ใช้ควรตรวจชื่อฟิลด์ก่อนสร้าง extra members และเตรียมรับ exception ที่เกิดหลังอัปเกรด
รุ่นที่กระทบและการดำเนินการ
ระเบียน CVE ระบุช่วงเริ่มต้นต่างกัน แต่ ทุกรายการ C# Driver ในบทความนี้แก้ใน 3.13.0: CVE-2026-114643 และ 114649 เริ่มที่ 1.8.0; 114644, 114646, 114652 และ 114654 เริ่มที่ 2.0.0; 114647 เริ่มที่ 2.13.0; 114648 เริ่มที่ 2.14.0; 114650 เริ่มที่ 2.10.0; 114651 เริ่มที่ 2.26.0; และ 114653 เริ่มที่ 3.5.0 โดยช่วงที่กระทบสิ้นสุดก่อน 3.13.0 ตามข้อมูลผู้ผลิต หากระบบมีไดรเวอร์รุ่นเก่ามาก ให้เทียบเลข CVE กับระเบียนรายตัวก่อนสรุปว่าเข้าข่าย
เริ่มจากค้น dependency แบบตรงและแบบ transitive ในทุกโปรเจกต์ .NET, อัปเกรดไดรเวอร์เป็น 3.13.0 หรือใหม่กว่าในสภาพแวดล้อมทดสอบ แล้วรันทดสอบกรณี raw BSON, คำสั่ง update หนึ่งรายการ, ชื่อฟิลด์จากผู้ใช้, GeoJSON extra members และการเข้ารหัสฟิลด์ที่ใช้จริง ตรวจ log สำหรับ exception ใหม่หลังเปลี่ยนรุ่น หากระบบมีหลาย tenant หรือใช้ TLS client certificate ให้ทดสอบการแยกสิทธิ์ข้าม tenant ด้วย ส่วนข้อมูลที่อาจถูกเขียนโดยไม่เข้ารหัสหรืออ่านผิดไปแล้วต้องตรวจและแก้เป็นงานข้อมูลแยกต่างหาก การเปลี่ยนไลบรารีอย่างเดียวไม่ซ่อมระเบียนเก่า
วันที่สำคัญ: ผู้พัฒนาเผยแพร่รุ่นแก้ 3.13.0 วันที่ 22 ตุลาคม 2026 เวลา 18:45 UTC; ระเบียน CVE ในชุดนี้เผยแพร่ครั้งแรกประมาณ 19:13 UTC วันเดียวกัน สำหรับเวลาที่แน่นอนของแต่ละเลขให้เปิดระเบียน CVE แยกกัน ไม่มีข้อมูลในแหล่งต้นทางที่ยืนยันว่าทุกรูปแบบถูกนำไปโจมตีจริงในระบบภายนอก จึงไม่ควรสรุปว่ามีการโจมตีแพร่หลาย
แหล่งต้นทาง: MongoDB .NET Driver 3.13.0 release notes, ระเบียน CVE-2026-114649, ระเบียน CVE-2026-114650 และ รายการงาน CSHARP-6180 ของ MongoDB