46% daripada pakej Python dalam repositori PyPI mengandungi kod yang berpotensi tidak selamat

Sekumpulan penyelidik dari Universiti Turku (Finland) menerbitkan hasil analisis pakej dalam repositori PyPI untuk penggunaan binaan yang berpotensi berbahaya yang boleh membawa kepada kelemahan. Semasa analisis 197 ribu pakej, 749 ribu masalah keselamatan yang berpotensi telah dikenalpasti. 46% daripada pakej mempunyai sekurang-kurangnya satu masalah sedemikian. Antara masalah yang paling biasa ialah kekurangan yang berkaitan dengan pengendalian pengecualian dan penggunaan ciri yang membenarkan penggantian kod.

Daripada 749 ribu masalah yang dikenal pasti, 442 ribu (41%) dilabel sebagai masalah kecil, 227 ribu (30%) sebagai masalah sederhana dan 80 ribu (11%) sebagai masalah berbahaya. Sesetengah pakej menonjol daripada orang ramai dan mengandungi beribu-ribu masalah: contohnya, pakej PyGGI mengenal pasti 2589 masalah, terutamanya berkaitan dengan penggunaan konstruk "cuba-kecuali-lulus", dan pakej appengine-sdk menemui 2356 masalah. Sebilangan besar masalah juga terdapat dalam pakej jin.libs.ops, pbcore dan genie.libs.parser.

Perlu diingatkan bahawa keputusan diperoleh berdasarkan analisis statik automatik, yang tidak mengambil kira konteks penggunaan struktur tertentu. Pembangun kit alat penyamun, yang digunakan untuk mengimbas kod, menyatakan pendapat bahawa disebabkan bilangan positif palsu yang agak tinggi, hasil imbasan tidak boleh dianggap secara langsung sebagai kelemahan tanpa semakan manual tambahan bagi setiap isu.

Sebagai contoh, penganalisis menganggap penggunaan penjana nombor rawak dan algoritma pencincangan yang tidak boleh dipercayai, seperti MD5, sebagai masalah keselamatan, manakala dalam kod algoritma tersebut mungkin digunakan untuk tujuan yang tidak menjejaskan keselamatan. Penganalisis juga menganggap sebarang pemprosesan data luaran dalam fungsi tidak selamat seperti pickle, yaml.load, subprocess dan eval sebagai masalah, tetapi penggunaan ini tidak semestinya melibatkan kelemahan dan sebenarnya penggunaan fungsi ini boleh dilaksanakan tanpa ancaman keselamatan .

Antara ujian yang digunakan dalam kajian:

  • Menggunakan fungsi yang mungkin tidak selamat exec, mktemp, eval, mark_safe, dsb.
  • Tetapan hak akses yang tidak selamat untuk fail.
  • Memasang soket rangkaian pada semua antara muka rangkaian.
  • Penggunaan kata laluan dan kunci yang dinyatakan dengan ketat dalam kod.
  • Menggunakan direktori sementara yang dipratentukan.
  • Menggunakan hantaran dan teruskan dalam pengendali pengecualian gaya tangkap semua;
  • Melancarkan aplikasi web berdasarkan rangka kerja web Flask dengan mod nyahpepijat didayakan.
  • Menggunakan kaedah penyahserikatan data yang tidak selamat.
  • Menggunakan fungsi cincang MD2, MD4, MD5 dan SHA1.
  • Penggunaan sifir DES yang tidak selamat dan mod penyulitan.
  • Penggunaan pelaksanaan HTTPSConnection yang tidak selamat dalam beberapa versi Python.
  • Menentukan skema fail:// dalam urlopen.
  • Menggunakan penjana nombor pseudorandom semasa menjalankan tugas kriptografi.
  • Menggunakan protokol Telnet.
  • Menggunakan penghurai XML yang tidak selamat.

Selain itu, boleh diperhatikan bahawa 8 pakej berniat jahat telah dikesan dalam direktori PyPI. Sebelum penyingkiran, pakej bermasalah telah dimuat turun lebih daripada 30 ribu kali. Untuk menyembunyikan aktiviti berniat jahat dan memintas amaran daripada penganalisis statik mudah dalam pakej, blok kod telah dikodkan menggunakan Base64 dan dilaksanakan selepas penyahkodan menggunakan panggilan eval.

Pakej noblesse, genesisbot, adalah, menderita, noblesse2 dan noblessev2 mengandungi kod untuk memintas nombor kad kredit dan kata laluan yang disimpan dalam penyemak imbas Chrome dan Edge, serta memindahkan token akaun daripada aplikasi Discord dan menghantar data sistem, termasuk tangkapan skrin kandungan skrin . Pakej pytagora dan pytagora2 termasuk keupayaan untuk memuatkan dan melaksanakan kod boleh laku pihak ketiga.

Sumber: opennet.ru

Tambah komen