
Microsoft identifica 3.000 chaves ASP.NET vazadas que permitem ataques de injeção de código
A Microsoft recentemente alertou sobre uma prática insegura adotada por desenvolvedores de software: o uso de chaves ASP.NET machine keys vazadas publicamente em seus aplicativos. Essa prática coloca os sistemas em risco de ataques de injeção de código, como o uso do framework pós-exploração Godzilla. A empresa identificou mais de 3.000 chaves vazadas que podem ser usadas em ataques do tipo ViewState code injection, representando uma ameaça significativa para aplicações ASP.NET.
Neste artigo, vamos explorar os detalhes dessa vulnerabilidade, seu impacto e fornecer exemplos de scripts e práticas recomendadas para mitigar riscos.
O Que é o ataque de injeção de ViewState?
O ViewState é um mecanismo do framework ASP.NET usado para preservar valores de páginas e controles entre postbacks. Por padrão, os dados do ViewState são armazenados em um campo oculto na página, codificados em base64 e protegidos por um valor de hash gerado a partir de uma chave de autenticação de máquina (MAC key). Esse hash garante que os dados não foram adulterados.
No entanto, se as chaves MAC forem comprometidas ou vazadas, um atacante pode usá-las para injetar código malicioso no ViewState. Quando o servidor processa a requisição, o código malicioso é decriptado e executado, permitindo execução remota de código (RCE) no servidor IIS.
Impacto da vulnerabilidade
-
Execução Remota de Código (RCE): Ataques de injeção de ViewState permitem que atacantes executem código arbitrário no servidor.
-
Persistência no Sistema: Mesmo após a rotação das chaves, os atacantes podem manter acesso persistente ao sistema.
-
Exposição de Dados Sensíveis: Ataques bem-sucedidos podem resultar em vazamento de dados confidenciais.
-
Comprometimento de Aplicações Web: Ataques podem comprometer aplicações ASP.NET hospedadas em servidores IIS.
Exemplos de scripts para mitigação
Abaixo estão exemplos de scripts e práticas recomendadas para mitigar riscos associados a ataques de injeção de ViewState.
1. Verificação de chaves vazadas
A Microsoft forneceu uma lista de valores de hash para chaves vazadas. Use o seguinte script Python para verificar se suas chaves estão na lista:
import hashlib def check_leaked_keys(your_machine_key): # Lista de hashes de chaves vazadas (exemplo) leaked_hashes = [ "5f4dcc3b5aa765d61d8327deb882cf99", # Exemplo de hash MD5 "e99a18c428cb38d5f260853678922e03" ] # Calcula o hash da sua chave key_hash = hashlib.md5(your_machine_key.encode()).hexdigest() # Verifica se o hash está na lista de chaves vazadas if key_hash in leaked_hashes: print("ALERTA: Chave comprometida encontrada!") else: print("Chave segura.") # Exemplo de uso your_machine_key = "sua_chave_aqui" check_leaked_keys(your_machine_key)
2. Rotação de chaves MAC
Rotacione as chaves MAC regularmente para reduzir o risco de exploração. Use o seguinte script PowerShell para gerar uma nova chave:
# Gera uma nova chave MAC $newKey = [System.Web.Security.MachineKey]::GenerateKey(32) $newKeyBase64 = [System.Convert]::ToBase64String($newKey) # Atualiza a chave no arquivo web.config $webConfigPath = "C:\caminho\para\seu\web.config" $xml = [xml](Get-Content $webConfigPath) $machineKeyNode = $xml.SelectSingleNode("//system.web/machineKey") $machineKeyNode.SetAttribute("validationKey", $newKeyBase64) $machineKeyNode.SetAttribute("decryptionKey", $newKeyBase64) $xml.Save($webConfigPath) Write-Output "Chave MAC atualizada com sucesso: $newKeyBase64"
3. Monitoramento de requisições suspeitas
Use um script para monitorar requisições HTTP em busca de ViewStates maliciosos:
from flask import Flask, request import base64 import re app = Flask(__name__) @app.route('/') def monitor_viewstate(): viewstate = request.args.get('__VIEWSTATE') if viewstate: try: decoded = base64.b64decode(viewstate).decode('utf-8') if re.search(r"<script|eval\(|System\.", decoded, re.IGNORECASE): print("ALERTA: ViewState malicioso detectado!") # Tomar ação, como bloquear o IP except: pass return "Monitoramento ativo." if __name__ == "__main__": app.run(host='0.0.0.0', port=5000)
4. Configuração de políticas de segurança no Kubernetes (bônus)
Se você usa Kubernetes, evite bypasses de políticas como o OPA Gatekeeper. Use o seguinte exemplo de política Rego para garantir que apenas repositórios autorizados sejam usados:
package kubernetes.admission deny[msg] { input.request.kind.kind == "Pod" repo := input.request.object.spec.containers[_].image not startswith(repo, "allowed-repo/") msg := sprintf("Repositório não autorizado: %v", [repo]
}
Recomendações adicionais
-
Não use chaves públicas:
-
Evite copiar chaves de fontes públicas ou repositórios de código.
-
-
Proteja o arquivo
web.config
:-
Restrinja o acesso ao arquivo
web.config
para evitar vazamentos de chaves.
-
-
Use HTTPS:
-
Certifique-se de que todas as comunicações com o servidor sejam criptografadas.
-
-
Monitore logs de acesso:
-
Configure ferramentas de monitoramento para detectar atividades suspeitas.
-
-
Atualize o framework ASP.NET:
-
Mantenha o framework e suas dependências atualizados para corrigir vulnerabilidades conhecidas.
-
Conclusão
A descoberta de 3.000 chaves ASP.NET vazadas pela Microsoft destaca a importância de práticas seguras no desenvolvimento e manutenção de aplicações web. Ao adotar medidas como a rotação de chaves, monitoramento de requisições e verificação de chaves vazadas, as organizações podem reduzir significativamente o risco de ataques de injeção de código.
Fonte e imagens: https://thehackernews.com/2025/02/microsoft-identifies-3000-publicly.html