Poročilo o ogroženosti repozitorija git in baze uporabnikov projekta PHP

Objavljeni so prvi rezultati analize incidenta, povezanega z identifikacijo dveh zlonamernih commitov v repozitoriju Git projekta PHP z aktiviranim backdoorjem ob pošiljanju zahteve s posebej oblikovano glavo User Agent. Med preučevanjem sledi dejavnosti napadalcev je bilo ugotovljeno, da sam strežnik git.php.net, na katerem se nahaja repozitorij git, ni bil vlomljen, ampak je bila ogrožena baza podatkov z računi razvijalcev projekta. .

Možno je, da so napadalci lahko prenesli bazo podatkov uporabnikov, shranjeno v DBMS na strežniku master.php.net. Vsebina master.php.net je bila že preseljena na nov strežnik main.php.net, ki je nameščen iz nič. Vsa razvijalska gesla, ki se uporabljajo za dostop do infrastrukture php.net, so bila ponastavljena in postopek njihove spremembe je bil sprožen s posebnim obrazcem za obnovitev gesla. Repozitorija git.php.net in svn.php.net ostajata samo za branje (razvoj je bil premaknjen na GitHub).

Po odkritju prve zlonamerne potrditve prek računa Rasmusa Lerdorfa, ustanovitelja PHP, se je domnevalo, da je bil njegov račun vdrl, in Nikita Popov, eden ključnih razvijalcev PHP, je razveljavil spremembe in blokiral pravice objave za problematični račun. Čez nekaj časa je prišlo do spoznanja, da blokiranje ni smiselno, saj brez preverjanja commitov z digitalnim podpisom lahko vsak udeleženec z dostopom do repozitorija php-src izvede spremembo z zamenjavo izmišljenega imena avtorja.

Nato so napadalci poslali zlonamerno objavo v imenu samega Nikite. Z analizo dnevnikov storitve gitolite, ki se uporablja za organizacijo dostopa do repozitorijev, je bil poskus ugotoviti udeleženca, ki je dejansko naredil spremembe. Kljub vključitvi obračunavanja za vse potrditve v dnevniku ni bilo vnosov za dve zlonamerni spremembi. Postalo je jasno, da je prišlo do kompromisa infrastrukture, saj so bile zaveze dodane neposredno, mimo povezave prek gitolita.

Strežnik git.php.net je bil nemudoma onemogočen, primarni repozitorij pa prenesen na GitHub. V naglici je bilo pozabljeno, da je za dostop do repozitorija poleg SSH z uporabo gitolita obstajal še en vnos, ki je omogočal pošiljanje potrditev prek HTTPS. V tem primeru je bil za interakcijo z Gitom uporabljen git-http-backend, avtentikacija pa je bila izvedena s strežnikom HTTP Apache2, ki je preveril poverilnice z dostopom do baze podatkov, ki gostuje v DBMS na strežniku master.php.net. Prijava je bila dovoljena ne samo s ključi, ampak tudi z običajnim geslom. Analiza dnevnikov strežnika http je potrdila, da so bile zlonamerne spremembe dodane prek HTTPS.

Pri preučevanju dnevnikov je bilo ugotovljeno, da se napadalci niso povezali prvič, ampak so sprva poskušali najti ime računa, a so se po identifikaciji prijavili v prvem poskusu, tj. poznali so gesli Rasmusa in Nikite vnaprej, niso pa poznali njunih prijav. Če so napadalci lahko pridobili dostop do DBMS, ni jasno, zakaj niso takoj uporabili pravilne prijave, navedene tam. To neskladje še ni dobilo zanesljive razlage. Vdor v master.php.net velja za najverjetnejši scenarij, saj je ta strežnik uporabljal zelo staro kodo in zastarel OS, ki že dolgo ni bil posodobljen in je imel nepopravljene ranljivosti.

Izvedeni ukrepi vključujejo ponovno namestitev okolja strežnika master.php.net in prenos skriptov v novo različico PHP 8. Koda za delo z DBMS je bila spremenjena tako, da uporablja parametrizirane poizvedbe, ki otežujejo zamenjavo kode SQL. Algoritem bcrypt se uporablja za shranjevanje zgoščenih vrednosti gesel v bazo podatkov (prej so bila gesla shranjena z uporabo nezanesljive zgoščene vrednosti MD5). Obstoječa gesla so ponastavljena in prek obrazca za obnovitev gesla boste pozvani, da nastavite novo geslo. Ker je bil dostop do repozitorijev git.php.net in svn.php.net prek HTTPS vezan na zgoščene vrednosti MD5, je bilo odločeno, da pustimo git.php.net in svn.php.net v načinu samo za branje ter premaknemo vse preostali za njih repozitorije razširitev PECL na GitHubu, podobne glavnemu repozitoriju PHP.

Vir: opennet.ru

Dodaj komentar