embargo คือช่วงที่ทุกฝ่ายเก็บแพตช์ไว้ก่อน
ช่องโหว่ร้ายแรงแบบนี้มักเปิดเผยแบบประสานงานกัน (coordinated disclosure) นักวิจัยแจ้งผู้ดูแลแบบลับ ๆ ผู้ดูแลเขียนแพตช์ แล้วส่งให้คนที่ต้องเอาไปแจกต่อได้ดูก่อน เช่น distro อย่าง Ubuntu และ Debian, ผู้ให้บริการ hosting, คนทำ Docker image และบริษัทด้าน security ทุกฝ่ายตกลงกันว่าจะยังไม่ปล่อยอะไรออกมาจนถึงเวลาที่นัดไว้
เหตุผลคือแพตช์ที่ออกมาแล้วก็บอกคนโจมตีด้วยว่าบั๊กอยู่ตรงไหน พอเห็น diff ก็เริ่มเขียน exploit ได้ทันที ถ้าทุกเจ้าปล่อยพร้อมกัน เราที่ใช้ PHP จาก ondrej PPA, จาก Ubuntu เอง หรือจาก hosting ก็ได้แพตช์ในวันเดียวกับที่คนโจมตีเริ่มรู้ ถ้าเจ้าหนึ่งปล่อยก่อน คนโจมตีก็ได้เริ่มก่อนขณะที่คนส่วนใหญ่ยังไม่มีอะไรให้อัปเดต
ครั้งนี้ Nils Adermann กรรมการของ PHP Foundation บอกว่ามีผู้ให้บริการเกือบร้อยรายช่วยกันเตรียมแพตช์อยู่ และตอนนั้น distro ก็ยังทำ package ไม่เสร็จ
Chainguard ปล่อย image ก่อนเวลานัดกว่าหกชั่วโมง
Dan Lorenc CEO ของ Chainguard บริษัทที่ทำ container image ที่ดูแลเรื่องช่องโหว่ให้ ได้เล่าลำดับเหตุการณ์ฝั่งตัวเองไว้บน LinkedIn
- วันศุกร์ที่ 16 ต.ค. นักวิจัยที่เจอบั๊กบอก Chainguard ว่ากำลังจะมีเรื่องของ PHP คืนนั้นเครื่องมือของ Chainguard กับโมเดล AI ระดับแนวหน้าก็หาบั๊กตัวเดียวกันเจอเอง จาก prompt ธรรมดา ๆ
- วันเสาร์ที่ 17 Chainguard ได้รายละเอียดเต็ม และช่วยทดสอบแพตช์
- วันจันทร์และอังคาร ข่าวเริ่มหลุด คืนวันอังคารตามเวลาฝั่งอเมริกา Lorenc บอกว่าผู้ให้บริการด้าน security หลายเจ้าในกลุ่มยืนยันว่ามีการโจมตีจริงแล้ว หลังคุยกับนักวิจัยคนอื่นทางวิดีโอคอล เขาจึงตัดสินใจปล่อย build ที่แพตช์แล้ว และบอกว่าแจ้งกลุ่มทันที
เหตุผลที่เขาให้มีสามข้อ บั๊กหาเจอง่ายมาก ข้อมูลของแพตช์หลุดออกไปเยอะแล้ว และมีหลักฐานว่ามีคนโจมตีจริง เขาบอกว่าแนวทางของ coordinated disclosure ยอมให้ปล่อยก่อนเวลาได้เมื่อมีการโจมตีจริง และ image ที่ปล่อยก็เปิดให้ทุกคนใช้ ไม่ได้ให้แค่ลูกค้า Lorenc ยังชมผู้ดูแล PHP ว่าทำงานได้ดีมากในสถานการณ์ที่กดดัน และยอมรับว่าการตัดสินใจของเขาเพิ่มภาระให้ทีมนั้น
ตามที่ PHP Foundation บันทึกไว้ Chainguard ปล่อย image ตอน 14:41 น. ของวันที่ 21 ต.ค. ตามเวลาไทย ส่วน release ทางการคือ 21:00 น. ซึ่งก็เป็นเวลาที่ถูกเลื่อนมาเร็วขึ้นหนึ่งวันแล้วเพราะข่าวหลุด ลำดับเหตุการณ์ทั้งหมดของฝั่ง PHP อยู่ในโพสต์ PHP2Shell แพตช์ออกแล้ว
PHP Foundation บอกว่ายังไม่มี exploit ที่ใช้ได้จริง
Adermann ตอบใต้โพสต์ของ Lorenc ว่าเขาเป็นคนเขียนแถลงการณ์ของ PHP Foundation เอง และ Lorenc เล่าไม่ตรงกับที่เกิดขึ้น
- ไม่มี exploit ที่ยืนยันแล้ว ที่มีคนรายงานใน Slack ของกลุ่มคือคนที่ลองยิงและพยายามโจมตี จนถึงตอนปล่อยแพตช์ก็ยังไม่มีรายงานว่าใครยิงสำเร็จ
- embargo ถูกทบทวนตลอด ทุกครั้งที่มีข้อมูลใหม่เข้ามา ทีมก็ชั่งกันใหม่ว่าควรเลื่อนเวลาไหม
- Chainguard ตัดสินใจเองฝ่ายเดียว โดยไม่ได้คุยกับทีม PHP ซึ่งขัดกับที่ Lorenc บอกว่าแจ้งกลุ่มทันที ทั้งสองโพสต์ไม่ได้บอกชัดว่าแจ้งใครและแจ้งเมื่อไหร่
แถลงการณ์ของ Foundation เขียนว่าการปล่อยก่อนเวลาครั้งนี้มองข้ามงานหลายสัปดาห์ของหลายฝ่ายที่ร่วมกันเตรียมการเปิดเผย และทีม security ไม่พบ exploit ที่ใช้งานได้จริงในตอนที่ปล่อยแพตช์
ใต้โพสต์ของ Lorenc ความเห็นก็แบ่งเป็นสองฝั่ง คนหนึ่งชี้ว่า image ของ Chainguard ไม่ช่วยคนที่ไม่ได้รัน PHP ใน container เลย บางคนถามว่าควรให้ Chainguard ได้รับแจ้งช่องโหว่ล่วงหน้าอีกไหม ส่วนอีกฝั่งมองว่าในเมื่อหลายคนรู้แล้ว การเปิดเผยคือทางที่เสียหายน้อยที่สุด
Eric Barnes มองว่าการปล่อยก่อนเวลาครั้งนี้ผิด
ผู้เขียนต้นฉบับเห็นด้วยกับ Foundation และให้เหตุผลไว้หลายข้อ
- embargo มีไว้ให้ distro, hosting และผู้ให้บริการอื่นมีแพตช์พร้อมในวินาทีที่เปิดเผย Chainguard ตัดสินใจโดยไม่มีทีม PHP แล้วปล่อยให้คนอื่นต้องรีบตามแก้กัน
- ถ้ารายงานที่ Lorenc อ้างเป็นแค่การลองยิงที่ไม่สำเร็จ ก็ใช้เป็นเหตุผลไม่ได้ เพราะการลองยิงเกิดขึ้นตลอดเวลา ถ้านับแบบนั้น embargo ทุกครั้งก็หมดความหมาย
- หกชั่วโมงที่ได้มาตกเป็นภาระของผู้ดูแลและคนทำ package ที่ทำงานกับแพตช์นี้มาหลายสัปดาห์
- Lorenc เขียนว่า "We're all on one team here" ผู้เขียนตอบว่าถ้าเป็นทีมเดียวกันจริง สมาชิกคนหนึ่งไม่ควรเปลี่ยนแผนโดยไม่มีเจ้าของงาน และควรบอกก่อน ไม่ใช่บอกทีหลัง
ฝั่ง Chainguard มีมุมของตัวเองเรื่อง embargo มาก่อนหน้านี้แล้ว ในบทความ Follow the money เมื่อเดือนกรกฎาคม Lorenc อธิบายว่า Athena ตัวกลางรับแจ้งช่องโหว่ของ Chainguard มอง embargo เป็นต้นทุนที่ต้องคิดราคา เพราะระหว่างนั้นยังส่งแพตช์ให้ลูกค้าไม่ได้ และตั้งราคาให้คนแจ้งช่องโหว่เลือก embargo ที่สั้นลง
เรื่องนี้บอกอะไรกับคนที่ดูแลเว็บ PHP เอง
เว็บ Laravel ส่วนใหญ่ที่เราดูแลไม่ได้ใช้ image ของ Chainguard แต่ใช้ PHP จาก PPA, จาก distro หรือจาก hosting ซึ่งได้แพตช์ตามเวลาที่นัดกัน การปล่อยก่อนเวลาครั้งนี้จึงไม่ได้ทำให้เว็บของเราปลอดภัยเร็วขึ้น แต่ทำให้ diff ของแพตช์ออกไปอยู่ในมือคนโจมตีเร็วขึ้นหกชั่วโมง
อีกเรื่องที่ทั้งสองฝั่งเห็นตรงกันคือบั๊กแบบนี้หาเจอง่ายขึ้นมากเมื่อมี AI ช่วย Lorenc เรียกสิ่งนี้ว่า "the new normal" ถ้าช่วงเวลาระหว่างข่าวหลุดกับแพตช์ออกจะสั้นลงเรื่อย ๆ สิ่งที่เราเตรียมได้คือรู้ไว้ก่อนว่าเครื่องไหนได้ PHP มาจากช่องทางไหน และอัปเดตแล้ว restart อะไรบ้าง วิธีไล่เช็คเขียนไว้ในโพสต์ PHP2Shell ช่องโหว่ RCE ใน PHP core พอประกาศล่วงหน้าของ php.net ออกมาครั้งหน้า เราก็แค่จองเวลาไว้อัปเดตทันทีที่แพตช์ปล่อย
ข้อโต้แย้งทั้งหมด พร้อมลิงก์ไปโพสต์ของแต่ละฝั่ง อ่านต่อได้ที่บทความต้นฉบับของ Eric Barnes บน PHP News ครับ






