¿Puede el OWASP ZAP verificar XSS para la API REST?

2

Tengo una aplicación web y utilicé OWASP ZAP para verificar XSS. Probé dos casos como ejemplo abajo:

URL: localhost: 8888 / test / login

Öogin page HTML:

<!DOCTYPE html>
<html>
<head>
<meta charset="US-ASCII">
<title>Login Page</title>
<script src="https://code.jquery.com/jquery-1.9.1.min.js"></script></head><body><h3>Loginwithemailandpassword</h3><formid="testForm" action="login" method="post">
<strong>User Email</strong>:<input type="text" name="email" id="email"><br>
<strong>Password</strong>:<input type="pass" name="pass" id="pass"><br>
<input type="submit" value="Login" id="subForm">
<div id="result"><%=request.getAttribute("email")%></div>
</form>
<br>
If you are new user, please <a href="register.html">register</a>.
</body>
</html>

Caso 1 : HTML de devolución de la aplicación (respuesta HTML)

  • Iniciar ZAP

  • Enviar formulario de inicio de sesión

  • Elija Active scan XSS para esta URL: localhost: 8888 / test / login

    Resultado: ZAP encontró 1 script de alerta XSS

Caso 2 : retorno de aplicación JSON (REST API)

URL: localhost: 8888 / api / login

Formato de datos JSON de solicitud: {"email":"abc", "pass": "123456"}

Formato de datos JSON de respuesta: {"email":"abc", "pass": "123456"}

  • Uso de Ajax para llamar a API con solicitud JSON

    <script>
    
    function sendAjax() {
    
        var user = new Object();
    
        var email = $('#email').val();
    
        var pass = $('#pass').val();
    
        $.ajax({
            url: "localhost:8888/api/login",
            type: 'POST',
            dataType: 'json',
            data: JSON.stringify({"email":email,"pass":pass}),
            contentType: 'application/json',
            mimeType: 'application/json',
    
            success: function (data) {
                $("#result").html("email: "+data.email+" pass: "+data.pass)
            },
            error:function(data,status,er) {
                alert("error: "+data+" status: "+status+" er:"+er);
            }
        });
    }
    </script>
    
  • Iniciar ZAP

  • Pulse la cumbre del botón (llame a la función sendAjax para enviar los datos de solicitud)

  • Elija Active scan XSS para esta URL: localhost: 8888 / api / login

    Resultado: No se encontró nada

Lo que quiero saber exactamente es que: ZAP puede verificar si la API de XSS está en reposo o no. Si no puedo, ¿cómo puedo verificar si hay XSS en esta API (caso 2)?

    
pregunta nhatnguyen 10.12.2015 - 09:16
fuente

2 respuestas

1

Purefan ya respondió a tu pregunta en los comentarios, pero esto se expandió un poco.

Un ataque XSS no es posible si el sitio web devuelve un JSON utilizando el encabezado Content-type: application/json . ¿Por qué? Debido a que un JSON es solo una cadena, no importa si su sitio devuelve {123 : alert('blablabla')} porque es solo una cadena.

Por otro lado, un XSS funciona porque el cliente interpreta el HTML de respuesta, por lo que ZAP detecta el XSS cuando devuelve un HTML en lugar de JSON.

    
respondido por el yzT 11.12.2015 - 10:41
fuente
0

Si su API devuelve JSON, existe la posibilidad de XSS en la interfaz de usuario (Cliente) si y solo si la aplicación no analiza correctamente el JSON en la interfaz de usuario (Cliente).

Compruebe si el servidor está validando el tipo de contenido, ya que puede llevar a CSRF.

Por favor revise esta respuesta relacionada en StackOverflow: ¿Es posible explotar las respuestas JSON de XSS con una cadena de JavaScript adecuada que se escape?

    
respondido por el ammy 01.04.2016 - 12:22
fuente

Lea otras preguntas en las etiquetas