
PoCs funcionais para três vulnerabilidades do NextGen Connect 4.5.2.
Exploits de prova de conceito funcionais para três vulnerabilidades alcançáveis pela rede no NextGen Connect (Mirth Connect) 4.5.2. Os harnesses executam a imagem oficial do contêiner, criam apenas a configuração de canal necessária para o achado, executam o ataque a partir de um contêiner separado e falham a menos que o efeito de segurança alegado seja observado.
Esta revisão utilizou a pública metodologia Refute-or-Promote e seu playbook de orquestração de código aberto. O método separa a geração de candidatos da revisão adversarial em contexto novo e exige prova empírica antes da promoção. O código-fonte vulnerável 4.5.2 e o método de revisão são ambos públicos: qualquer pessoa com acesso comum a modelos, o código-fonte e a capacidade de validar com segurança em um laboratório pode aplicar o mesmo processo, e poderia ter encontrado essas classes de bugs de forma independente. A confidencialidade em torno de um relatório não torna a capacidade de revisão subjacente privada.
Estes são exploits reais, não testes unitários de parser. Eles recuperam um hash de senha ativo por meio de injeção SQL, exfiltram conteúdos de arquivos locais do alvo por dois caminhos XML não autenticados distintos e bloqueiam operações respaldadas pelo Derby empacotado até a reinicialização.
| CVE | Achado | Atacante | Impacto demonstrado | CVSS 3.1 / 4.0 | PoC |
|---|
| CVE-2026-82583 | Injeção em _getTables selectLimit | Usuário autenticado da API | Exportação da tabela de senhas para a raiz web pública; congelamento do Derby empacotado até a reinicialização | 8.3 / 7.2 | sql-selectlimit-injection/ |
| CVE-2026-78224 | XXE no Step XSLT | Cliente de canal não autenticado | Leitura OOB de um arquivo local do alvo; DoS por entidade lenta local ao canal | 8.2 / 8.8 | xslt-step-xxe/ |
| CVE-2026-82578 | XXE no Adaptador de Lote XML | Cliente de canal não autenticado | Leitura OOB de um arquivo local do alvo | 7.5 / 8.7 | xml-batch-xxe/ |
CVSS 3.1 e 4.0 são padrões diferentes; as pontuações emparelhadas não são uma comparação de antes e depois.
Todos os três foram reproduzidos contra:
nextgenhealthcare/connect:4.5.2
sha256:4afa295cfe7c5ffd596efee69594157fea87202e33d66bb4a98a52db4598f836
A NextGen relatou de forma privada que o problema de XSLT foi corrigido na 4.7.1 e os problemas de injeção SQL e de Lote XML foram corrigidos na 4.7.2. O aviso da CISA ICSMA-26-253-01 considera a 4.7.1 e anteriores como afetadas e recomenda a 4.7.2 ou posterior. Versões após a 4.5 são proprietárias, portanto não há imagem corrigida pública a partir da qual este repositório possa fornecer o mesmo tipo de controle negativo reproduzível usado para uma versão de patch de código aberto.
Um ponto de apoio autenticado na API administrativa torna-se acesso a dados que a
conta não deveria exportar. O exploit empacotado grava a linha ativa
PERSON_PASSWORD sob public_html e prova que o arquivo resultante é
baixável sem autenticação. O passo que importa é ir de uma ação restrita da API para um arquivo em disco que
não precisa mais da sessão do atacante.
Em um ambiente de integração real, o banco de dados pode descrever canais, endpoints e credenciais usadas para alcançar bancos de dados, servidores SFTP, retransmissores de e-mail, APIs e outros sistemas clínicos. Um teste controlado separado recuperou uma senha de conector deliberadamente plantada a partir do XML de canal exportado. Isso torna a primitiva útil para mapeamento de ambiente e roubo de segredos; o uso de qualquer credencial recuperada contra um sistema downstream não foi testado e não é alegado.
O braço opcional de negação de serviço congela o banco de dados Derby empacotado. Chamadas de API respaldadas pelo DB então expiram, a mesma injeção não consegue descongelar seu próprio ponto de entrada, e uma reinicialização do processo é necessária. Este é um ônus prático de recuperação para instalações respaldadas pelo Derby, não prova de que bancos de dados de produção externos se comportem da mesma forma.
Uma vez que um canal XSLT afetado é implantado, o atacante não precisa de conta Mirth. O XML de entrada faz o serviço ler um arquivo local do alvo e enviar seu conteúdo para um callback controlado pelo atacante. Isso é útil mesmo quando a resposta normal do canal não contém os dados transformados e o atacante não consegue ler o histórico de mensagens.
O cliente autônomo aceita uma URI file: de linha única escolhida pelo chamador. Arquivos como
identificadores de host, tokens, fragmentos de configuração ou credenciais são praticamente
valiosos se a conta de serviço do Mirth puder lê-los e o servidor puder alcançar o
callback. A prova empacotada usa apenas um canário gerado e não alega recuperação universal
arbitrária de arquivos, transporte multilinha ou acesso além da conta de serviço.
Uma entidade externa lenta também ocupa o canal vítima padrão de thread única. Isso pode atrasar ou parar a interface clínica específica mapeada para esse canal até que a entidade seja liberada. O canal de controle e a API administrativa permanecem saudáveis, então isso é uma interrupção local ao canal, não uma indisponibilidade de todo o servidor.
Quando um modo de lote XML afetado está habilitado, um remetente não autenticado pode usar o corpo bruto do lote para acionar o mesmo tipo de divulgação de arquivo de saída. O servidor retorna HTTP 500, mas o atacante já tem o conteúdo do arquivo exclusivo do alvo por meio do callback OOB. Isso torna a falha praticamente útil como um caminho de exfiltração cega mesmo quando testes apenas de código de resposta descartariam a requisição como uma falha de parser.
O processamento em lote está desativado por padrão, o modo de divisão deve alcançar o parser respaldado por XPath, e a saída do servidor é necessária. Este repositório não alega uma negação de serviço demonstrada para CVE-2026-82578.
Requisitos: Bash, Docker, Linux x86-64 e acesso à rede para o pull inicial da imagem. Ambas as imagens são fixadas por digest. Nenhuma porta do host é publicada; o alvo e o atacante se comunicam apenas em uma bridge Docker interna específica da tarefa.
./run-all.sh
Ou execute um único achado:
./sql-selectlimit-injection/poc/run.sh
./xslt-step-xxe/poc/run.sh
./xml-batch-xxe/poc/run.sh
Cada invocação cria contêineres com nomes exclusivos e uma rede bridge, registra
evidence/current-run.log e remove seus próprios recursos de laboratório ao sair. Os arquivos
evidence/vulnerable-4.5.2.log versionados são transcrições de uma reprodução em Linux x86-64.
PERSON_PASSWORD e recupera o arquivo
sem autenticação. Seu braço opcional de laboratório invoca SYSCS_FREEZE_DATABASE,
após o qual as chamadas de API respaldadas pelo DB param de responder até que o alvo reinicie.file: de linha única
local ao alvo; o wrapper de laboratório usa um canário aleatório e asserção exata.
A mesma execução prova a indisponibilidade local ao canal com um segundo canal saudável
e API administrativa, e então verifica a recuperação.Element Name.
O atacante controla apenas o corpo do lote não autenticado. Seu cliente autônomo
tem o mesmo modo --file-uri e a limitação OOB de linha única.Execute apenas em um laboratório descartável de sua propriedade. O PoC de SQL congela deliberadamente o banco de dados alvo; a recuperação exige reiniciar o alvo. Os PoCs de XXE leem um canário montado por padrão, mas seus clientes autônomos aceitam URLs de listener arbitrárias e URIs de arquivo de linha única locais ao alvo. Nunca os direcione a sistemas sem autorização.
Segundo a CISA, atualize para o Connect 4.7.2 ou posterior. Onde uma atualização imediata não for possível, restrinja a API administrativa a redes de gerenciamento confiáveis, remova steps XSLT desnecessários, desative o processamento em lote XML onde não for necessário e bloqueie a saída desnecessária do servidor. Essas medidas reduzem a exposição, mas não reparam o código vulnerável.
Os achados 1 e 3 devem ser creditados a Abhinav Agarwal. O achado 2 foi descoberto independentemente por Abhinav Agarwal e relatado pela primeira vez à NextGen por Youngdu. A NextGen coordenou as correções e a atribuição de CVE.
Este repositório tem como objetivo ajudar defensores a transformar texto de aviso em comportamento observável e testável. Em uma cópia isolada de um ambiente, defensores podem usá-lo para:
_getTables, procedimentos inesperados de exportação ou
congelamento do Derby, novos arquivos sob public_html, XML de entrada contendo um
DOCTYPE e callbacks originados do Mirth após erros de listener;Cada PoC é executado em um contêiner, fixa suas imagens por digest e falha de forma segura a menos que um canário aleatório retorne. Um defensor pode reproduzir a fronteira de segurança real em vez de aceitar uma captura de tela ou um número de severidade pela fé. Ele existe para ajudar as pessoas a descobrir o que estão executando, testá-lo e confirmar que um patch funcionou. Ele não está aqui para ser apontado para um hospital.