June 10, 2023


Pengemas

Seorang peneliti membajak lebih dari selusin paket Packagist — dengan beberapa telah diinstal ratusan juta kali selama masa pakainya.

Peneliti menjangkau BleepingComputer yang menyatakan bahwa dengan membajak paket-paket ini dia berharap mendapatkan pekerjaan. Dan, dia tampaknya cukup yakin bahwa ini akan berhasil.

Setidaknya 14 paket Packagist dibajak

Kemarin, seorang peneliti dengan nama samaran ‘neskafe3v1’ menghubungi BleepingComputer menyatakan dia telah mengambil lebih dari empat belas paket Packagist, dengan salah satunya memiliki lebih dari 500 juta pemasangan.

Packagist adalah registry utama paket PHP yang dapat diinstal melalui Composer, alat manajemen ketergantungan. Daripada menghosting paket-paket ini, Packagist lebih berfungsi sebagai direktori metadata yang mengumpulkan paket-paket open source yang dipublikasikan ke GitHub. Paket-paket ini kemudian dapat diinstal oleh pengembang di mesin mereka dengan menjalankan instal komposer memerintah.

Nama-nama paket yang dibajak meliputi:

Nama paket Jumlah total Pemasangan
acmephp/acmephp 124.860
acmephp/core 419.258
acmephp/ssl 531.692
bundel doktrin/doctrine-cache 73.490.057
doktrin/doktrin-modul 5.516.721
doktrin/doktrin-mongo-odm-modul 516.441
doktrin/doktrin-orm-modul 5.103.306
doktrin/instansiator 526.809.061
buku pertumbuhan/ buku pertumbuhan 97.568
jdorn/file-sistem-cache 32.660
jdorn/sql-formatter 94.593.846
khanamiryan/qrcode-detector-decoder 20.421.500
object-calisthenics/phpcs-calisthenics-rules 2.196.380
tga/simhash-php (alias tgalopin/simhashphp) 30.555

Peneliti memberikan bukti kepada BleepingComputer yang menunjukkan bahwa pada hari Senin, 1 Mei, halaman Packagist untuk paket-paket ini telah dimodifikasi untuk menunjuk ke repo (palsu) peneliti, berlawanan dengan repositori GitHub yang sah untuk setiap paket.

Sebagai contoh, inilah cara halaman Packagist untuk acmephp paket muncul pada hari Senin — dengan tautan GitHub-nya diubah menjadi repo peneliti, bukan yang asli github.com/acmephp/acmephp.

Halaman Packagist yang dibajak untuk acmephp
Halaman Pengemas yang dibajak untuk ‘acmephp’ kemasan (Komputer Bleeping)

Perubahan ini sekarang telah dikembalikan oleh tim Packagist sebagaimana diperiksa oleh BleepingComputer.

Proses penerbitan di Packagist sedikit berbeda dengan yang ada di repo open source seperti npm atau PyPI. Seorang pengembang, sebagai lawan mengunggah binari atau rilis perangkat lunak langsung ke Packagist.org, cukup membuat akun Packagist.org, dan “mengirimkan” tautan ke repo GitHub mereka untuk paket tertentu. Perayap Packagist kemudian mengunjungi repo yang disediakan dan mengumpulkan semua data untuk ditampilkan di halaman Packagist untuk paket itu.

Saat pengembang menjalankan Komposer dengan perintah ‘instal’ atau ‘perbarui’, instance Komposer mereka mungkin pertama-tama mencari keberadaan paket secara lokal, jika gagal, defaultnya adalah mencari di Packagist untuk paket ini dan mengambil URL GitHub yang terdaftar untuk paket itu. Isi paket kemudian diunduh dari repo GitHub ini yang terdaftar di halaman Paket Paket.

Ini sangat kontras dengan cara kerja npm atau PyPI—yaitu, pendaftar ini menghosting dan mendistribusikan rilis perangkat lunak langsung dari server mereka.

Dengan memodifikasi halaman Packagist untuk setiap paket ini, peneliti secara efektif membajak alur kerja instalasi yang digunakan dalam lingkungan Composer. Pengembang sekarang akan mendapatkan konten paket dari nescafe3v1repo GitHub, bukan repositori proyek.

Untuk meminimalkan demonstrasi, peneliti cukup mengubah file composer.json—sesuatu yang mirip dengan manifes aplikasi, di dalam paket ini untuk dibaca:

“Dimiliki oleh neskafe3v1…. Ищу работу на позиции Keamanan Aplikasi, Penguji Penetrasi, Spesialis Keamanan Cyber.”

Peneliti mengubah file manifes dari paket-paket Packagist
Peneliti mengubah file composer.json untuk mendemonstrasikan peretasan (Komputer Bleeping)

