JSON Hijacking è diverso dall'iniezione JSONP?

2

Sono abbastanza confuso mentre capisco queste due vulnerabilità. In che modo le vulnerabilità correlate a JSONP sono diverse da JSON Hijacking?

    
posta PenGeek 19.09.2017 - 20:34
fonte

1 risposta

3

Is JSON Hijacking different than JSONP injection?

, sono attacchi diversi. Mentre il dirottamento JSON è una minaccia del passato che ora viene eliminata in tutti i principali browser, l'iniezione JSONP rimane una minaccia per la sicurezza delle applicazioni web. Entrambi gli attacchi hanno in comune il fatto che il loro obiettivo è quello di leggere una risposta JSON da un'origine non attendibile.

Iniezione JSONP

Con JSONP (JSON con padding), un'applicazione fornisce deliberatamente una risposta JSON all'interno di una funzione callback (o talvolta come assegnamento), il più delle volte per superare i limiti di origine incrociata.

Ad esempio, il sito https://example.com/mySecrets?callback=saveSecrets potrebbe restituire alcuni "segreti" dell'utente attualmente loggato, con la risposta simile alla seguente:

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

In questo caso, un utente malintenzionato può definire la propria funzione di callback ( saveSecrets ) e includere il documento come script esterno per svelare i segreti dell'utente corrente, sulla falsariga di:

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

(EsistonomoltialtriscenaridiattaccoJSONP.Puoitrovarnealtriconspiegazionidettagliate qui ).

JSON Hijacking

Il dirottamento JSON segue la stessa idea di esfiltrazione di una risposta JSON. Ma in questo caso, l'applicazione non fornisce una comoda funzione di callback. Invece, l'attacco si basa sulla modifica di oggetti JS nativi. Fortunatamente, questo non è più possibile nei browser attuali.

L'esempio del libro di testo è JSON all'interno di una matrice, ad esempio:

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

Anni fa, quando i browser consentivano agli script di ridefinire oggetti JS nativi, il modo per estrarre i segreti era definire il proprio costruttore Array o dirottare il prototipo Object con ad es. Object.__defineSetter__ e quindi facendo riferimento all'URL come script esterno, simile all'esempio JSONP sopra.

(Puoi leggere ulteriori informazioni sul dirottamento JSON in questo post del blog o < a href="https://security.stackexchange.com/a/159615/95381"> la mia risposta qui .)

    
risposta data 19.09.2017 - 21:35
fonte

Leggi altre domande sui tag