Fallo de seguridad en wget

Descripción:


Vulnerabilidad en wget, CVE-2014-4877, que permite a un atacante crear una estructura malintencionada en un servidor FTP. Con la opción de descarga recursiva que tiene wget, dicho FTP preparado puede crear enlaces, ficheros y directorios con y asignar los permisos que le interesen en el equipo remoto.

Versiones afectadas: < 1.16

Fecha:


29/10//2014

Detalles:


wget es una herramienta que permite la descarga de contenido desde diversos protocolos (http, https y ftp). También, una de las características más destacadas es la descarga recursiva de dicho enlace, lo que permite descargar FTPs completos, por ejemplo. Un FTP creado con un directorio especificamente manipulado, puede llegar a crear ficheros, directorios y enlaces en el sistema remoto que según el contenido de éste puede llegar a ser peligroso.
La vulnerabilidad está identificada con el código CVE-2014-4877.

Solución:


Hay varias soluciones y la primera y principal, es actualizar wget a la última versión disponible, la 1.16, donde ya está corregido el fallo.
En caso de que esta actualización no se pueda realizar, para mitigar el fallo comentado, se pueden tomas estas dos opciones:
  • - -retr-symlinks
    Pasando esta opción en línea de comandos antes de usar wget.
  • retr-symlinks=on
    En el fichero de configuración general (/etc/wgetrc) o de usuario (~/.wgetrc).
Leer más

Soporte VLAN en Debian

El concepto VLAN se emplea para separar através de una misma red física, varias redes virtuales. Esta separación, aunque sencilla de entender, no es tan sencilla a nivel de red. Para dar soporte VLAN, el equipo que se quiere conectar a dicha VLAN, debe marcar aquellos paquetes que se envían por el interfaz de VLAN con el tag correspondiente. A mayores, los equipos intermedios deben también de soportar esta característica, aunque a día de hoy, esto no suele ser ya un problema.

Soporte a VLAN

En sistemas Debian, para añadir el soporte para manejar VLANs, únicamente requiere instalar el paquete vlan.
shell> apt-get install vlan
A continuación necesitamos cargar el módulo que da soporte a VLANs, 8021q.
shell> modprobe 8021q
Y puesto que nos interesa que cada vez que el equipo arranque, dicho soporte exista, hacemos que se cargue.
shell> echo 8021q >> /etc/modules

Creando VLAN

Con el soporte para VLAN añadido, crear una nueva VLAN en el sistema es tan simple como añadir la VLAN y crear el interfaz por el que dar salida a dicha VLAN.
shell> vconfig add eth0 700
shell> ifconfig eth0.700 10.100.10.77/24
Como se puede observar, la VLAN 700, tiene como interfaz asociado el eth0.700, el decir, el interfaz virtual 700. Con esto conseguimos que todos los paquetes que salgan por dicho interfaz se marquen con el tag 700.

Solución estática

Por supuesto, lo escrito hasta aquí hace únicamente que la VLAN esté presente en el sistema hasta que éste se reinicie. Si queremos que este nuevo interfaz quede presente, tendremos que añadirlo al fichero de interfaces, junto con su configuración.
auto eth0.700
iface eth0.700 inet static
 address 10.100.10.77
 netmask 255.255.255.0

Borrando VLAN

Si llegado el momento, por lo que sea debemos de borrar una VLAN, vconfig tiene también forma de hacerlo,
shell> vconfig rem eth0.700
Leer más

Humor social III






Leer más

Reescribiendo direcciones de correo

