(Música calma) Vulnerabilidades de software são falhas não intencionais ou pontos fracos encontrados em software que pode ser explorado por um invasor. Algumas vulnerabilidades são criadas porque de configurações de segurança impróprias ou erros de programação. Uma vulnerabilidade de dia zero é uma falha de segurança de software que é conhecido pelo fornecedor do software mas não tem um patch para corrigir a falha. O fornecedor geralmente fornece recomendações de mitigação para evitar uma exploração da vulnerabilidade até que um patch seja desenvolvido. A injeção de SQL é uma vulnerabilidade que permite que um invasor para executar consultas SQL não autorizadas que um aplicativo faz em seu banco de dados. Isso resulta no acesso não autorizado a informações confidenciais. Aqui está um exemplo de uma consulta SQL normal. A string do número da conta é passada para uma instrução SQL. O banco de dados é pesquisado para recuperar o número da conta que corresponda ao número inserido e retorna todos os dados associados armazenados no banco de dados sobre a conta. O código pode ser algo como isto. Se um usuário inserir um número de conta no formulário da página da Web rotulado, "Insira o número da sua conta" a consulta SQL resultante terá esta aparência. Este comando SQL retornará todos os dados associados com o número da conta inserido. Isso funciona como esperado. Aqui está um exemplo de uma consulta de injeção SQL. Um invasor insere um comando de consulta SQL no campo de entrada. Desta vez, em vez de procurar o número da conta, a consulta procura um número de conta ou um é igual a um. Um igual sempre será verdadeiro, então todos os dados da conta da tabela de números de conta serão devolvidos. Para evitar ataques de injeção de SQL, considere estas práticas recomendadas. Execute a validação de entrada. Use uma lista branca ou lista de permissões que inclui valores permitidos específicos aceitos pelo campo de entrada. Valide a entrada em um conjunto seguro conhecido de caracteres e comprimento e usar instruções preparadas para que a entrada do usuário não é tratado como uma instrução SQL. Outro tipo de ataque de vulnerabilidade de software comum é uma injeção de comando do sistema operacional. Isso ocorre quando um invasor é capaz para executar comandos do sistema no sistema operacional do dispositivo através de um aplicativo vulnerável. Esses ataques são causados por validação de entrada insuficiente. Aqui está um exemplo de uma injeção de comando do SO postada na enumeração de fraqueza comum ou lista CWE, uma lista desenvolvida pela comunidade das fraquezas de software e hardware. Neste exemplo, o valor de entrada fornecido na variável de nome de usuário não é validado. Quaisquer comandos do sistema fornecidos na entrada de nome de usuário seria aceito e o comando RM seria executado para excluir os arquivos no diretório inicial. Outra prática recomendada para evitar ataques é para evitar erros de configuração nas funções do software. Configurações inseguras de configurações de software pode deixar o usuário vulnerável a ataques que exploram esse aplicativo específico. Exemplos de erros de configuração de software recursos desnecessários estão ativados ou instalados como portas desnecessárias, serviços, páginas, contas ou privilégios, contas padrão com suas senhas ainda ativadas e inalterado, recursos de segurança não implementados, software mantido desatualizado e sem suporte do fornecedor. Em agosto de 2021, configuração incorreta do Microsoft Power Apps expôs 38 milhões de registros de dados. De acordo com UpGuard, dados sensíveis incluindo status de vacinação COVID-19, números de segurança social e endereços de e-mail foi exposto devido para configurações padrão fracas para Microsoft Power Apps que são ferramentas de baixo código usadas para projetar aplicativos e criar sites públicos e privados. A vulnerabilidade afetou a American Airlines, agências governamentais, e outros clientes em vários setores. Como resultado da exposição, Microsoft atualizou o software ter permissões de mesa habilitadas por padrão, removendo a configuração padrão que permitia acesso anônimo. Um último tipo de ataque de vulnerabilidade de software é estouro de buffer. Um buffer é um espaço de armazenamento temporário na memória para armazenar dados. Estouro de buffer é uma vulnerabilidade de programação que ocorre quando um aplicativo armazena mais dados na memória buffer do que o tamanho da memória definido. Por exemplo, digamos que um campo em uma página da web requer um número de conta. O campo está esperando oito caracteres mas você insere 10 caracteres, dois bytes a mais do que o esperado. O aplicativo aceita a entrada e grava o valor de 10 caracteres na memória que excede o tamanho do buffer esperado de oito. O aplicativo não aloca um espaço de buffer de tamanho apropriado e não executa uma verificação de validação para confirmar o tamanho do campo esperado para que ocorra o estouro do buffer. Algumas linguagens de programação como C ou C++ são mais suscetíveis a estouro de buffer porque eles não têm proteção contra estouro embutida. Java e JavaScript são menos vulneráveis para vulnerabilidades de estouro de buffer. A maioria das vulnerabilidades de estouro de buffer são causadas por codificação insegura. Para evitar vulnerabilidades de estouro de buffer, considere implementar verificações de codificação segura executado por desenvolvedores. Considerações para desenvolvedores incluem, evitando funções de programação arriscadas, como STRCPY quando possível em linguagens de programação que são suscetíveis para estouros de buffer, definindo o tamanho do buffer apropriado esperado, realizando verificações de validação de entrada para confirmar o comprimento esperado do campo e prestando atenção aos avisos do compilador e recomendações para usar alternativas seguras das funções de programação utilizadas.