บัฟเฟอร์ล้นใน Toxcore ที่ถูกใช้ประโยชน์โดยการส่งแพ็กเก็ต UDP

Toxcore ซึ่งเป็นการใช้งานอ้างอิงของโปรโตคอลการส่งข้อความ Tox P2P มีช่องโหว่ (CVE-2021-44847) ที่อาจทริกเกอร์การเรียกใช้โค้ดเมื่อประมวลผลแพ็กเก็ต UDP ที่สร้างขึ้นเป็นพิเศษ ผู้ใช้แอปพลิเคชันที่ใช้ Toxcore ทั้งหมดที่ไม่ได้ปิดใช้งานการขนส่ง UDP จะได้รับผลกระทบจากช่องโหว่นี้ ในการโจมตี ก็เพียงพอที่จะส่งแพ็กเก็ต UDP เพื่อทราบที่อยู่ IP, พอร์ตเครือข่าย และคีย์ DHT สาธารณะของเหยื่อ (ข้อมูลนี้เปิดเผยต่อสาธารณะใน DHT เช่น การโจมตีสามารถดำเนินการกับผู้ใช้หรือโหนด DHT)

ปัญหานี้ปรากฏใน toxcore รุ่น 0.1.9 ถึง 0.2.12 และได้รับการแก้ไขแล้วในเวอร์ชัน 0.2.13 ในบรรดาแอปพลิเคชันไคลเอ็นต์ มีเพียงโปรเจ็กต์ qTox เท่านั้นที่ออกการอัปเดตที่ช่วยขจัดช่องโหว่ดังกล่าว วิธีแก้ปัญหาด้านความปลอดภัย คุณสามารถปิดใช้งาน UDP ในขณะที่ยังคงรองรับ TCP ได้

ช่องโหว่นี้เกิดจากการบัฟเฟอร์ล้นในฟังก์ชัน handle_request() ซึ่งเกิดขึ้นเนื่องจากการคำนวณขนาดข้อมูลในแพ็กเก็ตเครือข่ายไม่ถูกต้อง โดยเฉพาะอย่างยิ่ง ความยาวของข้อมูลที่เข้ารหัสถูกกำหนดในมาโคร CRYPTO_SIZE ซึ่งกำหนดเป็น "1 + CRYPTO_PUBLIC_KEY_SIZE * 2 + CRYPTO_NONCE_SIZE" ซึ่งต่อมาใช้ในการลบ "length - CRYPTO_SIZE" เนื่องจากมาโครไม่มีวงเล็บ แทนที่จะลบผลรวมของค่าทั้งหมด กลับลบ 1 และเพิ่มส่วนที่เหลือ ตัวอย่างเช่น แทนที่จะเป็น "ความยาว - (1 + 32 * 2 + 24)" ขนาดบัฟเฟอร์ถูกคำนวณเป็น "ความยาว - 1 + 32 * 2 + 24" ซึ่งส่งผลให้มีการเขียนทับข้อมูลบนสแต็กเกินขอบเขตบัฟเฟอร์

ที่มา: opennet.ru

เพิ่มความคิดเห็น