Postfix, quizás el servidor de correo más extendido en la actualidad tiene miles de facilities interesantes. Una de ellas, y de la que vamos a hablar hoy es la reescritura de la dirección de correo (address rewriting). Esta funcionalidad sirve, por ejemplo, para que todos los correos internos del servidor, lleven como origen una dirección diferente a la real, pudiendo así facilitar una pregunta al administrador en caso de que el correo la generase.
Para poder poner a funcionar las reglas de reescritura, lo primero es crear el fichero /etc/postfix/generic. Este fichero, que será una tabla de mapeos admite expresiones regulares. Por ejemplo,
/^(.*)@(.*).localdomain$/  dudas@local.net
En este caso, todos los correos que salgan del servidor local (fqdn *.localdomain) se enviará con la dirección de origen dudas@local.net. Si alguno de los receptores quiere responder, el mail será entregado a una dirección pública conocida y no a un servidor de la red local.
Por supuesto, tras configurar el fichero generic hay que hacer uso del comando postmap, como para casi todos los ficheros externos de configuración de postfix.
shell> postmap /etc/postfix/generic
Una vez lo tengamos, simplemente lo añadimos a la configuración general (/etc/postfix/main.cf).
smtp_generic_maps = regexp:/etc/postfix/generic
Y reiniciamos el servicio.

Nota

Cada vez que modifiquemos el fichero generic tendremos que volver a crear la tabla de mapeos (postmap) y reiniciar el servicio.
Leer más

Añadir lanzadores en el menú de inicio

El otro día instalé Eclipse en mi ordenador bajándome el tar.gz de la página oficial. Lo descomprimí, lo moví a /opt y ya tenía eclipse, pero evidentemente no lo tenía en el menú de inicio para lanzarlo.
Para que nos aparezca en el menú y poder lanzarlo desde ahí simplemente tenemos que crear el fichero /usr/share/applications/eclipse.desktop con el siguiente contenido:
[Desktop Entry]

Name=Eclipse                # Nombre que aparecerá en el menú
Comment=Eclipse
Exec=/opt/eclipse/eclipse   # Ruta del binario de eclipse
Icon=/opt/eclipse/icon.xpm  # Ruta del icono del menú
Terminal=false
Type=Application
Categories=Development;     # Categoría del lanzador
Y listo! Ahí lo tenemos para poder usar.
Leer más

Expiración de contraseñas en MySQL

Desde la versión 5.6.6, MySQL implementó la posibilidad de poner caducidad o tiempo de expiración de contraseñas. Esto era algo que se llevaba mucho tiempo hablando y que era necesario, ya que la seguridad de los datos también reside en el lugar dónde se almacenan. Para reforzar esto, MySQL puede obligar a un usuario a cambiar la contraseña o el propio administrador puede forzar dicho cambio.
mysql> ALTER USER 'javier'@'localhost' PASSWORD EXPIRE;
Con ello, la próxima vez se conecte dicho usuario tendrá que cambiar la contraseña.
shell> mysql -u javier -p
mysql> SELECT 1;
  ERROR 1820 (HY000): You must SET PASSWORD before executing this statement
Con lo que nos está avisando de que necesitamos restablecer nuestra contraseña para poder hacer cualquier cosa. Para ello,
mysql> SET PASSWORD = PASSWORD('your_password');
  Query OK, 0 rows affected (0.01 sec)

mysql> SELECT 1;
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.00 sec)
Si el cliente que se está usando para la conexión no tiene soporte para cambiar la contraseña, obtendremos el siguiente mensaje al conectar,
shell> mysql -u myuser -p
  ERROR 1862 (HY000): Your password has expired. To log in you must change it using a client that supports expired passwords.
Con lo que tendremos que actualizar el cliente de conexión para poder seguir trabajando.
Este cambio es importante, pero también debemos tener cuidado con él, pues la fecha de expiración de una contraseña para usuarios de consulta web, por ejemplo, podría darnos dolor de cabeza.

Más información sobre esta nueva feature en la documentación oficial.
Leer más

Humor social II






Leer más

Seguridad en postfix: Deshabilitar VRFY

Hoy es uno de esos días en los que te dedicas a leer documentación y manual de servicios y descubres, como no podía ser de otra forma, parámetros cuando menos interesantes y que suelen ser olvidados. Este olvido puede traer, como veréis, problemas de revelación de datos que debemos de evitar. Hablamos, concretamente del parámetro verify de postfix. Este parámetro sirve para lo siguiente,
shell> telnet local.com 25
Trying 192.168.0.25...
Connected to mail.com.
Escape character is '^]'.
220 mail.local.com ESMTP Postfix
vrfy javier@local.com
252 2.0.0 javier@local.com
vrfy empty@local.com
550 5.1.1 empty@local.com: Recipient address rejected: local.com
exit

