¿Qué es un ataque CSRF? 💀 Ejemplo de vulnerabilidad

Поділитися
Вставка
  • Опубліковано 21 гру 2024

КОМЕНТАРІ • 114

  • @rauldeobaldia8276
    @rauldeobaldia8276 3 роки тому +8

    5 años después Aún muy útil e importante este vídeo, muy clara la explicación. Mucha gracias.

  • @23140402
    @23140402 2 роки тому +1

    Gracias por tu explicación, no ando tras laravel, más bien conociendo que es ese token.

    • @programacionymas
      @programacionymas  2 роки тому

      Eso es bueno, porque el concepto aplica para aplicaciones web en general, independientemente de la tecnología backend. Gracias también por comentar!

  • @gracielafondevila3251
    @gracielafondevila3251 2 роки тому +1

    Una pregunta, llene un formulario para mí madre de subsidios de gas y electricidad y cdo lo termino me pone !CSRF token mismatch. Que me dice que está protegido o no, por qué la página es la oficial

    • @gladysbustos4
      @gladysbustos4 2 роки тому

      Hola Gabriela,me pasó lo mismo en la tercer página del formulario del subsidio 🙄, y no se q hacer p continuar 🤦🏼‍♀️ alguien que sepa porfa, muchas gracias

    • @programacionymas
      @programacionymas  2 роки тому

      Hola. Pueden intentar actualizando la página e ingresar los datos esta vez más rápido, para que el token no expire.

  • @Tiaagardoo92820
    @Tiaagardoo92820 3 роки тому +1

    Hola capo...una pregunta el CSRF token mismatch..así me sale que se ignifica..es en una página de ANSES..

    • @programacionymas
      @programacionymas  3 роки тому

      Hola. Lo más probable es que puedas solucionarlo solo actualizando la página.
      Estos tokens se generan por seguridad pero caducan cada cierto tiempo.
      Si los ves continuamente probablemente se trate de un error en la implementación del sitio.

  • @LValencia59
    @LValencia59 2 роки тому +1

    Muy buen video, explicas con mucha claridad en que consiste el CSRF Token.

  • @Wololeitor
    @Wololeitor 4 роки тому +1

    muchisimas gracias, muy clara tu explicación

  • @wilwerrodriguez1787
    @wilwerrodriguez1787 7 років тому +10

    muy claro mucha gracias.

  • @jesussvzful
    @jesussvzful 3 роки тому +1

    Excelente explicación

  • @roldanjimcollado9079
    @roldanjimcollado9079 2 роки тому +1

    Gran video, muy entendible tu explicacion ,muchas gracias por eso, tengo una pregunta, y no hay una forma de que el atacante pueda obtener ese token y asi usarlo, para su proposito?

    • @programacionymas
      @programacionymas  2 роки тому +1

      Hola. No es posible ya que el token se genera para cada usuario. Por ejemplo, si entras al formulario, obtienes un token, pero no puedes usar ese token para otra persona, solo servirá para que tú puedas hacer peticiones.
      Gracias por comentar!

  • @daioncode862
    @daioncode862 2 роки тому +1

    Entre CSRF y JWT cual es mejor o como podría elegir uno

    • @programacionymas
      @programacionymas  2 роки тому

      Hola. Excelente pregunta.
      JWT se usa para aplicaciones cliente que se comunican con una API (stateless). Por ejemplo, si tienes una SPA, usarás JWT y no CSRF.
      Pero si tienes una multi-page app, que hace peticiones directamente a tu backend (usando cookies y sesiones, sin consultar una API), es importante agregar un token CSRF.

  • @cyb3rm4n14c
    @cyb3rm4n14c 4 роки тому +1

    Muy buen video, muchas gracias x compartirlo

  • @jmaurich
    @jmaurich 4 роки тому +1

    Muy buena la explicación, muchas gracias por compartirlo. Saludos

  • @alguienes7561
    @alguienes7561 5 років тому +1

    y si utilizo en ves de sesiones tokens del tipo jwt para controlar las sesiones? si cada petición tiene que ir acompañada por el jwt...

    • @programacionymas
      @programacionymas  5 років тому

      Hola. Para el caso de JWT no es necesario usar tokens CSRF.
      Los tokens CSRF nos protegen de realizar peticiones sin darnos cuenta (porque la sesión vive y es usada por el navegador automáticamente).
      Más info: security.stackexchange.com/questions/170388/do-i-need-csrf-token-if-im-using-bearer-jwt

    • @alguienes7561
      @alguienes7561 5 років тому +1

      @@programacionymas Excelente. Claro el jwt cumple en alguna manera la función del CSRF. Excelente video y gracias por tu respuesta.

  • @AngelGonzalez-kl8oi
    @AngelGonzalez-kl8oi 2 роки тому +1

    Y si el atacante primero hace un GET con AJAX, obtiene el formulario con el token y luego reenvia el formulario con el token y los datos de su cuneta bancaria enviando una peticion POST con AJAX a la runta /trasnfer?

    • @programacionymas
      @programacionymas  2 роки тому

      Hola Angel. Excelente pregunta.
      Lo que comentas no sería posible ya que los navegadores implementan una política de CORS, es decir, no se permite hacer una petición ajax desde un dominio a otro distinto, por seguridad del usuario.
      Los ataques CSRF son posibles porque los enlaces hacen que el usuario sea quien ejecuta las acciones.

  • @ivanalexander726
    @ivanalexander726 2 роки тому +1

    Tienes un ejemplo de como implementarlo en java con spring 5

    • @programacionymas
      @programacionymas  2 роки тому

      Hola. Puedes revisar esta parte de la documentación: docs.spring.io/spring-security/site/docs/5.0.x/reference/html/csrf.html

  • @paolac2070
    @paolac2070 5 років тому +1

    Excelente me quedo clarisimo, Muchisimas gracias!!!

  • @jperezo
    @jperezo 7 років тому +1

    Muchas gracias por tu aportación, muy claro!

  • @CarlosYN
    @CarlosYN 4 роки тому +1

    Y no puedo solucionar eso como atacante, con simplmente hacer una peticion a la URL que me da el token valido y luego capturar el trafico y luego despues solamente hacer la transferecia?

    • @programacionymas
      @programacionymas  4 роки тому +1

      Hola. Es una buena pregunta. La respuesta es que no es posible, ya que el CSRF token se imprime de manera oculta en el formulario. Si agregas un link hacia la URL que da el token en realidad estás enviando al usuario a la página del formulario, que es muy distinto a enviar al usuario hacia una URL que ejecuta una acción.
      Con código en otras páginas no tienes acceso a copiar el CSRF token que se carga en la página que intentas vulnerar. Sin el CSRF token basta con poner un enlace que termina ejecutando algo a nombre del usuario, pero si se requiere de un token, eso ya no es posible.
      Si te creas una cuenta en la página para obtener un CSRF token, ese token sólo sería válido para tu sesión, no para otros usuarios.

    • @CarlosYN
      @CarlosYN 4 роки тому

      @@programacionymas te agradezco mucho tu respuesta, pero aun me queda una duda, es decir si se imprime en el formulario de manera oculta, aun así para imprimirse en el formulario debió llegar desde el servidor cuando se hizo la petición a la página que contiene el formulario, entonces ahí se podría interseptar, y luego, al igual que los input del formulario que están visibles, los inputs ocultos se envían al final de cuentas como parámetros, entonces solo sería cosa de primero hacerle una petición a la página que tiene el formulario y luego capturar el toquen válido antes que se incruste, luego hacer una petición a la URL que hace digamos la transacción bancaria con el token correcto. Que opinas de eso, quizá no he comprendido bien tu respuesta, pero si pudieras hacerme el favor de ilustrarme con eso, te lo agradecería mucho.
      A demás creo que sería incluso seria instructivo para tus subs o quienes lean los comentarios, saludos.

    • @programacionymas
      @programacionymas  4 роки тому +1

      ​@@CarlosYN Por ejemplo, si haces tú una petición Ajax para obtener el token, ese token pertenece a tu sesión, no a la del usuario, es decir es válido solo para ti.
      No puedes hacer una petición a nombre del usuario. La única forma sería llevarlo a la ruta que contiene el formulario. Pero si el usuario llega, verá el formulario de pago (o de la operación que quiere hacer), y él usará los parámetros que cree correspondiente. De hecho se sorprendería de haber llegado hasta allí (página A) desde otra página (página B, que es la que tú controlas).
      Desde tu página B no puedes usar JS para acceder al input oculto de la página A. Los navegadores no permiten eso por seguridad.
      ¿A esto te referías? Espero haber entendido bien tu pregunta y no respondido otra cosa.

    • @CarlosYN
      @CarlosYN 4 роки тому

      @@programacionymas es que me refiero a hacer la peticion directamente a la pagina que te da el token y luego cachar la respuesta la cual contendra el token y con eso hacer la transferencia, pero haciendo todo esto en el navegador de la victima desde una pagina maliciosa, para que se entienda mejor programe una pagian sencilla e implemente un web token y puse una pagina atacante. La cual hace lo mencionado y logra realizar la tranzaccion.
      github.com/carlosyenh/csrf-token-expliot-example

  • @colommbiano
    @colommbiano 6 років тому +1

    una pregunta profesor es necesario tambien hacerlo haciendo peticiones con axios en vuejs es decir si estoy usando la ultima versión de laravel que es 5.6 y la ultima version de vuejs 2.5.17 debo hacerlo tambien ?

    • @programacionymas
      @programacionymas  6 років тому +1

      Hola. Si estás declarando las rutas en web.php es muy probable que Laravel te exija el token para las peticiones post.
      En ese caso sí es necesario incluirlo. Aunque generalmente se añade una sola vez y ya queda configurado para peticiones posteriores.

  • @MrElectrofacil
    @MrElectrofacil 6 років тому +2

    Excelente aporte, muy bien explicado. Saludos Cordiales.

  • @daioncode862
    @daioncode862 2 роки тому +1

    Tengo una aplicación que en la función setUser()
    Exige que sea una petición POST
    Exige que el usuario que ha enviado esa petición tenga el permiso de crear registro.
    El permiso viene desde la base de datos, como ves esta funcionalidad amigo

    • @programacionymas
      @programacionymas  2 роки тому

      Hola. En Laravel las peticiones POST requieren de un token CSRF, para evitar los ataques que se mencionan en el video. Adicionalmente a ello puedes tener permisos como los que comentas.

    • @daioncode862
      @daioncode862 2 роки тому

      @@programacionymas hola di he estado leyendo, ese toquen podria capturarlo en el archivo donde estoy recibiendo el post, asi no lo muestro en el formulario

  • @bombiestar5481
    @bombiestar5481 4 роки тому +1

    Y se me olvido la contraceña y quiero recuperarla pero no me da por el token que deberia hacer

    • @programacionymas
      @programacionymas  4 роки тому

      Si te refieres a un token que te envían por correo o por SMS, me temo que es muy distinto al CSRF token que se menciona en el video.
      Saludos.

  • @JuanChehin
    @JuanChehin 3 роки тому +1

    Hola amigo, buen video, una consulta, cual es la diferencia con el token usado por ejemplo en nodeJS con JWT por ejemplo?
    La idea es la misma?

    • @programacionymas
      @programacionymas  3 роки тому +3

      Un CSRF token se imprime como un campo oculto y generalmente forma parte de un formulario.
      En cambio un JWT se obtiene luego de que un usuario inicia sesión y lo representa frente al servidor.
      Los token CSRF generalmente se usan con cookies o sesiones, pero los JWT son stateless.
      Aquí puedes ver info más detallada sobre JWT y su diferente con sesiones: programacionymas.com/blog/jwt-vs-cookies-y-sesiones
      Saludos!

  • @Gohan24
    @Gohan24 4 роки тому +1

    Hola una pregunta, cuando intento entrar al Nightbot de Twitch o alguna vinculación de la plataforma me avisa "invalid CSFR token". Solo me lo permite en modo incógnito, ayuda

    • @programacionymas
      @programacionymas  4 роки тому

      Es muy probable que sea un error de programación en la aplicación que estás intentando conectar. Prueba eliminando datos de navegación / caché.
      Si te funciona desde incógnito es muy probable que el error ya se haya corregido, pero haya quedado "cacheado" el problema que antes existía.

    • @Gohan24
      @Gohan24 4 роки тому

      @@programacionymas Gracias, voy a probar. Antes borré las cookies y seguía igual, en breve te aviso

    • @Gohan24
      @Gohan24 4 роки тому

      @@programacionymas Aún borrando caché, datos, y cookies sigue igual

  • @mnofresno
    @mnofresno 7 років тому +1

    le hago una pregunta señor si tengo una aplicación angular ajax hecha con rest API con Laravel de backend necesito igualmente estos token csrf?

    • @programacionymas
      @programacionymas  7 років тому +1

      Hola. No, en ese caso lo que debes implementar es JWT o algún otro método de autenticación como OAuth.
      Y no es necesario lo de señor, no soy muy viejo jeje.

    • @mnofresno
      @mnofresno 7 років тому

      Programación y más jajaja es cierto estuve muy formal. gracias por tu respuesta.
      Entonces: yo tengo ya implementado el mecanismo de autenticación por JWT igualmente estoy protegido contra cross site forgery? pues el token está almacenado en el local storage del browser no podría otro sitio leer ese token y hacer La famosa transferencia millonaria??

    • @programacionymas
      @programacionymas  7 років тому

      Muy interesante la pregunta. Yo he usado JWT con una app android y guardaba el token en una variable de la misma app usando SharedPreferences.
      En el caso de una API protegida por JWT no se puede suplantar la identidad porque ya hay un token de por medio.
      Estuve leyendo ahora y por lo que veo, las variables que guardas en el local storage solo las puede usar la misma página que los guardó. Lo que sí puede ocurrir es una vulnerabilidad XSS (cross site scripting). Según entiendo esto ocurre cuando requieres algún archivo JS de un sitio externo. Como el código externo se ejecuta sobre tu página, entonces ellos son quienes podrían acceder al token y usarlo para algún propósito, enviando esta "lógica infame" en el JS que descargas y ejecutas.
      Pero creo es menos probable que ocurra. Es como decir, cuidado con las dependencias que tienes en tu proyecto. Mm más exactamente es como si bootstrap, jquery o una biblioteca que uses cambie su código para ejecutar algo sobre tu página accediendo al local storage.
      Aquí puedes leer un poco más: stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage#so-whats-the-difference
      Por cierto, usaste algún paquete para implemenetar jwt en laravel?

    • @mnofresno
      @mnofresno 7 років тому

      Estimado, usé éste: github.com/tymondesigns/jwt-auth
      En éste artículo se explica muy bien cómo usarlo: scotch.io/tutorials/token-based-authentication-for-angularjs-and-laravel-apps o acá: www.toptal.com/web/cookie-free-authentication-with-json-web-tokens-an-example-in-laravel-and-angularjs

    • @sagitario26XD
      @sagitario26XD 6 років тому

      Deberian seguir conversando, esta muy entretenido, je :)

  • @javyy8a
    @javyy8a 4 роки тому +1

    Muchas gracias buena info :)

  • @jairitamarorozcofranco1547
    @jairitamarorozcofranco1547 4 роки тому +1

    como podría usarse en VUE

    • @programacionymas
      @programacionymas  4 роки тому

      Un csrf token es importante por la manera en que funcionan las sesiones. En el caso de Vue, si usas autenticación basada en tokens, no es necesario un token csrf, ya que las peticiones a nombre del usuario sólo ocurren dentro de la aplicación, y no pueden iniciarse desde otras ventanas.

  • @gregorio.productor
    @gregorio.productor 4 роки тому

    que tal hermano, subo instrumentales a beatstar.com y cuando termino de cargar mis pistas para subirlas me sale un carte de que el token CSRF es invalido, porque se da esto sabrias decirme por favor? esto empezo a pasar desde que pague mi primera cuota premium en esta pagina.

    • @programacionymas
      @programacionymas  4 роки тому

      Hola. Un token csrf se genera de manera automática por un sitio web para aumentar la seguridad de las operaciones.
      Generalmente tienen un límite de caducidad. Cuando caducan es que aparece que el token es inválido.
      Deberías poder actualizar y así obtener un token csrf nuevo para que puedas seguir navegando con normalidad. Y si no te funciona deberías reportarlo a los administradores del sitio.

  • @Linkrudo
    @Linkrudo 5 років тому +4

    Iba iniciar sesion en la pagina de mi universidad y me salio este mesaje "CSRF Token under attack detected"
    Deberia de precuparme?

    • @programacionymas
      @programacionymas  5 років тому

      Hola.
      Puedes eliminar datos de navegación, cookies, sesiones, y en una ventana nueva del navegador iniciar sesión (sin tener otras páginas abiertas).
      Aunque, dependiendo de la tecnología que usa la pág de tu universidad, podría tratarse de una alarma en falso también.
      Si ves el mensaje continuamente, puedes informarlo.
      Saludos.

    • @CarlosYN
      @CarlosYN 4 роки тому +1

      eso quiere decir que si ese sistema lo usan tambin los profes, puedes ponerte las calificaciones que quieras solo con que visiten tu pagina maliciosa

  • @joseandresherreraalcantar692
    @joseandresherreraalcantar692 4 роки тому

    Cual seria la diferencia ente csrf_field y el csrf_token

    • @programacionymas
      @programacionymas  4 роки тому

      Hola. Imagino que te refieres a los helpers disponibles en Laravel. El primero imprime un input type hidden con el valor del token, y el 2do sólo imprime el valor del token en sí.

  • @natan9019
    @natan9019 6 років тому +1

    Genial, me quedo mas claro

    • @programacionymas
      @programacionymas  6 років тому

      Gracias por comentar. Qué bueno que te haya sido de ayuda.

  •  6 років тому +1

    Gracias amigo

  • @Undead34
    @Undead34 2 роки тому +1

    Si me gusto, pero no sé falta algo más tecnico.

    • @programacionymas
      @programacionymas  2 роки тому

      Hola Gabriel! De qué manera te gustaría profundizar más en el tema? 🤔

  • @xenizs9112
    @xenizs9112 3 роки тому

    Hay algo que no entiendo aca, en teoria si puedes hacer CORS con ajax, podrias acceder al CSRF Token, por ende el CSRF Token solo sirve para cuando un sitio malicioso hace requests usando las tags html

    • @programacionymas
      @programacionymas  3 роки тому

      Como bien dices, se suele imprimir en un input type hidden dentro de los form.

  • @DarkShyaoran
    @DarkShyaoran 4 роки тому +1

    Excelente explicación, pero no se pq con el Token me aparece el error 419 page expired

    • @programacionymas
      @programacionymas  4 роки тому +1

      Hola. Los token caducan cada cierto tiempo. Puedes modificar la duración desde config/session.php en la variable llamada 'lifetime'.

    • @DarkShyaoran
      @DarkShyaoran 4 роки тому

      @@programacionymas Gracias, espero que si sea eso el problema.

  • @shinnize
    @shinnize 5 років тому

    tengo una duda por que esta expuesto el csrf, en el codigo considero que esto es una debilidad, amenos que este token, este cifrado si fuera el caso esta bien pero aun asi existe esta vunerabilidad, considero que blade deberia ocultarlo o conoces alguna forma para ocultarlo?

    • @programacionymas
      @programacionymas  5 років тому

      Hola. El token csrf se genera continuamente y es diferente para cada usuario, por lo que si alguien copia el valor de uno, no le serviría de mucho. La idea del token es asegurar que se esté navegando desde nuestro sitio, y no desde cualquier otro (para evitar acciones sobre nuestra app que provengan de un origen distinto).

  • @willydavid_
    @willydavid_ 4 роки тому

    Esto se soluciona con JWT? JSON WEB TOKEN?
    Ejemplo:
    Si hacemos una petición a mi APIrest sin el JWT la api no ejecuta la petición. esto soluciona el problema???

    • @programacionymas
      @programacionymas  4 роки тому

      Hola. El CSRF Token es una solución a la vulnerabilidad, para cuando se usan sesiones.
      Para el caso de las APIs no existen sesiones ya que el protocolo HTTP es stateless.
      Aunque para las APIs no existe el problema mostrado en el video, un JWT es importante para la autenticación.
      Si quieres revisar más sobre el tema te recomiendo estos enlaces:
      - programacionymas.com/blog/cookies-y-sesiones
      - programacionymas.com/blog/jwt-vs-cookies-y-sesiones

  • @Mendez_84
    @Mendez_84 7 років тому +1

    Hola, buen vídeo!
    Podrías mostrar cómo implementarlo en php sin necesidad de un framework?
    Muchas gracias

    • @programacionymas
      @programacionymas  7 років тому

      Hola. Es buena idea. Aunque tendría que investigarlo un poco para ver cuál es la mejor forma de generar el token de forma general para todas las peticiones asociadas a rutas.
      De todas formas te recomiendo usar Laravel (te facilita mucho las cosas): series.programacionymas.com/aprende-laravel-desarrollando-un-sistema

    • @GianmarcoCV
      @GianmarcoCV 7 років тому

      es simple, encriptas el tiempo en md5 y guardas ese código en una sesión y lo imprimes en la vista.

  • @joseab1948
    @joseab1948 7 років тому +1

    excelente

  • @bombiestar5481
    @bombiestar5481 4 роки тому +1

    A mi me dio un token en mi cuenta de spotyfi en el play4

  • @elchanoo
    @elchanoo 6 років тому

    Ayuda, yo no se mucho de esto, ¿Es un virus? porque intenté acceder a mi cuenta en un sitio y me detecto esto del ''Csrf'', yo ni se que es eso y por tanto que lo googleo no lo entiendo, intente verificar con el malwarebytes y resulta que ya no funciona, no me deja abrirlo en services.msc esta en detencion. Ayuda?

    • @programacionymas
      @programacionymas  6 років тому

      Hola. No es un virus. Es un mecanismo para añadir seguridad a los sitios web. Es importante que lo conozcan los desarrolladores web.
      En tu caso probablemente se trate de algo totalmente distinto.

  • @JoseGuz
    @JoseGuz 5 років тому

    Una pregunta

    • @programacionymas
      @programacionymas  5 років тому

      ¿Cuál es la pregunta?
      Si respondo recién ahora es porque UA-cam no me envía notificaciones de todos los comentarios, sólo de algunos. Entonces de vez en cuando reviso personalmente.

  • @julioe.rodriguezm.710
    @julioe.rodriguezm.710 5 років тому

    yo solo vine porque al entrar en una pagina me salio CSRF token Invalid y me asuste pense que me habian hakeado , pero al final me ayudo para mi estudio en mi escuela xd ps: muchas gracias por la info :3

    • @programacionymas
      @programacionymas  5 років тому

      ¿Qué página? Es probable que el token haya caducado en dicha página o no se haya configurado correctamente.
      Saludos.

    • @julioe.rodriguezm.710
      @julioe.rodriguezm.710 5 років тому +1

      @@programacionymas Crunchyroll aun que ya me dejo logearme solo cerré la ventana y entre otrvez y ya ,yo me habia asustado no sabía que era el token invalid pero ahora si se gracias a usted :3

  • @freddy9292
    @freddy9292 4 роки тому

    sin esa cosa no me dejaba mandar formularios post >:c

  • @LuisMartinez-cs8fm
    @LuisMartinez-cs8fm 4 роки тому +2

    Me acabas de Aser sentir violado en cuanto a las seguridad de las páginas que he hecho, son una basura ya mismo trabajaré en eso

    • @programacionymas
      @programacionymas  4 роки тому

      Hay muchos sitios vulnerables a esto. Ojalá puedas solucionarlo pronto.
      Saludos.

  • @luisadolfolimachiarmijo3659
    @luisadolfolimachiarmijo3659 6 років тому +1

    o Genial

  • @JoseGuz
    @JoseGuz 5 років тому

    Hoal wuenas

  • @danielsmith9522
    @danielsmith9522 2 роки тому

    cuando venis xel formulario,y no entendes una mierda ja!

  • @GianmarcoCV
    @GianmarcoCV 7 років тому

    CSRF Token está en desuso y fácil de hackear.

    • @programacionymas
      @programacionymas  7 років тому +3

      ¿Por qué crees eso Gianmarco? Tal vez lo estás confundiendo con otro concepto.