El ejemplo clásico de ejecución de código arbitrario es cuando un búfer basado en la pila se desborda, sobrescribe la dirección de retorno para que el control pueda saltar a los datos configurados cuidadosamente por el atacante para ejecutar un código de shell para ingresar al sistema.
Si desarrollas en C y escribes un montón de código, eventualmente lo arruinas en algún lugar y tu código se vuelve explotable.
En lenguajes administrados como C #, Java, etc. los arreglos tienen límites comprobados, no tienen punteros que pueden colgarse (se recolectan basura), etc. Parece que la memoria está dañada, se desborda el búfer y otras cosas desagradables que pueden permitir un atacante que se haga cargo de la computadora no es posible desde el código administrado, ¿es cierto?
Lo pregunto porque planeo abandonar C y C ++, y usar C # o Java solo por razones de seguridad para partes donde el rendimiento no es crítico.