# 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)