phpseclib เสี่ยง DoS จาก PBKDF — GHSA-w3p9-g4p2-h3rr
นักพัฒนาและผู้ดูแลระบบที่เปิดรับไฟล์กุญแจเข้ารหัสหรือ PFX จากภายนอกควรเร่งอัปเดต phpseclib ตามสายรุ่นที่ใช้
สรุปใน 1 นาที
- อาการ/ปัญหา
- ไฟล์เข้ารหัสที่กำหนดจำนวนรอบ PBKDF สูงผิดปกติทำให้ PHP ใช้ CPU ต่อเนื่องจนบริการไม่พร้อมใช้งาน
- ใครควรอ่าน
- นักพัฒนาและผู้ดูแลระบบของแอปที่ใช้ phpseclib อ่านกุญแจเข้ารหัส PFX หรือ CMS จากแหล่งที่ไม่เชื่อถือพร้อมรหัสผ่าน
- ทางแก้แบบสั้น
- อัปเดตเป็น 4.0.3, 3.0.58, 2.0.56 หรือ 1.0.31 ตามสายรุ่น และตรวจรุ่นที่นำขึ้นใช้งานจริง
พอดีไล่ฟีด Packagist เจอประกาศของ phpseclib ลงวันที่ 2 พฤศจิกายน 2026 เรื่องไฟล์เข้ารหัสที่ทำให้ PHP ใช้ CPU จนบริการล่มได้ หมายเลขประกาศคือ GHSA-w3p9-g4p2-h3rr แอปที่ต้องตรวจคือแอปที่ใช้ phpseclib/phpseclib เปิดกุญแจหรือข้อมูลเข้ารหัสจากภายนอกด้วยรหัสผ่าน
ใครต้องทำอะไร
- ผู้ดูแลระบบ: ถ้าแอปรับไฟล์เข้ารหัสจากภายนอก ให้ประสานทีมแอปติดตั้งรุ่นแก้โดยเร็ว
- นักพัฒนา: ถ้าโค้ดใช้ phpseclib เปิดไฟล์ที่ไม่เชื่อถือด้วยรหัสผ่าน ให้เร่งอัปเดตไลบรารีและทดสอบก่อนนำขึ้นใช้งาน
เกิดอะไรขึ้น
PBKDF ใช้สร้างกุญแจจากรหัสผ่าน โดยคำนวณซ้ำหลายรอบเพื่อให้เดารหัสผ่านได้ยากขึ้น ปัญหาคือ phpseclib อ่านจำนวนรอบ iterationCount จากข้อมูล ASN.1 ในไฟล์โดยไม่จำกัดค่าสูงสุด ผู้โจมตีเลยใส่จำนวนรอบสูงมากได้ PHP worker จะติดอยู่กับการคำนวณจนรับงานอื่นไม่ได้
ประกาศระบุไฟล์กุญแจส่วนตัว PKCS#8 ที่เข้ารหัส ไฟล์ PKCS#12 หรือ PFX และข้อมูล CMS แบบใช้รหัสผ่าน เงื่อนไขคือแอปส่งไฟล์จากผู้โจมตีเข้า loader พร้อมรหัสผ่านที่ไม่เป็น null ตัวไลบรารีคำนวณกุญแจก่อนลองถอดรหัส แม้ข้อมูลเข้ารหัสจะใช้ไม่ได้ ก็ยังเสียเวลาคำนวณเต็มจำนวนรอบ
ผลที่รายงานคือ denial of service หรือ DoS จากการใช้ CPU ต่อเนื่อง ไฟล์ขนาดเล็กก็ยึด worker ไว้ได้ และคำขอหลายรายการอาจใช้ worker จนหมด ประกาศระบุว่าไม่มีผลต่อความลับหรือความถูกต้องของข้อมูล จัดระดับ High และให้คะแนน CVSS 3.1 ที่ 7.5 ช่อง CVE ยังระบุว่าไม่มีหมายเลขที่ทราบ ตาม ประกาศความปลอดภัยของ phpseclib
ใครโดนและรุ่นที่แก้
ตาราง Affected versions และ Patched versions ในประกาศระบุรุ่นของแพ็กเกจ phpseclib/phpseclib ดังนี้
| สายรุ่น | รุ่นที่ได้รับผลกระทบ | รุ่นที่แก้ |
|---|---|---|
| 4.x | 4.0.0–4.0.2 | 4.0.3 |
| 3.x | 3.0.0–3.0.57 | 3.0.58 |
| 2.x | 2.0.0–2.0.55 | 2.0.56 |
| 1.x | 1.0.0–1.0.30 | 1.0.31 |
ข้อมูลในหน้าเดียวกันยังไม่ตรงกันทั้งหมด ส่วนรายละเอียดเก่ายังเขียนว่า “Fix status: not fixed” แต่ตารางด้านบนมีรุ่นแก้แล้ว Release note ของ 4.0.3, 3.0.58, 2.0.56 และ 1.0.31 ยืนยันว่าเพิ่มเพดานจำนวนรอบ PBKDF แล้ว ตารางนี้เลยยึดรุ่นแก้ตามข้อมูลดังกล่าว
ต้องทำอะไร
ตรวจรุ่นในโครงการ แล้วอัปเดตในสภาพแวดล้อมทดสอบก่อนนำขึ้นใช้งาน ตัวอย่างสำหรับโครงการ Composer ที่ติดตั้งแพ็กเกจนี้โดยตรงคือ
composer show phpseclib/phpseclib
composer update phpseclib/phpseclib --with-dependencies
composer show phpseclib/phpseclib
คำสั่ง update ของ Composer ยังเลือกได้เฉพาะรุ่นที่เงื่อนไขใน composer.json ยอมรับ ถ้าตรึงรุ่นเก่าไว้ ให้แก้เงื่อนไขเพื่อรับรุ่นแก้ในสายเดิม แล้วตรวจ composer.lock ทดสอบการนำเข้าไฟล์ตามปกติ โดยเฉพาะกุญแจ PFX หรือ CMS ที่แอปใช้งาน จากนั้นนำแอปพร้อมไลบรารีที่อัปเดตแล้วขึ้นใช้งานจริง
ประกาศเสนอให้จำกัด CPU หรือเวลาประมวลผลต่อคำขอเพื่อลดผลกระทบชั่วคราว แต่คำขอยังยึด worker จนถูกหยุด ขีดจำกัดของคำขอเว็บไม่ได้ป้องกันงาน CLI หรือ worker เบื้องหลังด้วย
ส่วนตัวผมให้เร่งแพตช์หากเปิดรับไฟล์เข้ารหัสจากภายนอก เพราะไฟล์ขนาดเล็กก็ทำให้ worker เสียเวลาคำนวณได้ ที่มา: phpseclib Security Advisory GHSA-w3p9-g4p2-h3rr (https://github.com/phpseclib/phpseclib/security/advisories/GHSA-w3p9-g4p2-h3rr) เดี๋ยวกลับมาแก้เพิ่มให้ภายหลังครับ
อยากให้เราทำให้ไหม?
ให้เราช่วยติดตั้ง ตั้งค่า ย้ายระบบ หรือแก้ปัญหาเซิร์ฟเวอร์ เพื่อให้คุณมีเวลาไปทำงานที่สำคัญกว่า
เคยเจองานแบบนี้ไหม? ติดตรงไหน?
มาแลกวิธีกันต่อในบอร์ด LinuxThai



ความคิดเห็น 0
ยังไม่มีความคิดเห็น — เป็นคนแรกเลย