# Código arbitrário

Em segurança de computadores , "execução arbitrária de código" é usado para descrever a capacidade de um invasor execute qualquer comando de escolha do atacante em uma máquina de destino ou num processo de destino. É comumente usado em vulnerabilidade de execução de código arbitrário para descrever um bug de software que dá a um invasor uma maneira de executar código arbitrário. Um programa que é projetado para explorar uma vulnerabilidade tal é chamado de exploit de execução de código arbitrário . A maioria dessas vulnerabilidades permite a execução de código de máquina e a maioria dos exploits injeta e executa shellcode para dar a um invasor uma maneira fácil de executar comandos arbitrários manualmente.
Embora a execução de código arbitrário seja mais frequentemente usada para injetar código em um sistema em funcionamento, o processo também foi demonstrado por entusiastas de codificação para permitir que o usuário escreva código próprio em linguagens como montagem , usando o próprio sistema para criar e ativar o código. Produzidos. Em particular, um usuário conseguiu codificar e criar uma versão primitiva do jogo Pong em uma cópia do Super Mario World usando a execução de código arbitrário.
É o efeito mais poderoso que um bug pode ter, porque permite que um invasor assuma completamente o processo vulnerável. A partir daí, o atacante pode assumir o controle total sobre a máquina em que o processo está sendo executado. As vulnerabilidades de execução de código arbitrário são comumente exploradas por malware para serem executadas em um computador sem o consentimento do proprietário ou por um proprietário para executar o software homebrew em um dispositivo sem o consentimento do fabricante.
Execução de código arbitrário é comumente obtida através de controle sobre o ponteiro de instrução (como um salto ou um ramo ) de um processo em execução . O ponteiro de instrução aponta para a próxima instrução no processo que será executado. O controle sobre o valor do ponteiro de instrução, portanto, dá controle sobre qual instrução é executada em seguida. Para executar código arbitrário, muitas explorações injetam código no processo (por exemplo, enviando entrada para ele que é armazenado em um buffer de entrada na RAM ) e usam uma vulnerabilidade para alterar o ponteiro de instrução para que ele aponte para o código injetado. O código injetado será executado automaticamente. Esse tipo de ataque explora o fato de que a maioria dos computadores não faz uma distinção geral entre código e dados, de modo que o código mal-intencionado pode ser camuflado como dados de entrada inofensivos. Muitos CPUs mais recentes têm mecanismos para tornar isso mais difícil, como um bit não-executar .
Uma vez que o invasor pode executar código arbitrário diretamente no sistema operacional, muitas vezes há uma tentativa de um exploit de escalonamento de privilégios para obter controle adicional. Isso pode envolver o próprio kernel ou uma conta como Administrador, SISTEMA ou raiz. Com ou sem esse controle aprimorado, os exploits têm o potencial de causar sérios danos ou transformar o computador em um zumbi - mas o escalonamento de privilégios ajuda a ocultar o ataque do administrador legítimo do sistema. Uma execução arbitrária de código remoto com vulnerabilidade de escalonamento de privilégios em software amplamente implantado é, portanto, o sub-tipo de vulnerabilidade mais poderoso de todos eles. Se os bugs deste tipo tornam-se conhecidos, correções são geralmente disponibilizadas dentro de algumas horas.
Muitos wordpress ou outros sites do CMS são vulneráveis ​​a ataques de injeção de código remotos. A vulnerabilidade geralmente é introduzida por plugins de terceiros.