File segreti depositati

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

File segreti depositati — Fasi della formazione

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. Verifica della conoscenza

    Hai appena visto un repository pubblico consegnare a un estraneo le chiavi di un ambiente live. Blocca il perché.

  8. 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.

  9. 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.

  10. 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