← voltar
CVE-2019-18935criticalsob ataqueransomwareCWE-502

CVE-2019-18935

100Vexday Risk Score

Corrija agora. Ela está sob exploração confirmada pelo CISA, tem exploit funcional público e 1 grupo(s) de ameaça a utilizam.

ssvc Actcvss 9.8epss 100%
da publicação à arma0 dias
Publicada no NVD11 de dez.
1ª PoC9 de jan.
metasploit9 de dez.
CISA KEV+693d
probabilidade de exploração
100%top 1% das CVEs
exploração observada
simCISA + VulnCheck
1 grupo(s)32 exploit(s) público(s)
Quem explora1

Grupos conhecidos por explorar esta vulnerabilidade (atribuição MITRE ATT&CK).

Ação exigida pela CISAprazo federal: 2022-05-03

Apply updates per vendor instructions.

Resumo

Falha de deserialização insegura no handler RadAsyncUpload do Telerik UI for ASP.NET AJAX (até 2019.3.1023), que permite RCE completo no processo do IIS. A exploração exige que o atacante conheça a chave de criptografia usada para proteger o parâmetro rauPostData — algo trivial se a instalação nunca trocou a chave padrão (CVE-2017-11317) ou se a chave puder ser extraída por outro meio (ex.: leitura do web.config). Está no catálogo KEV da CISA com exploração confirmada em ambientes reais, incluindo uma agência federal dos EUA.

Detalhamento técnico

O handler AsyncUploadHandler (acessível em /Telerik.Web.UI.WebResource.axd?type=rau) recebe o parâmetro rauPostData, composto por duas partes separadas por '&': um JSON de configuração e o nome do tipo (assembly qualified type name) para o qual esse JSON deve ser deserializado. Esse par é passado para SerializationService.Deserialize(string, Type), que instancia um JavaScriptSerializer parametrizado com o tipo informado na própria requisição — CWE-502, deserialização insegura com tipo controlado pelo atacante. Markus Wulftange (Code White) identificou que, ao contrário do que se pensava desde 2017, o rauPostData não serve só para configurar upload: ele permite escolher livremente a classe .NET a ser deserializada.

Durante a deserialização, o JavaScriptSerializer chama os setters do tipo especificado. O gadget usado na exploração pública é System.Configuration.Install.AssemblyInstaller, cujo setter carrega uma DLL a partir de um caminho arbitrário. Se essa DLL for uma mixed-mode assembly, o carregamento executa seu DllMain() automaticamente, resultando em execução de código arbitrário no contexto do worker process (w3wp.exe).

O obstáculo prático é que todo o rauPostData é criptografado. Até a R2 2017 SP1 (2017.2.621), essa criptografia usava uma chave fixa no código: PrivateKeyForEncryptionOfRadAsyncUploadConfiguration (CVE-2017-11317). Sem trocar essa chave, qualquer atacante pode forjar e descriptografar o parâmetro. A vulnerabilidade correlata CVE-2017-11357 (IDOR no nome do arquivo gravado) e outros vetores de leak (ex.: exposição do web.config, oráculo criptográfico de CVE-2017-9248) também permitem obter a chave em instalações que já corrigiram o hard-code mas mantêm outra falha aberta.

Para que o RCE funcione de forma prática, o atacante também precisa saber a versão exata do assembly Telerik.Web.UI (usada no nome do tipo) e ter permissão de escrita em algum diretório acessível ao processo do IIS — normalmente uma pasta temporária como C:\Windows\Temp, já que a conta padrão do App Pool raramente tem escrita no document root.

Como é explorada

O vetor é HTTP não autenticado: requisições POST para Telerik.Web.UI.WebResource.axd?type=rau. Pré-requisito central — e frequentemente ignorado na leitura do CVSS 9.8 — é conhecer a chave de criptografia do rauPostData. Na prática isso quase sempre significa uma instalação que nunca alterou a chave padrão vulnerável a CVE-2017-11317, ou que expôs a chave por outro meio (leak de configuração, IDOR de CVE-2017-11357). Sem a chave, não há como forjar um rauPostData válido e a cadeia inteira não se sustenta.

Com a chave em mãos, o exploit público (RAU_crypto, exploit noperator/CVE-2019-18935) segue duas etapas: primeiro, faz upload de uma DLL mixed-mode para um diretório gravável no servidor (normalmente pasta temp); depois, envia um rauPostData forjado especificando System.Configuration.Install.AssemblyInstaller como tipo e apontando para o caminho da DLL enviada. A deserialização carrega a DLL e executa seu DllMain(), dando shell no contexto do w3wp.exe. Ferramentas públicas também permitem brute-force da versão exata do Telerik.Web.UI necessária para montar o nome de tipo correto, reduzindo drasticamente o espaço de busca.

Há exploração ativa confirmada: a CVE está no catálogo KEV da CISA, existe módulo Metasploit, múltiplos PoCs públicos (RAU_crypto, CVE-2019-18935 por noperator) e um caso documentado de comprometimento de agência federal dos EUA via essa falha, segundo reportagem da BleepingComputer. A Bishop Fox relata ter explorado instâncias expostas na internet durante engajamentos de segurança.

Versões

Afetadas
Todas as versões do Telerik UI for ASP.NET AJAX até 2019.3.1023 (inclusive), quando a chave de criptografia do RadAsyncUpload é conhecida pelo atacante.
Corrigidas em
2020.1.114 e posteriores corrigem por padrão. A versão 2019.3.1023 possui uma configuração não padrão que pode prevenir a exploração, mas não é habilitada automaticamente.

Como se proteger

