Encontré esa pregunta en StackOverflow: enlace
Se hace la reclamación, que según Wikipedia:
Una clase final no puede ser subclasificada. Esto se hace por razones de seguridad y eficiencia.
y el OP preguntó, cómo se logra la seguridad con la palabra clave final.
Lo que me sorprendió fue que la mayoría de las respuestas afirmaban que la palabra clave final aumentaría considerablemente la seguridad, ya que el atacante no podrá anular sus clases ni llamar a sus métodos protegidos, etc. Se basan principalmente en el artículo de Oracle Pautas de codificación seguras
For example, making a class final prevents a malicious subclass from adding
finalizers, cloning, and overriding random methods
Sin embargo, a mi entender, si el atacante obtiene la posibilidad de ejecutar código Java arbitrario en el sistema de destino (y si se considera que él está anulando sus clases, se espera que lo sea), entonces ya puede hacer todo lo que su código es capaz de hacerlo, por lo tanto, es completamente irrelevante desde el punto de vista de la seguridad, si sus métodos son definitivos o no, o incluso si los campos son privados y no están expuestos o no (puede serializar su clase y leer todos los campos, etc.).
Pero en el otro lado, ¿es posible encontrar un escenario de la vida real, cuando el atacante no lograría sus objetivos mediante la ejecución de código arbitrario, y solo tendría éxito (o tal ataque sería mucho más fácil) por 'maliciosamente ¿Anulando sus clases, como se describe en el artículo de Oracle? Por ejemplo, si el servidor de aplicaciones está compartido por varias aplicaciones Java.