+++ title = "Link Comentado: Coordinated disclosure of XML round-trip vulnerabilities in Go’s standard library" date = 2020-12-14 [taxonomies] tags = ["links", "go", "google", "golang", "xml", "vulnerabilidade"] +++ Mattermost, junto com o Google, anunciou a [vulnerabilidade na biblioteca XML padrão do Go](https://mattermost.com/blog/coordinated-disclosure-go-xml-vulnerabilities). Tem algumas coisas que precisam ser examinadas nesse anúncio. Antes de mais nada, eu preciso avisar que eu nunca gostei de Go. Eu não gosto da forma como a organização lida com a comunidade, eu não gosto da forma como são lidados com os erros, e eu não gosto do estilo de código que eles usam. Eu uso qualquer oportunidade para xingar a linguagem. Mas dessa vez, eu acho que a coisa ficou tão errada que não tem como não falar mal. Primeiro, ok, tem uma vulnerabilidade na biblioteca de XML. A vulnerabilidade em si não é grande coisa -- basicamente, o que acontece é que a biblioteca não mantém a ordem dos elementos conforme a entrada -- mas o seu uso em coisas maiores, como o SAML, afeta a forma como elas são liadas. Basicamente, algo que parece um XML/SAML bem formado vai ser interpretado da forma errada porque o sistema está mudando a semântica da coisa por mudar a ordem dos elementos. Segundo, desde que a vulnerabilidade foi encontrada, o time de segurança do go estava trabalhando na correção, sem sucesso. A solução depois disso foi que "a causa raiz da vulnerabilidade não pode ser corrigida de forma confiável." Isso quer dizer que a biblioteca padrão agora tem uma vulnerabilidade que não pode ser corrigida. Terceiro, essa vulnerabilidade foi encontrada em agosto deste ano e só agora, quatro meses depois, a vulnerabilidade foi divulgada e anunciada que não pode ser corrigida. Isso é bem enfurecedor porque o Google tem um projeto chamado "Project Zero", criado para encontrar e relatar falhas de seguranças em vários produtos. O problema é que essa é a terceira vulnerabilidade não-tão-pequena no código do go e nenhuma delas foi encontrada pelo Project Zero. Por outro lado, eles são bem rápidos para encontrar e apontar -- depois de um prazo de 30 dias -- problemas no Windows e no iOS, por exemplo. Ah, e caso você esteja se perguntando quais foram essas outras vulnerabilidades: a primeira era relacionada com [bibliotecas criptográficas](https://twitter.com/peter_szilagyi/status/1332047468004077569) e basicamente afetou aplicações que usam Etherium. A segunda foi um problema com a biblioteca "http", que poderia levar a uma [negação de serviço no Kubernete](https://www.bleepingcomputer.com/news/security/severe-flaws-in-kubernetes-expose-all-servers-to-dos-attacks/). Ainda... Quatro meses e nada de solução? Isso dá a sensação de que tem algo seriamente errado com a arquitetura interna da linguagem, que não permite que algo como ordenação seja aplicada. Mas de volta ao problema inicial: Quarto, a empresa que trabalhou com o Google e ajudou a tentar corrigir o problema apontam que eles não acreditam que a solução apresentada pelo time do go vai realmente corrigir o problema. Nas palavras deles, parece que o Google só quer jogar o problema pra baixo do tapete e, quando a coisa explicar, eles possam dizer "é seu problema, nós avisamos". A solução do Google é, basicamente, "nós vamos botar na documentação e esperar pelo menor". Então, sem correção de verdade. Honestamente, a solução correta nesse caso seria remover a coisa toda e deixar alguém, por sorte mais inteligente, escrever uma biblioteca XML correta. Nós dizemos que nenhuma documentação é melhor que uma documentação errada, então nenhuma biblioteca XML é melhor que uma biblioteca XML vulnerável. Outra solução seria criar bindings para a libxml2, que é uma biblioteca em C que serve como base para as necessidades de XML de outras linguagens. Isso significaria que a biblioteca padrão do go necessitaria outras bibliotecas para ser construída. Pessoalmente, com tudo que tem acontecido com a linguagem, usar a mesma para qualquer projeto semi-sério (ou superior) é completamente estúpido. PS: Logo depois que eu postei esse artigo, eu recebi um aviso que o time do go anunciou uma nova versão que corrige uma vulnerabilidade na biblioteca "ssh" da stdlib. Mais uma vez, usar go para um projeto que é pelo menos semi-sério é estupidez.