¿El secuestro JSON es diferente a la inyección JSONP?

2

Estoy bastante confundido al entender estas dos vulnerabilidades. ¿En qué se diferencian las vulnerabilidades relacionadas con JSONP del secuestro JSON?

    
pregunta PenGeek 19.09.2017 - 20:34
fuente

1 respuesta

3
  

¿El secuestro JSON es diferente a la inyección JSONP?

Sí , son ataques diferentes. Si bien el secuestro de JSON es una amenaza del pasado que ahora se elimina en todos los navegadores principales, la inyección de JSONP sigue siendo una amenaza de seguridad para las aplicaciones web. Ambos ataques tienen en común que su objetivo es leer una respuesta JSON de un origen no confiable.

Inyección JSONP

Con JSONP (JSON con relleno), una aplicación proporciona deliberadamente una respuesta JSON dentro de una función de devolución de llamada (o, a veces, como una asignación), con mayor frecuencia para superar los límites de origen cruzado.

Por ejemplo, el sitio https://example.com/mySecrets?callback=saveSecrets podría devolver algunos "secretos" del usuario que ha iniciado sesión actualmente, con la respuesta como esta:

saveSecrets({"userSecrets": [123, 456, 789]})

En este caso, un atacante puede definir su propia función de devolución de llamada ( saveSecrets ) e incluir el documento como una secuencia de comandos externa para filtrar los secretos del usuario actual, en la línea de:

<script>
function saveSecrets(secrets) {
    alert(secrets);
}
</script>
<script src="https://example.com/mySecrets?callback=saveSecrets"></script>

(HaymuchosotrosescenariosdeataqueJSONP.Puedeencontrarmásdeellosconexplicacionesdetalladas aquí .)

Secuestro JSON

El secuestro de JSON sigue la misma idea de filtrar una respuesta JSON. Pero en este caso, la aplicación no proporciona una función de devolución de llamada conveniente. En cambio, el ataque se basa en la modificación de objetos JS nativos. Afortunadamente, esto ya no es posible en los navegadores actuales.

El ejemplo del libro de texto es JSON dentro de una matriz, por ejemplo:

[{"userSecrets": [123, 456, 789]}]

Hace años, cuando los navegadores permitían que los scripts redefinieran los objetos JS nativos, la forma de extraer los secretos era definir su propio constructor Array o secuestrar el prototipo del objeto con, por ejemplo. Object.__defineSetter__ y luego hace referencia a la URL como un script externo, similar al ejemplo JSONP anterior.

(Puede leer más sobre el secuestro JSON en esta publicación de blog o < a href="https://security.stackexchange.com/a/159615/95381"> mi respuesta aquí .)

    
respondido por el Arminius 19.09.2017 - 21:35
fuente

Lea otras preguntas en las etiquetas