'Livewire ข้ามสิทธิ์ Authorize: GHSA-mhf7-xp6r-6qrc'
'ผู้ดูแลแอปที่ใช้ Livewire รุ่นที่ได้รับผลกระทบร่วมกับ #[Authorize] ตามเงื่อนไขควรเร่งอัปเดต โดยเฉพาะเมธอดที่แก้ไขหรือลบข้อมูล'
สรุปใน 1 นาที
- อาการ/ปัญหา
- การผูกพารามิเตอร์กับลำดับตรวจสิทธิ์ผิดพลาด ทำให้เมธอดทำงานกับข้อมูลที่ผู้ใช้ไม่มีสิทธิ์ได้
- ใครควรอ่าน
- แอปที่ใช้ livewire/livewire >=4.3.0,<4.4.8 และใช้ #[Authorize] กับพารามิเตอร์โมเดล หรือใช้ร่วมกับ #[Json]
- ทางแก้แบบสั้น
- อัปเดตเป็น 4.4.8 หรือใหม่กว่าในสาย 4.x หากยังทำไม่ได้ให้ตรวจสิทธิ์ภายในเมธอดก่อนเริ่มงาน
พอดีไล่ฟีดแพ็กเกจ PHP เจอประกาศของ Livewire ลงวันที่ 22 ตุลาคม 2026 เรื่องการข้ามการตรวจสิทธิ์ใน #[Authorize] เลยหยิบมาอธิบายสำหรับคนดูแลแอป Laravel ผู้ใช้อาจเรียกเมธอดให้ทำงานกับข้อมูลที่ตัวเองไม่มีสิทธิ์ได้ บางกรณีระบบตอบกลับว่าไม่อนุญาต แต่เขียนข้อมูลลงฐานข้อมูลไปแล้ว
เกิดอะไรขึ้น
ประกาศ GHSA-mhf7-xp6r-6qrc แยกปัญหาเป็นสามกรณี กรณีแรก #[Authorize] เลือกโมเดลที่จะตรวจสิทธิ์จากคีย์ของอาร์เรย์ แต่ action รับพารามิเตอร์ตามตำแหน่ง ถ้าคำขอเรียงคีย์ตัวเลขสลับกัน ระบบอาจตรวจสิทธิ์กับข้อมูลรายการหนึ่ง แล้วส่งอีกรายการให้เมธอด ผู้ใช้อาจผ่านการตรวจด้วยข้อมูลของตัวเอง แต่เมธอดกลับได้รับข้อมูลของคนอื่น ผู้พัฒนายกตัวอย่างว่าผู้ใช้อาจลบความคิดเห็นของคนอื่นได้
กรณีที่สองเกิดกับ event listener ที่ใช้ #[On] และ #[Authorize] พร้อมพารามิเตอร์โมเดล การเรียกผ่าน __dispatch ส่งพารามิเตอร์ผิดรายการได้แบบเดียวกัน เวลาไล่ตรวจโค้ดเลยต้องดูทั้ง action และ listener
กรณีที่สามเป็นเมธอดที่ติดทั้ง #[Json] และ #[Authorize] ตัวเมธอดถูกรันก่อนตรวจสิทธิ์ แม้คำตอบสุดท้ายยังเป็น HTTP 403 แต่ผลข้างเคียง เช่น การเขียนฐานข้อมูล เกิดขึ้นแล้ว การเห็น 403 ในบันทึกคำขออย่างเดียวเลยยืนยันไม่ได้ว่าข้อมูลไม่ถูกเปลี่ยน
GitHub จัดระดับ Moderate หรือปานกลาง คะแนน CVSS 3.1 อยู่ที่ 6.5 โดยระบุว่าการโจมตีผ่านเครือข่ายต้องมีสิทธิ์ระดับต่ำ และไม่ต้องให้ผู้ใช้อื่นโต้ตอบ ผลกระทบตามคะแนนอยู่ที่ความถูกต้องของข้อมูล ประกาศยังไม่มีหมายเลข CVE ระบุไว้
ใครโดนและรุ่นที่แก้
ขอบเขตตาม ประกาศจากโครงการ Livewire คือแอปที่ใช้ attribute ตามเงื่อนไขข้างต้น การติดตั้งแพ็กเกจในช่วงรุ่นนี้เพียงอย่างเดียวยังไม่พอจะสรุปว่าเข้าเงื่อนไขทุกแอป
| แพ็กเกจ / สายรุ่น | รุ่นที่ได้รับผลกระทบ | รุ่นที่แก้ |
|---|---|---|
livewire/livewire 4.x |
>=4.3.0,<4.4.8 เมื่อใช้ #[Authorize] ตามเงื่อนไข |
4.4.8 |
livewire/livewire 3.x |
ผู้พัฒนาระบุว่าไม่กระทบ | ไม่ต้องแก้จากประกาศนี้ |
การตรวจสิทธิ์ภายในเมธอดด้วย $this->authorize(...) ไม่ได้รับผลกระทบจากช่องโหว่นี้ ส่วนแอปที่พึ่ง attribute ควรค้นหาเมธอดที่รับโมเดล รวมถึงเมธอด JSON แล้วเทียบกับนโยบายสิทธิ์ของข้อมูลที่รับเข้ามาจริง
ต้องทำอะไร
เริ่มจากตรวจรุ่นที่ติดตั้งและ composer.lock สำรองโค้ดกับฐานข้อมูล แล้วลองอัปเดตในระบบทดสอบก่อน สำหรับโปรเจกต์สาย 4.x คำสั่งนี้กำหนดรุ่นขั้นต่ำเป็น 4.4.8 และให้ Composer อัปเดต dependency ที่เกี่ยวข้องได้ โดยยังต้องอยู่ในข้อกำหนดของโปรเจกต์
composer require "livewire/livewire:^4.4.8" --with-all-dependencies
composer show livewire/livewire
ถ้า Composer ติดข้อจำกัด dependency ให้แก้ความเข้ากันได้ก่อนนำขึ้นใช้งาน ตรวจผลว่ารุ่นที่ติดตั้งพ้นช่วงเสี่ยงแล้ว และนำ composer.lock ที่ผ่านการทดสอบเข้าสู่กระบวนการ deploy ด้วย
แพตช์ของโครงการ เพิ่มการปฏิเสธพารามิเตอร์ที่ใช้คีย์ตัวเลขสลับลำดับหรือปนกัน โดยรับรายการแบบ list หรือคีย์ชื่อแบบสตริง และย้ายการตรวจสิทธิ์ให้เกิดก่อนรันเมธอด #[Json] หลังอัปเดตควรทดสอบด้วยข้อมูลจำลองว่าบัญชีที่ไม่มีสิทธิ์แก้ไขหรือลบข้อมูลไม่ได้ ตรวจทั้งคำตอบ HTTP และสถานะข้อมูลหลังคำขอ โดยครอบคลุม action, listener และเมธอด JSON ที่เข้าเงื่อนไข
ผู้พัฒนาแนะนำให้เรียก $this->authorize(...) ภายในเมธอดที่ได้รับผลกระทบ แทนการพึ่ง #[Authorize] โดยวางก่อนการเขียนข้อมูลหรือผลข้างเคียงอื่น และตรวจโมเดลที่เมธอดกำลังจะใช้งานจริง
ส่วนตัวผมแนะนำให้เร่งแพตช์ถ้าเข้าเงื่อนไข โดยเฉพาะจุดแก้ไขหรือลบข้อมูล ที่มา: Livewire: Authorization bypass in #[Authorize] via reordered parameter keys and #[Json] execution order ถ้ามีรายละเอียดเพิ่มเติมจากผู้พัฒนา เดี๋ยวกลับมาแก้เพิ่มให้ภายหลังครับ
อยากให้เราทำให้ไหม?
ให้เราช่วยติดตั้ง ตั้งค่า ย้ายระบบ หรือแก้ปัญหาเซิร์ฟเวอร์ เพื่อให้คุณมีเวลาไปทำงานที่สำคัญกว่า
เคยเจองานแบบนี้ไหม? ติดตรงไหน?
มาแลกวิธีกันต่อในบอร์ด LinuxThai



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