Dia melakukannya dengan membagi repositori proyek asli, memodifikasi bidang “deskripsi” di dalam composer.json, dan melakukan perubahan ke repositori bercabangnya. Dia tidak pernah menggabungkan perubahan kembali ke repositori asli (melakukan hal itu akan memerlukan akses tambahan dan mungkin mengundang pengawasan pengelola).

Alih-alih, peneliti tampaknya mendapatkan akses ke akun Packagist pengelola dan mengubah URL GitHub ke paket yang terdaftar menjadi repo bercabang miliknya. Tapi, dia tidak mengungkapkan metode pasti yang digunakan untuk membajak BleepingComputer.

Ketika didesak oleh BleepingComputer untuk mengungkapkan teknik persis yang digunakan peneliti untuk membajak paket-paket ini, kami diberi tahu bahwa ini bukanlah teknik zero-day tetapi teknik yang diketahui. Tapi kami tidak diberi tahu apakah pembajakan dilakukan melalui, misalnya, kompromi kredensial, pengambilalihan alamat email pengelola karena kedaluwarsa domainatau teknik lain:

“Seperti yang Anda lihat, saya sedang mencari pekerjaan (pesan itu ‘Ищу работу на позиции…’ berarti ‘Saya sedang mencari pekerjaan…’), jadi saya akan mengungkapkan laporan setelah saya menjadi disewa oleh beberapa perusahaan,” kata peneliti kepada BleepingComputer, menyamakan seluruh kampanye pembajakan dengan “iklan diri saya sebagai karyawan.”

“Sampai ada kesuksesan, tidak ada yang perlu dibicarakan.”

Dibajak melalui kompromi kredensial

Dalam sebuah pernyataan kepada BleepingComputer, tim Packagist mengatakan sejauh ini tidak ada dampak berbahaya yang diamati pada platform sebagai akibat dari tindakan ini sambil mengonfirmasi bahwa pengambilalihan tersebut memang dihasilkan dari kompromi kredensial akun pengelola.

“Sepengetahuan kami, ini tidak digunakan untuk tujuan jahat apa pun dan terbatas pada beberapa akun lama dengan kata sandi tidak aman dan otentikasi 2 faktor hilang,” kata Nils Aderman dari Packagist.org, yang juga merupakan salah satu pengembang Komposer asli, kepada BleepingComputer .

“Keempat akun tampaknya menggunakan kata sandi bersama yang bocor dalam insiden sebelumnya di platform lain. Tolong, jangan menggunakan kembali kata sandi,” memperingatkan admin Packagist.

“Tanggal 2 Mei, jam 7:21 UTC kami diberitahu oleh Juha Suni tentang perubahan URL menjadi beberapa paket Doktrin,” jelas admin lebih lanjut dalam sebuah posting blog dirilis hari ini.

Bekerja bersama Marco Pivetta alias Ocramius, admin Packagist segera mengidentifikasi semua akun yang diakses, menonaktifkan akses ke akun tersebut, dan memulihkan URL GitHub ke nilai sebelumnya. Upaya restorasi selesai pada Selasa pagi.

Peneliti juga memberi tahu BleepingComputer bahwa dia tidak menyalahgunakan teknik untuk mendistribusikan malware, tetapi pada saat yang sama, mengatakan dia telah bukan memberi tahu baik Packagist atau pemilik paket dari eksperimen kecil tersebut—yang membuat orang heran sehubungan dengan sifat ‘etis’ dari penelitian ini.

“Satu-satunya hal yang saya lakukan – saya mengubah bidang ‘deskripsi’ composer.json file,” kata peneliti yang mengarahkan kami ke bukti seperti yang dilakukan Git.

“Saya baru saja mengubah tautan dari github.com/acmephp/core (asli) ke … garpu saya. Tidak ada malware, Anda dapat membedakan file asli dengan milik saya. Saya tidak memberi tahu siapa pun tentang serangan itu, baik admin Packagist, maupun pemilik paket.”

Dalam posting blog mereka, admin Packagist meminta peneliti melaporkan bug dan kerentanan secara bertanggung jawab.

“Jika Anda seorang peneliti keamanan dan mengetahui kerentanan Packagist.org atau ingin melakukan penelitian di Packagist.org, kami meminta Anda untuk mengoordinasikan pengujian dengan kami untuk menghindari dampak negatif pengguna, dan untuk mengungkapkan kerentanan ini secara bertanggung jawab.”

“Anda dapat menghubungi kami di security@packagist.org dan kami segera membalas semua permintaan atau laporan. Kami tentu saja memberikan kredit dan menerbitkan rincian kerentanan yang dilaporkan…”

Leave a Reply

Your email address will not be published. Required fields are marked *