Creo que tras ver el ejemplo, ya os imagináis para qué sirve el comando vrfy de postfix. Sí, efectivamente, para poder averiguar si un usuario existe en el servidor o no. Como puedes comprender, crear un pequeño script que se conecte a un servidor de correo de un dominio y liste las cuentas de correo que éste tiene, muy complicado no resulta.
Por lo tanto, si queremos evitar que alguien se nos conecte al servidor y haga un descubrimiento de las cuentas de correo en él configuradas, debemos de ir al fichero de configuración de postfix (/etc/postfix/main.cf) y deshabilitar el uso del comando vrfy.
disable_vrfy_command = yes
Tras incluir la línea aquí arriba citada y reiniciar el servicio, si intentamos la conexión ya se nos advertirá de que no es posible.
shell> telnet local.com 25
Trying 192.168.0.25...
Connected to local.com.
Escape character is '^]'.
220 mail.local.com ESMTP Postfix
vrfy javier@local.com
252 2.5.2 Cannot VRFY user; try RCPT to attempt delivery (or try finger)
expn root
502 5.7.0 Sorry, we do not allow this operation
Leer más

Permisos de usuario avanzados en MySQL

Por temas del trabajo llevo unos días revisando documentación de MySQL y en la parte referente a los permisos de usuario descubrí que hay muchos más límites que se le pueden establecer a un usuario al conectarse al motor de base de datos. Hablando ya de cosas concretas, estamos hablando de límites para:
  • Número de consultas a realizar por hora
  • Número de actualizaciones a realizar por hora
  • Número de conexiones por hora
  • Número de conexiones simultáneas por usuario.

Cómo aplicar los nuevos límites

Estos límites son establecidos para cada usuario, y por lo tanto deben ser indicados para el usuario cuando se crea (comando GRANT), como se ve a continuación.
mysql> CREATE USER 'test'@'localhost' IDENTIFIED BY 'passwd';
mysql> GRANT ALL ON *.* TO 'test'@'localhost'
    -> WITH MAX_QUERIES_PER_HOUR 20
    -> MAX_UPDATES_PER_HOUR 10
    -> MAX_CONNECTIONS_PER_HOUR 20
    -> MAX_USER_CONNECTIONS 1;
Hay que tener en cuenta que estos límites son para query's que no estén en caché, es decir, todas las que implican acceso a recursos. Por lo tanto, si se emplea la misma query se puede realizar más de las N veces establecidas como límite.
Una vez alcanzado el límite establecido, se nos advertirá de ello y no se podrá hacer nada hasta que pase una hora.
mysql> SELECT * FROM users;
ERROR 1226 (42000): User 'test' has exceeded the 'max_questions' resource

Cómo modificar los límites

Lógicamente, también se pueden modificar dichos límites, por ejemplo,
mysql> GRANT USAGE ON *.* TO 'test'@'localhost'
    -> WITH MAX_QUERIES_PER_HOUR 50;

Cómo borrar los límites

Y para borrarlos sólo tenemos que establecer a 0 su valor.
mysql> GRANT USAGE ON *.* TO 'test'@'localhost'
    -> WITH MAX_QUERIES_PER_HOUR 0;


Más información:

Leer más

SSL suma y sigue: Poodle

