Il bug nel nostro scanner di segreti che i canarini non riuscivano a trovare

Spedizione

Prima che un kit che vendiamo venga compresso, un gate lo scansiona per cercare i valori effettivi dei nostri segreti. Ogni scansione inizia piantando dei canarini, uno per ogni tipo, e rifiuta di avviarsi se non li trova tutti. Li trovava sempre. Eppure c'era un bug.

Come il gate legge i segreti

Il gate non cerca solo cose a forma di chiave. Legge i file dove risiedono i nostri segreti (file env, configurazioni JSON, file di chiavi), prende ogni valore il cui nome indica che è segreto e cerca nel contenuto che stiamo per spedire quei valori esatti, sia come scritti che codificati in base64.

Il bug

Per una riga come questa:

DB_PASSWORD='Tr0ub4dor-and-3'  # ruotata a maggio

il reader rimuoveva le virgolette circostanti solo se il valore iniziava e finiva con un carattere di virgoletta. Con un commento dopo il valore, la riga finisce con una lettera, quindi le virgolette restavano. Il commento veniva tagliato subito dopo, e il gate continuava a cercare 'Tr0ub4dor-and-3', virgolette incluse. Un kit contenente la password senza quelle virgolette sarebbe passato.

Perché i canarini non se ne sono mai accorti

Un canarino testa una rete: pianta un valore che lo scanner conosce già, verifica che venga trovato. I nostri valori canarino venivano passati direttamente allo scanner, quindi non passavano mai attraverso il codice che legge una riga di configurazione. Ogni rete era testata, ma il parser davanti a loro no.

Come l'abbiamo trovato

Stavamo trasformando il gate in un prodotto a sé stante e abbiamo scritto un test che gli forniva un file di configurazione nelle forme che le persone scrivono davvero: export, virgolette, commenti finali. Il test falliva sulla riga con virgolette e commento. La correzione legge un valore tra virgolette fino alla sua virgoletta di chiusura e ignora ciò che segue.

Aveva importanza?

Abbiamo verificato prima di cambiare qualsiasi cosa. Sulla nostra macchina di build il gate legge 133 valori segreti dai 59 file che gli vengono dati, e su una seconda macchina 499; nessuno aveva quella forma. Nessun verdetto precedente cambia: ogni kit che abbiamo rilasciato è stato scansionato per gli stessi valori per cui sarebbe scansionato ora. Abbiamo comunque corretto il gate su tutte e tre le macchine.

Il punto chiave

Se uno scanner estrae ciò che cerca, prova l'estrazione con input realistici, non solo la ricerca con valori predefiniti. Una canary dimostra che la rete funziona; non dice nulla sul fatto che i pesci giusti vi arrivino mai. I test di Secret Gate ora coprono entrambi gli aspetti e, prima del rilascio, abbiamo verificato che legga esattamente gli stessi 133 valori della nostra build gate.

Aggiornato: