Soy nuevo en la programación de aplicaciones web y estoy tratando de entender las implicaciones de seguridad de no validar los datos obtenidos al llamar al método de la interfaz javax.servlet.http.HttpSession.getAttribute (). Sé que, como regla general, siempre se deben validar los datos obtenidos de una fuente no confiable, pero supongo que no entiendo por qué los contenidos de la sesión no son de confianza. Esto se basa en mis suposiciones (probablemente no justificadas) de que la única forma en que se podrían agregar datos a la sesión sería llamando a HttpSession.setAttribute () y que solo el código de confianza que se encuentre dentro del alcance de la misma aplicación debería poder hacerlo. .
Supongo que lo que realmente estoy preguntando es cómo un atacante aprovecharía mi falla para realizar la validación correcta de los datos obtenidos de la HttpSession. ¿Se debe a que la implementación es desconocida y no se puede garantizar que los contenidos de la sesión no se construyan de alguna manera a partir de los datos en la solicitud HTTP (aparte de un ID de sesión) y, por lo tanto, estén sujetos a manipulación? ¿O es porque confiar en el contenido de la sesión significa confiar de manera implícita en el ID de sesión, que puede estar comprometido y apuntar a la sesión incorrecta? (aunque para que eso suceda, parece que el atacante tendría que tener algún medio para crear una sesión alternativa que contenga los datos comprometidos).
Suponiendo que el contenido de la sesión no se construye a partir de los datos de la solicitud, ¿es posible que la única forma de aprovechar esta vulnerabilidad sea si existe otra vulnerabilidad que permita a un atacante crear una sesión incorrecta? P.ej. ¿Cargar código ejecutable y hacer que el servidor lo ejecute y devuelva un ID de sesión que se capture y reproduzca?