Zpráva o kompromitaci úložiště git a uživatelské základny projektu PHP

Byly zveřejněny první výsledky analýzy incidentu souvisejícího s identifikací dvou škodlivých commitů v úložišti Git projektu PHP se zadními vrátky aktivovanými při odeslání požadavku se speciálně navrženou hlavičkou User Agent. V průběhu studia stop aktivit útočníků se dospělo k závěru, že samotný server git.php.net, na kterém bylo úložiště git umístěno, nebyl hacknut, ale byla kompromitována databáze s účty vývojářů projektu. .

Je možné, že se útočníkům podařilo stáhnout uživatelskou databázi uloženou v DBMS na serveru master.php.net. Obsah master.php.net již byl migrován na nový main.php.net server nainstalovaný od začátku. Všechna vývojářská hesla používaná pro přístup k infrastruktuře php.net byla resetována a proces jejich změny byl zahájen prostřednictvím speciálního formuláře pro obnovu hesla. Repozitáře git.php.net a svn.php.net zůstávají pouze pro čtení (vývoj byl přesunut na GitHub).

Po odhalení prvního škodlivého commitu provedeného prostřednictvím účtu Rasmuse Lerdorfa, zakladatele PHP, se předpokládalo, že jeho účet byl hacknut a Nikita Popov, jeden z klíčových vývojářů PHP, vrátil změny a zablokoval práva na commit pro problematického účtu. Po nějaké době přišlo zjištění, že blokování nedává smysl, protože bez ověření commitů pomocí digitálního podpisu může kterýkoli účastník s přístupem do úložiště php-src provést změnu nahrazením fiktivního jména autora.

Dále útočníci poslali zlomyslný commit jménem samotného Nikity. Analýzou protokolů služby gitolite, používané k organizaci přístupu k úložištím, byl učiněn pokus určit účastníka, který skutečně provedl změny. Navzdory zahrnutí účtování pro všechna potvrzení nebyly v protokolu žádné záznamy pro dvě škodlivé změny. Bylo jasné, že došlo ke kompromitaci infrastruktury, protože commity byly přidány přímo, čímž se obešlo připojení přes gitolite.

Server git.php.net byl okamžitě deaktivován a primární úložiště bylo přeneseno na GitHub. Ve spěchu se zapomnělo, že pro přístup k úložišti byl kromě SSH pomocí gitolite ještě jeden vstup, který umožňoval odesílat commity přes HTTPS. V tomto případě byl k interakci s Git použit backend git-http a autentizace byla provedena pomocí serveru Apache2 HTTP, který ověřoval přihlašovací údaje přístupem k databázi hostované v DBMS na serveru master.php.net. Přihlášení bylo umožněno nejen klíči, ale i běžným heslem. Analýza protokolů http serveru potvrdila, že škodlivé změny byly přidány přes HTTPS.

Při studiu logů vyšlo najevo, že útočníci se nepřipojili napoprvé, ale zpočátku se snažili zjistit název účtu, ale po jeho identifikaci se na první pokus přihlásili, tzn. znali předem hesla Rasmuse a Nikity, ale neznali jejich přihlašovací údaje. Pokud se útočníkům podařilo získat přístup do DBMS, není jasné, proč okamžitě nepoužili správné přihlášení, které je tam uvedeno. Tento rozpor dosud nedostal spolehlivé vysvětlení. Hack master.php.net je považován za nejpravděpodobnější scénář, protože tento server používal velmi starý kód a zastaralý OS, který nebyl dlouho aktualizován a měl neopravené zranitelnosti.

Provedené akce zahrnují reinstalaci serverového prostředí master.php.net a převedení skriptů na novou verzi PHP 8. Kód pro práci s DBMS byl upraven tak, aby používal parametrizované dotazy, které komplikují náhradu SQL kódu. Algoritmus bcrypt se používá k ukládání hash hesel v databázi (dříve byla hesla ukládána pomocí nespolehlivého hashe MD5). Stávající hesla se resetují a budete vyzváni k nastavení nového hesla prostřednictvím formuláře pro obnovení hesla. Vzhledem k tomu, že přístup k úložištím git.php.net a svn.php.net přes HTTPS byl vázán na hash MD5, bylo rozhodnuto ponechat git.php.net a svn.php.net v režimu pouze pro čtení a také přesunout všechny zbývající k nim repozitáře rozšíření PECL na GitHubu, podobné hlavnímu úložišti PHP.

Zdroj: opennet.ru

Přidat komentář