Laporan babagan kompromi repositori git lan basis pangguna proyek PHP

Asil pisanan saka analisis kedadeyan sing ana hubungane karo identifikasi rong tumindak ala ing gudang Git proyek PHP kanthi backdoor diaktifake nalika ngirim panjalukan kanthi header Agen Panganggo sing dirancang khusus wis diterbitake. Sajrone sinau jejak aktivitas panyerang, disimpulake yen server git.php.net dhewe, ing ngendi repositori git dumunung, ora disusupi, nanging database karo akun pangembang proyek dikompromi. .

Bisa uga panyerang bisa ngundhuh basis data pangguna sing disimpen ing DBMS ing server master.php.net. Isi master.php.net wis dipindhah menyang server main.php.net anyar sing diinstal saka awal. Kabeh sandhi pangembang sing digunakake kanggo ngakses infrastruktur php.net direset lan proses pangowahan kasebut diwiwiti liwat formulir pemulihan tembung sandhi khusus. Repositori git.php.net lan svn.php.net tetep mung diwaca (pangembangan wis dipindhah menyang GitHub).

Sawise panemuan komit jahat pisanan sing digawe liwat akun Rasmus Lerdorf, pangadeg PHP, dianggep yen akun kasebut wis diretas lan Nikita Popov, salah sawijining pangembang PHP utama, mbatalake owah-owahan kasebut lan diblokir hak komit kanggo akun bermasalah. Sawise sawetara wektu, sadhar yen pamblokiran kasebut ora ana gunane, amarga tanpa verifikasi komitmen nggunakake tandha digital, peserta sing duwe akses menyang repositori php-src bisa ngganti kanthi ngganti jeneng pangarang fiktif.

Sabanjure, para panyerang ngirim tumindak ala kanggo pihak Nikita dhewe. Kanthi nganalisa log layanan gitolite, digunakake kanggo ngatur akses menyang repositori, nyoba kanggo nemtokake peserta sing bener-bener nggawe owah-owahan. Sanajan kalebu akuntansi kanggo kabeh komitmen, ora ana entri ing log kanggo rong owah-owahan angkoro. Dadi jelas yen ana kompromi saka infrastruktur, amarga commit ditambahake langsung, ngliwati sambungan liwat gitolite.

Server git.php.net langsung dipateni, lan repositori utama ditransfer menyang GitHub. Kanthi cepet-cepet, lali yen kanggo ngakses repositori, saliyane SSH nggunakake gitolite, ana input liyane sing ngidini sampeyan ngirim komit liwat HTTPS. Ing kasus iki, git-http-backend digunakake kanggo sesambungan karo Git, lan otentikasi ditindakake nggunakake server HTTP Apache2, sing verifikasi kredensial kanthi ngakses database sing di-host ing DBMS ing server master.php.net. Mlebet diijini ora mung nganggo tombol, nanging uga nganggo sandhi biasa. Analisis log server http dikonfirmasi manawa owah-owahan angkoro ditambahake liwat HTTPS.

Nalika sinau log, dicethakakΓ© manawa panyerang ora nyambung pisanan, nanging pisanan nyoba kanggo nemokake jeneng akun, nanging sawise ngenali, padha mlebu ing nyoba pisanan, i.e. padha ngerti sandi Rasmus lan Nikita ing advance, nanging ora ngerti login. Yen panyerang bisa entuk akses menyang DBMS, ora jelas kenapa dheweke ora langsung nggunakake login sing bener sing ditemtokake ing kana. Bedane iki durung entuk panjelasan sing bisa dipercaya. Peretasan master.php.net dianggep minangka skenario sing paling mungkin, amarga server iki nggunakake kode sing lawas banget lan OS sing wis lawas, sing wis suwe ora dianyari lan duwe kerentanan sing ora ditambal.

Tumindak sing ditindakake kalebu instal ulang lingkungan server master.php.net lan transfer skrip menyang versi anyar PHP 8. Kode kanggo nggarap DBMS wis diowahi kanggo nggunakake pitakon parameter sing rumit substitusi kode SQL. Algoritma bcrypt digunakake kanggo nyimpen hash sandhi ing basis data (sadurunge, sandhi disimpen nggunakake hash MD5 sing ora bisa dipercaya). Sandhi sing wis ana direset lan sampeyan dijaluk nyetel sandhi anyar liwat formulir pemulihan tembung sandhi. Wiwit akses menyang repositori git.php.net lan svn.php.net liwat HTTPS disambungake menyang hash MD5, mula diputusake ninggalake git.php.net lan svn.php.net ing mode mung diwaca, lan uga mindhah kabeh. sing isih ana kanggo repositori ekstensi PECL ing GitHub, padha karo repositori PHP utama.

Source: opennet.ru

Add a comment