- No GitHub, é possível acessar dados de forks deletados, repositórios deletados e até repositórios privados
- Isso é conhecido pelo GitHub e funciona assim por design
- Como isso representa um enorme vetor de ataque para qualquer organização que usa GitHub, foi introduzido o novo termo "Cross Fork Object Reference (CFOR)"
- A vulnerabilidade CFOR ocorre quando um fork de repositório consegue acessar dados sensíveis de outro fork, incluindo dados de forks privados e deletados
Acessando dados de forks deletados
- Considerando um fluxo de trabalho comum no GitHub, há casos em que alguém faz fork de um repositório público, faz commits no fork e depois apaga o fork
- O código commitado no fork continua acessível e continuará acessível para sempre
- Pode parecer que saber o hash do commit oferece proteção, mas esses hashes podem ser descobertos
- Encontrar dados em forks deletados acontece com bastante frequência
Acessando dados de repositórios deletados
- Considere um cenário em que há um repositório público no GitHub, um usuário faz fork desse repositório, faz commits de dados após o fork e depois apaga o repositório inteiro
- O código commitado após o fork continua acessível
- O GitHub armazena repositórios e forks em uma rede de repositórios, na qual o repositório "upstream" original atua como nó raiz
- Quando o repositório público "upstream" que foi forkado é "deletado", o GitHub reatribui o papel de nó raiz a um dos forks downstream
- Porém, todos os commits do repositório "upstream" continuam existindo e podem ser acessados por meio de qualquer fork
Acessando dados de repositórios privados
- Considerando um fluxo de trabalho comum no GitHub para open source de uma nova ferramenta,
- pode acontecer de se criar um repositório privado que será tornado público no futuro, criar uma versão interna privada desse repositório (via fork), fazer commits de código adicional para funcionalidades que não serão publicadas, publicar o repositório "upstream" e manter o fork privado
- Se funcionalidades privadas e o código relacionado (da etapa 2) ficam visíveis publicamente depende do que pode ser acessado a partir do repositório público
- Tudo o que for commitado no fork privado depois que o repositório "upstream" se tornar público não poderá ser visto
Como os dados são acessados na prática?
- Acessando diretamente os commits
- Em operações destrutivas na rede de repositórios do GitHub (como os 3 cenários mencionados acima), as referências aos dados de commit são removidas da UI padrão do GitHub e das operações normais de git
- No entanto, esses dados continuam existindo e podem ser acessados se o hash do commit for conhecido
- O hash do commit é um valor SHA-1, e se o usuário souber o hash SHA-1 do commit específico que deseja ver, pode ir diretamente para esse commit pelo endpoint
https://github.com/<user/org>/…;
- Os hashes de commit podem ser obtidos por força bruta via UI do GitHub
- Também é possível consultar hashes de commit pelo endpoint de public events API do GitHub
Política do GitHub
- Esses resultados foram enviados recentemente ao programa VDP do GitHub, e o GitHub deixou claro que os repositórios foram projetados para funcionar dessa forma
- Ao revisar a documentação, fica claro que o GitHub documenta explicitamente o que os usuários devem esperar nos casos descritos acima
Impacto
- Enquanto existir ao menos um fork, todos os commits dessa rede de repositórios (do repositório "upstream" ou de forks "downstream") continuarão existindo para sempre
- A arquitetura de repositórios do GitHub exige esse defeito de design, e a maioria dos usuários do GitHub não entende como a rede de repositórios realmente funciona, ficando menos protegida
- À medida que o secret scanning evoluir para conseguir escanear todos os commits de uma rede de repositórios, será possível receber alertas sobre segredos que nem são seus
- Esses 3 cenários são chocantes, mas não cobrem todas as formas pelas quais o GitHub pode armazenar dados removidos de um repositório
Opinião do GN⁺
- Este artigo levanta uma questão de segurança importante para organizações que usam GitHub. O fato de que dados de repositórios deletados ou privados ainda possam ser acessados é chocante. Isso parece ser uma falha fundamental de design causada pela arquitetura da rede de repositórios do GitHub
- Desenvolvedores devem estar cientes desse problema e ter cuidado ao commitar dados sensíveis ou segredos no GitHub. Depois que algo é enviado para um repositório público, ele pode permanecer acessível para sempre. Se um segredo crítico vazar, a única forma de remediação completa é por meio de rotação de chaves
- O GitHub divulga e documenta esse comportamento com transparência, mas a maioria dos usuários provavelmente não entende completamente como a rede de repositórios funciona. O GitHub deveria fazer mais para aumentar a conscientização sobre esse problema e educar os usuários
- Problemas semelhantes podem existir em outros sistemas de controle de versão. Desenvolvedores e organizações precisam entender bem a arquitetura e as limitações das ferramentas que usam ao gerenciar dados sensíveis
- Para evitar vazamento de dados críticos, são necessárias medidas de segurança em várias frentes, como controle de acesso rigoroso, aplicação do princípio do menor privilégio, secret scanning regular e monitoramento contínuo. Acima de tudo, é essencial ter alta conscientização de segurança entre os desenvolvedores
1 comentários
Comentários do Hacker News