A veces es posible usar una codificación alternativa para sortear los controles de seguridad ( CAPEC-267 ). Si bien la especificación JSON puede ser estricta con respecto a lo que es válido, los analizadores populares no necesariamente se ajustan perfectamente a [1] .
Por lo tanto, mi pregunta es: ¿qué codificaciones alternativas están permitidas por la norma y cuáles son permitidas por los analizadores populares? De las codificaciones alternativas que existen, ¿cuán confiados podemos estar de que no se pueden usar en un ataque? El ataque específico que me preocupa es evitar una lista blanca o negra que verifique los nombres de las claves json en entradas no confiables, pero me interesaría escuchar otros ataques posibles a través de la codificación alternativa de las claves JSON. para mi beneficio y el de los demás.
[1] Por ejemplo, la especificación establece que los nombres de las teclas distinguen entre mayúsculas y minúsculas. El paquete de codificación / json de Golang prefiere coincidencias que distinguen entre mayúsculas y minúsculas, pero recurrirá a la concordancia de claves que no distingue entre mayúsculas y minúsculas - vea ( json.Unmarshal ( ) ).
(Editar) Caso de uso: estoy involucrado en el desarrollo de un dispositivo conectado a la red. Normalmente es controlado por la nube; sin embargo, si se configura mal, eso no es posible, o si el usuario final no configura su red de una manera que podamos entender. El tiempo de funcionamiento es muy importante para los clientes, por lo que estoy trabajando en un mecanismo por el cual el usuario final escribe un archivo de "rescate" en la llave USB y luego lo conecta al dispositivo. Algunas tareas, como reiniciar procesos particulares, se consideran seguras y, por lo tanto, no es necesaria una firma.
Como no puedo imaginar todos los problemas posibles, también hay una disposición para una clave JSON cuyo valor son los comandos de shell, obviamente mucho más peligrosos. Tengo una lista negra que bloquea teclas de comando peligrosas como esta a menos que una firma esté presente y sea válida. Actualmente, simplemente estoy haciendo una búsqueda de texto que no distingue entre mayúsculas y minúsculas para cada "key_name"
(incluidas las comillas, para reducir la posibilidad de falsos positivos), mientras que los datos todavía están codificados como json. Siempre que un atacante no pueda usar otra cosa en lugar de comillas o algún tipo de codificación, creo que mi muy simple lista negra funcionará bien.
Originalmente planeaba publicar en StackOverflow pero decidí que esto era mejor. Disculpas si eso no es así.