Der Fehler in unserem Secret-Scanner, den die Canary-Werte nicht finden konnten

Versand

Bevor ein Kit, das wir verkaufen, gepackt wird, scannt ein Gate es auf die tatsächlichen Werte unserer eigenen Secrets. Jeder Scan beginnt damit, Canary-Werte zu setzen, einen von jeder Art, und verweigert die Ausführung, wenn nicht alle gefunden werden. Es hat sie immer gefunden. Es hatte trotzdem einen Fehler.

Wie das Gate Secrets liest

Das Gate sucht nicht nur nach Dingen, die wie Schlüssel aussehen. Es liest die Dateien, in denen unsere Secrets liegen (env-Dateien, JSON-Konfigurationen, Schlüsseldateien), nimmt jeden Wert, dessen Name verrät, dass er ein Secret ist, und durchsucht dann das, was wir ausliefern wollen, nach genau diesen Werten, so wie sie geschrieben sind und base64-kodiert.

Der Fehler

Für eine Zeile wie diese:

DB_PASSWORD='Tr0ub4dor-and-3'  # im Mai rotiert

entfernte der Reader die umgebenden Anführungszeichen nur, wenn der Wert sowohl mit einem Anführungszeichen begann als auch endete. Mit einem Kommentar nach dem Wert endet die Zeile mit einem Buchstaben, also blieben die Anführungszeichen erhalten. Der Kommentar wurde als Nächstes abgeschnitten, und das Gate suchte weiter nach 'Tr0ub4dor-and-3', inklusive Anführungszeichen. Ein Kit mit dem Passwort ohne diese Anführungszeichen wäre durchgekommen.

Warum die Canary-Werte es nie bemerkten

Ein Canary-Wert testet ein Netz: Setze einen Wert, den der Scanner bereits kennt, und prüfe, ob er gefunden wird. Unsere Canary-Werte wurden direkt an den Scanner übergeben, sodass sie nie den Code durchliefen, der eine Konfigurationszeile liest. Jedes Netz wurde getestet, der Parser davor jedoch nicht.

Wie wir es fanden

Wir machten das Gate zu einem eigenen Produkt und schrieben einen Test, der ihm Konfigurationsdateien in den Formen zuführte, die Leute tatsächlich schreiben: export, Anführungszeichen, nachgestellte Kommentare. Der Test schlug bei der Zeile mit Anführungszeichen und Kommentar fehl. Der Fix liest einen Wert in Anführungszeichen bis zum schließenden Anführungszeichen und ignoriert alles Folgende.

War das relevant?

Wir prüften es, bevor wir etwas änderten. Auf unserem Build-Computer liest das Gate 133 Secret-Werte aus den 59 Dateien, die es erhält, und auf einem zweiten Rechner 499; keiner hatte diese Form. Keine frühere Bewertung ändert sich: Jedes Kit, das wir veröffentlicht haben, wurde auf dieselben Werte geprüft, auf die es jetzt geprüft würde. Wir haben das Gate auf allen drei Rechnern trotzdem behoben.

Das Fazit

Wenn ein Scanner das extrahiert, wonach er sucht, testen Sie die Extraktion mit realistischen Eingaben und nicht nur die Suche mit platzierten Werten. Ein Canary beweist, dass das Netz funktioniert; er sagt nichts darüber aus, ob die richtigen Fische auch tatsächlich darin landen. Die Tests von Secret Gate decken nun beides ab, und vor der Veröffentlichung haben wir geprüft, ob es exakt dieselben 133 Werte wie unser Build-Gate liest.

Aktualisiert: