พบช่องโหว่ใน Libsodium หลังใช้งานมา 13 ปี — แต่กระทบเฉพาะผู้ใช้ฟังก์ชันระดับล่าง
Libsodium ซึ่งเป็นไลบรารีเข้ารหัสยอดนิยมที่เน้นความง่ายและความปลอดภัย เพิ่งพบช่องโหว่สำคัญในฟังก์ชันตรวจสอบความถูกต้องของจุดบนเส้นโค้ง Edwards25519 โดยช่องโหว่นี้เกิดจากการลืมตรวจสอบเงื่อนไขหนึ่ง ทำให้จุดที่ไม่อยู่ใน main subgroup สามารถ “หลุดรอด” การตรวจสอบได้ แม้จะควรถูกปฏิเสธก็ตาม
ปัญหานี้เกิดขึ้นในฟังก์ชัน crypto_core_ed25519_is_valid_point() ซึ่งควรตรวจสอบว่าจุดที่รับเข้ามาอยู่ในกลุ่มหลัก (order L) หรือไม่ โดยปกติจะตรวจสอบว่าหลังคูณด้วย L แล้วต้องได้ identity point แต่โค้ดเดิมตรวจสอบเพียงว่า X = 0 แต่ลืมตรวจสอบว่า Y = Z ทำให้จุดบางประเภท เช่น Q + (0, -1) ผ่านการตรวจสอบได้แม้จะไม่ถูกต้อง
แม้ช่องโหว่นี้จะดูน่ากังวล แต่ผู้เขียนย้ำว่า ผู้ใช้ส่วนใหญ่ไม่ถูกกระทบ เพราะฟังก์ชันนี้เป็นฟังก์ชันระดับล่างที่ high‑level API เช่น crypto_sign_* ไม่ได้ใช้เลย อีกทั้ง public key ที่สร้างด้วยฟังก์ชันมาตรฐานของ Libsodium ก็ปลอดภัยอยู่แล้ว ปัญหานี้จะกระทบเฉพาะผู้ที่ใช้ฟังก์ชันดังกล่าวเพื่อตรวจสอบจุดจากแหล่งที่ไม่น่าเชื่อถือ หรือผู้ที่สร้างโปรโตคอลเข้ารหัสเองโดยตรง
การแก้ไขถูกปล่อยทันทีหลังพบปัญหา โดยเพิ่มการตรวจสอบ Y = Z เข้าไป และแพ็กเกจทั้งหมดที่ออกหลังวันที่ 30 ธันวาคม 2025 ได้รวมแพตช์นี้แล้ว ผู้เขียนยังแนะนำให้ผู้ที่ต้องการความปลอดภัยสูงใช้ Ristretto255 แทน Edwards25519 เพราะปลอดภัยกว่าในเรื่อง cofactor และไม่ต้องตรวจสอบ subgroup เพิ่มเติมเลย
ช่องโหว่เกิดจากอะไร?
ฟังก์ชัน crypto_core_ed25519_is_valid_point() ลืมตรวจสอบเงื่อนไข Y = Z
ทำให้จุดบางประเภทที่ไม่อยู่ใน main subgroup ผ่านการตรวจสอบได้
เกิดจากการลืมพอร์ตโค้ดจาก Zig มายัง Libsodium
ใครได้รับผลกระทบ?
ผู้ใช้ Libsodium เวอร์ชัน ≤ 1.0.20
ผู้ที่ใช้ฟังก์ชันตรวจสอบจุดระดับล่างกับข้อมูลจาก untrusted sources
ผู้ที่สร้างโปรโตคอลเข้ารหัสเองบน Edwards25519
ใคร “ไม่” ได้รับผลกระทบ?
ผู้ใช้ high‑level API เช่น crypto_sign_*
ผู้ใช้ public key ที่สร้างด้วยฟังก์ชันมาตรฐานของ Libsodium
ผู้ใช้ Ristretto255 ซึ่งปลอดภัยกว่าโดยออกแบบ
การแก้ไขและคำแนะนำ
แพตช์ถูกปล่อยแล้วในแพ็กเกจหลัง 30 ธ.ค. 2025
เพิ่มการตรวจสอบ Y = Z เพื่อปิดช่องโหว่
แนะนำให้ใช้ Ristretto255 สำหรับโปรโตคอลใหม่
https://00f.net/2025/12/30/libsodium-vulnerability/
Libsodium ซึ่งเป็นไลบรารีเข้ารหัสยอดนิยมที่เน้นความง่ายและความปลอดภัย เพิ่งพบช่องโหว่สำคัญในฟังก์ชันตรวจสอบความถูกต้องของจุดบนเส้นโค้ง Edwards25519 โดยช่องโหว่นี้เกิดจากการลืมตรวจสอบเงื่อนไขหนึ่ง ทำให้จุดที่ไม่อยู่ใน main subgroup สามารถ “หลุดรอด” การตรวจสอบได้ แม้จะควรถูกปฏิเสธก็ตาม
ปัญหานี้เกิดขึ้นในฟังก์ชัน crypto_core_ed25519_is_valid_point() ซึ่งควรตรวจสอบว่าจุดที่รับเข้ามาอยู่ในกลุ่มหลัก (order L) หรือไม่ โดยปกติจะตรวจสอบว่าหลังคูณด้วย L แล้วต้องได้ identity point แต่โค้ดเดิมตรวจสอบเพียงว่า X = 0 แต่ลืมตรวจสอบว่า Y = Z ทำให้จุดบางประเภท เช่น Q + (0, -1) ผ่านการตรวจสอบได้แม้จะไม่ถูกต้อง
แม้ช่องโหว่นี้จะดูน่ากังวล แต่ผู้เขียนย้ำว่า ผู้ใช้ส่วนใหญ่ไม่ถูกกระทบ เพราะฟังก์ชันนี้เป็นฟังก์ชันระดับล่างที่ high‑level API เช่น crypto_sign_* ไม่ได้ใช้เลย อีกทั้ง public key ที่สร้างด้วยฟังก์ชันมาตรฐานของ Libsodium ก็ปลอดภัยอยู่แล้ว ปัญหานี้จะกระทบเฉพาะผู้ที่ใช้ฟังก์ชันดังกล่าวเพื่อตรวจสอบจุดจากแหล่งที่ไม่น่าเชื่อถือ หรือผู้ที่สร้างโปรโตคอลเข้ารหัสเองโดยตรง
การแก้ไขถูกปล่อยทันทีหลังพบปัญหา โดยเพิ่มการตรวจสอบ Y = Z เข้าไป และแพ็กเกจทั้งหมดที่ออกหลังวันที่ 30 ธันวาคม 2025 ได้รวมแพตช์นี้แล้ว ผู้เขียนยังแนะนำให้ผู้ที่ต้องการความปลอดภัยสูงใช้ Ristretto255 แทน Edwards25519 เพราะปลอดภัยกว่าในเรื่อง cofactor และไม่ต้องตรวจสอบ subgroup เพิ่มเติมเลย
ช่องโหว่เกิดจากอะไร?
ฟังก์ชัน crypto_core_ed25519_is_valid_point() ลืมตรวจสอบเงื่อนไข Y = Z
ทำให้จุดบางประเภทที่ไม่อยู่ใน main subgroup ผ่านการตรวจสอบได้
เกิดจากการลืมพอร์ตโค้ดจาก Zig มายัง Libsodium
ใครได้รับผลกระทบ?
ผู้ใช้ Libsodium เวอร์ชัน ≤ 1.0.20
ผู้ที่ใช้ฟังก์ชันตรวจสอบจุดระดับล่างกับข้อมูลจาก untrusted sources
ผู้ที่สร้างโปรโตคอลเข้ารหัสเองบน Edwards25519
ใคร “ไม่” ได้รับผลกระทบ?
ผู้ใช้ high‑level API เช่น crypto_sign_*
ผู้ใช้ public key ที่สร้างด้วยฟังก์ชันมาตรฐานของ Libsodium
ผู้ใช้ Ristretto255 ซึ่งปลอดภัยกว่าโดยออกแบบ
การแก้ไขและคำแนะนำ
แพตช์ถูกปล่อยแล้วในแพ็กเกจหลัง 30 ธ.ค. 2025
เพิ่มการตรวจสอบ Y = Z เพื่อปิดช่องโหว่
แนะนำให้ใช้ Ristretto255 สำหรับโปรโตคอลใหม่
https://00f.net/2025/12/30/libsodium-vulnerability/
🔐 พบช่องโหว่ใน Libsodium หลังใช้งานมา 13 ปี — แต่กระทบเฉพาะผู้ใช้ฟังก์ชันระดับล่าง
Libsodium ซึ่งเป็นไลบรารีเข้ารหัสยอดนิยมที่เน้นความง่ายและความปลอดภัย เพิ่งพบช่องโหว่สำคัญในฟังก์ชันตรวจสอบความถูกต้องของจุดบนเส้นโค้ง Edwards25519 โดยช่องโหว่นี้เกิดจากการลืมตรวจสอบเงื่อนไขหนึ่ง ทำให้จุดที่ไม่อยู่ใน main subgroup สามารถ “หลุดรอด” การตรวจสอบได้ แม้จะควรถูกปฏิเสธก็ตาม
ปัญหานี้เกิดขึ้นในฟังก์ชัน crypto_core_ed25519_is_valid_point() ซึ่งควรตรวจสอบว่าจุดที่รับเข้ามาอยู่ในกลุ่มหลัก (order L) หรือไม่ โดยปกติจะตรวจสอบว่าหลังคูณด้วย L แล้วต้องได้ identity point แต่โค้ดเดิมตรวจสอบเพียงว่า X = 0 แต่ลืมตรวจสอบว่า Y = Z ทำให้จุดบางประเภท เช่น Q + (0, -1) ผ่านการตรวจสอบได้แม้จะไม่ถูกต้อง
แม้ช่องโหว่นี้จะดูน่ากังวล แต่ผู้เขียนย้ำว่า ผู้ใช้ส่วนใหญ่ไม่ถูกกระทบ เพราะฟังก์ชันนี้เป็นฟังก์ชันระดับล่างที่ high‑level API เช่น crypto_sign_* ไม่ได้ใช้เลย อีกทั้ง public key ที่สร้างด้วยฟังก์ชันมาตรฐานของ Libsodium ก็ปลอดภัยอยู่แล้ว ปัญหานี้จะกระทบเฉพาะผู้ที่ใช้ฟังก์ชันดังกล่าวเพื่อตรวจสอบจุดจากแหล่งที่ไม่น่าเชื่อถือ หรือผู้ที่สร้างโปรโตคอลเข้ารหัสเองโดยตรง
การแก้ไขถูกปล่อยทันทีหลังพบปัญหา โดยเพิ่มการตรวจสอบ Y = Z เข้าไป และแพ็กเกจทั้งหมดที่ออกหลังวันที่ 30 ธันวาคม 2025 ได้รวมแพตช์นี้แล้ว ผู้เขียนยังแนะนำให้ผู้ที่ต้องการความปลอดภัยสูงใช้ Ristretto255 แทน Edwards25519 เพราะปลอดภัยกว่าในเรื่อง cofactor และไม่ต้องตรวจสอบ subgroup เพิ่มเติมเลย
✅ ช่องโหว่เกิดจากอะไร?
➡️ ฟังก์ชัน crypto_core_ed25519_is_valid_point() ลืมตรวจสอบเงื่อนไข Y = Z
➡️ ทำให้จุดบางประเภทที่ไม่อยู่ใน main subgroup ผ่านการตรวจสอบได้
➡️ เกิดจากการลืมพอร์ตโค้ดจาก Zig มายัง Libsodium
✅ ใครได้รับผลกระทบ?
➡️ ผู้ใช้ Libsodium เวอร์ชัน ≤ 1.0.20
➡️ ผู้ที่ใช้ฟังก์ชันตรวจสอบจุดระดับล่างกับข้อมูลจาก untrusted sources
➡️ ผู้ที่สร้างโปรโตคอลเข้ารหัสเองบน Edwards25519
‼️ ใคร “ไม่” ได้รับผลกระทบ?
⛔ ผู้ใช้ high‑level API เช่น crypto_sign_*
⛔ ผู้ใช้ public key ที่สร้างด้วยฟังก์ชันมาตรฐานของ Libsodium
⛔ ผู้ใช้ Ristretto255 ซึ่งปลอดภัยกว่าโดยออกแบบ
✅ การแก้ไขและคำแนะนำ
➡️ แพตช์ถูกปล่อยแล้วในแพ็กเกจหลัง 30 ธ.ค. 2025
➡️ เพิ่มการตรวจสอบ Y = Z เพื่อปิดช่องโหว่
➡️ แนะนำให้ใช้ Ristretto255 สำหรับโปรโตคอลใหม่
https://00f.net/2025/12/30/libsodium-vulnerability/
0 ความคิดเห็น
0 การแบ่งปัน
4 มุมมอง
0 รีวิว