
A maioria dos desenvolvedores conhece e adora as páginas do github. Caso você não os tenha encontrado, este serviço possibilita a criação de um site estático a partir do seu repositório, que estará disponível no domínio smth.imtqy.com. Isso é incrivelmente conveniente para qualquer estática temporária, documentação, pequenos sites simples e assim por diante. Não há necessidade de pensar em algum tipo de servidor web adicional.
Há também a oportunidade de vincular seu domínio ao repositório - tudo ficará muito bonito. Existe até suporte SSL.
Após esta breve introdução, passamos ao tópico atual do artigo. Mais recentemente (9 de novembro), tive uma história interessante. Recomendo não ler de uma só vez, mas pare periodicamente e me pergunto o que significam todas as notas introdutórias recebidas no momento. Acho que um treino interessante sairá disso, embora a trama do meu detetive não tenha sido muito longa e distorcida.
Decidi adicionar o endereço do meu currículo ao próximo perfil. O resumo está apenas nas páginas do github, porque por que não? Por hábito, ele clicou para verificar se tudo estava funcionando ... E de repente eu descobri algo estranho lá:

Fiquei muito surpreso. Foi para as configurações do repositório. Vi que no momento não está vinculado ao domínio ao qual deve estar vinculado. Eu tentei estalar. De repente, ocorreu um erro:
O CNAME whois.jehy.ru
já está em uso. Confira https://help.github.com/articles/trou Troubleshooting - custom - domains /# cname - already - taken para obter mais informações
Ele ficou tenso e ficou surpreso. Depois disso, fui examinar atentamente esta página repentina. Como antes, vi apenas um modelo padrão, direitos autorais de 2013 e, de repente, um link para o mapa do site. O mapa do site contém a data de sua geração a partir da data atual, além de um documento html estático com um título e um conteúdo que lembra muito o método de validação do google (nome googlef3e716e930ae1730
, conteúdo de google-site-verification: googlef3e716e930ae1730.html
). Aqui eu já estava tenso, corri, alterei o registro NS para o meu servidor e comecei a pensar no que havia dado errado.
A pesquisa na superfície revelou o seguinte:
- Parece que o seqüestro de domínio é um problema potencialmente conhecido e já foi resolvido - basta registrar o endereço do seu repositório no CNAME .
- Apesar disso, em muitas instruções sobre como vincular um github a um domínio (incluindo as 10 principais pesquisas), os IPs são gravados diretamente, ou simplesmente imtqy.com.
Então pensei que provavelmente tinha um registro CNAME. Então eu mudei para o correto, vinculado ao meu repositório. Agora a entrada era assim:
dig whois.jehy.ru +nostats +nocomments +nocmd ; <<>> DiG 9.11.3-1ubuntu1.2-Ubuntu <<>> whois.jehy.ru +nostats +nocomments +nocmd ;; global options: +cmd ;whois.jehy.ru. IN A whois.jehy.ru. 6984 IN CNAME jehy.github.io. jehy.github.io. 3384 IN A 185.199.108.153 jehy.github.io. 3384 IN A 185.199.110.153 jehy.github.io. 3384 IN A 185.199.109.153 jehy.github.io. 3384 IN A 185.199.111.153
E qual foi o meu espanto quando vi novamente esse maravilhoso pouso em breve!
Para verificar, eu até fiz outro teste:
1) Iniciou um novo registro CNAME test.jehy.ru e indicou para ela um perfil de Ryan Dahl
2) Iniciou um repositório de teste , especificando para ele um domínio personalizado test.jehy.ru. Tudo parece estar correto, de acordo com as instruções, e a ligação não deve funcionar. Mas, infelizmente, o resultado é óbvio .
Em seguida, entrei em contato com o suporte técnico do github através de uma forma estranha no site . Lá eles me disseram que poderiam desatar o repositório de outra pessoa do meu domínio se eu adicionar outro registro NS a mim mesmo. Fiz, escrevi de volta e de sexta até segunda-feira não recebi uma resposta. Talvez fosse necessário reescrever dessa forma - mas já era maior que minha força. Acabei de sair do meu site estático no meu servidor.
Naquela época, eu tinha três opções para o que aconteceu:
1) Alguém acidentalmente anotou o endereço "whois.jehy.ru" em seu repositório em 2018, enquanto criava uma página de destino com "em breve" a partir de 2013, onde, por algum motivo, existe um html do Google para verificação de direitos. Bem, dificilmente.
2) Algum bug louco aconteceu. Também é improvável. Ele repetiu no segundo local de teste.
3) O foco no CNAME nunca funcionou ou quebrou e os atacantes o usam para atacar. Até agora, essa me pareceu a opção mais provável.
Então lembrei que, no caso de ligação de domínio, o próprio github cria um arquivo chamado CNAME no seu repositório. E ele foi procurar quem adicionou meu domínio. E - bingo!
Um invasor foi encontrado em uma pesquisa:

Aqui está o meu domínio:

E aqui estão alguns outros:

