# CVE-2021-39935 - GitLab Stored XSS em Snippets > [!high] CVSS 7.5 - CISA KEV - Stored XSS > Vulnerabilidade de Cross-Site Scripting armazenado no GitLab CE/EE que permite a atacantes não autenticados injetar JavaScript malicioso em snippets públicos. Exploração ativa confirmada pela CISA. Afeta organizações que utilizam GitLab como plataforma central de desenvolvimento colaborativo. ## Visão Geral CVE-2021-39935 é uma vulnerabilidade de **Cross-Site Scripting (XSS) armazenado** no [[_gitlab|GitLab]] CE/EE, presente na funcionalidade de snippets da plataforma. A falha ocorre porque o GitLab não sanitizava corretamente o conteúdo de snippets públicos ao renderizá-los para visitantes, permitindo que um atacante criasse um snippet com JavaScript malicioso embutido. Qualquer usuário que acessasse o snippet teria o script executado no contexto de sua sessão autenticada. O impacto prático de um XSS armazenado no GitLab é significativo: a plataforma hospeda repositórios de código, pipelines CI/CD, segredos de configuração e tokens de integração. Um atacante que explorasse essa falha com sucesso poderia sequestrar sessões de desenvolvedores autenticados, roubar tokens de acesso pessoal (PATs), modificar arquivos de repositório e até comprometer pipelines de entrega de software - configurando um vetor de ataque à cadeia de suprimentos de software (supply chain). A CISA adicionou esta CVE ao catálogo KEV em março de 2022, confirmando exploração ativa em ambientes reais. Para organizações brasileiras e latino-americanas, o GitLab é amplamente adotado em empresas de tecnologia, startups de fintech e ambientes governamentais que optaram por autohospedagem da plataforma. Instâncias GitLab on-premise sem atualização representam risco direto, especialmente quando expõem snippets públicamente sem controle de acesso. ## Produtos Afetados | Vendor | Produto | Versão Afetada | Versão com Fix | |--------|---------|----------------|----------------| | GitLab | GitLab CE | >= 11.3, < 14.3.6 | 14.3.6 | | GitLab | GitLab CE | >= 14.4, < 14.4.4 | 14.4.4 | | GitLab | GitLab CE | >= 14.5, < 14.5.2 | 14.5.2 | | GitLab | GitLab EE | >= 11.3, < 14.3.6 | 14.3.6 | | GitLab | GitLab EE | >= 14.4, < 14.4.4 | 14.4.4 | | GitLab | GitLab EE | >= 14.5, < 14.5.2 | 14.5.2 | ## Mecanismo de Exploração A vulnerabilidade reside na renderização de snippets públicos do GitLab. O fluxo de ataque envolve: 1. **Criação do snippet malicioso** - atacante (autenticado ou via API) cria um snippet com payload XSS no conteúdo 2. **Distribuição do link** - o snippet público pode ser compartilhado via spear-phishing, mensagens de suporte falso, ou indexado públicamente 3. **Execução no contexto da vítima** - desenvolvedor autenticado acessa o snippet; JavaScript executa na sessão ativa 4. **Roubo de credenciais** - o script pode exfiltrar cookies de sessão, tokens CSRF e PATs para servidor do atacante 5. **Pivô para supply chain** - com acesso ao repositório, atacante pode modificar código-fonte ou inserir backdoor no pipeline CI/CD Este padrão de ataque é consistente com o uso de [[t1059-001-powershell|T1059]] (execução de scripts) e [[t1566-phishing|T1566]] (phishing para entrega do link) como TTPs associadas. ## Mitigação **Patch imediato:** - Atualizar GitLab CE/EE para versão 14.3.6, 14.4.4, 14.5.2 ou superior - Verificar versão atual: `sudo gitlab-rake gitlab:check` **Controles compensatórios:** - Habilitar Content Security Policy (CSP) estrita no servidor GitLab - Revisar e desabilitar acesso público a snippets se não necessário (Admin Area > Settings > Visibility and access controls) - Auditar tokens de acesso pessoal (PATs) e revogar os não utilizados - Habilitar autenticação de dois fatores (2FA) para todos os usuários com acesso a repositórios críticos - Monitorar logs de acesso para requisições anômalas saindo da instância GitLab **Verificação de comprometimento:** - Inspecionar logs do servidor web em busca de requisições a domínios externos não autorizados originadas do contexto GitLab - Revisar histórico de commits recentes em repositórios críticos por alterações não autorizadas - Verificar configurações de webhooks por endpoints externos suspeitos > [!latam] Contexto LATAM > Organizações brasileiras que hospedam instâncias GitLab autoadministradas sem política de atualização regular são as mais expostas. Empresas de fintech, startups e setores governamentais que usam GitLab on-premise para armazenar código de sistemas financeiros ou infraestrutura crítica devem priorizar a atualização. A combinação de GitLab exposto públicamente com desenvolvimento ativo cria superfície de ataque para comprometimento de pipeline e ataques à cadeia de suprimentos de software - um vetor crescente no Brasil desde 2023. ## Detecção **Indicadores de comprometimento:** - Snippets com conteúdo `<script>`, `javascript:`, `onerror=`, `onload=` em campos de texto - Requisições HTTP GET/POST para domínios externos originadas do navegador após acesso a snippets GitLab - Alterações em arquivos de configuração CI/CD (`.gitlab-ci.yml`) não correlacionadas com commits legítimos - Novas entradas em webhooks de repositórios apontando para IPs/domínios desconhecidos **Splunk (logs de servidor web):** ```spl index=web sourcetype="access_combined" host="*gitlab*" (uri_path="*/snippets/*" OR uri_path="*/-/snippets/*") | rex field=referer "(?<external_domain>https?://[^/]+)" | where NOT match(external_domain, "^https?://your-gitlab-domain") | stats count by clientip, uri_path, external_domain | where count > 3 ``` ## Notas Relacionadas - [[_gitlab|GitLab]] - plataforma afetada - [[t1566-phishing|T1566 - Phishing]] - vetor típico de distribuição do link malicioso - [[t1059-001-powershell|T1059 - Command and Scripting Interpreter]] - execução de scripts via XSS - [[t1185-browser-session-hijacking|T1185 - Browser Session Hijacking]] - sequestro de sessão via cookie - [[t1195-002-compromise-software-supply-chain|T1195.002 - Compromise Software Supply Chain]] - impacto pós-exploração - [[technology|tecnologia]] - setor mais afetado - [[government|governo]] - instâncias GitLab on-premise em órgãos públicos - [[financial|financeiro]] - fintechs com GitLab autohospedado ## Referências - [NVD - CVE-2021-39935](https://nvd.nist.gov/vuln/detail/CVE-2021-39935) - [GitLab Security Release 14.5.2, 14.4.4, 14.3.6](https://about.gitlab.com/releases/2021/12/03/security-release-gitlab-14-5-2-released/) - [CISA KEV](https://www.cisa.gov/known-exploited-vulnerabilities-catalog)