Alcune settimane fa ho inserito per sbaglio un file di configurazione contenente alcune password e l'ho inserito su un telecomando GitLab gestito dalla mia azienda.
Successivamente ho utilizzato BFG Repo-Cleaner per rimuovere le password dalla cronologia.
Dopo la pulizia ho eseguito:
git reflog expire --expire=now --all && git gc --prune=now --aggressive
git push --force
Ho visto che gli hash del commit sono stati modificati e che i dati sensibili sono stati rimossi (posso vedere che entrambi utilizzano l'interfaccia web GitLab o esplorano un nuovo clone del repository).
Tuttavia, se accedo a una delle vecchie pagine chiamando direttamente l'URL ( https://<my-company>/gitlab/test-bfg/commit/<theoretically-unexisting-hash>
) posso vedere un gitdiff di un commit contenente le password! L'ho scoperto accidentalmente, navigando nella cronologia del browser.
Se provo a eseguire il checkout dello stesso hash sul repository appena clonato, ottengo questo messaggio:
fatal: reference is not a tree: d7fb999c...
Quindi, se una persona clona quel repository da GitLab I pensa non è in grado di visualizzare quel commit *, tuttavia è ancora visibile dall'interfaccia web, se si può indovinare un vecchio hash.
* In ogni caso, II mi sentirei più a mio agio leggendo did not match any file(s) known to git
invece di reference is not a tree
.
Non penso che questo sia un tipo di problema nella cache, perché l'ho provato di nuovo dopo alcune ore.
Quindi le domande sono:
- Perché questo succede? Sto usando gli strumenti nel modo sbagliato?
- Ci sono alcuni modi per vedere gli hash nascosti?
- L'hai mai provato, magari utilizzando sistemi diversi (GitHub, BitBucket)?
Grazie mille.