Spoofing des Commit-Autors
Jeder Commit kann Ihren Namen beanspruchen. Nur eine kryptografische Signatur belegt die Identität des Autors.
Was ist Spoofing des Commit-Autors?
Git zeichnet Autorname und E-Mail-Adresse wörtlich aus der lokalen Konfiguration auf. Nichts prüft diese Angaben, sodass jede Person als jede andere committen kann; das Autorenfeld ist ein Etikett, kein Beweis. Nur eine GPG- oder SSH-Signatur verknüpft einen Commit mit einem Schlüssel, den jemand besitzt. Sie lesen Name und E-Mail-Adresse einer Maintainerin aus der Historie des Repositorys, setzen sie lokal und bringen eine Änderung auf den Branch, die den Webhook-Signaturvergleich auf acht Zeichen verkürzt. Danach finden Sie das Abzeichen Unverified, erzwingen signierte Commits ohne Administratorausnahme und sehen den Push abgewiesen.
Was Sie lernen in Spoofing des Commit-Autors
- Erkennen, dass Autorenname und E-Mail-Adresse eines Commits selbst gesetzte lokale Git-Konfigurationswerte sind, die jede Person setzen kann; das Autorenfeld ist daher ein Etikett und kein Identitätsnachweis
- Sehen, wie ein gefälschter Autor unter dem Namen einer vertrauenswürdigen Maintainerin eine böswillige Änderung im Commit-Protokoll vor der Auslieferung wie Routine erscheinen lässt
- Verstehen, dass Autoren-E-Mails in jedem Commit veröffentlicht und mit jedem Klon kopiert werden; ein Angreifer kann Name und E-Mail-Adresse für die Imitation daher direkt aus dem Repository lesen
- Einen als Verified gekennzeichneten Commit mit kryptografischer Signatur von einem Unverified-Commit unterscheiden, dessen Autorenfeld unbelegt ist
- Signierte Commits auf gemeinsamen Branches ohne Administratorausnahme erzwingen, damit der Server unsignierte Arbeit ablehnt, statt sich darauf zu verlassen, dass jemand ein Abzeichen bemerkt
Spoofing des Commit-Autors — Trainingsschritte
-
Der Branch, zu dem er bereits pushen kann
Heute nimmt Bob Voxmere ins Visier, ein Zahlungsinfrastrukturunternehmen, bei dem er als Auftragnehmer arbeitet. Sein Vertrag gewährt ihm Push-Zugriff auf den gemeinsamen Integrations-Branch von Ledger-Core, was normal ist: Dort leisten Mitwirkende ihre Arbeit. Was ihm fehlt, ist eine Möglichkeit, andere dazu zu bringen, seinem Code zu vertrauen. Nichts auf dem Integration-Branch wird ausgeliefert, bis ein Maintainer das Commit-Protokoll liest und den Branch nach main übernimmt.
-
Dienst klonen
Bob klont ledger-core, den Dienst, der sämtliche Abrechnungs-, Erstattungs- und Abgleichspfade bei Voxmere verarbeitet. Als Auftragnehmer verfügt er über Lesezugriff; es handelt sich also um einen gewöhnlichen Arbeits-Checkout.
-
Namen aus der Historie auslesen
Bob benötigt die genaue Autoridentität der Maintainerin und muss sie nicht erraten oder durch Phishing beschaffen. Jeder Commit trägt Namen und E-Mail-Adresse seines Autors, und das Protokoll gibt beides auf Anfrage aus. Ein Name wiederholt sich weitaus häufiger als die anderen. Dara Whitlock ist die Maintainerin, deren Änderungen ohne Widerspruch durchgehen; ihre Identität lohnt sich daher zum Ausleihen.
-
Namen ausleihen
Bob setzt seine lokale Git-Konfiguration auf Dara Whitlock. Es gibt keine Abfrage, keine Überprüfung und keine Bestätigung: Der Befehl setzt eine Zeichenfolge, und Git übernimmt sie.
-
Adresse ausleihen
Nun zur E-Mail-Adresse. Sie ist wichtiger als der Name: Die Git-Plattform ordnet die Autor-E-Mail eines Commits einem Benutzerkonto zu. Von nun an erscheinen Bobs Commits mit Daras Profil und Avatar.
-
Der Webhook-Verifizierer
Bob öffnet die Datei, wegen der er gekommen ist. Jedes Zahlungsereignis, das das Ledger erreicht, trifft als vom Zahlungsdienstleister signierter Webhook ein; diese Funktion prüft die Gültigkeit der Signatur. Der vollständige Digest wird derzeit in konstanter Zeit verglichen. Das ist korrekt.
-
Vergleich verkürzen
Bob ändert eine Zeile. Der Vergleich läuft weiter, verwendet weiterhin dieselbe Hilfsfunktion und sieht nach wie vor wie eine Signaturprüfung aus. Er endet nur nach den ersten acht Zeichen. Er schreibt es als Leistungsoptimierung, denn so sieht es aus.
-
Was acht Zeichen kosten
Eine vollständige Signatur besteht aus vierundsechzig Hexadezimalzeichen. Wenn man acht davon vergleicht, bleiben zweiunddreißig Bits übrig: rund vier Milliarden Möglichkeiten. Das ist ein Brute-Force-Angriff, den ein geduldiger Angreifer zu Ende bringen kann, während der vollständige Vergleich nie fallen würde. Jede Person, die den Webhook-Endpunkt erreichen kann, kann dann beliebige Zahlungsereignisse signieren, und das Ledger akzeptiert jedes davon als echt.
-
Unter geliehenem Namen committen
Bob committet. Er übergibt kein Flag, überschreibt nichts und verwendet keinen speziellen Befehl: Git übernimmt für den Commit einfach die Identität, die er zwei Schritte zuvor gesetzt hat.
-
Commit erneut lesen
Bob überprüft seine Arbeit. Der Commit, den er gerade erstellt hat, nennt Dara Whitlock als Autorin, mit ihrer Adresse daneben. In der Ausgabe wird nichts als ungewöhnlich markiert, denn aus Sicht von Git ist nichts Ungewöhnliches passiert. Git zeichnete die Identität auf, die ihm übergeben wurde.
Abdeckung der Sicherheits-Frameworks
CWE
- CWE-345 Insufficient Verification of Data Authenticity
- CWE-347 Improper Verification of Cryptographic Signature
MITRE ATT&CK
- T1036 Masquerading
CIS Controls
- CIS 16 Application Software Security
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- PR.PS Platform Security