CVE-2016-2386
Prioritize patching. It under exploitation confirmed by CISA and has a public proof of concept.
Apply updates per vendor instructions.
Summary
Injeção de SQL não autenticada no serviço UDDI do SAP NetWeaver AS Java (7.1 a 7.5, conforme testado pela ERPScan; SAP cita especificamente a versão 7.40), explorável via SOAP sem qualquer credencial. É usada na prática como primeiro elo de uma cadeia que extrai hashes de senha e, combinada com outras duas CVEs do mesmo pesquisador, chega a comprometer contas administrativas do NetWeaver — por isso está no catálogo KEV da CISA.
Technical detail
A falha (CWE-89) está no endpoint SOAP /UDDISecurityService/UDDISecurityImplBean, especificamente na operação deletePermissionById. O parâmetro permissionId enviado no corpo XML é concatenado diretamente em uma consulta SQL sem parametrização nem sanitização, permitindo que o atacante controle totalmente a cláusula WHERE da query.
A injeção é do tipo blind (booleana e baseada em tempo) — não há saída direta dos dados na resposta HTTP. O PoC público usa subconsultas com COUNT(*) contra tabelas internas do NetWeaver (UME_STRINGS, J2EE_CONFIGENTRY, BC_UDV3_EL8EM_KEY, T_CHUNK, T_DOMAIN, entre outras) para inferir verdadeiro/falso pela resposta do servidor ou pelo tempo de resposta. A tabela UME_STRINGS é o alvo de maior interesse porque armazena, entre outros valores, o hash da senha de usuários administrativos indexado por um PID no formato PRIVATE_DATASOURCE.un:.
O CVSS 9.8 divulgado pela NVD (C:H/I:H/A:H) difere do 9.1 (C:H/I:H/A:N) calculado pela ERPScan, que classificou o impacto original como 'resource consumption' — algumas das tabelas usadas nas queries de teste (como T_CHUNK) são grandes o suficiente para causar atrasos de vários segundos por requisição, o que sustenta um componente de disponibilidade além da exfiltração de dados.
O valor prático da falha aumenta quando encadeada: a mesma pesquisa (vah13/ERPScan) publicou junto CVE-2016-2388 (divulgação de nomes de usuário válidos via endpoints Web Dynpro de chat) e CVE-2016-1910 (fraqueza criptográfica que permite decodificar o hash extraído para a senha em texto claro). A SQLi isolada já entrega hashes; a cadeia completa entrega credenciais administrativas em texto claro.
How it’s exploited
O vetor é uma requisição SOAP POST não autenticada contra o endpoint UDDISecurityImplBean, tipicamente exposto na porta HTTP do AS Java (porta 50000 ou variante configurada). Não há pré-requisito de autenticação, configuração não padrão específica ou interação do usuário — o único requisito real é que o serviço UDDI Server esteja habilitado e acessível na rede, o que é comum em instalações padrão do NetWeaver AS Java dessa faixa de versões.
A exploração é blind: o atacante injeta subconsultas booleanas ou baseadas em tempo no campo permissionId e infere o resultado bit a bit (ou caractere a caractere), o que torna a extração lenta — o exploit público de referência leva minutos para recuperar um único hash de senha, iterando sobre a tabela UME_STRINGS. Ferramentas automatizadas (como o script Python público) tornam esse processo trivial de repetir em escala contra múltiplos alvos.
O resultado final documentado publicamente é a extração do hash de senha de contas administrativas (ex.: Administrator, j2ee_admin). Combinado com o vazamento de nomes de usuário (CVE-2016-2388) e a fraqueza criptográfica (CVE-2016-1910), a cadeia completa resulta em posse da senha administrativa em texto claro — ou seja, comprometimento total do ambiente NetWeaver. A presença no catálogo KEV da CISA (adicionado em 2022, com prazo de correção em 30/06/2022) confirma exploração ativa observada, não apenas teórica.
Versions
How to protect
A correção oficial é a SAP Security Note 2101079, publicada em 09/02/2016. Ela deve ser aplicada via o mecanismo padrão de Support Package / patch do SAP NetWeaver AS Java; a nota é referenciada tanto pela NVD quanto pela ERPScan como a solução definitiva — não há detalhe público de número exato de Support Package por versão nas fontes disponíveis, então a aplicação deve seguir o texto da Note diretamente no SAP Support Portal.
Se a aplicação imediata da nota não for viável, o paliativo real é restringir o acesso de rede ao serviço UDDI (e, de forma mais ampla, às portas administrativas do AS Java) a hosts de gerência confiáveis, e desabilitar o componente UDDI Server caso não esteja em uso — muitos ambientes o mantêm ativo por padrão sem necessidade funcional. Um WAF ou proxy reverso capaz de inspecionar o corpo SOAP pode bloquear payloads com aspas simples e palavras-chave SQL no campo permissionId, mas isso é detecção de assinatura, não correção da causa raiz, e é contornável.
O que não funciona: tratar isso apenas como 'vazamento de dados' e restringir só leitura — a injeção permite qualquer manipulação que a sintaxe SQL do backend aceite no contexto da query vulnerável, e o encadeamento com CVE-2016-2388/CVE-2016-1910 mostra que mesmo extração 'lenta' de hash já é suficiente para comprometimento total. Segmentação de rede sem a aplicação da Note reduz superfície mas não elimina o risco para quem tem acesso interno ou já comprometeu outro sistema na mesma rede.
How to detect
Procurar requisições HTTP POST para o endpoint /UDDISecurityService/UDDISecurityImplBean (ou variantes de caminho terminando em UDDISecurityImplBean), especialmente contendo a operação deletePermissionById com valores de permissionId que incluam aspas simples, palavras-chave SQL (AND, SELECT, COUNT) ou nomes de tabelas internas do NetWeaver como UME_STRINGS, J2EE_CONFIGENTRY, BC_UDV3_EL8EM_KEY, T_CHUNK e T_DOMAIN. Como a exploração é blind e tipicamente automatizada, um padrão forte é volume alto de requisições quase idênticas ao mesmo endpoint, variando apenas a condição booleana injetada, com respostas cujo tempo de latência varia de forma anômala (indicativo de SQLi baseada em tempo).
Requisições subsequentes a endpoints Web Dynpro de chat (ex.: caminhos contendo tc~rtc~coll.appl.rtc~wd_chat) partindo do mesmo IP são um sinal de encadeamento com CVE-2016-2388 para enumeração de usuários, reforçando que se trata de um ataque direcionado e não de scanning genérico.