ไม่กี่วันที่ผ่านมา ข่าวแจ้งว่ามีการระบุช่องโหว่ที่สำคัญ en ผู้จัดการการพึ่งพาของ แต่ง (CVE-2021-29472) ที่อนุญาตให้คุณรันคำสั่งตามอำเภอใจบนระบบเมื่อประมวลผลแพ็กเกจที่มีค่า URL ที่สร้างขึ้นเป็นพิเศษซึ่งกำหนดทิศทางในการดาวน์โหลดซอร์สโค้ด
ปัญหาปรากฏในคอมโพเนนต์ GitDriver, SvnDriver และ HgDriver ใช้กับระบบควบคุมแหล่ง Git, Subversion และ Mercurial ช่องโหว่ได้รับการแก้ไขแล้วใน Composer เวอร์ชัน 1.10.22 และ 2.0.13
โดยเฉพาะอย่างยิ่งที่เก็บแพ็กเกจ Packagist เริ่มต้นของนักแต่งเพลงซึ่งมีแพ็คเกจนักพัฒนา PHP 306.000 แพ็คเกจและมีการดาวน์โหลดมากกว่า 1.400 พันล้านครั้งต่อเดือนจะได้รับผลกระทบเป็นพิเศษ
ในระบบนิเวศ PHP Composer เป็นเครื่องมือหลักในการจัดการและติดตั้งการอ้างอิงซอฟต์แวร์ ทีมพัฒนาทั่วโลกใช้เพื่อลดขั้นตอนการอัปเกรดและทำให้แอปพลิเคชันทำงานได้อย่างง่ายดายในทุกสภาพแวดล้อมและทุกเวอร์ชัน
การทดลองแสดงให้เห็นว่าหากมีข้อมูลเกี่ยวกับปัญหาผู้โจมตีสามารถเข้าควบคุมโครงสร้างพื้นฐานของ Packagist และสกัดกั้นข้อมูลประจำตัวของผู้ดูแลหรือเปลี่ยนเส้นทางการดาวน์โหลดแพ็กเกจไปยังเซิร์ฟเวอร์ของบุคคลที่สามโดยจัดเตรียมการจัดส่งแพ็กเกจที่แตกต่างกันไปพร้อมกับการเปลี่ยนแปลง เป็นอันตรายเพื่อแทนที่แบ็คดอร์ระหว่างการติดตั้งการอ้างอิง
อันตรายต่อผู้ใช้มี จำกัด เนื่องจากเนื้อหาของ composer.json มักจะถูกกำหนดโดยผู้ใช้และลิงก์ไปยังแหล่งที่มาจะถูกส่งผ่านเมื่อเข้าถึงที่เก็บของบุคคลที่สามซึ่งโดยปกติจะเชื่อถือได้ การโจมตีหลักตกอยู่ในพื้นที่เก็บข้อมูล Packagist.org และบริการ Private Packagist ที่เรียกนักแต่งเพลงด้วยการถ่ายโอนข้อมูลที่ได้รับจากผู้ใช้ ผู้โจมตีสามารถรันโค้ดของพวกเขาบนเซิร์ฟเวอร์ Packagist ได้โดยการทิ้งแพ็คเกจที่สร้างขึ้นมาเป็นพิเศษ
ทีม Packagist แก้ไขช่องโหว่ภายใน 12 ชั่วโมงหลังจากได้รับแจ้ง ของช่องโหว่ นักวิจัยแจ้งกับนักพัฒนา Packagist เป็นการส่วนตัวเมื่อวันที่ 22 เมษายนและปัญหาได้รับการแก้ไขในวันเดียวกัน การอัปเดตนักแต่งเพลงสาธารณะพร้อมการแก้ไขช่องโหว่ได้รับการเผยแพร่เมื่อวันที่ 27 เมษายนและมีการเปิดเผยรายละเอียดในวันที่ 28 เมษายน การตรวจสอบบันทึกบนเซิร์ฟเวอร์ของ Packagist ไม่ได้เปิดเผยกิจกรรมที่น่าสงสัยใด ๆ ที่เกี่ยวข้องกับช่องโหว่
ข้อผิดพลาดในการฉีดอาร์กิวเมนต์เป็นข้อผิดพลาดที่น่าสนใจมากซึ่งมักถูกมองข้ามในระหว่างการตรวจสอบโค้ดและมองข้ามไปโดยสิ้นเชิงในการโต้ตอบกล่องดำ
ปัญหาเกิดจากข้อผิดพลาดในรหัสตรวจสอบ URL ในไฟล์ root composer.json และในลิงค์ดาวน์โหลดซอร์ส จุดบกพร่องมีอยู่ในโค้ดตั้งแต่เดือนพฤศจิกายน 2011 Packagist ใช้เลเยอร์พิเศษเพื่อจัดการการดาวน์โหลดโค้ดโดยไม่ผูกมัดกับระบบควบคุมซอร์สเฉพาะซึ่งดำเนินการโดยการเรียก "fromShellCommandline" พร้อมอาร์กิวเมนต์บรรทัดคำสั่ง
หัวใจของปัญหาคือเมธอด ProcessExecutor อนุญาตให้คุณระบุพารามิเตอร์การโทรเพิ่มเติมใน URL การหลบหนีดังกล่าวหายไปในไดรเวอร์ GitDriver.php, SvnDriver.php และ HgDriver.php การโจมตี GitDriver.php ถูกขัดขวางโดยข้อเท็จจริงที่ว่าคำสั่ง "git ls-remote" ไม่สนับสนุนการระบุอาร์กิวเมนต์เพิ่มเติมหลังพา ธ
การโจมตีบน HgDriver.php เกิดขึ้นได้โดยการส่งผ่านพารามิเตอร์ "–config" ไปยังยูทิลิตี้ "hq" ซึ่งอนุญาตให้จัดการการดำเนินการของคำสั่งใด ๆ โดยจัดการกับการกำหนดค่า "alias.identify"
ด้วยการส่งแพ็กเกจทดสอบที่มี URL ที่คล้ายกันไปยัง Packagist นักวิจัยจึงมั่นใจได้ว่าหลังจากเผยแพร่แล้วเซิร์ฟเวอร์ของพวกเขาได้รับคำขอ HTTP จากเซิร์ฟเวอร์ Packagist บน AWS ซึ่งมีรายการไฟล์ในไดเร็กทอรีปัจจุบัน
ควรสังเกตว่าผู้ดูแลไม่ได้ระบุสัญญาณใด ๆ ของการใช้ประโยชน์จากช่องโหว่นี้ก่อนหน้านี้ในตัวอย่างสาธารณะของผู้บรรจุหีบห่อ
สุดท้ายหากคุณสนใจที่จะทราบข้อมูลเพิ่มเติมคุณสามารถปรึกษารายละเอียดได้ ในลิงค์ต่อไปนี้.