XSS

La vulnerabilidad “Cross-Site Scripting (XSS)” está relacionada con una pobre validación de datos de entrada a la aplicación que permite la inyección de código script (generalmente JavaScript), el cual posteriormente puede ejecutarse en la parte cliente de un usuario y realizar acciones como obtener sesiones de usuario y otras acciones que puede comprometer la confidencialidad e integridad de la aplicación. Dado que el código inyectado se almacena por la aplicación, la vulnerabilidad XSS se considera persistente.

Riesgo del ataque

  • Robo de datos sensibles.

  • Ataques CSRF (Cross Site Request Forgery).

  • Suplantación de usuarios.

  • Si el atacante suplanta un usuario con los permisos adecuados, podría ejecutar código en el servidor.

 

Código vulnerable 1:

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {   String name = req.getParameter("name");   PrintWriter out = resp.getWriter();   out.write("Hello " + name); }

Solución:

Se debe implementar una validación que impida introducir más parámetros de los necesarios, así como caracteres innecesarios.

En este caso se debe utilizar anotaciones de Spring o expresiones regulares, sabiendo que formato debe tener la entrada.

private static final Pattern namePattern = Pattern.compile("^[a-zA-Z]+(([',. -][a-zA-Z ])?[a-zA-Z]*)*$");   public void doPost( HttpServletRequest req, HttpServletResponse resp) {   try {       String name= req.getParameter( "name" );       if ( !namePattern.matcher( name).matches()  {           throw new YourValidationException( "Improper name format." );       }       // do what you want here, after its been validated ..   } catch(YourValidationException e ) {       resp.sendError( response.SC_BAD_REQUEST, e.getMessage() );   } }

Referencias:

https://owasp.org/www-project-top-ten/OWASP_Top_Ten_2017/Top_10-2017_A7-Cross-Site_Scripting_(XSS)

Cross Site Scripting Prevention - OWASP Cheat Sheet Series

OWASP Validation Regex Repository | OWASP Foundation

What is a cross-site scripting vulnerability? | Invicti