{"id":1944,"date":"2014-04-09T10:40:19","date_gmt":"2014-04-09T15:40:19","guid":{"rendered":"http:\/\/puchunguis.com\/blog\/?p=1944"},"modified":"2015-02-28T09:43:24","modified_gmt":"2015-02-28T15:43:24","slug":"actualizar-openssl-en-directadmin-contra-heartbleed-cve-2014-0160","status":"publish","type":"post","link":"https:\/\/www.jorgealdana.pro\/blog\/seguridad\/actualizar-openssl-en-directadmin-contra-heartbleed-cve-2014-0160\/","title":{"rendered":"Actualizar OpenSSL en Directadmin contra Heartbleed (CVE-2014-0160)."},"content":{"rendered":"<p>Como habr\u00e1n escuchado existe una vulnerabilidad en OpenSSL el fallo est\u00e1 en una funci\u00f3n encargada de gestionar mensajes <strong>Heartbeat<\/strong>.<\/p>\n<p>Estos mensajes son llamados keep-alive: es una forma de decirle al servidor que sigues conectado y que no cierre la conexi\u00f3n. El mensaje que mandes puede tener una carga o contenidos (payload), como pueda ser la fecha en la que se ha enviado. El servidor recibe ese mensaje y responde al cliente con esa misma carga. Este tipo de esquema \u201cte paso algo y me respondes con lo mismo\u201d y no es exclusivo de TLS: en los paquetes de ping, por ejemplo, tambi\u00e9n se pueden incluir datos para as\u00ed calcular cu\u00e1nto tarda el servidor en responder.<\/p>\n<p>El cliente tiene que decir tambi\u00e9n qu\u00e9 longitud tiene esa carga, para que el servidor la pueda leer sin tener que adivinar d\u00f3nde acaba. Y aqu\u00ed es donde vienen los problemas. \u00bfQu\u00e9 pasa si le digo al servidor que le estoy enviando mil bytes y en realidad s\u00f3lo le estoy enviando uno?<\/p>\n<p>Si hab\u00e9is programado alguna vez en lenguajes de alto nivel, como Java, C# o JavaScript, pensar\u00e9is que eso fallar\u00e1. Al fin y al cabo, estamos intentando acceder a cosas que no est\u00e1n ah\u00ed. Si mi paquete es una lista de bytes de longitud 10 y quiero leer el 20978, no tengo de d\u00f3nde sacarlo y el programa deber\u00eda pararse y reportar un fallo.<\/p>\n<p>Pero OpenSSL est\u00e1 escrito en C, y en C las cosas no son tan felices. En este lenguaje, la variable \u201cpaquete\u201d no es m\u00e1s que una direcci\u00f3n en la memoria RAM; por ejemplo, la 1076. El primer byte del paquete est\u00e1 en la posici\u00f3n 1076, el segundo en la 1077, el tercero en la 1078 y as\u00ed sucesivamente.<\/p>\n<p>Cuando se est\u00e9 ejecutando un ataque, OpenSSL recibe un mensaje de longitud 10 (por ejemplo), que dice que tiene 200 bytes de carga y que almacena en la posici\u00f3n 1076. Cuando tenga que responder, empezar\u00e1 a copiar el byte 1076, el 1077, el 1078\u2026 as\u00ed hasta el 1086. \u00bfQu\u00e9 ocurre despu\u00e9s? F\u00e1cil: OpenSSL sigue. A \u00e9l le han dicho que hay 200 bytes (el c\u00f3digo no verifica si la longitud que aparece en el paquete es incorrecta) y va a copiar sus 200 bytes. Es decir, seguir\u00e1 leyendo y copiando hasta que llegue a la posici\u00f3n 1276.<\/p>\n<p>\u00bfY qu\u00e9 hay en esas posiciones? Pues sorpresas. La reserva de memoria no es determinista as\u00ed que puede haber absolutamente de todo. Quiz\u00e1s s\u00f3lo hay basura, restos del paquete anterior as\u00ed es como se comprueba si un servidor es vulnerable o la clave privada del servidor.<\/p>\n<p>Repitiendo muchas veces el ataque, cada vez se pueden recuperar hasta 64 KB de la memoria del servidor, es probable que se acaben encontrando cosas de valor. Adem\u00e1s, las estructuras m\u00e1s valiosas, como las claves privadas que coment\u00e1bamos, son relativamente f\u00e1ciles de encontrar cuando est\u00e1n guardadas en memoria. En resumen, es un fallo muy grave, una ventana abierta a los entresijos confidenciales de OpenSSL.<\/p>\n<h3>\u00bfC\u00f3mo puedo actualizar OpenSSL en DirectAdmin?<\/h3>\n<p>Es sencillo sin embargo al utilizar los siguientes comandos no solo actualizar\u00e1s OpenSSL, si no tambi\u00e9n actualizar\u00e1s todos los servicios, por lo que antes es mejor que respaldes o generes una imagen de tu servidor.<\/p>\n<blockquote><p>cd \/usr\/local\/directadmin\/custombuild<br \/>\n.\/build update<br \/>\n.\/build all d<\/p><\/blockquote>\n<p>Nota: En caso de alg\u00fan error, ingresa: \u00ab.\/build rewrite_confs\u00bb<\/p>\n<h3>\u00bfD\u00f3nde puedo verificar si soy vulnerable?<\/h3>\n<p>Puedes hacerlo con en esta p\u00e1gina: <a title=\"http:\/\/filippo.io\/Heartbleed\/\" href=\"http:\/\/filippo.io\/Heartbleed\/\" target=\"_blank\" rel=\"noopener\">http:\/\/filippo.io\/Heartbleed\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Como habr\u00e1n escuchado existe una vulnerabilidad en OpenSSL el fallo est\u00e1 en una funci\u00f3n encargada de gestionar mensajes Heartbeat. Estos mensajes son llamados keep-alive: es una forma de decirle al servidor que sigues conectado y que no cierre la conexi\u00f3n. El mensaje que mandes puede tener una carga o contenidos (payload), como pueda ser la fecha en la que se ha enviado. El servidor recibe ese mensaje y responde al cliente con esa misma carga. Este tipo de esquema \u201cte paso algo y me respondes con lo mismo\u201d y no es exclusivo de TLS: en los paquetes de ping, por <\/p>\n","protected":false},"author":1,"featured_media":1945,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14],"tags":[2944,2945,2943,2942,7,2941],"class_list":["post-1944","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-seguridad","tag-cve-2014-0160","tag-directadmin-cve-2014-0160","tag-directadmin-heartbleed","tag-directadmin-openssl","tag-hackers","tag-heartbleed","has_thumb"],"_links":{"self":[{"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/posts\/1944","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/comments?post=1944"}],"version-history":[{"count":3,"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/posts\/1944\/revisions"}],"predecessor-version":[{"id":1951,"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/posts\/1944\/revisions\/1951"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/media\/1945"}],"wp:attachment":[{"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/media?parent=1944"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/categories?post=1944"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/tags?post=1944"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}