¿Qué protege a un JWT de ser secuestrado y utilizado para hacerse pasar por el usuario original?

8

Lo siento por esta pregunta posiblemente tonta, solo estoy aprendiendo sobre JWT, así que por favor, tengan paciencia conmigo ...

Leí los documentos de JWT ampliamente, pero no entiendo qué impide que un pirata informático secuestre el JWT y se haga pasar por el usuario para el que se emitió originalmente.

Este es el escenario que me preocupa: supongamos que un mal actor es capaz de detectar el tráfico en mi red corporativa y también tiene una cuenta simple en mi sitio. Si puede encontrar un usuario empleado que tenga permisos de administrador o especiales, ¿no puede iniciar sesión en el sitio, recibir su cookie SSL, luego secuestrar el JWT del empleado y hacerse pasar por ese usuario ahora y obtener esos permisos especiales?

Como no volveré a revisar las credenciales del mal actor, solo su JWT, me parece que el mal actor podría enviar el JWT usando el sitio SSL a través de su simple cuenta ...

¿Qué parte del rompecabezas me estoy perdiendo aquí? ¡Gracias!

    
pregunta longboardnode 04.10.2017 - 04:40
fuente

3 respuestas

12

Los JWT son solo una encapsulación de información en una cadena con la capacidad de cifrar esta información y detectar manipulación. Los JWT por sí solos no protegen contra el robo o el uso indebido de cookies con sniffing, XSS, CSRF, extensiones de navegador o similares.

Esto significa que aún necesita emplear los métodos habituales para proteger el token o la cookie contra el uso indebido, es decir, usar cookies de solo http para proteger contra XSS, usar TLS para protegerse contra el rastreo, usar tokens CSRF u otras técnicas para protegerse contra CSRF etc. Y puede incluir alguna información en el token protegido que dificulta el uso indebido, como una huella digital del navegador, la IP de origen del usuario, etc. Por supuesto, debe verificar esta información cada vez que la cookie se utiliza para la autorización.

    
respondido por el Steffen Ullrich 04.10.2017 - 06:50
fuente
2

Hay un riesgo considerable planteado por un atacante que rastrea el tráfico de red y roba cookies de sesión para hacerse pasar por otros usuarios. Sin embargo, los JWT no fueron diseñados para abordar este riesgo. Tienes SSL / HTTPS para solucionar ese problema. Una conexión SSL entre su navegador y el servidor web proporciona confidencialidad y seguridad de datos en tránsito. Si está utilizando JWT a través de una conexión HTTP, no hay mucho que pueda hacer para evitar que el atacante detecte su tráfico y haga un uso incorrecto del token.

JWT son tokens autosuficientes que se utilizan para compartir información de autenticación entre diferentes sistemas. Resuelven el problema de confiar en terceros para validar un token de autenticación, ya que toda la información necesaria para validar el JWT está contenida en el token. Esto simplifica el proceso de incorporación en un sistema de inicio de sesión único ya que se requiere una integración mínima. Los JWT también son compatibles con HTTP, ya que son solo cadenas BASE-64.

Los JWT han tenido su parte de problemas de seguridad en el pasado. lea más .

P.S. aún debe confiar en terceros para obtener las claves públicas correctas para la validación del token.

    
respondido por el Shurmajee 04.10.2017 - 07:38
fuente
0

También me enfrento a este problema relacionado con la seguridad en el pasado, pero puedo hacerlo de la misma manera. Simplemente haga un middleware y verifique el origen de esa manera.

<?php
namespace App\Http\Middleware;
use Closure;
class CheckOrigin
{
    public function handle($request, Closure $next)
    {
        if($request->header('Origin') != 'http://yourapihost.com') {
            return response()->json([
                'meta' => [
                    'message' => 'You are Unauthorize person.',
                    'status_code' => 401,
                    'status' => false,
                ],
            ],401);
        }
        return $response;
    }
}

entonces, si alguien secuestró su token jwt y luego intenta llamar a la solicitud desde otro servidor o localhost, entonces el middleware no permite ese tipo de solicitud.

    
respondido por el Harsukh Makwana 13.12.2018 - 14:20
fuente

Lea otras preguntas en las etiquetas