18 de junio de 2013

Prestashop con Cherokee, SSL y MariaDB

Introducción

  • Prestashop es una tienda online bajo licencia OSL v3 escrita en PHP, podéis ver el código en GitHub.
  • Cherokee server es un servidor web bajo licencia GPL v2, podéis ver el código en GitHub. Podéis consultar como obtener el programa para las distintas distribuciones de Linux en su sitio de descargas.
    Cherokee nos permite ejecutar en un cluster PHP el código de nuestra web, para descargar la CPU de nuestro servidor principal. También podemos hacer de proxy inverso contra un cluster de servidores web, balanceando la carga sobre varias maquinas. (Tened en cuenta el manejo de sesiones por parte de PHP si usáis el proxy, ya que si la sesión se almacena en ficheros, y se balancea contra otro servidor esta sesión no existirá.)
  • MariaDB es una base de datos SQL compatible con MySQL bajo licencia GPL v2. Según la distribución Linux que uséis podéis consultar en la sección de repositorios de MariaDB como obtener acceder al código y fuentes del programa.
Como lo voy instalar en un servidor de mi red, pero quiero poder acceder desde un dominio, modifico el fichero /etc/hosts añadiendo:

192.168.0.218       cherokee.prestashop.com

Instalación

Cherokee:

Vamos a instalar cherokee desde el repositorio, para tener la última versión.
# apt-get install -y autoconf automake libtool gettext openssl git
# git clone -b master --recursive http://github.com/cherokee/webserver.git
# cd webserver
# ./autogen.sh --prefix=/usr --localstatedir=/var --sysconfdir=/etc --with-wwwroot=/var/www
# make
# make install

Para que el sistema arranque cherokee al inicial el sistema:
# cp contrib/cherokee /etc/init.d/
# chmod a+x /etc/init.d/cherokee
# nano /etc/rc.local
Añadimos antes de "exit 0":
"/etc/init.d/cherokee start"

MariaDB:

En mi caso, bajo debian:
# apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
# echo 'deb http://mirror3.layerjet.com/mariadb/repo/5.5/debian wheezy main' >> /etc/apt/sources.list
# apt-get update
# apt-get install mariadb-server

Insertamos la clave para el usuario "root" de la base de datos.

Prestashop:

# apt-get install -y php5-cgi php5-mysql php5-gd php5-mcrypt git
Para este ejemplo voy a usar el "master" del git, para así obtener la última versión estable.
Al ser la versión de del git, debemos renombrar las carpetas "install-dev" y "admin-dev" eliminando el "-dev".
prestashop@prestashop:~$ git clone -b master https://github.com/PrestaShop/PrestaShop.git
prestashop@prestashop:~$ mv PrestaShop/install-dev PrestaShop/install
prestashop@prestashop:~$ mv PrestaShop/admin-dev PrestaShop/admin

Configuración

Unas de las cosas que más me gustan de Cherokee es que tiene un website que nos permite administrar el servidor de forma simple.
Para lanzar el portal de administración ejecutamos:
# cherokee-admin -b

En pantalla veremos los credenciales generados para esa ejecución; que nos pedirán al acceder a través de nuestro navegador web.

En este ejemplo: http://cherokee.prestashop.com:9090/

En la pestaña "General" en el apartado "Seguridad", ponemos como usuario y grupo a "www-data".

En la pestaña vServers, pinchamos en "Nuevo" y veremos un asistente. Seleccionamos en "Lenguajes" la opción PHP y pulsamos en añadir.
Cuando nos pregunta sobre la "raíz de documentos" escribimos la ruta del proyecto (en mi caso /home/prestashop/PrestaShop).
En el paso final nos pide el nombre del servidor virtual (en mi caso cherokee.prestashop.com), y pulsamos en crear.
Por último hay que guardar la configuración.

Antes de todo, deberémos conectamos a la base de datos para poder crear un usuario y una base de datos para alojar el prestashop.
$ mysql --user=root --password=mariadb_clave
MariaDB [(none)]> CREATE DATABASE prestashop;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON prestashop.* TO 'prestashop'@'localhost' IDENTIFIED BY 'prestashop_clave_db';
Ahora insertamos los datos de acceso a la base de datos en la web para validarlos y continuamos hasta finalizar la instalación.

Para la instalación nos pide permisos de escritura recursivos, en distintas ubicaciones.

