Versión TLDR: esta falla grave (CVE-2014-0160) es una comprobación de límites faltantes antes de una llamada memcpy () que utiliza una entrada de usuario no desinfectada como parámetro de longitud. Un atacante puede engañar a OpenSSL para que asigne un búfer de 64 KB, copie más bytes de los necesarios en el búfer, devuelva ese búfer y, por lo tanto, filtre el contenido de la memoria de la víctima, 64 KB a la vez.
Versión larga:
Esta respuesta es solo para servir como explicación del error a los lectores que no están familiarizados con el tema.
- ¿La criptografía asimétrica es vulnerable a las tablas del arco iris?
- ¿Por qué los ataques de fuerza bruta en contraseñas son una preocupación?
- ¡URGENTE! ¿Mi computadora ha sido infectada por malware o mi Internet ha sido secuestrado?
- ¿Por qué los ISP no pueden detectar y prevenir ataques DDOS?
- ¿Por qué los hackers usan IRC?
- La versión “explícame como si tuviera cinco años”.
- La versión técnica.
Doy la bienvenida a los expertos para que respondan sobre el impacto, lleguen y den sus comentarios sobre este error.
Heartbleed no es un problema con las tecnologías TLS / SSL que encriptan Internet. Ni siquiera es un problema con cómo funciona OpenSSL en teoría. Es solo un error de codificación tonto.
Cuando dos servidores se preparan para hacer un apretón de manos encriptado, realizan algo llamado latido , un acto del cual el error recibe su nombre increíblemente aterrador.
Los latidos del corazón son una forma en que dos computadoras que están hablando entre sí para asegurarse de que la otra sigue viva, de modo que si algo sale mal durante un proceso, no continúa. Lo hacen mediante el envío de datos de ida y vuelta entre sí.
El cliente (ese es usted) envía sus latidos al servidor (su banco, por ejemplo), y el servidor lo devuelve de inmediato. De esa manera, si algo sale mal durante la transacción (por ejemplo, si una computadora explota literalmente), la otra lo sabrá, porque los latidos del corazón se desincronizan. Es como asegurarse de que los dos cabezales de una cinta de casete se muevan cuando la esté reproduciendo. Si un husillo se detiene y el otro continúa, algo se romperá.
- La versión “explícame como si tuviera cinco años”:
Imagen, tienes un montón de fotos y vas a una tienda por una caja para guardarlas. El tipo que dirige la tienda es muy estúpido y no puede contar nada.
Caminas hacia el mostrador de esta tienda con 100 fotos y las abofeteas diciendo “Tengo 100 fotos”. Los ojos del dueño se iluminan de alegría. “¡Tengo una caja para esos!” él dice. “Tengo una caja de 100 fotos!” Saca una caja de debajo del mostrador y dice: “¡Aquí está! Alguien la dejó aquí llena de fotos, pero ya no las necesitan”. Luego saca una foto de la caja, la quema, coloca una de sus fotos y continúa haciéndolo hasta que se queda sin fotos. Al final de ese proceso, el cuadro ahora está lleno de tus fotos, y él te lo devuelve. Tienes tu caja, y todas las fotos antiguas se destruyen. ¡Hurra! Un pequeño intercambio ordenado 1: 1.
Pero imagina si en lugar de 100 fotos le diste una sola. Caminas hacia el mostrador, sonríes con una sonrisa villana, abrazas tu única foto y dices “Tengo 100 fotos”. Nuevamente, el propietario tiene una caja para ti y saca una caja llena de 100 fotos que alguien dejó allí. Una vez más, saca una foto de la caja, la quema y pone la suya. Luego, después de solo una foto, ya no tiene fotos, y como es muy estúpido y no puede contar nada , asume esto. significa que su trabajo está hecho y desliza la caja hacia usted, con su foto y 99 de otra persona. Él ha tomado tu palabra, a pesar de todas las pruebas de lo contrario.
Esto significa que puedes irte con 99 fotos que no te pertenecen, ¡y tal vez una de ellas es de una persona desnuda! ¡Puntuación! Aún mejor, este cajero es tan tonto que ni siquiera puede distinguir fotos cero de fotos que no sean cero. Si solo dice que tiene 100 fotos y no le da literalmente nada, él todavía le dará una caja de 100 fotos que pertenecen a otra persona.
En el caso de Heartbleed, esas fotos son bits de datos. A veces, estos fragmentos de datos se unen para ser un correo electrónico, una contraseña o un nombre de usuario. A veces incluso encajan para ser la contraseña de un gran sitio web, un sello de firma con su nombre y el código clave de su sistema de seguridad. La selección de las sobras que obtienes es aleatoria, pero puedes hacer el truco tantas veces como quieras y eventualmente obtienes algo bueno. Solo sigue pidiendo cajas.
Eso es lo que las personas nefastas que conocen Heartbleed pueden seguir pidiéndole información a un servidor, una y otra vez, hasta que envíe algo jugoso.
- La versión técnica.
La violación real que está poniendo de rodillas a Internet ocurre en esta pequeña línea de código:
memcpy (pb, p1, carga útil);
En pocas palabras (como sea posible), es solo un error de desbordamiento de búfer . Memcpy es un comando que copia datos y requiere tres piezas de información para hacer el trabajo; Esos son los términos entre paréntesis. El primer bit de información es el destino final de los datos que deben copiarse. El segundo es la ubicación de los datos que deben copiarse. El tercero es la cantidad de datos que la computadora va a encontrar cuando vaya a hacer esa copia. En este caso, el bp es un lugar en la computadora servidor, p1 son los datos reales que el cliente envió como un latido, y la carga útil es un número que dice qué tan grande es p1 .
Lo importante que debe saber aquí es que copiar datos en las computadoras es más complicado de lo que parece porque realmente no existe tal cosa como la memoria “vacía”. Entonces, bp , el lugar donde se copiarán los datos del cliente, en realidad no está vacío. En cambio, está lleno de los datos que antes se encontraban en esa parte de la computadora. La computadora simplemente lo trata como vacío porque esos datos se han marcado para su eliminación. Hasta que se llene de datos nuevos, el bp de destino es un conjunto de datos antiguos que se pueden sobrescribir. Sin embargo, todavía está allí.
Ahora, idealmente, cuando memcpy toma los datos de p1 y los coloca en bp , cubre todos esos datos viejos y basura en bp . Después de todo, la carga útil dice cuán grande es p1 , y el espacio en bp fue creado para ser exactamente del mismo tamaño; Un ajuste perfecto. Cuando se dispara sin problemas, todo lo que solía estar en bp se destruye y se llena con los datos de p1 . Y eso es lo que se devuelve al cliente: exactamente lo que enviaron en primer lugar. Lo que queda es una pequeña y ordenada transacción 1: 1 donde lo que entra también vuelve a salir.
Funciona muy bien, a menos que la carga útil esté mintiendo . Si la carga útil dice que p1 es de 64 KB cuando en realidad es de 0 KB, tiene un problema. Ninguno de los datos antiguos en bp se sobrescribe, porque no hay nada que lo reemplace. En la práctica, eso significa que los datos antiguos que estaban almacenados en bp antes del latido se devuelven al cliente. A veces esos datos son inofensivos, a veces es su contraseña bancaria. De cualquier manera, termina en algún lugar donde no debería.
– Compilado de varias fuentes de noticias, gran contribución de Gizmodo.