Wer diese Meldung erhält und danach bei Google sucht, findet möglicherweise zunächst folgenden Hinweis:

composer self-update --2

Bei der Ausführung auf der Konsole erscheint jedoch die folgende Fehlermeldung:

Command "self-update" is not defined.

Wenn man jetzt wiederum danach sucht gelangt man zur offiziellen Github Seite von Composer (https://github.com/composer/composer/issues/9419) darin wird folgender Lösungsweg beschrieben:

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'c31c1e292ad7be5f49291169c0ac8f683499edddcfd4e42232982d0fd193004208a58ff6f353fde0012d35fdd72bc394') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php --install-dir /usr/bin --filename composer
php -r "unlink('composer-setup.php');"

Das Problem dabei wiederum ist, dass der Hash-Wert nicht (mehr) mit dem in Zeile übereinstimmt:

Original: c31c1e292ad7be5f49291169c0ac8f683499edddcfd4e42232982d0fd193004208a58ff6f353fde0012d35fdd72bc394
Bei mir: 756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3

Aber woher weis ich jetzt, ob die Datei böswillig verändert wurde oder der Beitrag einfach nur nicht aktualisiert wurde, nachdem die Datei geändert wurde? Zumal der PHP-Code durch die Root-Zertifikate nicht wirklich vertrauenserweckend aussieht und komplett nachvollziehbar ist?

Die Antwort findet sich in dem Kommentar darunter (https://github.com/composer/composer/issues/9419#issuecomment-722388520) bzw. hinter der URL: https://getcomposer.org/doc/faqs/how-to-install-composer-programmatically.md dort ist ganz unten zu lesen:

You may replace the commit hash by whatever the last commit hash is on https://github.com/composer/getcomposer.org/commits/master

https://getcomposer.org/

Und wenn wir jetzt den Commit vom 30. Oktober nehmen, der letzte verifizierte vor der Diskussion uns damit folgende URL zusammenbauen bzw. Befehl:

# wget https://raw.githubusercontent.com/composer/getcomposer.org/13518f24e94646c03d26ebc54d80842cc472f73f/web/installer -O - -q > installer.php
// Und anschließend wieder den Hash erzeugen
# php -r "echo hash_file('sha384', 'installer.php');"
// erhalten wir exakt den Hash, welcher auch in dem Kommentar angegeben ist:
# c31c1e292ad7be5f49291169c0ac8f683499edddcfd4e42232982d0fd193004208a58ff6f353fde0012d35fdd72bc394

Somit wissen wir jetzt worin die Ursache liegt, dass die Hashes nicht passen. Mit folgendem Befehl kann jetzt die Versionen vergleichen um ein Gefühl für die Änderungen zu bekommen:

vimdiff composer-setup.php installer.php

Wie man sieht, waren die Root Zertifikate z.T. auch schon vorher enthalten bzw. sehen die Änderungen jetzt nicht nach böswilligen Manipulationen aus.

Eine Bestätigung, dass die Änderungen “approved” sind und in dem Kommentar offensichtlich der Hash nicht aktualisiert wurde, findet man im folgenden Commit: https://github.com/composer/getcomposer.org/commit/aa511819b5f41a36edc7b1db05bc33a8e73f3daf

// Gelöscht:
php -r "if (hash_file('sha384', 'composer-setup.php') === 'c31c1e292ad7be5f49291169c0ac8f683499edddcfd4e42232982d0fd193004208a58ff6f353fde0012d35fdd72bc394') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

// Hinzugefügt:
php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php

Und da haben wir auch wieder den Hash, welchen wir initial erzeugt haben.