ปลั๊กอินที่ได้รับการดูแลควรถูกระงับจากที่เก็บ WordPress เมื่อมีปัญหาด้านความปลอดภัยหรือไม่?

เผยแพร่แล้ว: 2020-03-12

เมื่อวันที่ 27 กุมภาพันธ์ 2020 เวลา 21:34 น. (CET) เราได้รับอีเมลแจ้งว่าบันทึกกิจกรรม WP ของปลั๊กอินนั้น “ถูก ถอนออกจากไดเรกทอรีปลั๊กอิน WordPress.org ชั่วคราว เนื่องจากการใช้ประโยชน์”

เราส่งการแก้ไขในวันศุกร์ที่ 28 กุมภาพันธ์ 2020 เวลา 16:08 น. เราใช้เวลาเพียง 16.5 ชั่วโมงในการเผยแพร่การแก้ไข เราจะแก้ไขปัญหาได้เร็วกว่านี้มากหากสิ่งนี้เกิดขึ้นในช่วงเวลาทำงานปกติของเรา (เราตั้งอยู่ในยุโรป) เนื่องจากเรามีเวลาตอบกลับ (ข้อมูลอ้างอิง) ที่ดีมากสำหรับการสนับสนุน

ปลั๊กอินของเราถูกคืนสถานะในวันจันทร์ที่ 2 มีนาคม 2020 เวลา 13:00 น. นั่นคือ 69 ชั่วโมงหลังจากที่เราส่งการแก้ไข สิ่งสำคัญคือต้องทราบว่าทีมงานใช้เวลานานมากในการคืนสถานะปลั๊กอินเนื่องจากเป็นช่วงสุดสัปดาห์

บันทึกกิจกรรม WP ถูกถอนออกจาก repo

ทำไมฉันถึงเขียนสิ่งนี้

ฉันต้องการชี้ให้เห็นว่าฉันเชื่อว่าปลั๊กอินที่ไม่ได้รับการดูแลซึ่งมีปัญหาด้านความปลอดภัยควรถูกระงับจากที่เก็บ WordPress นอกจากนี้ ฉันมีความเคารพอย่างสูงต่องานที่อาสาสมัครในทีมตรวจสอบปลั๊กอินทำ และฉันยังรับผิดชอบอย่างเต็มที่สำหรับปัญหาด้านความปลอดภัยที่รายงาน

อย่างไรก็ตาม ฉันเชื่อว่าปัญหาด้านความปลอดภัยที่รายงานในปลั๊กอินที่ได้รับการดูแลอาจได้รับการจัดการที่ดีขึ้น เนื่องจากวิธีการจัดการในขณะนี้ ชื่อเสียงของปลั๊กอินจึงได้รับผลกระทบเชิงลบอย่างมาก และผู้ใช้และเว็บไซต์ของตนตกอยู่ในความเสี่ยง ดังนั้น ที่ส่วนท้ายของโพสต์นี้ ฉันเน้นถึงการปรับปรุงที่เป็นไปได้บางประการที่อาจช่วยได้ และฉันคิดว่าควรนำมาพิจารณา แนวคิดคือการทำให้ผู้ใช้มีความเสี่ยงน้อยลง และเพื่อลดผลกระทบต่อปลั๊กอินและนักพัฒนา

ในโพสต์นี้ ฉันยังบันทึกรายละเอียดทั้งหมดของสิ่งที่เกิดขึ้น และอธิบายช่องโหว่ของตัวพิมพ์เล็กที่มีความรุนแรงต่ำที่รายงานในปลั๊กอินของเรา

ขั้นตอนในการรายงานปัญหาความปลอดภัยของปลั๊กอิน WordPress คืออะไร?

จากแนวทางอย่างเป็นทางการในคู่มือปลั๊กอิน:

คุณควรพยายามติดต่อนักพัฒนาซอฟต์แวร์โดยตรงทุกครั้งก่อนที่คุณจะรายงานปลั๊กอินให้เราทราบ (แม้ว่าเราเข้าใจดีว่าสิ่งนี้อาจเป็นเรื่องยาก – ตรวจสอบซอร์สโค้ดของปลั๊กอินก่อน นักพัฒนาหลายคนระบุอีเมลของพวกเขาไว้) หากคุณไม่สามารถติดต่อพวกเขาเป็นการส่วนตัวได้ โปรดติดต่อเราโดยตรงและเราจะช่วยคุณ

เกิดอะไรขึ้นในกรณีของเรา?

เราชี้แจงอย่างชัดเจนในปลั๊กอินที่พัฒนาปลั๊กอิน แค่ดูที่หน้าปลั๊กอินบนที่เก็บแล้วคุณจะเข้าใจ! นอกจากนี้เรายังทำให้ง่ายต่อการติดต่อเรา