En lugar de cambiar el propietario de "prestashop" a "www-data", o dar permiso a todos los usuarios para editar, voy a asignarles al grupo "www-data" y dar pemisos de escritura recursiva al grupo.
root@prestashop:/home/prestashop/PrestaShop# chgrp -R www-data config/ cache/ log/ img/ mails/ modules/ themes/default/lang/ themes/default/cache/ translations/ upload/ download/ sitemap.xml

root@prestashop:/home/prestashop/PrestaShop# chmod g+w -R config/ cache/ log/ img/ mails/ modules/ themes/default/lang/ themes/default/cache/ translations/ upload/ download/ sitemap.xml

Ya podemos acceder desde nuestro navegador a la tienda para realizar la instalación.

Para finalizar eliminamos "install" y renombramos "admin"
root@prestashop:/home/prestashop/PrestaShop# mv admin admin-dev
root@prestashop:/home/prestashop/PrestaShop# rm -R -f installd

Ya podemos acceder a http://cherokee.prestashop.com/admin-dev/ para administrar nuestra tienda.

Puesta a punto

Para mejorar el rendimiento y la seguridad nuestro sitio web, vamos a volver al administrador de cherokee.
En vServers seleccionamos nuestro dominio y vamos a la pestaña de "comportamiento".
Pinchamos sobre "Rule Manager".

Seleccionamos la regla por defecto y en "Gestor" desmarcamos todas las opciones salvo "Usar caché E/S".

Añadimos una regla manual del tipo "Directorio" e insertamos "/admin-dev/".
Sobre esta regla vamos a las pestaña "Seguridad" en el apartado de "autenticación" seleccionamos, por ejemplo, "Fixed list" e insertamos el valor de "Realm", añadimos los usuarios y contraseñas. Por último pinchamos sobre la regla, en donde pone "FINAL" para ponerla como "NON FINAL". Con este procedimiento, además del usuario y contraseña de administración deberán conocer uno de estos usuarios para poder acceder al sitio de administración.

Añadimos una regla manual del tipo "Extensión" e insertamos "js,css,html,jpeg,jpg,png,gif,ttf".
Sobre esta regla vamos a las pestaña "Gestor" y seleccionamos "contenido estático", en la pestaña de "Codificación" habilitamos GZip.

Añadimos una regla manual del tipo "Extensión" e insertamos "tpl,txt,md".
Sobre esta regla vamos a las pestaña "Gestor" y seleccionamos "Error HTTP" y elegimos "404 Not found". Si queréis dar acceso a los ficheros robots.txt, humans.txt, hackers.txt o a cualquier otro fichero txt, tpl o md, teneis que añador una reglar tipo "Existe fichero" y marcarlo como "contenido estático". Tened en cuenta que debe estar por encima de la regla anterior para que pueda tener efecto.

Añadimos una regla manual del tipo "Existe fichero" e insertamos "config.xml".
Sobre esta regla vamos a las pestaña "Gestor" y seleccionamos "Error HTTP" y elegimos "404 Not found".

Editamos "config/defines.inc.php" y ponemos como "false" el valor de '_PS_MODE_DEV_'.

SSL

Para habilitar SSL en nuestro servidor vamos a la pestaña "General", en el apartado "Network", seleccionamos OpenSSL/libssl; "Port open" añadimos el puerto 443 con soporte TLS/SSL.

En vServers seleccionamos nuestro dominio.
En la pestaña seguridad ponemos la ruta de nuestros certificados y activamos HSTS.

Si no tenemos una firma, vamos a la pestaña de "comportamiento".
Pinchamos sobre "Rule Manager".
Añadimos una regla "Task > SSL/TLS Testing", esto nos lanzar un asistente que nos generará unas claves autofirmandas.

Por último en "Rule Manager" de nuestro dominio seleccionamos la pestaña "Seguridad" y marcamos "Only https".

UPDATE: Urls Amigables

Las Urls amigables mejoran el SEO de nuestra web, pero para poder configurarlas hay que reescribir la url que llegan al servidor y hacer que se evalúe el código PHP.

Para ello vamos a escribir dos reglas, una para manejar las imágenes y otra para el código PHP.

