XML-RPC é um protocolo poderoso e versátil no cenário em constante evolução do desenvolvimento web e da comunicação de dados.
XML-RPC, que significa Extensible Markup Language – Remote Procedure Call, fornece uma maneira padronizada para aplicativos de software se comunicarem pela Internet.
XML-RPC para PHP é afetado por uma vulnerabilidade de injeção remota de código. Um invasor pode explorar esse problema para executar comandos ou códigos arbitrários no contexto do servidor web. Isto pode facilitar vários ataques, incluindo acesso remoto não autorizado.
Encontre esta vulnerabilidade em seu site com a verificação gratuita de segurança de sites.
Neste blog, iremos nos aprofundar nos detalhes do XML-RPC, examinando sua arquitetura, benefícios, casos de uso, vulnerabilidades de segurança e medidas proativas para mitigação de riscos.
O que é XML-RPC?
XML-RPC é um protocolo de chamada de procedimento remoto (RPC) que usa XML para codificar suas mensagens e HTTP como mecanismo de transporte. Ele permite que aplicativos de software executados em diferentes sistemas operacionais e escritos em diferentes linguagens de programação se comuniquem perfeitamente.
O XML RPC simplifica a invocação de procedimentos ou métodos em uma rede, permitindo que os aplicativos solicitem e recebam respostas em um formato XML padronizado.
XML-RPC antes e agora
XML-RPC tem suas origens no final da década de 1990, quando a Microsoft e a UserLand Software o desenvolveram. O objetivo era criar um protocolo que facilitasse a comunicação entre diferentes sistemas de maneira direta e neutra em termos de linguagem. A versão inicial foi introduzida em 1998 e, desde então, o XML-RPC ganhou ampla adoção devido à sua simplicidade e facilidade de implementação.
XMLRPC ainda é usado em contextos específicos, mas sua popularidade diminuiu em comparação com protocolos de comunicação e formatos de intercâmbio de dados mais recentes. Tecnologias como JSON-RPC e APIs RESTful (geralmente JSON ou XML) ganharam mais força devido à sua simplicidade, facilidade de uso e compatibilidade com práticas modernas de desenvolvimento web.
No entanto, é essencial observar que as tendências tecnológicas podem mudar e a adoção de protocolos específicos pode variar entre setores e casos de uso. O XML-RPC ainda está em uso em sistemas legados e alguns aplicativos ou serviços podem continuar a depender dele para fins específicos.
Componentes principais do XML-RPC
No XML-RPC, uma solicitação HTTP é enviada a um servidor que implanta o protocolo. Um cliente no cenário é um software que deseja chamar um único método do sistema remoto. Vários parâmetros de entrada podem ser passados para o processo remoto; um valor de retorno é retornado. O aninhamento dos tipos de parâmetros pode ser usado para transportar uma estrutura de solicitação maior. Portanto, XML-RPC pode ser usado para transportar objetos ou estruturas tanto como parâmetros de entrada quanto de saída.
A principal diferença entre os protocolos REST e XML-RPC é que, onde as representações de recursos (documentos) são transferidas, o XML-RPC é projetado para chamar métodos.
Estrutura da mensagem:
As mensagens XML-RPC são codificadas no formato XML, tornando-as legíveis e fáceis de entender. Uma mensagem XML-RPC típica consiste em uma chamada ou resposta de método, com parâmetros passados como elementos dentro da estrutura XML.
HTTP como transporte:
XML-RPC utiliza HTTP como protocolo de transporte, permitindo-lhe aproveitar a infraestrutura web existente. Isso o torna compatível com firewall e garante compatibilidade com várias configurações de rede.
Vantagens do XML-RPC
Simplicidade: XML-RPC é conhecido por sua simplicidade. O formato XML é fácil de entender e o protocolo é leve. Essa simplicidade contribui para uma adoção rápida e facilidade de implementação.
Interoperabilidade: XML-RPC promove a interoperabilidade ao permitir que diferentes sistemas, escritos em outras linguagens de programação, se comuniquem perfeitamente. Se os sistemas puderem entender XML e HTTP, eles poderão trocar informações usando XML-RPC.
Amigável à Web – Aproveitando o HTTP como protocolo de transporte, o XML-RPC atravessa facilmente firewalls e proxies. Isso o torna uma escolha adequada para aplicativos baseados na Web que precisam se comunicar pela Internet.
Casos de uso de XML-RPC
Sistemas de gerenciamento de conteúdo (CMS) – Muitas plataformas CMS usam XML-RPC para gerenciamento remoto de conteúdo. Isso permite que os usuários criem, atualizem e recuperem o conteúdo do site a partir de aplicativos ou serviços externos.
Blogs e Wikis: As plataformas de blog geralmente empregam XML-RPC para permitir que os usuários publiquem e gerenciem suas postagens de blog remotamente. Isso permite a criação de ferramentas de terceiros que podem interagir com a plataforma de blog.
Comércio eletrônico: No comércio eletrônico, o XML-RPC pode facilitar a comunicação entre diferentes componentes de uma loja online, como gerenciamento de estoque, processamento de pedidos e sistemas de pagamento.
Integração com serviços de terceiros: XML-RPC é comumente usado para integrar aplicativos da web com serviços de terceiros. Isso permite a troca contínua de dados entre diferentes plataformas e aprimora a funcionalidade geral dos aplicativos da web.
Os riscos de segurança em arquivos XML-RPC
Embora o XML-RPC ofereça simplicidade e facilidade de uso, é importante conhecer os riscos de segurança associados à sua implementação.
A vulnerabilidade no XML-RPC permite que um invasor faça uma chamada de sistema, o que pode ser perigoso para o aplicativo e os servidores. Além disso, um invasor pode usar esse método para criar um ataque DOS bem-sucedido contra o aplicativo.
Várias explorações, como a exploração de zero day do Apache OFBiz , estão disponíveis publicamente e podem ser usadas por um invasor para aproveitar a presença de XML-RPC no servidor de aplicativos.
Aqui estão algumas considerações importantes:
Exposição de dados
XML-RPC se comunica usando texto simples e os dados XML são facilmente legíveis. Sem a criptografia adequada, informações confidenciais transmitidas por XML-RPC podem ser interceptadas e expostas. Canais de comunicação seguros, como HTTPS, são cruciais para criptografar dados em trânsito e proteger contra espionagem.
Ataques de injeção
XML-RPC, como outros protocolos baseados na web, é suscetível a ataques de injeção. Atores maliciosos podem tentar injetar código XML malicioso em solicitações, explorando vulnerabilidades no processamento de dados XML pelo servidor. A validação e a higienização de entrada adequadas são essenciais para mitigar o risco de SQLi e outros ataques de injeção.
Ataques DDoS
No WordPress, os hackers podem explorar o recurso pingback e o arquivo xmlrpc.php para lançar ataques DDoS . Ao bombardear uma página direcionada com inúmeras solicitações de pingback por meio de xmlrpc.php, eles sobrecarregam os servidores, fazendo com que o site fique offline. Para aumentar a segurança, considere desabilitar o xmlrpc.php no seu site WordPress.
Ataques de força bruta
Um ataque de força bruta em um arquivo XML-RPC PHP envolve um invasor tentando sistematicamente obter acesso não autorizado, tentando inúmeras combinações de nome de usuário e senha. Começando pela identificação de um sistema alvo utilizando a funcionalidade XML-RPC implementada em PHP, o invasor prossegue enumerando nomes de usuário válidos e, em seguida, implanta ferramentas automatizadas para adivinhar sistematicamente as senhas de cada nome de usuário.
Esse processo continua até que um login bem-sucedido seja alcançado ou até que medidas de segurança, como bloqueios de conta, desafios CAPTCHA ou lista negra de IP, detectem e frustrem o ataque. O objetivo do invasor é explorar vulnerabilidades no sistema de autenticação, enfatizando a importância de implementar medidas de segurança robustas para proteger contra tais atividades maliciosas.
Falta de autenticação e autorização
Os serviços XML-RPC podem ser expostos sem mecanismos adequados de autenticação e autorização. O acesso não autorizado a funcionalidades confidenciais pode levar a violações de dados ou manipulação não autorizada de recursos. A implementação de autenticação forte e controles de autorização refinados é essencial para proteger os serviços XML-RPC.
Ataques de expansão de entidade XML
Mensagens XML-RPC podem ser suscetíveis a ataques de entidades externas XML (XXE) . Um invasor pode tentar explorar a análise de dados XML para divulgar informações confidenciais ou causar negação de serviço. A implementação de práticas seguras de processamento XML e a desativação da expansão de entidades externas são cruciais para mitigar ataques XXE.
Detecção de XML-RPC
Conduza periodicamente auditorias de segurança e testes de penetração para identificar e solucionar possíveis vulnerabilidades. Participe de revisões de código, análise estática de código e testes dinâmicos para garantir a robustez da segurança de sua implementação XML-RPC.
Rastreie o aplicativo da web COMPLETO para ver se o XML-RPC está sendo usado ou não. Depois de obter o URL, tente acessá-lo no navegador.
Veja a resposta do arroto para o mesmo abaixo
Após detectar que o XML-RPC está habilitado no servidor, um invasor pode criar uma solicitação XML para listar todos os métodos habilitados no servidor, conforme mostrado abaixo. Substitua Get por uma solicitação POST e adicione uma chamada de método na solicitação.
Conforme observado na captura de tela, existem muitos métodos perigosos, como file.delete, node.delete, file. create etc, são permitidos no lado do servidor. Um invasor pode usar esse método para realizar qualquer atividade maliciosa. Existem explorações disponíveis para execução remota de código.
Mitigação com AppTrana WAAP
Se a sua implementação XML-RPC suportar recursos não necessários para o seu aplicativo, considere desativá-los. Reduzir a superfície de ataque desabilitando funcionalidades desnecessárias pode melhorar a segurança geral do seu sistema.
AppTrana WAAP relata essa execução remota de código com um scanner DAST integrado. Você pode solicitar uma regra personalizada e POC para a vulnerabilidade através do nosso portal.
O Web Application Firewall mitigará os ataques adicionando o seguinte ao arquivo .htaccess
<Files xmlrpc.php>
Order allow, deny
Deny from all
</Files>
Experimente nossa verificação de segurança de site gratuita para toda a vida para descobrir esses problemas.