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 dinonaktifkan, dan repositori utama dipindahkan ke GitHub. Terburu-buru lupa bahwa untuk mengakses repositori, selain SSH menggunakan gitolite, ada input lain yang memungkinkan Anda mengirim komit melalui HTTPS. Dalam hal ini, git-http-backend digunakan untuk berinteraksi dengan Git, dan otentikasi dilakukan menggunakan server HTTP Apache2, yang memverifikasi kredensial dengan mengakses database yang dihosting di DBMS di server master.php.net. Login diperbolehkan tidak hanya dengan kunci, tetapi juga dengan kata sandi biasa. Analisis log server http mengonfirmasi bahwa perubahan berbahaya ditambahkan melalui HTTPS.

Saat mempelajari log, terungkap bahwa penyerang tidak terhubung pertama kali, tetapi awalnya mencoba menemukan nama akun, tetapi setelah mengidentifikasinya, mereka masuk pada percobaan pertama, mis. mereka mengetahui password Rasmus dan Nikita sebelumnya, tetapi tidak mengetahui login mereka. Jika penyerang dapat memperoleh akses ke DBMS, tidak jelas mengapa mereka tidak segera menggunakan login yang benar yang ditentukan di sana. Perbedaan ini belum mendapat penjelasan yang dapat dipercaya. Peretasan master.php.net dianggap sebagai skenario yang paling mungkin terjadi, karena server ini menggunakan kode yang sangat lama dan OS yang ketinggalan jaman, 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

Tambah komentar