46% paket Python di repositori PyPI berisi kode yang berpotensi tidak aman

Sekelompok peneliti dari Universitas Turku (Finlandia) menerbitkan hasil analisis paket di repositori PyPI untuk penggunaan konstruksi yang berpotensi berbahaya yang dapat menyebabkan kerentanan. Selama analisis 197 ribu paket, 749 ribu potensi masalah keamanan teridentifikasi. 46% paket memiliki setidaknya satu masalah seperti itu. Di antara masalah yang paling umum adalah kekurangan terkait penanganan pengecualian dan penggunaan fitur yang memungkinkan substitusi kode.

Dari 749 ribu permasalahan yang teridentifikasi, 442 ribu (41%) tergolong permasalahan ringan, 227 ribu (30%) permasalahan sedang, dan 80 ribu (11%) tergolong permasalahan berbahaya. Beberapa paket menonjol dari yang lain dan berisi ribuan masalah: misalnya, paket PyGGI mengidentifikasi 2589 masalah, terutama terkait dengan penggunaan konstruksi β€œcoba-kecuali-lulus”, dan paket appengine-sdk menemukan 2356 masalah. Sejumlah besar masalah juga muncul pada paket genie.libs.ops, pbcore dan genie.libs.parser.

Perlu dicatat bahwa hasil diperoleh berdasarkan analisis statis otomatis, yang tidak memperhitungkan konteks penerapan struktur tertentu. Pengembang toolkit bandit yang digunakan untuk memindai kode menyatakan pendapatnya bahwa karena jumlah positif palsu yang cukup tinggi, hasil pemindaian tidak dapat langsung dianggap sebagai kerentanan tanpa tinjauan manual tambahan untuk setiap masalah.

Misalnya, penganalisis menganggap penggunaan generator angka acak dan algoritma hashing yang tidak dapat diandalkan, seperti MD5, sebagai masalah keamanan, sedangkan dalam kode, algoritma tersebut dapat digunakan untuk tujuan yang tidak mempengaruhi keamanan. Penganalisis juga menganggap pemrosesan data eksternal apa pun dalam fungsi yang tidak aman seperti acar, yaml.load, subproses, dan eval sebagai masalah, namun penggunaan ini tidak selalu melibatkan kerentanan dan faktanya penggunaan fungsi ini dapat diterapkan tanpa ancaman keamanan. .

Di antara tes yang digunakan dalam penelitian ini:

  • Menggunakan fungsi exec, mktemp, eval, mark_safe, dll yang berpotensi tidak aman.
  • Pengaturan hak akses untuk file tidak aman.
  • Memasang soket jaringan ke semua antarmuka jaringan.
  • Penggunaan kata sandi dan kunci yang ditentukan secara ketat dalam kode.
  • Menggunakan direktori sementara yang telah ditentukan sebelumnya.
  • Menggunakan pass dan continue dalam penangan pengecualian gaya tangkap semua;
  • Meluncurkan aplikasi web berdasarkan kerangka web Flask dengan mode debugging diaktifkan.
  • Menggunakan metode deserialisasi data yang tidak aman.
  • Menggunakan fungsi hash MD2, MD4, MD5 dan SHA1.
  • Penggunaan cipher DES dan mode enkripsi yang tidak aman.
  • Penggunaan implementasi HTTPSConnection yang tidak aman di beberapa versi Python.
  • Menentukan skema file:// di urlopen.
  • Menggunakan generator nomor pseudorandom saat melakukan tugas kriptografi.
  • Menggunakan protokol Telnet.
  • Menggunakan parser XML yang tidak aman.

Selain itu, dapat dicatat bahwa 8 paket berbahaya terdeteksi di direktori PyPI. Sebelum penghapusan, paket bermasalah telah diunduh lebih dari 30 ribu kali. Untuk menyembunyikan aktivitas jahat dan mengabaikan peringatan dari penganalisis statis sederhana dalam paket, blok kode dikodekan menggunakan Base64 dan dieksekusi setelah decoding menggunakan panggilan eval.

Paket noblesse, genesisbot, are, penderitaan, noblesse2 dan noblessev2 berisi kode untuk mencegat nomor kartu kredit dan kata sandi yang disimpan di browser Chrome dan Edge, serta mentransfer token akun dari aplikasi Discord dan mengirim data sistem, termasuk tangkapan layar konten layar. Paket pytagora dan pytagora2 menyertakan kemampuan untuk memuat dan mengeksekusi kode pihak ketiga yang dapat dieksekusi.

Sumber: opennet.ru

Tambah komentar