Ich habe heute dieses Thema gesehen: Third-party plugin repository hijacked
Es ist schön, dass dieses Problem für dieses Repository „gelöst“ ist. Aber das eigentliche Problem besteht weiterhin. Wie signiert man und was ist die Quelle für den Schlüssel, mit dem die Signatur verifiziert wird?
Mein erster Versuch, dieses Problem zu lösen, wäre also, den eingebauten Signaturmechanismus von Git zu nutzen. Discourse müsste dann den Unterzeichner eines installierten Plugins verfolgen. Wenn sich dieser ändert, sollte er den Administrator warnen.
Das hat offensichtlich viele Schwachstellen.
Woher bekommt man die Schlüssel des Unterzeichners? Metadaten in plugin.rb und about.json. Keyserver sind nett… aber ziemlich kompliziert. Oder… meta.discourse.org dient als Keyserver, also sollten Autoren ihre öffentlichen Schlüssel registrieren.
Nur den neuesten Commit verifizieren? Wahrscheinlich ausreichend, man kann nicht viel gegen gestohlene Schlüssel tun.
Aber wenn ein Schlüssel gestohlen wird, wie prüft man den Widerruf? Wenn meta den Schlüssel bereitstellt, könnte dieses Problem gelöst werden.
Das ist großartig für die Admin-Oberfläche, aber was ist mit den Plugin-Installationen in einem Docker-Container? Speichern Sie zuvor akzeptierte Signierschlüssel gemeinsam und fügen Sie einen Verifizierungsschritt zum Neuerstellen hinzu. Wahrscheinlich eine Vorabprüfung, um zu verhindern, dass das System heruntergefahren wird und dann der Klon abgelehnt wird; und dann eine Nach-Checkout-Prüfung, nur für den Fall, dass jemand in der Zwischenzeit am Repository herumgefummelt hat?
Was ist mit alten, unsignierten Repos? Große Warnung, dass der Inhalt nicht verifiziert werden kann. + Ja/Nein/Abbrechen-Aufforderung