Añadimos una regla manual del tipo "Extensión" e insertamos "jpeg,jpg,png,gif".
Sobre esta regla vamos a las pestaña "Gestor" y seleccionamos "Redirección"; ahora añadiremos las redicciones para las imágenes pulsando sobre "Nueva RegEx" y siendo todas ellas del tipo "redirección interna", añadimos las siguientes:
^images_ie/?([^/]+)\.(jpe?g|png|gif)$
js/jquery/plugins/fancybox/images/$1.$2

^c/([a-zA-Z_-]+)(-[0-9]+)?/.+\.(jpe?g|png|gif)$
/img/c/$1$2.$3

^c/([0-9]+)(\-[\.*_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.(jpe?g|png|gif)$
/img/c/$1$2$3.$4

^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.(jpe?g|png|gif)$
/img/p/$1/$1$2$3.$4

^([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.(jpe?g|png|gif)$
/img/p/$1/$2/$1$2$3$4.$5

^([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.(jpe?g|png|gif)$
/img/p/$1/$2/$3/$1$2$3$4$5.$6

^([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.(jpe?g|png|gif)$
/img/p/$1/$2/$3/$4/$1$2$3$4$5$6.$7

^([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.(jpe?g|png|gif)$
/img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6$7.$8

^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.(jpe?g|png|gif)$
/img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7$8.$9

^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.(jpe?g|png|gif)$
/img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8$9.$10

^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.(jpe?g|png|gif)$
/img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9$10.$11

Recordar debe estar por encima de la regla de "cache" de imágenes, y ser del tipo "No final".

Para el caso del resto de URLs usaremos el patrón "^.*$" y redirigiremos ha "/index.php". Esta regla se puede aplicar en el comportamiento por defecto, pero nos inpedirá acceder al directorio de administración. Para poder seguir accediendo a este deberemos crear una regla "auxiliar" para la redirección. Añadimos una regla manual del tipo "Directorio" e insertamos "/admin-dev/", para luego negarlo. Esta regla se encontrará justo encima de la opción por defecto y dejaremos la opción por defecto como "Listar y ver".

15 de abril de 2012

Evolución de Android en Seguridad


El objetivo de este post es realizar un listado sobre como ha ido evolucionando en seguridad Android; permitiendo a un usuario conocer las vulnerabilidades y características de su sistema Android en cuanto a seguridad se refiere.

Este listado solo se listarán fallos y mejoras a nivel de sistema y que afectan a el mismo, es decir:

Quedan descartados los fallos en las aplicaciones de terceros o externas al sistema, como pueden ser Skype (CVE-2011-1717), el SDK de Android (CVE-2011-1001, CVE-2008-0985, ...), Flash (CVE-2011-2460, CVE-2011-2459, …), entre otras.

Otro ejemplo que excluiré son los fallos CVE-2008-7298 y/o CVE-2011-2344 que afecta a la seguridad de las cookies en una conexión, y no están incluida ya que no tienen un impacto directo contra el sistema.

Tampoco tendremos en cuenta fallos que afecten a fabricantes en exclusiva, como por ejemplo, la vulnerabilidad CVE-2011-3975 que afecta a algunos modelos de HTC. O las versiones de la 2.3.5 a la 2.3.7 que solo de están disponibles para algunos dispositivos.

He intentado mostrar las fuentes originales y no perder ninguna vulnerabilidad o fallo importante. Si conocéis alguno que me olvide encantado de añadirlos, solo tenéis que comentar. xD

Voy ha distinguir tres apartados:
Soluciona: Indica que ha sido publicada de forma clara, que este fallo ha sido solucionado en esa versión.
Nuevo: Nueva mejora implementada.
Vulnerable: Indica que esa versión en vulnerable, pero no se especifica cuando ha sido solucionada.

Febrero 2009 v1.1

  • Soluciona:
    CVE-2009-0475 (Ejecución de código a través de Mp3)
    CVE-2009-0606 (Elevación de privilegios)
    CVE-2009-0607 (Múltiples desbordamientos de enteros)
    CVE-2009-0608 (Desbordamiento de entero)

Abril 2009 v1.5 r1

Mayo 2009 v1.5 r2

Julio 2009 v1.5 r3

Septiembre 2009 v1.6 r1

Octubre 2009 v2.0

  • Nuevo:
    Kernel 2.6.29
  • Vulnerable:
    CVE-2009-1442 (Posible ejecución de código a través de “Skia”)
    CVE-2010-EASY (Elevación de privilegios, exploit RageAgainsttheCage)

Diciembre 2009 v1.6 r2

Diciembre 2009 v2.0.1

Mayo 2010 v2.2 r1

Julio 2010 v2.2 r2

Diciembre 2010 v2.3

Julio 2011 v2.2 r3

Febrero 2011 v2.3.3, v3.0

Mayo 2011 v2.3.4, v3.1 r1 y r2

Julio 2011 v3.0 r2

  • Nuevo:
    Kernel 2.6.36
    DRM
    Cifrado de disco
    Mejora de Políticas de seguridad

Julio 2011 v3.1 r3, 2011 v3.2

Octubre 2011 v4.0


[UPDATE]



OTRAS NOTAS:
Busqueda sistemática de fallos de fuga de información
http://www.csc.ncsu.edu/faculty/jiang/pubs/NDSS12_WOODPECKER.pdf
http://www.youtube.com/watch?v=xGwTviVRcrg
http://www.xda-developers.com/android/discover-undisclosed-apis-with-androids-secret/

13 de febrero de 2012

La Comisión Europea propone cambiar las leyes de Protección de datos

Tras un estudio realizado por la Comisión europea sobre la preocupación de sus ciudadanos en temas de protección de datos y observar que:
 - 2/3 de los europeos nos preocupa que las empresas compartan nuestros datos personales sin autorización.
 - 9/10 queremos tener los mismos derechos de protección en toda Europa.

La comisión ha propuesto un cambio de legislación que unifique los la protección de los internautas europeos.

Entre las novedades destancan:
- Se establece un "Derecho al olvido", de tal modo que las empresas estén obligadas a eliminar los datos personales a petición del usuario, salvo razones legítimas (como el cumplimiento de alguna norma).
- La protección de datos también debe aplicarse en los países que no pertenezcan a esta y traten con datos de europeos.
- Las empresas estarán obligadas a comunicar los incidentes de fugas de información que puedan afectar a los datos personales de sus usuarios.

Por el momento es una propuesta de reforma, y queda un largo camino burocrático para que pueda ser aplicable.


Referencia:
http://ec.europa.eu/news/business/120125_es.htm

15 de enero de 2012

Filtrado por lista negra en WebPy


WebPy es un framework para aplicaciones web escrito en python. Se trata de un framework de código libre y está "licenciado" como dominio público.

En este caso queremos mejorar la seguridad de nuestra aplicación web creando una clase que implemente mecanismos de filtrado por lista negra. Existen múltiples listas negras en internet sobre IPs potencialmente dañinas.

En mi caso he decido para implementar esta funcionalidad con la lista negra suministrada por el proyecto honeypot.

En primer lugar vamos a crear una clase que nos permita hacer consultas sobre esta base de conocimiento.

class HttpBL():
 def __init__(self, key):
  self.key = key
  self._DOMAIN = "dnsbl.httpbl.org"

 def get_info(self, ip, timeout=None):
  partes = ip.split(".")
  #Don't ask private networks
  if partes[0] == "10" or partes[0] == "127":
   return (-1,-1,-1)
  elif partes[0] == "192" and partes[1] == "168":
   return (-1,-1,-1)
  elif partes[0] == "172" and int(partes[1]) >= 16 and int(partes[1]) <= 31:
   return (-1,-1,-1)

  domain_ask = ""
  for parte in partes:
   domain_ask = parte+"."+domain_ask

  domain_ask = self.key+"."+domain_ask+self._DOMAIN
  try:
   if timeout:
    socket.timeout = timeout
   result = socket.gethostbyname(domain_ask)
   result = result.split(".")
   return (int(result[1]), int(result[2]), int(result[3]))
  except socket.gaierror as (error, string):
   if error == 11001 or error == -5:
    return (-1,-1,-1)
   else:
    raise socket.gaierror(error, string)
Como podeis observar, las IPs privadas no se consultan.
Podeis obtener más información sobre el tipo de información que nos provee esta lista desde: http://www.projecthoneypot.org/httpbl_api.php

Por otro lado he implementado una clase que, además de comprobar que quien acceda al servicio no sea potencialmente peligroso, define: unas reglas de acceso directamente en la declaración, la creación de una respuesta OPTIONS con los datos anteriores y una comprovación del dominio desde el que se está acediendo a la aplicación.
class SecureWeb():
 def __init__(self, blkey="", host_name=None, allow_methods=["HEAD","GET","POST","OPTIONS"]):
  self.allow_methods = allow_methods
  self.host_name = host_name
  self.blacklist = HttpBL(blkey)
 def not_allowed(self):
  raise web.Forbidden()
 def wrong_hostname(self):
  self.not_allowed()
 def bad_method(self):
  self.not_allowed()
 def to_honeypot(self, data):
  self.not_allowed()
 def to_search_engine(self):
  pass
 def check_allow(self):
  (last_activity, threat_score, type) = self.backlist.get_info(web.ctx.env["REMOTE_ADDR"])
  if type == 0:
   self.to_search_engine()
  elif type > 0:
   self.to_honeypot((last_activity, threat_score, type)) 
  if self.host_name:
   hostname_ok = False
   for hostname in self.host_name:
    if hostname.lower() == web.ctx.env["SERVER_NAME"].lower():
     hostname_ok = True
     break
   if not hostname_ok:
    self.wrong_hostname()
  if not web.ctx.env["REQUEST_METHOD"].upper() in self.allow_methods:
   self.bad_method()

 def HEAD(self, *extras):
  self.check_allow()
 def GET(self, *extras):
  self.check_allow()
 def POST(self, *extras):
  self.check_allow()
 def PUT(self, *extras):
  self.check_allow()
 def DELETE(self, *extras):
  self.check_allow()
 def TRACE(self, *extras):
  self.check_allow()
 def CONNECT(self, *extras):
  self.check_allow()
 def OPTIONS(self, *extras):
  self.check_allow()
  allow = ""
  for method in self.allow_methods:
   allow += method+","
  allow = allow[:1]
  web.header('Allow', allow)

Como se puede observar en cada tipo de petición HTTP se realiza un chequeo de acceso, y en caso de no validarlo se envia la información a la función correspondiente para poder procesarla de forma adecuada. En el ejemplo todas las funciones acaban llamando a 'not_allowed' que muestra un Forbidden. Pero cada uno de vosotros podeis modificar las funciones 'wrong_hostname' 'bad_method' 'to_honeypot' 'to_search_engine' para que realicen las acciones que estimeis oportunas.

27 de noviembre de 2011

Borrando nuestra Wi-Fi de Google

Hace tiempo que Google se volcó de lleno en poder geolocalizar a sus usuarios, para así poder dar más precisión en sus búsquedas.

Inicialmente para poder localizar a un usuario era necesario que este tuviera algún dispositivo GPS que permitiera poder enviar su posición.
Esto impedía que los terminales móviles de baja gama pudieran ser localizados, por ello se desarrollo un mecanismo que permitiera localizar a los dispositivos sin hacer uso de un GPS.

En un principio se hacía uso de las celdas de cobertura que proporcionan conexión al dispositivo. Las celdas, tienen un tamaño variable dependiendo del lugar donde nos encontremos; de este modo, una celda en
Madrid capital ocupa un tamaño muy pequeño comparada con una, por ejemplo, en un pueblo de la sierra.

Este método de localización por tanto tiene un error variable según la zona. Para poder precisar más la posición Google desarrollo un mecanismo que permite localizar la posición usando además de la celda, datos de las redes Wifi de la zona. Como estas redes no tienen un alcance demasiado elevado, usando una o varias redes y su potencia de señal, podemos triangular una posición de forma más exacta.

En 2008 Google proporciona una funcionalidad en Gears que permite hacer uso de estos mecanismos para localizar al usuario. Gears permitía hacer uso de una serie de herramientas para mejorar la experiencia web; para ello era necesario instalar un cliente en el navegador que diera soporte a algunas de las funcionalidades. Este motor era el que permitía hacer uso de las aplicaciones Web de Google en modo off-line.

En 2010 Google descontinua Gears, pasando la carga de trabajo hacia el nuevo protocolo HTML5. Ese mismo año W3C incorpora en las especificaciones de HTML5 en la clase 'navigator' que permite enviar la posición a una aplicación web JavaScript.

Para que el navegador pueda dar soporte de localización ha usuarios sin GPS, hace uso de las técnicas anteriormente descritas y envía la información a un servidor donde le informarán de la posición actual.

Esta información fue recogida por Google mientras fotografiaba las ciudades del mundo, para Maps. Pero no es la única empresa que realiza esta labor; skyhookwireless.com, location-api.com o navizon.com son otras de las empresas que proporcionan estos servicios.

Desde que esta información fue almacenada por Google, no podíamos hacer nada para eliminar nuestra Wi-Fi de sus servidores, y por tanto siempre era usada para geolocalizarnos. Esto ha cambiado recientemente, ya que Google ha publicado un método para hacer que nuestra red Wi-Fi sea eliminada de sus servidores. Para ello, solo tenemos que renombrar nuestra web y hacer que termine con el nombre "_nomap". De este modo la próxima vez que se consulte usando tu punto de acceso, Google borrará la información.

Ante esto surgen algunas preguntas sin respuesta como, ¿porque no renombrar usando "_map" para que este punto sea localizable? y ¿que pasará si otras de las empresas deciden usar otro nombre para esta misma labor?

Más información:

Google blog:
http://googleblog.blogspot.com/2011/11/greater-choice-for-wireless-access.html

Google Location-based services Faq:
http://maps.google.com/support/bin/answer.py?hl=en&answer=1725632

W3C Geolocation API for HTML5:
http://dev.w3.org/geo/api/spec-source.html

Gears geolocation (Deprecated):
http://code.google.com/intl/es/apis/gears/api_geolocation.html

Mozilla info:
http://www.mozilla.org/es-ES/firefox/geolocation/
https://developer.mozilla.org/en/Using_geolocation

Samsung presenta la tecnología Secu-NFC

NFC (Near Field Communication) es una tecnología de comunicación inalámbrica basada RFID (Radio Frequency IDentification - ISO 14443). RFID funciona mediante inducción de campos magnéticos. Los 'tag' (tarjetas RFID) pueden ser pasivos (la energía de la respuesta proviene de la señal de lectura) con poco alcance o activos (usan una pila) con un alcance mayor. NFC permite funcionar al 'tag' en ambos modos y usando el protocolo NDEF (NFC Data Exchange Format) permite la comunicación bidireccional.

La tecnología NFC está siendo utilizada para pagos bancarios a través del móvil. Este echo está forzando a los fabricantes a buscar la mayor seguridad posible en esta tecnología. Samsung ha presentado un nuevo chip NFC (SENHRN1) con una nueva tecnología llamada Secu-NFC.

Esta tecnología incorpora al transmisor NFC, un bloque de cifrado de datos y una memoria flash (760 KB) para almacenar de forma segura (mediante cifrado) la información sensible.

Estas características permiten que los datos de pago, queden almacenados de forma segura en el propio chip y no sean accesibles en caso de ser comprometido el sistema o que se realice un análisis forense del dispositivo.

De este modo el sistema operativo no podría leer en claro los datos cuando son enviados.

Por el momento no ha sido publicada el 'datasheet' (hoja de características técnicas) que nos permita describir de mejor el comportamiento real de este dispositivo.

Referencia:
Anuncio de Samsung

8 de junio de 2011

Ejecución de comandos en WebSVN 2.3.2

Recientemente ha sido publicado en "exploit-db" un 0-day en WebSVN 2.3.2.
Esta vulnerabilidad permite a un atacante remoto no autenticado ejecutar comandos arbitrarios a través de una petición POST con un valor de "path" especialmente diseñado.

WebSVN es un proyecto Open Source que permite visualizar de forma cómoda uno o varios repositorios SVN. Está implementado en PHP y licenciado bajo GPL v2.

El fallo se da al no validar correctamente el valor recibido como nombre del fichero. Para poder usar esta vulnerabilidad hay que modificar el valor de la variable POST "path".
Para poder explotar esta vulnerabilidad es necesario encontrar un recurso que pueda ser descargado, puesto que el fallo se encuentra en la función "exportRepositoryPath()", que solo es accesible cuando nos descargamos un elemento.

El parche que soluciona esta vulnerabilida y algún otro posible vector de ataque ha sido publicada varias horas despues de haber sido echo publico el fallo.

Más información:

WebSVN 2.3.2 Unproper Metacharacters Escaping exec() Remote Command
Injection
http://www.exploit-db.com/exploits/17360/

Fix:
http://trunk.websvn.info/revision.php?repname=WebSVN&path=%2Ftrunk%2Fdl.php&rev=1256&peg=1256

Una al día:
http://www.hispasec.com/unaaldia/4608