Megjelentek az első eredmények a PHP projekt Git-tárolójában észlelt két hátsó ajtóval rendelkező rosszindulatú commit elemzéséből, amelyeket a User Agent különleges fejlécekkel ellátott kérésének elküldésekor aktiváltak. A támadók tevékenységének nyomozása során arra a következtetésre jutottak, hogy a git.php.net szerver, ahol a git-tároló található, nem volt feltörve, de a fejlesztők fiókjait tartalmazó adatbázis kompromittálódott.
Nem zárható ki, hogy a bűnözők sikeresen letöltötték a felhasználói adatbázist, amely a master.php.net szerveren tárolódott. A master.php.net tartalmát már áttelepítették az új, nulláról telepített main.php.net szerverre. Minden fejlesztői jelszót, amelyet a php.net infrastruktúrához való hozzáféréshez használtak, nullázni kellett, és elindult a jelszó-visszaállító űrlapon keresztüli megváltoztatás folyamatának kezdeményezése. A git.php.net és az svn.php.net tárolók továbbra is csak olvasási módban elérhetők (a fejlesztés GitHub-ra került át).
Az első rosszindulatú commit felfedezése után, amelyet Rasmus Lerdorf, a PHP alapítója nevében hajtottak végre, feltételezték, hogy a fiókját feltörték, és Nikita Popov, a PHP egyik kulcsfejlesztője, visszaállította a változtatásokat, és letiltotta a problémás fiók commit jogait. Egy idő után azonban tudatosult, hogy a letiltásnak nem volt értelme, mivel digitális aláírás szerinti commit-ellenőrzés nélkül bárki, akinek hozzáférése volt a php-src tárolóhoz, végezhetett változtatásokat, hamis szerzői nevet megadva.
Ezután a támadók rosszindulatú commitot küldtek Nikita nevében. A gitolite naplójának elemzése, amelyet a tárolók hozzáférésének megszervezésére használnak, megkísérelte azonosítani azt a résztvevőt, aki valóban végrehajtotta a változtatásokat. Annak ellenére, hogy minden commit nyilvántartásba volt véve, a két rosszindulatú módosításról nem voltak bejegyzések a naplóban. Nyilvánvalóvá vált, hogy az infrastruktúra kompromittálódott, mivel a commitok közvetlenül, a gitolite-on keresztüli hozzáférés megkerülésével lettek hozzáadva.
A git.php.net server was promptly taken offline, and the primary repository was moved to GitHub. In the rush, it was overlooked that there was an alternative access method to the repository, allowing commits to be sent via HTTPS in addition to SSH using gitolite. In this case, the git-http-backend was used for interaction with Git, and authentication was handled via the Apache2 HTTP server, which verified credentials by querying the database hosted in the DBMS on szerveren master.php.net. Access was allowed not only through keys but also via a regular password. The analysis of the HTTP server logs confirmed that malicious changes were introduced via HTTPS.
Upon reviewing the logs, it was revealed that the attackers did not connect on the first attempt; initially, they tried to guess the account name but successfully entered on the first try after determining it, meaning they already knew the passwords of Rasmus and Nikita, but not their usernames. If the attackers managed to gain access to the DBMS, it is unclear why they did not immediately use the valid login indicated there. This discrepancy has not yet received a reliable explanation. The compromise of master.php.net is considered the most likely scenario, as this server szerveren was running very old code and an outdated OS that had long been unmaintained and had unresolved vulnerabilities.
The actions taken include reinstalling the master.php.net server environment and upgrading the scripts to the new PHP 8 version. The code working with the DBMS has been rewritten to use parameterized queries, which complicate SQL code injection. The bcrypt algorithm is now used for storing password hashes in the database (previously, passwords were stored using the unreliable MD5 hash). Existing passwords have been reset and users are encouraged to set a new password through the password recovery form. Since access to the git.php.net and svn.php.net repositories via HTTPS was tied to MD5 hashes, it was decided to keep git.php.net and svn.php.net in read-only mode, as well as migrate all the remaining PECL extension repositories on them to GitHub, similar to the main PHP repository.
Forrás: opennet.ru