A correção definitiva é atualizar para 2020.1.114 ou versão posterior, onde o fornecedor introduziu uma configuração padrão que bloqueia a exploração. Na versão intermediária 2019.3.1023 existe uma configuração não padrão que pode ser habilitada manualmente para impedir a exploração, mas ela não é ativada por padrão — quem está nessa versão precisa aplicar a configuração explicitamente, não apenas confiar no número da versão.

Para quem não pode atualizar imediatamente, o controle compensatório real é garantir que a chave de criptografia do RadAsyncUpload (Telerik.Web.UI.DialogParametersEncryptionKey / configuração equivalente do RadAsyncUpload) nunca esteja no valor padrão hard-coded associado a CVE-2017-11317, e que nenhum outro vetor (IDOR de CVE-2017-11357, exposição de web.config, oráculo de CVE-2017-9248) permita recuperá-la. Isso reduz a superfície mas não é substituto do patch: se a chave for descoberta por qualquer meio, a cadeia de exploração volta a funcionar em versões não corrigidas. Restringir ou bloquear acesso externo ao endpoint Telerik.Web.UI.WebResource.axd?type=rau via controle de rede/WAF é mitigação adicional, não solução — a falha está na lógica de deserialização, não apenas no transporte.

O que NÃO funciona: apenas corrigir CVE-2017-11317/CVE-2017-11357 sem atualizar para 2020.1.114 (ou aplicar a configuração de 2019.3.1023) deixa a superfície de deserialização aberta caso a chave seja obtida por qualquer outro meio — a proteção real contra CVE-2019-18935 em si só veio com essas versões/configurações específicas.

Como detectar

Procurar por requisições POST repetidas a Telerik.Web.UI.WebResource.axd?type=rau, especialmente sequências de tentativas variando o parâmetro de versão do assembly (padrão de brute-force de versão usado por ferramentas públicas) e por respostas com latência anômala (indicativo de payloads de teste com Sleep() usados para validar a deserialização antes do ataque real). No sistema de arquivos, verificar a criação inesperada de arquivos .dll em diretórios temporários graváveis pelo processo do IIS (ex.: C:\Windows\Temp) seguida de erros de runtime do ASP.NET no log de aplicação, coincidindo com essas requisições. Não há assinatura única e confiável no nível de rede além do endpoint e do padrão de payload — como o rauPostData é criptografado, o conteúdo malicioso não é legível em texto claro nos logs sem a chave, o que limita a detecção baseada só em payload.

Pesquisado e redigido com IA a partir do advisory do fornecedor e de análises públicas, com as fontes acima. Confira sempre a versão corrigida no advisory oficial antes de agir.
Progress Telerik UI for ASP.NET AJAX through 2019.3.1023 contains a .NET deserialization vulnerability in the RadAsyncUpload function. This is exploitable when the encryption keys are known due to the presence of CVE-2017-11317 or CVE-2017-11357, or other means. Exploitation can result in remote code execution. (As of 2020.1.114, a default setting prevents the exploit. In 2019.3.1023, but not earlier versions, a non-default setting can prevent exploitation.)
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Produtos afetados
n/a · n/a
PoCs públicas encontradas32
exploitdbwww.exploit-db.com/exploits/47793não verificadogithubgithub.com/noperator/CVE-2019-18935373githubgithub.com/bao7uo/RAU_crypto180githubgithub.com/murataydemir/CVE-2019-1893516githubgithub.com/dust-life/CVE-2019-18935-memShell13githubgithub.com/ThanHuuTuan/Telerik_CVE-2019-1893513githubgithub.com/ekkoo-z/CVE-2019-18935-bypasswaf8githubgithub.com/random-robbie/CVE-2019-189355githubgithub.com/ThanHuuTuan/CVE_2019_189352githubgithub.com/KasunPriyashan/Telerik-UI-ASP.NET-AJAX-Exploitation1githubgithub.com/quyt0/CVE-2019-18935-exploit-study1githubgithub.com/alanbarret/CVE-2019-189351githubgithub.com/clarkvoss/telerik0githubgithub.com/0xsharz/telerik-scanner-CVE-2019-189350githubgithub.com/menashe12346/CVE-2019-189350githubgithub.com/appliedi/Telerik_CVE-2019-189350githubgithub.com/0xAgun/CVE-2019-18935-checker0githubgithub.com/becrevex/Telerik_CVE-2019-189350vulncheckvulncheck.com/xdb/569e3fec38c8não verificadovulncheckvulncheck.com/xdb/8dc793fec147não verificadovulncheckvulncheck.com/xdb/dd4d5145d7fdnão verificadovulncheckvulncheck.com/xdb/dffdf06b5f8anão verificadovulncheckvulncheck.com/xdb/c621c71a9bf3não verificadovulncheckvulncheck.com/xdb/9dd5bbcf8c95não verificadovulncheckvulncheck.com/xdb/1ee9cb96b7b2não verificadovulncheckvulncheck.com/xdb/3af31675fd50não verificadovulncheckvulncheck.com/xdb/d2816417f115não verificadocve_referencepacketstormsecurity.com/files/155720/Telerik-UI-Remote-Code-Execution.htmlnão verificadocve_referencepacketstormsecurity.com/files/159653/Telerik-UI-ASP.NET-AJAX-RadAsyncUpload-Deserialization.htmlnão verificadovulncheckvulncheck.com/xdb/de3ebe4e8ea8não verificadovulncheckvulncheck.com/xdb/6733f1b67fb2não verificadovulncheckvulncheck.com/xdb/48d2eb3dee46não verificado
⚠ Recursos públicos, para você avaliar a exposição de sistemas que controla ou está autorizado a testar. Teste apenas com autorização.