# CVE-2023-42793 - JetBrains TeamCity Authentication Bypass > [!danger] CVSS 9.8 - CISA KEV - Exploração por APTs Estatais > Bypass de autenticação crítico no **JetBrains TeamCity** permite que qualquer atacante não autenticado obtenha controle administrativo completo do servidor CI/CD. Explorada por **APT29** (Rússia) e **Lazarus Group** (Coreia do Norte) em campanhas de espionagem industrial e ataques à cadeia de suprimentos de software. ## Visão Geral **CVE-2023-42793** é uma vulnerabilidade crítica de bypass de autenticação no JetBrains TeamCity On-Premises, plataforma de integração contínua e entrega contínua (CI/CD) amplamente utilizada por equipes de desenvolvimento de software ao redor do mundo. A falha, divulgada em setembro de 2023, permite que um atacante não autenticado acesse endpoints específicos da API REST do TeamCity sem qualquer credencial, criando usuários administrativos e gerando tokens de acesso total ao servidor com um único request HTTP. A gravidade desta vulnerabilidade vai muito além de um simples comprometimento de servidor: um servidor TeamCity representa as "chaves do reino" de uma organização de software. Ele contém código-fonte proprietário, credenciais de infraestrutura cloud (AWS, Azure, GCP), chaves de assinatura de código, e pipelines de implantação automática - todos os elementos necessários para um ataque devastador à cadeia de suprimentos de software, semelhante ao [[solarwinds-supply-chain-attack|ataque SolarWinds de 2020]]. O impacto para o Brasil e América Latina é significativo: equipes de desenvolvimento de fintechs, empresas de tecnologia e integradores de sistemas da região utilizam o TeamCity amplamente. Além disso, a exploração por grupos como o [[g0032-lazarus-group|Lazarus Group]] - com histórico de ataques financeiros direcionados à LATAM - torna este vetor especialmente relevante para o setor [[financial|financeiro]] e [[technology|tecnológico]] da região. ## Cadeia de Exploração ```mermaid graph TB ATK[Atacante] -->|API REST sem autenticação| TC[TeamCity Server] TC -->|Bypass de autenticação| ADM[Criação de Admin] ADM -->|Token de API com acesso total| PIPE[Pipeline de Build] PIPE -->|Acesso a segredos e chaves SSH| SEC[Credenciais e Tokens] PIPE -->|Injeção em pipeline de deploy| SC[Comprometimento da Supply Chain] SEC -->|Acesso a AWS / Azure / GCP| CLOUD[Infraestrutura Cloud] ``` ## Descrição Técnica A falha existe no mecanismo de autenticação do TeamCity Server. Um endpoint específico da API REST pode ser acessado sem credenciais válidas, permitindo que o atacante: 1. Crie um novo usuário com privilégios administrativos 2. Gere tokens de acesso à API com permissões totais 3. Execute comandos no sistema operacional subjacente via build runners 4. Acesse segredos armazenados (variáveis de ambiente, tokens de deploy, chaves SSH) - **Vetor de ataque**: Remoto, sem autenticação - **Impacto**: Controle total do servidor CI/CD - **CVSS**: 9.8 (Crítico) ## Ataques Observados ### APT29 (Cozy Bear) O [[g0016-apt29|APT29]], grupo de inteligência russo, explorou esta vulnerabilidade em campanhas de espionagem contra a cadeia de suprimentos de software. O objetivo primário era comprometer repositórios de código-fonte e pipelines de build para injetar backdoors ou coletar segredos de infraestrutura. ### Lazarus Group O [[g0032-lazarus-group|Lazarus Group]] da Coreia do Norte utilizou esta CVE para acessar ambientes de desenvolvimento e roubar código proprietário, com foco em empresas de tecnologia e criptoativos. ## Alerta Conjunto CISA/FBI/NSA Em outubro de 2023, CISA, FBI e NSA emitiram um alerta conjunto (AA23-347A) alertando sobre a exploração ativa desta vulnerabilidade por atores estatais. O alerta destacou: - Dezenas de milhares de instâncias TeamCity expostas públicamente - Comprometimentos confirmados em múltiplas organizações - Risco significativo para pipelines de desenvolvimento de software ## Impacto Potencial Servidores TeamCity comprometidos oferecem acesso a: - Código-fonte de aplicações críticas - Credenciais de infraestrutura (AWS, Azure, GCP) - Chaves de assinatura de código - Pipelines de deploy automático - vetor para ataques à cadeia de suprimentos A técnica se assemelha ao ataque [[solarwinds-supply-chain-attack|SolarWinds Supply Chain Attack]] de 2020, onde o pipeline de build foi comprometido. ## Produtos Afetados | Vendor | Produto | Versão Afetada | Versão com Fix | |--------|---------|----------------|----------------| | JetBrains | TeamCity On-Premises | < 2023.05.4 | 2023.05.4+ | | JetBrains | TeamCity Cloud | N/A (mitigado pela JetBrains) | N/A | **Não afetado:** TeamCity Cloud (gerenciado pela JetBrains, corrigido automaticamente). ## Relevância LATAM > [!latam] Impacto no Brasil e América Latina > O JetBrains TeamCity é amplamente adotado por equipes de desenvolvimento no Brasil, especialmente em **fintechs, empresas de tecnologia e integradores de sistemas**. O **Lazarus Group**, que explorou esta CVE, tem histórico documentado de ataques financeiros na América Latina, incluindo operações contra exchanges de criptoativos e instituições bancárias da região. Uma instância TeamCity comprometida em uma fintech brasileira poderia permitir injeção de código malicioso em aplicativos financeiros distribuídos para milhões de usuários finais. Organizações na região devem auditar versões do TeamCity e verificar se há usuários administrativos desconhecidos criados após setembro de 2023. ## Remediação 1. **Atualizar** para TeamCity 2023.05.4 ou posterior imediatamente 2. **Verificar** se existem usuários administrativos desconhecidos criados recentemente 3. **Rotacionar** todas as credenciais e tokens armazenados no servidor 4. **Revisar** logs de acesso à API para atividade suspeita 5. **Restringir** acesso ao servidor TeamCity via firewall - não expor à internet pública ## Indicadores de Comprometimento > [!ioc]- IOCs - CVE-2023-42793 TeamCity / Onyx Sleet + Diamond Sleet (TLP:GREEN) > Fonte: Microsoft Threat Intelligence, outubro 2023. > > **Hashes SHA-256 (HazyLoad - Onyx Sleet)** > - `000752074544950ae9020a35ccd77de277f1cd5026b4b9559279dc3b86965eee` - backdoor HazyLoad > > **Artefatos no Host** > - `C:\Windows\Temp\temp.exe` - HazyLoad (Onyx Sleet) > - `C:\Windows\ADFS\bginetmgr.exe` - HazyLoad (variante) > - Backdoor ForestTiger (Diamond Sleet) - verificar via Microsoft Defender IoCs públicados > > **Behavioral IoCs** > - Processo `java.exe` ou `javaw.exe` gerando filhos: `powershell.exe`, `cmd.exe`, `curl.exe`, `wmic.exe`, `net.exe`, `mshta.exe`, `certutil.exe` > - Tarefas agendadas criadas com nomes "TeamCity" ou "Windows Defender Service" > - Criação de usuario administrativo desconhecido no TeamCity após requisicao POST a `/app/rest/users/id:1/tokens/RPC2` ## Referências - [JetBrains Security Advisory](https://blog.jetbrains.com/teamcity/2023/09/critical-security-issue-affecting-teamcity-on-premises-update-to-2023-05-4-now/) - [CISA/FBI/NSA Joint Advisory AA23-347A](https://www.cisa.gov/news-events/cybersecurity-advisories/aa23-347a) - [Rapid7 Exploit Analysis](https://www.rapid7.com/blog/post/2023/09/19/CVE-2023-42793-critical-authentication-bypass-in-jetbrains-teamcity/) ## Relações - Explorada por: [[g0016-apt29|APT29]], [[g0032-lazarus-group|Lazarus Group]] - Técnica de acesso inicial: [[t1190-exploit-public-facing-application|T1190 - Exploit Public-Facing Application]] - Técnica de persistência: [[t1078-valid-accounts|T1078 - Valid Accounts]] - Risco de cadeia de suprimentos: [[t1195-supply-chain-compromise|T1195 - Supply Chain Compromise]] - Afeta setor: [[technology]], [[government]], [[financial]] --- ## Detecção e Resposta > [!warning] Aviso sobre as regras abaixo > As regras e consultas a seguir são **exemplos e pontos de partida**. Devem ser revisadas, > testadas e adaptadas ao seu ambiente específico antes de serem implantadas em produção. > Falsos positivos e negativos são esperados - tuning contínuo é necessário. Valide sempre > contra sua telemetria antes de ativar alertas. ### Splunk SPL **Detecção 1 - Requisição POST não autenticada ao endpoint de criação de token administrativo (exploração direta):** ```spl index=web OR index=teamcity http_method=POST (uri_path="*/app/rest/users/id:1/tokens/RPC2*" OR uri_path="*/app/rest/users/id:1/tokens/*") (http_status=200 OR http_status=201) | stats count, values(src_ip) as source_ips, values(http_user_agent) as user_agents by uri_path, http_status, dest | where count > 0 ``` **Detecção 2 - Criação de usuário administrativo suspeito no TeamCity via REST API:** ```spl index=teamcity sourcetype=teamcity_application_log ("user created" OR "admin account" OR "token generated") NOT (user IN ("known_admin_1","known_admin_2")) | rex field=_raw "user=(?<created_user>[^\s,]+)" | stats count, values(src_ip) as source_ips by created_user, _time | where count > 0 ``` **Detecção 3 - Processo suspeito filho de java.exe/TeamCity (execução pós-exploração):** ```spl | tstats count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes where Processes.parent_process_name IN ("java.exe","teamcity-server.exe") AND Processes.process_name IN ("powershell.exe","cmd.exe","curl.exe","wmic.exe","net.exe") by Processes.dest Processes.parent_process_name Processes.process_name Processes.process Processes.user | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` ``` Fonte de dados requerida: Logs de acesso web do TeamCity (ou proxy reverso Nginx/Apache), logs de aplicação do TeamCity (`teamcity-server.log`, `teamcity-activities.log`), Sysmon Event ID 1 (ProcessCreate) para detecção de processos filho suspeitos. ### Microsoft Sentinel (KQL) **Detecção 1 - POST não autenticado ao endpoint de criação de token (exploração CVE-2023-42793):** ```kql CommonSecurityLog | where RequestURL contains "/app/rest/users/id:1/tokens/" and RequestMethod == "POST" and (isempty(SourceUserName) or SourceUserName == "guest") and EventResult == "Success" | project TimeGenerated, DeviceAddress, SourceIP, RequestURL, RequestMethod, EventResult, AdditionalExtensions | sort by TimeGenerated desc ``` **Detecção 2 - Processos filho suspeitos originados de java.exe (servidor TeamCity):** ```kql DeviceProcessEvents | where InitiatingProcessFileName in~ ("java.exe", "javaw.exe") and FileName in~ ("powershell.exe", "cmd.exe", "curl.exe", "wmic.exe", "net.exe", "mshta.exe", "certutil.exe") | where InitiatingProcessCommandLine contains "teamcity" or FolderPath contains "TeamCity" | project Timestamp, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, FileName, ProcessCommandLine | sort by Timestamp desc ``` **Detecção 3 - Criação de conta administrativa suspeita (persistência pós-exploração):** ```kql DeviceProcessEvents | where FileName =~ "net.exe" and ProcessCommandLine matches regex @"(?i)net\s+(user|localgroup).*(\/add|administrators)" | project Timestamp, DeviceName, AccountName, ProcessCommandLine, InitiatingProcessFileName, InitiatingProcessCommandLine | sort by Timestamp desc ``` Tabela(s): `CommonSecurityLog`, `DeviceProcessEvents`, `SecurityEvent` ### Sigma Rule ```yaml title: Detect CVE-2023-42793 JetBrains TeamCity Authentication Bypass - Token Creation id: b7e3f1a2-c4d5-6789-bcde-f01234567890 status: experimental description: > Detecta requisições POST não autenticadas ao endpoint /app/rest/users/id:1/tokens/RPC2 do JetBrains TeamCity, indicador direto de tentativa de exploração de CVE-2023-42793. Este endpoint cria um token de administrador sem autenticação em versões vulneráveis. Explorado por APT29 (SVR russo) e atores norte-coreanos (Diamond Sleet, Onyx Sleet). references: - [[t1190-exploit-public-facing-application]] - https://blog.jetbrains.com/teamcity/2023/09/critical-security-issue-affecting-teamcity-on-premises-update-to-2023-05-4-now/ - https://www.cisa.gov/news-events/cybersecurity-advisories/aa23-347a author: RunkIntel - baseado em pesquisa pública CISA AA23-347A e SOC Prime date: 2026-03-22 logsource: category: webserver detection: selection_endpoint: cs-method: 'POST' cs-uri-stem|contains: - '/app/rest/users/id:1/tokens/' - '/app/rest/users/id:1/tokens/RPC2' filter_authenticated: cs-username: '*' condition: selection_endpoint and not filter_authenticated falsepositives: - Administradores legítimos criando tokens via API com autenticação ativa - Scripts de automação com credenciais válidas level: critical tags: - attack.initial_access - attack.t1190 - attack.persistence - attack.t1078 ``` **Sigma Rule 2 - Processo filho suspeito do servidor TeamCity:** ```yaml title: Detect CVE-2023-42793 TeamCity Post-Exploitation - Suspicious Child Process id: d9a4b2c1-e7f8-4321-9abc-def012345678 status: experimental description: > Detecta execução de processos suspeitos (cmd, PowerShell, curl) como filhos do processo Java do servidor TeamCity. Padrão observado em campanhas de APT29 e Lazarus Group após exploração bem-sucedida de CVE-2023-42793 para execução remota de código. references: - [[t1059-001-powershell]] - https://www.microsoft.com/en-us/security/blog/2023/10/18/multiple-north-korean-threat-actors-exploiting-the-teamcity-CVE-2023-42793-vulnerability/ logsource: category: process_creation product: windows detection: selection: ParentImage|endswith: '\java.exe' Image|endswith: - '\powershell.exe' - '\cmd.exe' - '\curl.exe' - '\wmic.exe' - '\net.exe' - '\mshta.exe' condition: selection falsepositives: - Builds legítimos do TeamCity que executam scripts PowerShell ou cmd como parte do pipeline de CI/CD level: high tags: - attack.execution - attack.t1059.001 - attack.t1190 ``` ### EDR #### CrowdStrike Falcon Custom IOA Rule (Behavioral): Baseado em pesquisa pública (CISA AA23-347A e Microsoft MSTIC): - **Evento**: Processo `java.exe` ou `javaw.exe` com CommandLine contendo `teamcity` gerando processo filho `powershell.exe`, `cmd.exe`, ou `curl.exe` - **Indicador secundário**: Processo filho executando `net user /add` ou `net localgroup administrators /add` - criação de conta administrativa backdoor - **Indicador Diamond Sleet**: Arquivo `DSROLE.dll` ou `Version.dll` criado em `C:\ProgramData\` com execução posterior por `wsmprovhost.exe` ou `clip.exe` Threat Graph Query (Falcon Data Replicator / Event Search): ``` event_platform=Win #event_simpleName=ProcessRollup2 (ParentImageFileName=/java\.exe/i OR ParentImageFileName=/javaw\.exe/i) ImageFileName IN (/powershell\.exe/i, /cmd\.exe/i, /curl\.exe/i, /wmic\.exe/i) | groupBy([ComputerName, ParentImageFileName, ImageFileName, CommandLine], function=count(aid)) ``` #### SentinelOne Deep Visibility Query: ``` ProcessName in ("java.exe", "javaw.exe") AND ChildProcessName in ("powershell.exe", "cmd.exe", "curl.exe", "net.exe", "wmic.exe") AND (ProcessCmdLine contains "teamcity" OR FilePath contains "TeamCity") ``` ``` EventType = "File Creation" AND FilePath in ("C:\ProgramData\", "C:\Windows\Temp\") AND (FileName = "temp.exe" OR FileName = "bginetmgr.exe" OR FileName endswith ".dll") ``` O módulo de proteção comportamental do SentinelOne detecta os IoCs do **HazyLoad** (Onyx Sleet) em `C:\Windows\Temp\temp.exe` e `C:\Windows\ADFS\bginetmgr.exe`, e o backdoor **ForestTiger** (Diamond Sleet). SHA-256 públicos do HazyLoad: `000752074544950ae9020a35ccd77de277f1cd5026b4b9559279dc3b86965eee`. #### Microsoft Defender for Endpoint (MDE) Advanced Hunting (KQL): ```kql // Detecção de exploração + pós-exploração CVE-2023-42793 let SuspiciousChildProcs = dynamic(["powershell.exe","cmd.exe","curl.exe", "wmic.exe","net.exe","mshta.exe","certutil.exe"]); DeviceProcessEvents | where Timestamp > ago(30d) | where InitiatingProcessFileName in~ ("java.exe","javaw.exe") and FileName in~ (SuspiciousChildProcs) | project Timestamp, DeviceName, AccountName, InitiatingProcessFileName, InitiatingProcessCommandLine, FileName, ProcessCommandLine | sort by Timestamp desc | union ( // Scheduled task de persistência criado por atores (Diamond Sleet) DeviceProcessEvents | where Timestamp > ago(30d) | where FileName =~ "schtasks.exe" and ProcessCommandLine contains "/CREATE" and (ProcessCommandLine contains "TeamCity" or ProcessCommandLine contains "Windows Defender Service") | project Timestamp, DeviceName, AccountName, FileName, ProcessCommandLine ) ``` ### Firewall / Network #### Palo Alto Networks (PAN-OS) Restringir acesso ao servidor TeamCity On-Premises exclusivamente via VPN ou rede interna - **não expor à internet pública**. Utilizar Security Policy para bloquear acesso direto externo às portas 8111 (HTTP) e 443 (HTTPS) do TeamCity. App-ID / Threat ID relevante: O Threat Prevention do PAN-OS detecta o padrão de requisição POST ao endpoint `/app/rest/users/id:1/tokens/RPC2` como comportamento anômalo de autenticação. Verificar Threat ID via Palo Alto Threat Vault com query "TeamCity CVE-2023-42793". A Unit 42 públicou análise da exploração. #### Fortinet FortiGate O FortiGuard Labs públicou assinatura IPS para CVE-2023-42793 após divulgação em setembro de 2023. IPS Signature: `JetBrains.TeamCity.Authentication.Bypass` - verificar no FortiGuard Threat Encyclopedia. Aplicar pacote de definições IPS mais recente e ativar modo "block" na política IPS para segmentos contendo o servidor TeamCity. Bloquear acesso externo ao TeamCity via firewall policy - apenas acesso via VPN deve ser permitido.