FlawOpen

flawopen.com/AI Security/plugin4shell-ai-agent-plugin-sha-pin-bypass

● CWE-345 · Hoch
Sicherheitsforschung · FlawOpen

Plugin4Shell: Umgehung des SHA-Pins

Vier KI-Agenten-Installer fixierten die Git-Revision, prüften aber den ausgecheckten Commit nicht. Plugin4Shell zeigt die Lücke; SHA prüfen.[1]

💡 Einfache Erklärung (ELI5)

Eine Bibliothek reserviert eine bestimmte Buchausgabe über ihre eindeutige Katalognummer. Die Angestellte fragt diese Nummer ab, nimmt aber ein anderes Buch an, wenn ein Regalaufkleber denselben Text trägt. Der SHA-Pin ist die Katalognummer; der Installer muss den tatsächlich ausgecheckten Commit prüfen, bevor er dem Plugin vertraut oder es startet.[1]

Kernkonzepte & Begriffe

Commit-SHA
Ein Hash, der ein bestimmtes Git-Commit-Objekt identifiziert. Ein sicheres Pinning-Verfahren vergleicht den aufgelösten Checkout mit diesem Wert.[1], [2]
Git-Ref-Mehrdeutigkeit
Git akzeptiert Objekt-IDs und Namen wie Branches als Revisionsausdrücke. Unter bestimmten Bedingungen kann ein Name, der wie eine Commit-ID aussieht, als Ref aufgelöst werden.[1]
Plugin-Marktplatz
Ein Katalog, der Agent-Erweiterungen verteilt und einen geprüften Stand speichern kann. Der installierende Client muss den Pin trotzdem durchsetzen.[1]
CWE-345
Unzureichende Prüfung der Datenauthentizität: Ein System verwendet Daten, ohne ausreichend zu prüfen, ob sie dem erwarteten authentischen Wert entsprechen.[5]

Framework-Zuordnungen

  • CWE-Referenz für die in diesem Leitfaden beschriebene Schwachstelle: CWE-345

Schritt-für-Schritt Angriffsablauf

Schritt 1

Der Marktplatz speichert einen geprüften Commit

Ein Plugin-Eintrag verweist auf ein Repository und eine konkrete Commit-SHA, die der Installer verwenden soll.[1]

Schritt 2

Der Repository-Kontrolleur kann Refs ändern

AIR Security berichtet, dass ein Repository-Kontrolleur auf Hosts, die solche Namen erlauben, einen Standard-Branch mit dem Namen der angeforderten SHA anlegen kann. Für Gemini CLI beschreibt die Meldung zusätzlich einen separaten FETCH_HEAD-Auflösungspfad.[1]

Schritt 3

Der Installer checkt aus, ohne HEAD zu prüfen

Vor der Korrektur übergab Codex die angeforderte SHA an <code>git checkout</code> und wertete einen erfolgreichen Git-Aufruf als Beleg für den eingehaltenen Pin.[1], [2]

Schritt 4

Der Client akzeptiert oder verwirft den ausgecheckten Baum

Codex liest nach dem Checkout <code>git rev-parse HEAD</code> und bricht bei einer Abweichung ab. Ohne eine entsprechende Prüfung kann ersetzter Plugin-Code mit den Rechten des Agent-Benutzers installiert und ausgeführt werden.[2], [1]

Quellcode: Verwundbar vs. Sicher

Der anfällige Pfad setzte eine erfolgreiche Namensauflösung mit dem Nachweis der Objektidentität gleich. Der Patch vergleicht das resultierende HEAD mit dem Marketplace-Pin und verweigert einen anderen Commit. Dieses Codepaar zeigt die Codex-Korrektur; die anderen Produkte hatten eigene Installer und dürfen nicht als identisch gepatcht gelten.[2], [6]

VERWUNDBARE IMPLEMENTIERUNG
// Zustand vor der Korrektur aus OpenAI Codex PR #34644
if let Some(target) = sha.or(ref_name) {
    run_git(&["checkout", target], Some(destination))?;
}
// Ein erfolgreicher Checkout galt als Beweis für eine passende SHA.
GEHÄRTETER SICHERHEITS-PATCH
// Codex-Korrektur: aufgelösten Commit prüfen, nicht nur das angeforderte Argument
if let Some(sha) = sha {
    run_git(&["checkout", sha], Some(destination))?;
    let checked_out_sha =
        run_git_output(&["rev-parse", "HEAD"], Some(destination))?;
    if !checked_out_sha.eq_ignore_ascii_case(sha) {
        return Err(format!(
            "checked out Git SHA {checked_out_sha} does not match requested SHA {sha}"
        ));
    }
} else if let Some(ref_name) = ref_name {
    run_git(&["checkout", ref_name], Some(destination))?;
}

Checkliste für Engineering & Systemsicherheit

Quellen

← AI Security Directory →