Este año 2014 va a ser para recordar en la historia de la seguridad informática, sin dudarlo. SSL (heartbleed), bash (CVE-2014-6271 y CVE-2014-7169), y ahora nuevamente el protocolo SSL vuelve a ser noticia con una vulnerabilidad crítica que afecta, por lo que parece, al diseño del protocolo SSL 3.0. El código de fallo es el CVE-2014-3566 y está ahí pues más o menos desde hace 15 años que vio la luz.
El problema está en que a día de hoy la mayoría de los navegadores todavía le dan soporte y por lo tanto son vulnerables. El fallo se puede explotar en un ataque MitM (man-in-the-middle) en el que se fuerce al cliente a emplear el protocolo 3 para así acceder a los datos sin cifrar aunque la sesión esté cifrada.
La solución pasa por deshabilitar el soporte de SSL 3.0 o usar cifrados CBC-mode para dicha versión. El problema de esto no son los navegadores en sí, sino el resto de programas que pueden no tener estas compatibilidades.
Otra de las soluciones recomendadas es habilitar TLS_FALLBACK_SCSV, un mecanismo que soluciona los problemas causados por reintentar conexiones fallidas, previniendo que los atacantes puedan 'obligar' a los navegadores a usar SSL 3.0.

Más información:

Leer más

Humor social I





Leer más

Filtradas contraseñas de Dropbox

Dropbox, popular servicio de alojamiento de ficheros en la nube ha anunciado en su blog oficial que en el día de ayer se ha producido una importante filtración de contraseñas. Concretamente se está hablando de más de 7 millones de cuentas en riesgo. Actualmente Dropbox ha optado por bloquear aquellas cuentas donde detecten algún tipo de actividad extraña.
Here is another batch of Hacked Dropbox accounts from the massive hack of 7,000,000 accounts
To see plenty more, just search on [redacted] for the term Dropbox hack.

More to come, keep showing your support
Según lo que dicen, la filtración no se produjo por un fallo en sus servidores, sino en equipos de terceros.
Se recomienda el cambio inmediato de contraseñas así como la posibilidad de habilitar la verificación en dos pasos del servicio.

Más información:



Actualización:

Se están publicando en pastebin diferentes entradas con las credenciales robadas, por lo que es más importante el cambio de contraseña.
Leer más

Grabando sesiones MySQL completas

MySQL tiene una opción un tanto curiosa y a la vez interesante y es la de grabar una sesión completa de lo que se está haciendo. No deja de ser curioso que permita volcar en un fichero todo el trabajo, así como salidas que ofrece, pero a la vez puede ser práctico para enviarle a alguien y que vea en qué estás trabajando.
La opción que comentamos es --tee y únicamente hay que pasarle el fichero donde quieres dejar tu sesión grabada.
shell> mysql -p --tee=~/session.mysql.log
Leer más

/var/spool/cron, bailing out

Hoy tuve uno de esos fallo extraños que suceden algunos días cuando estás probando cosas nuevas. Concretamente estaba ejecutando el comando crontab para poder listar aquellas tareas que el usuario apache tenía dispuestas. Por ponernos en antecedentes, estaba bajo un sistema Red Hat, lo cual es un poco diferente de lo habitual, Debian. El comando se llamaba desde una página PHP con la sintaxis típica,
...
$output = shell_exec('crontab -l');
...
El resultado devolvía el code status 1 y por lo tanto no tenía salida ninguna. Si ejecutaba el comando empleando sudo, se podía ver perfectamente el listado de comandos de cron para éste usuario.
shell> sudo -u apache crontab -l
  */30 * * * *  python /usr/local/bin/test.py
  */15 * * * *  python /usr/local/bin/test2.py
Llegados a este punto, lo más lógico es pensar que algo está fallando, así que tocó hacer una revisión de los logs, en el cual aparecía la siguiente línea,
'/var/spool/cron' is not a directory, bailing out.
Una línea bastante descriptiva y en la que se nos dice, básicamente que SELINUX, ese gran sistema de control de permisos de Red Hat, estaba impidiendo el acceso a dicho directorio. Puesto que tenía prisa, lo más rápido fue editar el fichero /etc/selinux/config y deshabilitar SELINUX,
SELINUX=disabled
Con lo que el comando comenzó ya a devolver los datos esperados.
Leer más

Cookiechoices: Aviso de empleo de cookies

