Estou fazendo um curso na faculdade, onde um dos laboratórios é realizar explorações de buffer overflow no código que eles nos fornecem. Isso varia de explorações simples, como alterar o endereço de retorno de uma função em uma pilha para retornar a uma função diferente, até o código que altera um estado de registro / memória de programas, mas depois retorna à função que você chamou, o que significa que o A função que você chamou é completamente alheia à exploração.
Eu fiz algumas pesquisas sobre isso, e esses tipos de explorações são usadas em praticamente todos os lugares até agora, em coisas como rodar homebrew no Wii e o jailbreak sem restrições para iOS 4.3.1
Minha pergunta é por que esse problema é tão difícil de resolver? É óbvio que esta é uma das principais explorações usadas para hackear centenas de coisas, mas parece que seria muito fácil de corrigir simplesmente truncando qualquer entrada além do comprimento permitido e limpando toda a entrada que você receber.
EDIT: Outra perspectiva que eu gostaria que as respostas fossem consideradas - por que os criadores de C não corrigem esses problemas reimplementando as bibliotecas?