Muchas aplicaciones se caen, no todas, pero muchas implican que la máquina ejecuta algo que no debería haber hecho. La máquina salta a algo que cree que se supone que es un código, pero en realidad se trata de datos aleatorios (o al menos datos que no se han preparado como código). La máquina intenta ver estos datos como código, pero no tiene ningún sentido como código, por lo que la máquina no sabe qué hacer. Cuando eso sucede, la aplicación se bloquea.
Pero lo que pasa con los errores es que si sabes cómo activarlos, puedes activarlos deliberadamente. A veces, dependiendo de cómo funciona el error, incluso puede controlar en qué datos salta la máquina. Esa posibilidad es lo que hace que la gente de seguridad se ponga nerviosa: si puede hacer que la máquina salte a datos que no tienen ningún sentido, y puede controlar cuáles son esos datos, entonces podría hacer que la máquina salte a algo que hace tiene sentido. Una vez que haya configurado esto, podría hacer que la máquina haga más o menos lo que quiera .
No todos los bloqueos de aplicaciones funcionan de esta manera. La respuesta de @ AliAhmad muestra los conceptos básicos de cómo decir lo que puede y lo que no. Pero debido a que las consecuencias de un choque inseguro pueden ser tan graves, cada choque debe revisarse para ver si es "seguro" o no.