Desde hace un tiempo en adelante, todas aquellas páginas que tengan presencia en Internet deben tener una política de cookeis, así como un aviso de la misma. Esta obligación viene impuesta por la legislación europea (directiva 2009/136/CE), en la que se hace referencia a los derechos de los usuarios así como la necesidad de que estos sean correctamente informados cuando un sitio web vaya a hacer uso de sus datos.

Qué son las cookeis

Una cookie es una pequeña información enviada por un sitio web y almacenada en el navegador del usuario, de manera que el sitio web puede consultar la actividad previa del usuario.
Sus principales funciones son:

  • Llevar el control de usuarios, cuando un usuario introduce su nombre de usuario y contraseña, se almacena una cookie para que no tenga que estar introduciéndolas para cada página del servidor. Sin embargo, una cookie no identifica solo a una persona, sino a una combinación de computador-navegador-usuario.
  • Conseguir información sobre los hábitos de navegación del usuario, e intentos de spyware, por parte de agencias de publicidad y otros. Esto puede causar problemas de privacidad y es una de las razones por la que las cookies tienen sus detractores.

Por qué hay que avisar del uso

  1. Por que es lógico.
  2. Por que la legislación nos obliga.

Cómo avisar

Recientemente Google sacó un proyecto, cookiechoices, que simplifica y mucho la forma de avisar de que una web emplea cookies. En realidad no es más que un sencillo código javascript que, de forma asíncrona, ofrece las notificaciones legales que se piden, dejando al administrador de la web la única tarea de establecer su mensaje.
El código es sencillo, la carga del script cookiechoices es asíncrona, tiene la confiabilidad de Google y sobre todo no se aloja en sitios de terceros. El código javascript te lo ofrecen de forma gratuita para que esté sobre tu servidor.

Tipo de mensaje

Aunque cookiechoices te da el mensaje completo es importante saber las partes de las que se compone dicho mensaje,
  • Cuerpo
    Texto donde se avisa que la web emplea cookies
  • Learn more
    Link a la política de privacidad de la web en cuestión.
    Ver aquí un ejemplo.
  • Close message
    Botón de cierre de advertencia y aceptación del uso de cookies.

Uso de cookiechoices en Blogger

cookiechoices ofrece para descargar un pequeño código javascript y la forma de usarlo. En prácticamente cualquier web lo podrás usar según lo que indica Google, sin embargo para Blogger la cosa cambia un poco, ya que no hay forma de subir un fichero .js a la raíz de la web.
La forma más sencilla que encontré de usarlo, y así no tener que hacer el javascript necesario es siguiendo estos pasos.
  1. Editar plantilla
    Hay que editar la plantilla HTML de tu blog. Antes de tocar nada, hacemos una copia de seguridad, por si algo va mal.
  2. Pegar código
    Hay que recoger copiar todo el código que nos hemos descargado e incluirlo después de la etiqueta body , como sigue aquí
    <script>
    //<![CDATA[
    
    Código completo de cookiechoices.js
    
    //]]>
    
    document.addEventListener('DOMContentLoaded',
      function(event) {
        cookieChoices.showCookieConsentBar(
          'Utilizamos cookies',
          'Aceptar',
          'Leer más',
          '/politica-cookies.html'
        );
      }
    );
    </script>
    
  3. Modificar el mensaje
    Modificamos el mensaje que sacaremos al usuario, según lo que queramos.
    ...
    cookieChoices.showCookieConsentBar(
      'Mensaje a sacar',
      'Botón aceptar',
      'Botón con link a URL',
      'URL de explicación'
    );
    ...
    
  4. Guardar plantilla
    Guardamos la plantilla y si todo está correcto, el nuevo mensaje ya debería de salir. Podemos probar como queda con una pestaña de incógnito.
Leer más

Previsualización de fichero .md de github

Si alguna vez has creado un fichero readme.md en github, sabrás que si sintaxis, aunque no muy compleja sí resulta cuando menos confusa las primeras veces. Dicha sintaxis es conocida como Markdown, y uno de los grandes problemas que hay a la hora de escribir dicho fichero, es que lo que escribes hasta que hagas un commit y lo veas en github, no sabes cómo queda.
Por suerte, hoy en medio de una búsqueda y de forma casual encontré una herramienta, grip, escrita en python y que permite interpretar perfectamente los fichero .md y visualizar sin el commit cómo se verá en la web.

