Laporkan kompromi repositori git dan basis pengguna proyek PHP

Hasil pertama dari analisis insiden terkait dengan identifikasi dua komitmen jahat di repositori Git proyek PHP dengan pintu belakang diaktifkan saat mengirim permintaan dengan header Agen Pengguna yang dirancang khusus telah dipublikasikan. Selama mempelajari jejak aktivitas penyerang, disimpulkan bahwa server git.php.net itu sendiri, tempat repositori git berada, tidak diretas, tetapi database dengan akun pengembang proyek telah disusupi. .

Ada kemungkinan bahwa penyerang dapat mengunduh database pengguna yang disimpan dalam DBMS di server master.php.net. Isi master.php.net telah dimigrasikan ke server main.php.net baru yang diinstal dari awal. Semua kata sandi pengembang yang digunakan untuk mengakses infrastruktur php.net telah diatur ulang dan proses perubahannya dimulai melalui formulir pemulihan kata sandi khusus. Repositori git.php.net dan svn.php.net tetap bersifat read-only (pengembangan telah dipindahkan ke GitHub).

Setelah penemuan komit jahat pertama yang dilakukan melalui akun Rasmus Lerdorf, pendiri PHP, diasumsikan bahwa akunnya telah diretas dan Nikita Popov, salah satu pengembang utama PHP, membatalkan perubahan dan memblokir hak komit untuk akun yang bermasalah. Setelah beberapa waktu, muncul kesadaran bahwa pemblokiran tersebut tidak masuk akal, karena tanpa verifikasi komit menggunakan tanda tangan digital, setiap peserta yang memiliki akses ke repositori php-src dapat melakukan perubahan dengan mengganti nama penulis fiktif.

Selanjutnya, penyerang mengirimkan komitmen jahat atas nama Nikita sendiri. Dengan menganalisis log layanan gitolite, yang digunakan untuk mengatur akses ke repositori, upaya dilakukan untuk menentukan peserta yang benar-benar melakukan perubahan. Meskipun akuntansi untuk semua komitmen dimasukkan, tidak ada entri dalam log untuk dua perubahan berbahaya. Menjadi jelas bahwa ada kompromi pada infrastruktur, karena komitmen ditambahkan secara langsung, melewati koneksi melalui gitolite.

Server git.php.net segera dimatikan, dan repositori utama dipindahkan ke GitHub. Dalam keadaan terburu-buru, terlewatkan bahwa, selain akses SSH menggunakan gitolite, ada login lain untuk repositori tersebut, yang memungkinkan pengiriman commit melalui HTTPS. Dalam hal ini, backend git-http digunakan untuk berinteraksi dengan Git, dan otentikasi dilakukan menggunakan server HTTP Apache2, yang memverifikasi izin dengan mengakses basis data yang dihosting di server master.php.net. Login diizinkan tidak hanya menggunakan kunci tetapi juga menggunakan kata sandi biasa. Analisis log server HTTP mengkonfirmasi bahwa perubahan berbahaya ditambahkan melalui HTTPS.

Pemeriksaan log mengungkapkan bahwa penyerang tidak langsung terhubung pada percobaan pertama, tetapi terlebih dahulu mencoba menebak nama akun. Setelah mengidentifikasinya, mereka langsung masuk pada percobaan pertama. Ini berarti mereka mengetahui kata sandi Rasmus dan Nikita sebelumnya, tetapi tidak mengetahui nama pengguna mereka. Jika penyerang mampu mengakses DBMS, tidak jelas mengapa mereka tidak langsung menggunakan nama pengguna yang benar yang tertera di sana. Ketidaksesuaian ini belum dapat dijelaskan secara andal. Peretasan master.php.net dianggap sebagai skenario yang paling mungkin, karena saat ini server Kode yang sangat lama dan sistem operasi yang ketinggalan zaman digunakan, yang sudah lama tidak diperbarui dan memiliki kerentanan yang belum ditambal.

Tindakan yang diambil meliputi instalasi ulang lingkungan server master.php.net dan transfer skrip ke versi baru PHP 8. Kode untuk bekerja dengan DBMS telah dimodifikasi untuk menggunakan kueri berparameter yang mempersulit penggantian kode SQL. Algoritma bcrypt digunakan untuk menyimpan hash kata sandi dalam database (sebelumnya, kata sandi disimpan menggunakan hash MD5 yang tidak dapat diandalkan). Kata sandi yang ada akan diatur ulang dan Anda akan diminta untuk menetapkan kata sandi baru melalui formulir pemulihan kata sandi. Karena akses ke repositori git.php.net dan svn.php.net melalui HTTPS dikaitkan dengan hash MD5, diputuskan untuk membiarkan git.php.net dan svn.php.net dalam mode hanya-baca, dan juga memindahkan semua yang tersisa adalah repositori ekstensi PECL di GitHub, mirip dengan repositori PHP utama.

Sumber: opennet.ru

Beli hosting yang andal untuk situs dengan perlindungan DDoS, server VPS VDS 🔥 Beli hosting website andal dengan perlindungan DDoS, server VPS VDS | ProHoster