AÑO 5 - Nº 5 / MAY 09




  Responsabilidades TI

  Tecnología y delitos

  Guía para padres

  Biometría

  Amenazas en la web

  Redes Sociales

 


Hacking Bajo la Lupa

Christian Javier Vila ToscanoWeb Aplication Vulnerabilities Parte 3 de 5


Traducción y resumen de artículo para Security Focus:

- Five common Web application vulnerabilities
- Sumit Siddharth, Pratiksha Doshi

3er Parte: Vulnerabilidades Format String

Esta vulnerabilidad se produce cuando el ingreso de entradas de usuario están sin filtrar, generalmente son parámetros en código perl o C que realizan funciones de formato, tales como printf ().

Un usuario malintencionado puede utilizar el especificador de formato "%s" o "%x", entre otros, para imprimir los datos de la pila o posiblemente otros lugares de la memoria. Inclusive, puede escribir datos arbitrarios en lugares arbitrarios de la memoria utilizando el especificador de formato %n.

Las vulnerabilidades Format String se podrían clasificar en tres categorías: denegación de servicio, lectura y  escritura.

 

Rating: Moderado a Crítico.

 

Algunos Productos Vulnerables:

McAfee AV, Usermin, Webmin, various Apache modules, winRar, ettercap, entre otros.

  • Los ataques de denegación de servicio se caracterizan por la utilización de múltiples instancias del especificador de formato %s, este especificador se utiliza para leer datos de la pila si se generan múltiples peticiones hasta que el programa intente leer datos desde una dirección ilegal se provocará que el programa se caiga.

  • Los ataques de lectura utilizan el especificador de formato %x, el cual es utilizado para imprimir secciones de la memoria para las cuales el usuario normalmente no tienen acceso.

  • Los ataques de escritura utilizan especificadores de formato %d, %u o %x para sobrescribir el puntero de instrucción y forzara la ejecución de un shell (con permisos del usuario).

Este es un ejemplo del archivo miniserv.pl (Webmin) que provoca esta vulnerabilidad:

if ($use_syslog && !$validated)
{
        syslog("crit",
               ($nonexist ? "Non-existent" :
                $expired ? "Expired" : "Invalid").
               " login as $authuser from $acpthost");
        }

Contramedida:

Modificar el código fuente para que la entrada es verificada correctamente

 

Fuente: SecurityFocus

 

contactos@infosecurityvip.com

 

Ediciones Anteriores:


ABRIL 2009

Web Aplication Vulnerabilities Parte 2 de 5

2da Parte: SQL injection

La inyección de SQL es un método muy antiguo, pero aún es popular entre los atacantes. Esta técnica permite a un atacante obtener información crucial de un servidor Web de la base de datos. Dependiendo de las medidas de seguridad de la aplicación, el impacto de este ataque puede variar desde la divulgación de información básica hasta la ejecución remota de código y total compromiso del sistema.

Rating: Medio y Crítico

Productos Vulnerables:
PHPNuke, MyBB, Mambo CMS, ZenCart, osCommerce

MS SQL tiene la característica de llamadas de procedimiento almacenado extendido (extended stored procedure), que permite ejecutar comandos a nivel de sistema a través del servidor de MS SQL - como agregar un usuario. Además, los mensajes de error mostrados por el servidor de MS SQL revelan más información que un servidor MySQL. Mientras que MS SQL Server no es especialmente propenso a ataques de inyección de SQL, hay medidas de seguridad que deben aplicarse para que sea segura y no permitir que el servidor SQL dé información crítica del sistema.

Este es un ejemplo de un código que puede ingresar un usuario y es utilizado directamente como una query de SQL:

<form action="sql.php" method="POST" />
<p>Name: <input type="text" name="name" /><br />
<input type="submit" value="Add Comment" /></p>
</form>
<?php
$query = "SELECT * FROM users WHERE username = '{$_POST['username']}";
$result = mysql_query($query);
?>

Este script funciona normalmente cuando el campo username no contiene ningún caracter malicioso:

$query = "SELECT * FROM users WHERE username = 'steve'";

Sin embargo una inyección de sql podría resultar de esta forma:

$query = "SELECT * FROM users WHERE username = '' or '1=1'";


Como la condición "or" es siempre verdadera, la función mysql_query va a retornar los registros de la tabla de datos. Un ejemplo similar sería usar "AND" y un comando de SQL que generaría un mensaje de error específico:

Christian Javier Vila Toscano

Es obvio que este tipo de mensajes de error ayuda a un atacante a obtener la información que está buscando (nombre de la tabla, de la base de datos, usuarios, hashes de contraseñas, etc.). Mostrar mensajes de error personalizados puede ser una buena solución para este problema, sin embargo, existe otra técnica conocida como ataque de inyección de SQL a ciegas (Blind SQL Injection), donde el atacante es todavía capaz de llevar a cabo una inyección de SQL, incluso cuando la solicitud no revela ningún mensaje de error del servidor de base de datos que contenga información útil para el atacante.

Contramedidas:

Evite conectar a la base de datos como superusuario o como el propietario de la base de datos. Utilice siempre usuarios personalizados para conectar a la base de datos con el mínimo privilegio necesario para realizar la tarea asignada.

PHP tiene dos funciones para MySQL que sanitizan los imputs del usuario: addslashes (el más viejo) y mysql_real_escape_string (el método recomendado). Esta función viene con PHP >= 4.3.0, por lo que debe comprobar primero si existe esta función y que esté ejecutando la última versión de PHP 4 o 5.

Fuente: Security Focus












Copyright © 2009 I-SEC. Todos los derechos reservados

Política de privacidad