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

เผยแพร่แล้ว: 2019-03-02

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

ในวันจันทร์ที่ 25 กุมภาพันธ์ 2019 เราได้รับอีเมลสนับสนุนจากนักพัฒนาที่เป็นประโยชน์ซึ่งพบปัญหา GitHub บนที่เก็บ WooCommerce ปัญหานี้เกิดจากตัวแทนของบริษัทโฮสติ้งขนาดเล็กที่สังเกตเห็นกิจกรรมที่น่าสงสัยบนเซิร์ฟเวอร์ของตน ตัวแทนได้รวมบันทึกกิจกรรมที่เกี่ยวข้องซึ่งระบุถึงการโจมตีที่อาจเกิดขึ้นสองครั้ง และหนึ่งในนั้นกำลังกำหนดเป้าหมายปลั๊กอินที่รัน Freemius SDK

เนื่องจากเราให้ความสำคัญกับความปลอดภัยเป็นอย่างมาก เราจึงทำการตรวจสอบอย่างละเอียดในทันทีและยืนยันว่ามีช่องโหว่ใน SDK ของเรา

เนื่องจากช่องโหว่มีความรุนแรง เราจึงเริ่มดำเนินการแก้ไขทันที หลังจากนั้นเพียงไม่กี่ชั่วโมง เราก็ได้ปล่อยแท็กที่ได้รับการแก้ไข และแจ้งนักพัฒนาทั้งหมดที่ใช้ SDK เวอร์ชันที่มีช่องโหว่เพื่ออัปเดต SDK ในผลิตภัณฑ์ทั้งหมดของพวกเขาโดยเร็ว เรายังอัปเดตปัญหา GitHub ดั้งเดิมเพื่อให้ทีม WooCommerce ทราบ (ปัญหา GH ที่เราลบออกหลังจากไม่กี่ชั่วโมงเพื่อลดการเปิดเผย)

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

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

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

เนื่องจากชุมชนนักพัฒนาของเรากำลังอัปเดตปลั๊กอินและธีมเป็น SDK ที่แพตช์ใหม่ที่เราเปิดตัว เราพบปัญหาสองประการ:

  1. นักพัฒนาหลายคนไม่ได้รับอีเมลแจ้งเตือนของเรา เนื่องจากพวกเขาลงทะเบียนกับ Freemius ด้วยที่อยู่อีเมลที่พวกเขาไม่ได้ตรวจสอบ
  2. เราจงใจไม่ตั้งค่าสถานะแท็ก GitHub ที่แก้ไขแล้วว่าเป็นการเปิดตัวอย่างเป็นทางการเพื่อหลีกเลี่ยงการดึงดูดความสนใจ อย่างไรก็ตาม เราได้เรียนรู้ว่านักพัฒนาที่ใช้ Composer เพื่ออัปเดตไลบรารีของตนไม่ได้รับการอัปเดตล่าสุด เนื่องจาก packgist ดึงข้อมูลออกมาเท่านั้น เว้นแต่จะระบุแท็กอย่างชัดเจน

เพื่อเอาชนะปัญหาเหล่านั้น:

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

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

ข้อผิดพลาดที่เราทำและสิ่งที่คุณสามารถเรียนรู้ได้จากพวกเขา

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

เข้าสู่โหมดเงียบและแจ้งเตือนเฉพาะผู้ที่จำเป็นต้องรู้

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

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

อย่าเสียพลังงานไปกับ “โทรลล์ความปลอดภัย”

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

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

สถานะปัจจุบันของเหตุการณ์

นักพัฒนามากกว่า 60% ที่ใช้ SDK ของเราได้อัปเกรดเป็นเวอร์ชันแพตช์แล้ว นอกจากนี้ SDK ยังมาพร้อมกับกลไกพิเศษที่อนุญาตให้ปลั๊กอินหรือธีมที่รองรับ Freemius หลายตัวติดตั้งบนเว็บไซต์ WordPress เดียวกันเพื่อใช้ SDK เวอร์ชันล่าสุดได้หากมีการอัปเดตผลิตภัณฑ์ตัวใดตัวหนึ่งแล้ว นั่นเป็นสิ่งที่ดี

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

วิธีลดความเสี่ยงด้านความปลอดภัยในปลั๊กอิน / ธีม WordPress ของคุณ?

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

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

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

สรุป

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

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

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