Como você pode ver, não foi um acidente. Alguém roubou uma quantidade razoável de domínios - incluindo o segundo nível! E ele obteve controle total sobre o conteúdo deles, incluindo a confirmação no Google dos direitos de propriedade desses domínios!
A propósito, você também pode adicionar que, às vezes, um hacker não substitui apenas o conteúdo do site, mas bifurca o repositório original, após o qual adiciona arquivos de verificação. E foi divertido por pelo menos um mês (eu descobri comprometimentos imediatos a partir de 6 de outubro). Bem, os seguidores são semelhantes lá.
Além disso, minhas suposições sobre como esse ataque ocorre e por que é necessário.
1) Primeiro, o hacker encontra sites resolvidos no imtqy.com. Isso é bem fácil de fazer.
2) Em seguida, ele os filtra, deixando apenas aqueles que retornam um erro (parece que existem apenas 404 lá). Pode haver muitos casos em que os repositórios não foram anexados - alguém não configurou o repositório, alguém o excluiu, alguém obteve as configurações de ligação (parece-me que aconteceu quando mudei o ramo para as páginas do github).
3) O hacker simplesmente cria um novo repositório com o conteúdo de que precisa e o vincula ao domínio "gratuito". Voila!
4) Então tudo depende apenas da imaginação do hacker. Portas, colocação de links, interceptação de dados, acesso ao gerenciamento do Google Apps pelo Google ... Existem muitas opções.
O que fiz a seguir, com todas as evidências de uso malicioso de ligações em mãos:
- Descrito em correspondência com support@github.com todos os detalhes;
- Mais uma vez os reescrevi no formulário de contato;
- Foi adicionado um ticket ao hackerone.com . Devo dizer que afirma que o githubpages.io não está incluído no programa de recompensa, mas não havia outras opções. Portanto, eu tive que ignorar esse aviso, e até o robô, que gentilmente me aconselhou a não enviar este relatório pelos mesmos motivos.
Até hoje, eles não responderam ao formulário de contato até hoje, mas dois dias depois eles me responderam no hackerone. Em suma, a resposta foi que esse é um recurso conhecido do serviço, não é uma vulnerabilidade e a equipe de spam está envolvida em tais coisas. O relatório foi fechado como "informativo", então escrevo sobre tudo o que aconteceu com a consciência limpa. Eles também me informaram que a conta que eu indiquei foi banida. Eu verifiquei - sim, ele não existe mais. Seus seguidores desapareceram alguns dias depois (não está claro por que não imediatamente).
Pode-se terminar com isso e dizer que está tudo em ordem ... Mas, na verdade, estou extremamente envergonhado com esta situação:
- Por que essas contas não estão em meses? Há conteúdo idêntico, há arquivos de validação do Google em todos os lugares, por uma conta, existem muitos desses sites ... Sinais comuns - uma carruagem e um carrinho pequeno.
- Por que a equipe de spam não verificou repositórios relacionados?
- Por que você vê a ilusão de segurança nas instruções para vincular um domínio, sugerindo que você defina o nome do seu repositório em CNAME se isso não afeta nada?
- Por que não existe um mecanismo de aviso que indique que um domínio anteriormente vinculado à sua conta agora está vinculado a outro?
- Por que no github é impossível responder e-mails do suporte? Ou talvez eu tenha caído em algum tipo de filtro?
Mas a principal questão que me incomoda é por que o github não verifica os registros NS dos domínios listados nas páginas do github quanto à presença de um repositório específico do CNAME neles? Esta é a operação mais simples que pode ser executada ao vincular um domínio e não leva tempo ... Além disso, as instruções dão a sensação de que ele deveria ser assim .... Então, por que esse cheque está quebrado?
Em geral, escrevo este post com a esperança de que, de alguma forma, chegue ao github, e os caras entrem em ação. Antes da pergunta "por que falar sobre isso, todo mundo vai escalar para fazer isso agora" - responderei que o buraco já é bem conhecido e é explorado ativamente. E agora, claramente, os domínios "abandonados" estão sendo constantemente analisados, de modo que vários novos participantes não mudam a imagem.
Normalmente, eu não faço, mas será ótimo se você der um tapinha na tradução deste artigo, que eu coloquei no meio. Sim, eu sei que o habr agora é multilíngue, mas durante todo o tempo tenho visto uma postagem e meia em inglês e não acho que alguém possa prestar atenção a elas. E, no meio, geralmente existem bons posts técnicos. Portanto, será ótimo se você prestar atenção a esse buraco. Se houver algo - não receberei dinheiro por isso, não há cartão americano, o interesse é puramente altruísta.
O que mais você pode pensar no final? Provavelmente vale sempre a pena lembrar quando você coloca algo em capacidades de terceiros. Obviamente, na Internet não há nada pessoal e tudo é de terceiros - os domínios "your" pertencem ao registrador, os servidores "your" pertencem ao Google, Amazon ou outra pessoa ... Não se pode dizer que o github é menos confiável do que qualquer servidor "próprio" ... Mas "o seu servidor" está de alguma forma mais próximo do corpo e mais previsível. Em geral, você sempre precisa se lembrar de seus recursos, de sua importância, de possíveis perdas ao interceptá-los e de que em serviços de terceiros pode haver uma especificidade de trabalho muito repentina.
PS: Agradecemos a todos pela foto e pndpnd por traduzir o artigo para o inglês.