อย่างไรก็ตาม ไม่มีใครรายงานปัญหาด้านความปลอดภัยให้เราทราบก่อนที่ปลั๊กอินจะถูกถอนออกจากที่เก็บปลั๊กอินชั่วคราว ดังนั้น มีคนรายงานปัญหาไปยังทีมตรวจสอบปลั๊กอินของ WordPress และพวกเขาได้ถอนปลั๊กอินของเราออกจากที่เก็บชั่วคราวโดยไม่ต้องแจ้งให้ทราบล่วงหน้า

ก่อนที่เราจะเจาะลึกลงไปในสาเหตุและอะไร และอะไรดี ไม่ดี และอะไรที่สามารถปรับปรุงได้ มาดูช่องโหว่ของปลั๊กอินและคำอธิบายสั้นๆ ว่าเราเป็นใคร

ช่องโหว่ของปลั๊กอินคืออะไร?

เรามีวิซาร์ดการติดตั้งในบันทึกกิจกรรม WP เพื่อช่วยให้ผู้ใช้กำหนดค่าปลั๊กอิน การตั้งค่าหนึ่งในวิซาร์ดช่วยให้คุณอนุญาตให้ผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบอ่านบันทึกกิจกรรมได้

ตัวช่วยสร้างการติดตั้งบันทึกกิจกรรม WP

อย่างไรก็ตาม เราทำผิดพลาด เราไม่ได้ตรวจสอบว่าผู้ใช้ที่เรียกใช้ตัวช่วยสร้างได้รับการพิสูจน์ตัวตนแล้วหรือไม่ ดังนั้น ผู้ใช้ที่ไม่ผ่านการตรวจสอบสิทธิ์สามารถเรียกใช้ตัวช่วยสร้างและอนุญาตให้ผู้ใช้หรือบทบาทอื่นเข้าถึงการตั้งค่าของปลั๊กอินได้ อย่างไรก็ตาม นี่เป็นปัญหาความรุนแรงต่ำของ edge case

เหตุใดจึงเป็นปัญหาด้านความปลอดภัยของเคส Edge ที่มีความรุนแรงต่ำ

ผู้โจมตีสามารถใช้ประโยชน์จากสิ่งนี้ได้ก็ต่อเมื่อ:

  • ตัวช่วยสร้างการติดตั้งไม่เคยเสร็จสิ้นโดยตัวติดตั้ง
  • ผู้โจมตีมีผู้ใช้อยู่แล้ว / มีการเข้าถึงผู้ใช้บนเว็บไซต์
  • ผู้โจมตีสามารถเข้าถึงการตั้งค่าของปลั๊กอินและบันทึกกิจกรรมเท่านั้น

โดยใช้ประโยชน์จากปัญหาด้านความปลอดภัยนี้ ผู้โจมตีจะไม่สามารถเข้าถึงสิทธิ์อื่นๆ บนเว็บไซต์ WordPress ได้ ดังนั้นการหาช่องโหว่นี้จึงไม่ส่งผลเสียต่อพฤติกรรมและการทำงานของเว็บไซต์เอง

หลักฐานของแนวคิด

POC นั้นง่ายมาก เยี่ยมชมหน้านี้ในฐานะผู้ใช้ที่ไม่ผ่านการตรวจสอบสิทธิ์:

http://example.com/wp-admin/admin-post.php?page=wsal-setup&current-step=access

นี่คือขั้นตอนของวิซาร์ดที่ให้คุณระบุว่าใครสามารถดูบันทึกได้ ค้นหา '_wpnonce' nonce ในซอร์สของหน้า HTML คัดลอกและแทรกลงในคำสั่ง curl ต่อไปนี้:

$ curl 'http://example.com/wp-admin/admin-post.php?page=wsal-setup&current-step=access' -d '_wpnonce=INSERT-NONCE-HERE&wsal-access=yes&editors%5B%5D=' Subscriber&save_step=ต่อไป'

เมื่อคุณเข้าสู่ระบบในฐานะสมาชิกและคุณจะสามารถเข้าถึงการตั้งค่าปลั๊กอินได้อย่างเต็มที่

เหตุใดเราจึงคิดว่าคดีนี้ถูกจัดการอย่างไม่ถูกต้อง

ในอีเมลที่เราส่งไปมีดังนี้

เราไม่ได้ปิดปลั๊กอินอย่างไม่ใส่ใจ และเมื่อพูดถึงปัญหาด้านความปลอดภัย เราพยายามสร้างสมดุลระหว่างปริมาณผู้ใช้และประวัติของนักพัฒนากับความรุนแรงและโอกาสที่จะเกิดความเสียหายของรายงาน

