46% ของแพ็คเกจ Python ในพื้นที่เก็บข้อมูล PyPI มีโค้ดที่อาจไม่ปลอดภัย

กลุ่มนักวิจัยจากมหาวิทยาลัย Turku (ฟินแลนด์) เผยแพร่ผลการวิเคราะห์แพ็คเกจในพื้นที่เก็บข้อมูล PyPI สำหรับการใช้โครงสร้างที่อาจเป็นอันตรายซึ่งอาจนำไปสู่ช่องโหว่ ในระหว่างการวิเคราะห์บรรจุภัณฑ์ 197 ชิ้น พบปัญหาด้านความปลอดภัยที่อาจเกิดขึ้นได้ 749 รายการ 46% ของบรรจุภัณฑ์มีปัญหาดังกล่าวอย่างน้อยหนึ่งปัญหา ปัญหาที่พบบ่อยที่สุด ได้แก่ ข้อบกพร่องที่เกี่ยวข้องกับการจัดการข้อยกเว้นและการใช้คุณลักษณะที่อนุญาตให้มีการทดแทนโค้ด

จากปัญหา 749 ที่ระบุนั้น 442 (41%) ถูกระบุว่าเป็นผู้เยาว์ 227 (30%) เป็นปัญหาปานกลาง และ 80 (11%) เป็นปัญหาอันตราย แพ็คเกจบางแพ็คเกจโดดเด่นจากฝูงชนและมีปัญหามากมาย ตัวอย่างเช่น แพ็คเกจ PyGGI ระบุปัญหา 2589 ปัญหา ส่วนใหญ่เกี่ยวข้องกับการใช้โครงสร้าง "try-ยกเว้น-pass" และแพ็คเกจ appengine-sdk พบปัญหา 2356 ปัญหา ปัญหาจำนวนมากยังปรากฏอยู่ในแพ็คเกจ genie.libs.ops, pbcore และ genie.libs.parser

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

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

ในบรรดาการทดสอบที่ใช้ในการศึกษานี้:

  • การใช้ฟังก์ชันที่อาจไม่ปลอดภัย exec, mktemp, eval, mark_safe ฯลฯ
  • การตั้งค่าสิทธิ์การเข้าถึงไฟล์ที่ไม่ปลอดภัย
  • การต่อซ็อกเก็ตเครือข่ายเข้ากับอินเทอร์เฟซเครือข่ายทั้งหมด
  • การใช้รหัสผ่านและกุญแจที่ระบุไว้ในรหัสอย่างเคร่งครัด
  • การใช้ไดเร็กทอรีชั่วคราวที่กำหนดไว้ล่วงหน้า
  • การใช้ pass และดำเนินการต่อในตัวจัดการข้อยกเว้นแบบ catch-all-style
  • การเปิดตัวแอปพลิเคชันเว็บตามเฟรมเวิร์กเว็บ Flask โดยเปิดใช้งานโหมดแก้ไขจุดบกพร่อง
  • การใช้วิธีการดีซีเรียลไลซ์ข้อมูลที่ไม่ปลอดภัย
  • ใช้ฟังก์ชันแฮช MD2, MD4, MD5 และ SHA1
  • การใช้รหัส DES และโหมดการเข้ารหัสที่ไม่ปลอดภัย
  • การใช้งาน HTTPSConnection ที่ไม่ปลอดภัยใน Python บางเวอร์ชัน
  • การระบุ file:// แบบแผนใน urlopen
  • การใช้ตัวสร้างตัวเลขสุ่มเทียมเมื่อดำเนินการงานการเข้ารหัส
  • การใช้โปรโตคอล Telnet
  • การใช้ตัวแยกวิเคราะห์ XML ที่ไม่ปลอดภัย

นอกจากนี้ยังสามารถสังเกตได้ว่าตรวจพบแพ็คเกจที่เป็นอันตราย 8 รายการในไดเร็กทอรี PyPI ก่อนที่จะลบ มีการดาวน์โหลดแพ็คเกจที่มีปัญหามากกว่า 30 ครั้ง เพื่อซ่อนกิจกรรมที่เป็นอันตรายและเลี่ยงคำเตือนจากเครื่องมือวิเคราะห์คงที่แบบธรรมดาในแพ็คเกจ บล็อกโค้ดจะถูกเข้ารหัสโดยใช้ Base64 และดำเนินการหลังจากการถอดรหัสโดยใช้การเรียก eval

แพ็คเกจ noblesse, genesisbot, ทนทุกข์ทรมาน, noblesse2 และ noblessev2 มีรหัสเพื่อสกัดกั้นหมายเลขบัตรเครดิตและรหัสผ่านที่จัดเก็บไว้ในเบราว์เซอร์ Chrome และ Edge รวมถึงโอนโทเค็นบัญชีจากแอปพลิเคชัน Discord และส่งข้อมูลระบบรวมถึงภาพหน้าจอของเนื้อหาบนหน้าจอ แพ็คเกจ pytagora และ pytagora2 มีความสามารถในการโหลดและรันโค้ดปฏิบัติการของบุคคลที่สาม

ที่มา: opennet.ru

เพิ่มความคิดเห็น