Obsidian เพิ่งเผยแพร่รายละเอียดเกี่ยวกับแนวทางในการลดความเสี่ยงจากการโจมตี supply chain โดยเน้นการพึ่งพา dependencies น้อยที่สุดและการปฏิบัติในการตรวจสอบโค้ดอย่างระมัดระวัง อย่างไรก็ตาม การประกาศนี้ได้จุดประกายการถกเถียงอย่างมีนัยสำคัญในชุมชนนักพัฒนาเกี่ยวกับช่องโหว่ด้านความปลอดภัยที่เห็นได้ชัด นั่นคือการเข้าถึงข้อมูลผู้ใช้ของ third-party plugins แบบไม่จำกัด
แนวทางการจัดการ Dependency ของ Obsidian:
- จำนวน core dependencies น้อยเมื่อเทียบกับแอปพลิเคชันที่คล้ายกัน
- การ pin version พร้อม committed lockfiles เพื่อให้ได้ build ที่แน่นอน
- ไม่มีการรัน postinstall scripts
- การตรวจสอบ changelog ด้วยตนเองสำหรับการอัปเดต dependency ทั้งหมด
- รอบการอัปเกรดที่ล่าช้าเพื่อให้ชุมชนสามารถตรวจพบแพ็กเกจที่เป็นอันตรายได้
- ฟีเจอร์อย่าง Bases และ Canvas ถูกพัฒนาขึ้นใหม่ทั้งหมดแทนที่จะใช้ third-party libraries
โมเดลความปลอดภัยของ Plugin ถูกวิจารณ์
ในขณะที่ Obsidian โอ้อวดการจัดการ dependency อย่างระมัดระวังสำหรับแอปพลิเคชันหลัก สมาชิกชุมชนได้เน้นย้ำถึงความขัดแย้งที่สำคัญ แอปจดบันทึกยอดนิยมนี้พึ่งพา community plugins เป็นอย่างมากสำหรับฟังก์ชันการทำงานส่วนใหญ่ แต่ plugins เหล่านี้ทำงานโดยปราศจากข้อจำกัดด้านความปลอดภัยเกือบทั้งหมด ผู้ใช้ค้นพบว่า plugins ของ Obsidian มีการเข้าถึงแบบสมบูรณ์และไม่จำกัดไม่เพียงแต่กับไฟล์ vault เท่านั้น แต่อาจรวมถึงไฟล์ใดๆ ในเครื่องของผู้ใช้ด้วย
สิ่งนี้สร้างความขัดแย้งที่ Obsidian ควบคุม dependencies ของตัวเองอย่างระมัดระวัง ในขณะที่อนุญาตให้มีการรันโค้ด third-party แบบไม่จำกัดผ่าน plugins ชุมชนได้ชี้ให้เห็นว่าผู้ใช้ส่วนใหญ่พึ่งพา plugins อย่าง Templater และ Dataview สำหรับฟังก์ชันการทำงานพื้นฐาน ทำให้ระบบนิเวศ plugin เป็นสิ่งจำเป็นมากกว่าเป็นตัวเลือก
ข้อกังวลด้านความปลอดภัยของปลั๊กอิน:
- ปลั๊กอินมีสิทธิ์เข้าถึงไฟล์ทั้งหมดใน vault โดยไม่มีข้อจำกัด
- มีความเป็นไปได้ที่จะเข้าถึงไฟล์ใดๆ ในเครื่องของผู้ใช้
- ไม่มีระบบการอนุญาตแบบเดียวกับ browser extensions
- ปลั๊กอินที่จำเป็น ( Templater , Dataview ) ต้องใช้สำหรับการทำงานพื้นฐาน
- ข้อเสนอแนะจากชุมชนรวมถึงการอนุญาตแบบ manifest-based และแนวทาง sandboxing
ระบบ Permission ที่หายไป
การอภิปรายมุ่งเน้นไปที่การขาดระบบที่ใช้ permission คล้ายกับ browser extensions สมาชิกชุมชนแนะนำว่า Obsidian สามารถใช้ระบบ manifest ที่ plugins ประกาศ permissions ที่ต้องการล่วงหน้า โดยระบบจะบล็อกความพยายามในการเข้าถึงที่ไม่ได้รับอนุญาต สิ่งนี้จะให้ความโปร่งใสแก่ผู้ใช้เกี่ยวกับสิ่งที่แต่ละ plugin สามารถเข้าถึงได้ และอนุญาตให้มีการยินยอมอย่างมีข้อมูล
นักพัฒนาบางคนได้สังเกตว่าแอปพลิเคชันอื่นๆ เผชิญกับความท้าทายที่คล้ายกัน VSCode, Vim และ Emacs ก็ให้การเข้าถึงระบบอย่างกว้างขวางแก่ plugins เช่นกัน อย่างไรก็ตาม นักวิจารณ์โต้แย้งว่าแอปพลิเคชันจดบันทึกส่วนบุคคลมักมีข้อมูลที่ละเอียดอ่อนมากกว่า code repositories ทำให้ผลกระทบด้านความปลอดภัยรุนแรงกว่า
สิ่งที่คุณอาจใส่ลงใน Obsidian (ความคิดส่วนตัว รายการบันทึกประจำวัน ฯลฯ) อาจละเอียดอ่อนมากกว่าโค้ด
โซลูชันทางเทคนิคและวิธีแก้ปัญหา
สมาชิกชุมชนหลายคนได้แบ่งปันแนวทางปฏิบัติเพื่อลดความเสี่ยงเหล่านี้ ผู้ใช้บางคนได้ใช้ AppArmor profiles หรือใช้การติดตั้ง Flatpak ที่มี permissions จำกัดผ่านเครื่องมืออย่าง Flatseal คนอื่นๆ ได้แนะนำแนวทาง sandboxing ที่เข้มงวดซึ่งจะอนุญาตให้ plugins เข้าถึงบันทึกในขณะที่บล็อกการเข้าถึง network และ disk เพื่อป้องกันการขโมยข้อมูล
ชุมชนยังได้อภิปรายถึงความเป็นไปได้ของระบบ plugin แบบชั้น คล้ายกับแนวทางของ Arch Linux ที่มี community และ official repositories สิ่งนี้จะให้ระดับการตรวจสอบและการรับประกันความปลอดภัยที่แตกต่างกันสำหรับหมวดหมู่ plugin ต่างๆ
ผลกระทบในวงกว้าง
การถกเถียงสะท้อนความตึงเครียดที่กว้างขึ้นในการพัฒนาซอฟต์แวร์ระหว่างฟังก์ชันการทำงานและความปลอดภัย ในขณะที่แนวปฏิบัติการจัดการ dependency หลักของ Obsidian มีความมั่นคง ระบบนิเวศ plugin แสดงถึงพื้นผิวการโจมตีที่สำคัญซึ่งมาตรการความปลอดภัยปัจจุบันไม่ได้จัดการ การอภิปรายเน้นให้เห็นว่าแม้แต่แนวปฏิบัติด้านความปลอดภัยที่มีเจตนาดีก็สามารถถูกทำลายได้โดยการตัดสินใจทางสถาปัตยกรรมที่ให้ความสำคัญกับการขยายได้มากกว่าการกักกัน
การตอบสนองของชุมชนแสดงให้เห็นว่าผู้ใช้มีความตระหนักมากขึ้นเกี่ยวกับผลกระทบด้านความปลอดภัยและคาดหวังกลไกการป้องกันที่ซับซ้อนมากขึ้น แม้ในแอปพลิเคชันที่พวกเขาใช้เพื่อประสิทธิภาพส่วนบุคคล แนวโน้มนี้อาจผลักดันให้แอปพลิเคชันจดบันทึกเคลื่อนไปสู่โมเดลความปลอดภัยที่แข็งแกร่งมากขึ้นเมื่อความคาดหวังของผู้ใช้พัฒนาไป
อ้างอิง: Less is safer: how Obsidian reduces the risk of supply chain attacks