อย่างไรก็ตาม ฉันคิดว่าปลั๊กอินของเราถูกถอนเร็วเกินไป จนถึงตอนนี้;

  1. เมื่อเรามีปัญหาในอดีต เรามักจะแก้ไขภายในสองสามชั่วโมง เราทำเช่นเดียวกันในครั้งนี้
  2. เราตอบกลับตรงเวลาเสมอเมื่อทีมตรวจสอบปลั๊กอินติดต่อมา
  3. ปัญหาด้านความปลอดภัยส่งผลกระทบต่อปลั๊กอินของเราเท่านั้น (ความรุนแรงต่ำ) และเป็นกรณีขอบ
  4. ไม่สามารถใช้ประโยชน์จากปัญหาด้านความปลอดภัยได้โดยอัตโนมัติ
  5. ความเสียหาย เพียงอย่างเดียวที่ผู้โจมตีสามารถทำได้คือเปลี่ยนการตั้งค่าปลั๊กอิน อ่านบันทึกกิจกรรม หรือล้างข้อมูลออก

นักพัฒนาคนอื่นๆ คิดอย่างไรกับสถานการณ์ดังกล่าว

พวกเราส่วนใหญ่ได้อ่านบทความ ทวีต หรือข้อความบนโซเชียลมีเดียเกี่ยวกับปัญหาที่คล้ายกันแล้ว อย่างไรก็ตาม ฉันต้องการค้นหาด้วยตัวเองว่าคนอื่นๆ คิดอย่างไรกับเรื่องนี้ โดยเฉพาะนักพัฒนา ฉันคิดว่านี่เป็นสิ่งสำคัญเพราะมีบางอย่างที่ฉันไม่เห็น

ในการเริ่มต้น ฉันได้ส่งอีเมลไปยังบุคคลที่ระบุปัญหาดังกล่าว และขอบคุณเขาสำหรับการเปิดเผยอย่างมีความรับผิดชอบ คำตอบของเขาคือ:

“ดีใจที่เห็นคุณแก้ไขปัญหาในปลั๊กอินได้อย่างรวดเร็ว BTW ฉันสังเกตว่าคนที่ wordpress.org ปิดตัวไปสองสามวัน ซึ่งค่อนข้างรุนแรงและไม่จำเป็นจริงๆ” - Jerome Bruandet

ฉันยังได้ทำแบบสำรวจความคิดเห็นเล็กๆ เกี่ยวกับกลุ่ม Facebook ที่ขายผลิตภัณฑ์ WordPress แม้ว่ากลุ่มนี้จะเล็ก แต่สมาชิกส่วนใหญ่เป็นผู้พัฒนาปลั๊กอินและธีม จากการสำรวจความคิดเห็น เราจะเห็นได้ว่านักพัฒนาเห็นพ้องต้องกันอย่างเป็นเอกฉันท์ว่า ในกรณีที่มีปัญหาความรุนแรงระดับต่ำถึงปานกลาง นักพัฒนาควรได้รับการติดต่อและให้โอกาสทางแก้ไขและไม่ถอนปลั๊กอิน:

นักพัฒนาปลั๊กอิน WordPress สำรวจความคิดเห็นในกลุ่ม facebook

ขั้นตอนเหล่านี้จะปรับปรุงได้อย่างไร?

ตามความรู้ของฉัน ไม่มีขั้นตอนที่จัดทำเป็นเอกสารเมื่อมีคนรายงานปัญหาด้านความปลอดภัยในปลั๊กอิน หากเป็นกรณีนี้ ขั้นตอนดังต่อไปนี้อาจช่วยนักพัฒนาและทำให้ผู้คนมีความเสี่ยงน้อยลง

ติดต่อผู้พัฒนาและตกลงแผนปฏิบัติการก่อนปิดปลั๊กอิน

ทีมตรวจสอบปลั๊กอินสามารถพยายามติดต่อนักพัฒนาและยืนยันช่องโหว่ก่อนที่จะปิดตัวลง นักพัฒนาควรตอบกลับพร้อมแผนปฏิบัติการ รวมถึงวันที่ที่เหมาะสมสำหรับการแก้ไข

หากจำเป็น ทีมตรวจสอบปลั๊กอินสามารถกำหนดเส้นตายได้ ตัวอย่างเช่น นักพัฒนาซอฟต์แวร์ควรมีเวลา 12 ถึง 24 ชั่วโมงในการแก้ไขปัญหา อย่างไรก็ตาม ในบางกรณีอาจต้องใช้เวลามากขึ้น ทั้งนี้ขึ้นอยู่กับเขตเวลาที่พวกเขาอยู่ ฯลฯ หากนักพัฒนาไม่ตอบสนอง ปลั๊กอินควรถูกถอนออกจากที่เก็บ

