¿Qué son las "matrices JSON de nivel superior" y por qué son un riesgo para la seguridad?


En el siguiente video, en el marcador de tiempo 21: 40, el presentador de Microsoft PDC dice que es importante que todo JSON esté envuelto para que no sea una matriz de nivel superior:

Https://channel9.msdn.com/Events/PDC/PDC09/FT12

¿Cuál es el riesgo de una matriz de nivel superior sin envolver?

¿Cómo debo comprobar y ver si soy vulnerable? Compro muchos componentes de 3 partes y tengo proveedores externos que desarrollan mi código.

Author: random65537, 2010-08-17

2 answers

Esto se debe a que hace unos años Jeremiah Grossman encontró una vulnerabilidad muy interesante que afecta a gmail. Algunas personas han abordado esta vulnerabilidad mediante el uso de un unparseable cruft (Descripción técnica del Sr. bobince en esta página es fantástico.)

La razón por la que Microsoft está hablando de esto es porque no han parcheado su navegador (todavía). (Editar: Las versiones recientes de Edge e IE 10/11 han abordado este problema.) Mozilla considera que esto es una vulnerabilidad en la especificación json y por lo tanto lo parchearon en Firefox 3. Para que conste, estoy completamente de acuerdo con Mozilla, y es desafortunado, pero cada desarrollador de aplicaciones web va a tener que defenderse contra esta vulnerabilidad muy oscura.

 41
Author: rook,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:54:59

Creo que es porque el constructor Array() puede ser redefinido. Sin embargo, ese problema no es realmente exclusivo de los arrays.

Creo que el ataque (o una posible manera) es algo como esto:

function Array(n) {
  var self = this;
  setTimeout(function() {
    sendToEvilHackers(self);
  }, 10);
  return this;
}

El navegador (o algunos navegadores) usan ese constructor para [n, n, n] notación de matriz. Por lo tanto, un ataque CSRF puede explotar su sesión abierta con su banco, golpear una URL JSON conocida con una etiqueta <script> para obtenerla, y luego poof usted es propietario.

 11
Author: Pointy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-17 14:03:41