Janë publikuar rezultatet e para të hetimit mbi incidentin e identifikimit të dy komiteteve të dëmshme me backdoor në Git-repozitorin e projektit PHP, të aktivizuara gjatë dërgimit të një kërkese me një titull të veçantë User Agent. Gjatë studimit të gjurmëve të aktivitetit të sulmuesve, u arrit në përfundimin se serveri git.php.net, ku ishte vendosur git-repozitori, nuk ishte komprometuar, por ishte kompromentuar baza e të dhënave me llogaritë e zhvilluesve të projektit.
Nuk përjashtohet mundësia që sulmuesit të kenë arritur të ngarkojnë bazën e përdoruesve, e cila ishte ruajtur në DBMS në serverin master.php.net. Përmbajtja e master.php.net tashmë është transferuar në serverin e ri main.php.net, i instaluar nga fillimi. Të gjitha fjalëkalimet e zhvilluesve që u përdorën për qasje në infrastrukturën php.net janë ricikluar dhe është iniciuar procesi për ndryshimin e tyre nëpërmjet një forme të veçantë për rikuperimin e fjalëkalimit. Repozitoritë git.php.net dhe svn.php.net mbeten të disponueshme në mënyrë vetëm për lexim (zhvillimi është transferuar në GitHub).
Pas zbulimit të komitetit të parë të dëmshëm, i kryer nga llogaria e Rasmus Lerdorfit, themeluesit të PHP, u bë një supozim se llogaria e tij ishte komprometuar dhe Nikita Popov, një nga zhvilluesit kryesorë të PHP, e riktheu ndryshimin dhe bllokoi të drejtat e komitetit për llogarinë e problematikës. Pasi kaloi një kohë, erdhi kuptimi se bllokimi nuk kishte kuptim, sepse pa verifikimin e komiteteve përmes nënshkrimit digjital, çdo pjesëtar me qasje në repo php-src mund të bënte një ndryshim, duke futur një emër të rremë autori.
Më pas, sulmuesit dërguan një komitet të dëmshëm në emër të vetë Nikitës. Nëpërmjet analizës së logeve të shërbimit gitolite, i përdorur për organizimin e aksesit në repozitorë, u bë një përpjekje për të përcaktuar pjesëmarrësin që në të vërtetë kishte realizuar ndryshimet. Pavarësisht regjistrimit të të gjitha komiteteve, nuk kishte shenja në log për dy ndryshimet e dëmshme. U bë e qartë se kishte një komprometim të infrastrukturës, pasi komitetet ishin shtuar drejtpërdrejt, pa kalim përmes gitolite.
Server git.php.net was promptly disabled, and the primary repository was moved to GitHub. In the rush, it was overlooked that there was another access point besides SSH using gitolite, which allowed commits to be sent via HTTPS. In this case, interaction with Git used the backend git-http-backend, and authentication was carried out using the Apache2 HTTP server, which verified credentials through a query to the database hosted in the DBMS on server master.php.net. Access was allowed not only by keys but also by a regular password. The analysis of the server logs confirmed that malicious changes were introduced via HTTPS.
Upon examining the logs, it was found that the attackers did not connect on the first attempt; initially, they tried to guess the account name, but after discovering it, they accessed it on the first try, meaning they already knew the passwords of Rasmus and Nikita but did not know their usernames. If the attackers were able to access the DBMS, it is unclear why they did not immediately use the correct username listed there. This inconsistency has yet to receive a credible explanation. The hacking of master.php.net is considered the most likely scenario, as it was based on very old code and an outdated operating system that had not been updated for a long time and had unpatched vulnerabilities. server Actions taken include reinstalling the environment of the master.php.net server and updating scripts to the new PHP 8 version. The code for interacting with the DBMS has been reworked to use parameterized queries, making SQL code substitution more difficult. To store password hashes in the DB, the bcrypt algorithm was employed (previously, passwords were stored using the unreliable MD5 hash). Existing passwords were reset, and users were prompted to set a new password via the password recovery form. Since access to the repositories git.php.net and svn.php.net via HTTPS was tied to MD5 hashes, it was decided to leave git.php.net and svn.php.net in read-only mode and also transfer all remaining PECL extension repositories to GitHub, following the example of the main PHP repository.
Nga veprimet e ndërmarra, u shënua riinstalimi i ambientit të serverit master.php.net dhe kalimi i skripteve në versionin e ri PHP 8. Kodi për funksionimin me SGBD është rishkruar për të përdorur kërkesa parametrike, të cilat e komplikojnë zëvendësimin e kodit SQL. Për ruajtjen e hash-eve të fjalëkalimeve në DB, është përdorur algoritmi bcrypt (më parë, fjalëkalimet ruheshin duke përdorur hash-in e pasigurt MD5). Fjalëkalimet ekzistuese janë rivendosur dhe është propozuar të vendoset një fjalëkalim i ri përmes formularit për rikuperimin e fjalëkalimit. Duke qenë se aksesin në depot git.php.net dhe svn.php.net për HTTPS ishte i lidhur me hash-et MD5, është vendosur të mbeten git.php.net dhe svn.php.net në modalitetin vetëm për lexim, dhe gjithashtu të transferohen të gjitha depot e mbetura të zgjerimeve PECL në GitHub, në përputhje me depot kryesore të PHP.
Burimi: opennet.ru