กำหนดความรุนแรงและประเภทของปัญหาด้านความปลอดภัย

นี้สามารถเปิดการอภิปราย อย่างไรก็ตาม ผู้ที่มีประสบการณ์ด้านความปลอดภัยเพียงเล็กน้อยสามารถบอกได้อย่างง่ายดายว่าปัญหาด้านความปลอดภัยที่รายงานสามารถใช้ประโยชน์ได้โดยอัตโนมัติหรือไม่ หากเป็นกรณีของ Edge หรือไม่ และผลกระทบของปัญหาดังกล่าวจากรายงาน Proof of Concept (POC) ที่รายงานไว้คืออะไร

ตรวจสอบว่านักพัฒนายึดติดกับแผนปฏิบัติการ

ควรมีการตรวจสอบเพื่อยืนยันว่านักพัฒนาส่งการแก้ไขตรงเวลาและยึดติดกับงานอื่น ๆ ที่รวมอยู่ในแผนปฏิบัติการ

การถอนปลั๊กอินที่ดูแลออกจากที่เก็บไม่ได้ช่วยอะไร

ในกรณีของปลั๊กอินที่ได้รับการดูแล การถอนออกจากที่เก็บจะส่งผลเสียมากกว่าผลดี ตัวอย่างเช่น;

  1. คุณทำให้เป็นสาธารณะว่าปลั๊กอินมีปัญหา ส่วนใหญ่อาจเป็นปัญหาด้านความปลอดภัย สิ่งนี้ทำให้เกิดการเตือนจำนวนมากและทำให้ปลั๊กอินสนใจ นี่ก็เหมือนกับการเชิญผู้โจมตีโดยบอกว่ามีบางอย่างในปลั๊กอินที่อาจใช้ประโยชน์ได้
  2. มันเปิดเผยฐานผู้ใช้ปลั๊กอินปัจจุบันเพราะในทันใดเว็บไซต์ของพวกเขากลายเป็นเป้าหมาย ผู้ใช้ส่วนใหญ่ไม่รู้ว่าควรทำอย่างไร โดยเฉพาะอย่างยิ่งหากฟังก์ชันของปลั๊กอินเป็นแกนหลักของเว็บไซต์และธุรกิจของตน
  3. คุณเพิ่มโอกาสในการชะลอการแก้ไข ซึ่งมักเกิดจากการขาดการสื่อสาร หรือเนื่องจากวันหยุดและวันหยุดสุดสัปดาห์

อาจมีคนโต้แย้งว่าการถอนปลั๊กอินออกจากที่เก็บเป็นการ หยุดการติดไวรัส ไม่ให้ แพร่กระจาย อย่างไรก็ตาม หากปัญหาด้านความปลอดภัยมีความรุนแรงต่ำ การแสวงหาประโยชน์จะไม่สามารถทำได้โดยอัตโนมัติ และต้องรับผิดชอบในการเปิดเผยข้อมูล ไม่มีความเสี่ยงที่เกี่ยวข้อง หรือความเสี่ยงนั้นต่ำมาก

คำเตือน: นี่ไม่ใช่การโจมตี

ฉันต้องการชี้ให้เห็นว่านี่ไม่ใช่การโจมตีทีมตรวจสอบปลั๊กอิน WordPress หรือใครก็ตามที่เกี่ยวข้องกับกระบวนการเหล่านี้ ฉันเคารพงานของพวกเขาโดยสุจริตและฉันรู้ว่าสิ่งที่พวกเขาทำนั้นทำด้วยความสุจริตใจ อย่างไรก็ตาม มีสถานที่สำหรับการปรับปรุงอย่างแน่นอน เช่นเดียวกับระบบและกระบวนการอื่นๆ ทั้งหมด

หลายคนอาจจะบอกฉันว่าถ้าฉันต้องการการเปลี่ยนแปลง ฉันควรเป็นอาสาสมัครแทนการเขียนโพสต์นี้

ฉันพยายามเข้าร่วมมาระยะหนึ่งแล้ว ฉันได้พูดคุยกับหลาย ๆ คนใน WordCamps เพื่อเข้าร่วม และฉันได้ตรวจสอบหน้าสร้างปลั๊กอิน WordPress สำหรับการโทรหาอาสาสมัคร อย่างไรก็ตาม ในช่วงไม่กี่ปีที่ผ่านมาพวกเขาไม่มีตำแหน่งงานว่าง เมื่อพวกเขาต้องการความช่วยเหลือ พวกเขาก็เพิ่มสมาชิกใหม่โดยการเชิญเท่านั้น