'Livewire ข้ามสิทธิ์ Authorize: GHSA-mhf7-xp6r-6qrc'
'ผู้ดูแลแอปที่ใช้ Livewire รุ่นที่ได้รับผลกระทบร่วมกับ #[Authorize] ตามเงื่อนไขควรเร่งอัปเดต โดยเฉพาะเมธอดที่แก้ไขหรือลบข้อมูล'
1-minute summary
- Symptom / problem
- การผูกพารามิเตอร์กับลำดับตรวจสิทธิ์ผิดพลาด ทำให้เมธอดทำงานกับข้อมูลที่ผู้ใช้ไม่มีสิทธิ์ได้
- Who should read
- แอปที่ใช้ livewire/livewire >=4.3.0,<4.4.8 และใช้ #[Authorize] กับพารามิเตอร์โมเดล หรือใช้ร่วมกับ #[Json]
- Fix in short
- อัปเดตเป็น 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 ถ้ามีรายละเอียดเพิ่มเติมจากผู้พัฒนา เดี๋ยวกลับมาแก้เพิ่มให้ภายหลังครับ
Want us to set this up?
Get help with server setup, configuration, migration, or troubleshooting. Save time for the work that matters.
Hit something like this? Stuck somewhere?
Come trade notes on the LinuxThai board



Comments 0
No comments yet — be the first