Instalación

Esta herramienta en realidad está pensada como un módulo de python y no está disponible en los repositorios de las principales distribuciones, pero por suerte, con pip la instalación es rápida.

shell> pip install grip

Uso

Tras su instalación ya tenemos disponible el software necesario y con un navegador, sencillamente lo ejecutamos sobre un directorio de nuestro proyecto que tenga un fichero readme.md y seguidamente abrimos la dirección localhost:5000 y tendremos ahí, en formato perfectamente visible, cómo queda nuestro fichero interpretado.
shell> grip
Si nuestro proyecto tiene más de un fichero o el nombre no es readme.md, que es el que coge por defecto, entonces le pasamos el nombre para que lo lea, interprete y deje visible en el navegador.
shell> grip CHANGES.md
Y también podemos cambiar el puerto al que queremos acceder simplemente indicándoselo,
shell> grip CHANGES.md 8080
Ya no tenemos excusa para no tener unos perfectos readme en nuestros repositorios, ya que este comando aparte de interpretar el fichero, cualquier cambio que hagamos en el mismo, con sólo refrescar la página lo podremos ver aplicado.
Leer más

Windows 10, anunciado

Para finalizar la semana, algo que creo, todo pensamos tras el anuncio del nuevo Windows 10, tras el salto de una versión, dejando en el olvido a Windows 9.
Paradoja del Windows bueno vs. Windows malo
Leer más

Limitando ancho de banda con wondershaper

Hace tiempo hablamos en este blog sobre trickle, una herramienta que servía para controlar el ancho de banda que se consume. O dicho de otra forma, limitar la velocidad de subida o descarga de un equipo.
Lo bueno de GNU/Linux es su heterogeneidad, y hoy voy a comentar sobre wondershaper, un pequeño script (si bash script) que sirve para lo mismo, limitar el ancho de banda. Internamente wondershaper emplea la herramienta tc, que se comunica directamente con el kernel para gestionar el tráfico de red. La idea de emplear este tipo de herramientas es poder priorizar el tráfico en una red de equipos, dejando máxima prioridad para conexiones SSH y navegación web, por ejemplo, y bajando prioridad a  las descargas. Esto justamente es lo que se consigue con herramientas de control de tráfico (tc).
wondershaper lo que hace es abstraer la complejidad de tc y dejar un simple script para controlar el límite de ancho de banda de entrada y salida a un equipo por una interfaz. Así que vamos a ver un poco esta herramienta.

Instalación

wondershaper está disponible desde los repositorios oficiales,
shell> apt-get install wondershaper

Uso

El uso básico, donde nos muestra si hay algo activo y qué hace es únicamente pasándole el interfaz de red a controlar.
shell> wondershaper eth0.3

Limitar ancho de banda

Para limitar el ancho de bando que un interfaz de red puede consumir,
shell> wondershaper eth0.3 40 10
Donde pasamos el interfaz a controlar, el velocidad de descarga (40 kbps) y la velocidad de subida (10 kbps).

Comprobar limitaciones activas

shell> wondershaper eth0.3
qdisc cbq 1: root refcnt 2 rate 10000Kbit (bounded,isolated) prio no-transmit
 Sent 2020 bytes 12 pkt (dropped 0, overlimits 4 requeues 0) 
 backlog 0b 3p requeues 0 
  borrowed 0 overactions 0 avgidle 12500 undertime 0
qdisc sfq 10: parent 1:10 limit 127p quantum 1514b depth 127 divisor 1024 perturb 10sec 
 Sent 1170 bytes 11 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 234b 3p requeues 0 
...

Borrar limitaciones

shell> wondershaper clear eth0.3
Wondershaper queues have been cleared.
Una herramienta en esencia sencilla, pero que simplifica la creación de limitaciones de forma muy eficaz.
Leer más

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

Últimos comentarios