File segreti depositati
Un .gitignore mancante e il tuo .env verrà spedito in tutto il mondo.
Cos’è File segreti depositati?
L'hardcoding di un segreto nel sorgente è un problema. Impegnarne un intero file è un'altra. Un repository senza .gitignore tiene traccia dei file .env, delle chiavi private e dell'account di servizio JSON dal primo commit e, una volta tracciato, un file appartiene alla cronologia, quindi ogni clone ne porta una copia. Clonerai un repository pubblico, leggerai un .env impegnato e raggiungerai un ambiente di staging live. Quindi annullerai la traccia dei file con git rm --cached, ruoterai ogni chiave esposta, aggiungerai un .gitignore e installerai un hook pre-commit che blocca i nomi di file segreti.
Cosa imparerai in File segreti depositati
- Riconoscere che un .gitignore mancante o incompleto consente di eseguire il commit e il monitoraggio di un intero file segreto, un .env, una chiave privata o un JSON dell'account di servizio dal primo commit
- Comprendere perché ogni clone di un repository pubblico trasporta una copia di un file segreto tracciato, quindi l'esposizione non può essere annullata eliminando il file in un secondo momento
- Distinguere il commit di un FILE segreto sotto controllo di versione dall'hardcoding di un letterale segreto all'interno del codice sorgente e sapere che entrambi devono essere tenuti fuori dal repository
- Applica la pulizia: rimuovi i file dal tracciamento con git rm --cached e ruota le chiavi esposte, trattando qualsiasi segreto inviato come compromesso
- Previeni la ricorrenza con un .gitignore che copre i file segreti oltre a un hook di pre-commit che blocca i nomi di file segreti noti prima che vengano sottoposti a commit
File segreti depositati — Fasi della formazione
-
Dimensionare il bersaglio
Oggi Bob prende di mira Tavonn, una startup di integrazione dei pagamenti che distribuisce parte del suo codice allo scoperto. Inizia dall'archivio pubblico, valutando ciò che l'azienda gestisce prima di cercare un modo per entrarvi. Un repository pubblico è un regalo per qualcuno come Bob: l'intero progetto, ogni file, scaricabile in un unico comando.
-
Clona il repository
Bob clona il repository sul suo computer in modo da poter leggere ogni file di cui tiene traccia, offline e al proprio ritmo. Qualunque sia la traccia del repository, arriva con il clone. Se mai è stato commesso un file segreto, è nella copia che ha appena estratto.
-
Elenca i file tracciati
Bob elenca tutto ciò che viene tracciato dal repository. Non sta guardando cosa c'è sul disco, sta chiedendo a git quali file sono effettivamente sotto il controllo della versione, perché quelli sono quelli che ogni clone trasporta.
-
Leggi il file segreto
Bob apre il file dell'ambiente committato. Questa è la differenza tra questa fuga di notizie e una singola chiave codificata: non è un valore incollato in una riga di codice, è un intero file di segreti sotto il controllo della versione. Tutto ciò di cui il servizio ha bisogno per funzionare è qui, in testo semplice.
-
Raggiungere l'ambiente di staging
Una chiave trapelata è solo una teoria finché non apre qualcosa. Bob ha già tutto ciò di cui ha bisogno dal clone: l' .env committato gli ha fornito l'URL di base dell'API in PUBLIC_API_URL e una chiave live, e i percorsi che ha clonato in src/routes/payments.js definiscono il feed di pagamento in /v1/transactions . Assembla la richiesta e porta la chiave in un'intestazione di autorizzazione come farebbe un vero cliente. Gli endpoint non sono mai stati il segreto; si siedono nella fonte pubblica. La chiave era e il file committato gliene ha consegnato uno, quindi il server non ha motivo di rifiutare la richiesta.
-
I dati di pagamento sono aperti
Il server si è fidato della chiave e ha risposto. Bob sta leggendo i registri dei pagamenti temporanei di Tavonn dall'esterno dell'azienda, senza alcun resoconto proprio.
-
Verifica della conoscenza
Hai appena visto un repository pubblico consegnare a un estraneo le chiavi di un ambiente live. Blocca il perché.
-
Arriva l'allerta
Possiedi il repository dei servizi di pagamento di Tavonn. Durante la notte, lo scanner segreto del team di sicurezza ha contrassegnato l'archivio pubblico e ti ha inviato un'e-mail. La scoperta è schietta: un .env committato con chiavi live si trova nel repository pubblico e non c'è nessun .gitignore che tenga fuori file simili.
-
Tracciato, senza .gitignore
La tua prima mossa è vederlo di persona. Elenca ciò che git sta monitorando nel repository, ed eccolo lì: .env e la chiave dell'account di servizio sono sotto il controllo della versione e nessun .gitignore è nell'elenco. Un file presente su disco è una cosa; viene eseguito il commit di un file che Git sta monitorando, nella cronologia e in ogni clone.
-
Scopri i file segreti
Impedisci a git di tracciare i file segreti con git rm --cached , che li rimuove dall'indice lasciandoli sul disco in modo che il servizio possa ancora essere eseguito localmente. Ti commit e spingi quella modifica e i file scompaiono dal repository corrente. Sembra la soluzione. Non lo è, e il passaggio successivo mostra il perché.
Copertura dei framework di sicurezza
CWE
- CWE-540 Inclusion of Sensitive Information in Source Code
- CWE-522 Insufficiently Protected Credentials
MITRE ATT&CK
- T1552.001 Unsecured Credentials: Credentials In Files
CIS Controls
- CIS 3 Data Protection
- 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.DS Data Security
- PR.PS Platform Security