Random IRC quote :      <@Ell0> soy Juan Carioca, agarramela con la boca

Renfe for fun and profit ( II ;) )

Como usuario habitual de Renfe no me hace mucha gracia esta situación, éste el motivo por el cual escribo este post. Esperando que lo solucionen, con los 11,5 millones de euros que costó la web…

Bueno y porque nos lo pasamos bien haciendo el cabra de vez en cuando…

A veces parece que las cosas van todas juntas, después de lo de CocaCola seguimos con el tema de los SMS spoofeados. Esta vez toca Renfe.

En los SMS el remitente puede ser alfanumérico también. Estos suelen ser usados por servicios o entidades bien conocidas como Bancos, Instituciones etc…Para evitar spoofing, en muchas pasarelas SMS que permiten a sus clientes remitentes alfanuméricos, éstos son revisados antes de permitir su uso.

Renfe usa para sus comunicaciones, envio de localizadores etc el remitente alfanumérico «renfe» que no deja lugar a dudas. Que cualquiera pueda enviar un SMS bajo el remitente «renfe» a un móvil arbitrario, controlando también el mensaje, no es muy seguro.

Por ejemplo, imaginemos un caso donde alguien recibe un sms de renfe pidiéndole que llame a determinado número con el fin de comprobar sus datos de facturación, o avisándole que un asesor de renfe le llamará en breve con el mismo fin.

Pues vamos a ver cómo lo podemos hacer…

La web de renfe, cuando quiere, te permite comprar billetes para casi todos los trayectos. El sistema Vol es accesible desde https://w1.renfe.es/vol/. Una vez allí seleccionamos el trayecto que queremos realizar, la fecha, etc.. y obtenemos los trenes. Elegimos el que queramos y llega la hora de pagar. Pun, pagamos con la tarjeta esa que nos dejó Vladimir y si todo ha ido correctamente llegamos a ‘pagoPUCE.do’ donde nos dan la posibilidad de imprimir los billetes o de recibir un SMS con el localizador en el móvil que nosotros queramos. Veamos como es la función AJAX que lo hace:

function enviarSMS() {
        var tlf = document.getElementById("telefono").value;
        var txtMsg = document.getElementById("txtoMensaje").value;
       
        if (tlf != null && tlf.length > 0){
                document.getElementById(‘pregunta’).style.display=‘none’;
                document.getElementById(‘mensaje’).style.display=»;
                DWRUtil.setValue(‘telefonoResult’, tlf);
               
                // llamamos AJAX
                var url = "/vol/EnvioMvServlet?telefono=" + tlf + "&mensaje=" + txtMsg;
                var req = initRequest(url);
                req.onreadystatechange = function() {
        };  
                req.open("GET", url, true);  
        req.send(null);
        }else{
                document.getElementById(‘pregunta’).style.display=»;
                document.getElementById(‘mensaje’).style.display=‘none’;               
               
        }
       
}
 

Vaya! tanto el teléfono(que es en cierta medida lógico) como el mensaje (que es una negrada como diría erg0t) (!!) los lee en el client-side en un input hidden que hay por ahí.

<INPUT type="hidden" name="txtoMensaje" id="txtoMensaje" value="Localiza: ******.  de nnnn a xxxx. Salida 2010-01-03 a las xx:xxh. Vuelta 2010-01-03 a las xx:xxh.  N.Billetes: 1">
 

Mal asunto. Supongo que el developer pensó que esta manera era más comoda que volver a hacer una query a la DB…El problema es que debido a esto nosotros podemos controlar el mensaje que se enviará al móvil que nosotros queramos, que además llevará el remitente de «renfe». FAIL.
Símplemente una vez alcancemos «pagoPUCE.do» vamos a

https://w1.renfe.es/vol/EnvioMvServlet?telefono=PON_MOVIL_AQUI&mensaje=Hola+soy+un+SMS+falso+de+renfe

y listo.

¿Cuál es el principal inconveniente? Que es necesario haber completado satisfactoriamente una compra para poder enviar un SMS. Pero también vamos a intentar minimizar este handicap. Como os comenté antes, el sistema vol nos permite comprar billetes para casi cualquier trayecto, incluidos regionales. También nos permite cancelar el billete una vez adquirido con una penalización del 15%.

Ahora imaginemos que símplemente compramos un billete para un trayecto corto, ejemplo «Palencia»->»Venta de Baños» que viene a costar 1,80 euros. Terminamos la compra, mandamos el SMS falso y cancelamos el billete, con lo que mandar un SMS spoofeado de parte de renfe nos cuesta la friolera de 0,27 €. Jiji.

La solución es obvia, el texto del SMS no debe poder ser controlado en NINGUN caso desde el client-side.

Y van 2…

5 Comentarios para “Renfe for fun and profit ( II ;) )”

  1. jon
    Comment por jon | 01/04/10 at 5:13 am

    Ruben por el módico precio de unos miles de euros mas, que son solo calderilla, proponles la solución del ingeniero:
    http://www.xckd.com/670/

  2. Comment por Newlog | 01/05/10 at 4:51 am

    «con los 11,5 millones de euros que costó la web…»

    WTF?!

    Para que después la caguen de tal manera…

  3. Comment por Karcrack | 01/05/10 at 11:57 am

    Gran trabajo!!

    Me encanta este blog! Llevo leyendolo un par de meses, y esta semana sin duda ha sido una de las mas productivas, eh? XD

    Feliz año!

  4. Comment por fossie | 01/15/10 at 1:26 pm

    solo se puede enviar un SMS una vez que has comprado el billete o se pueden enviar varios? como controlan eso? por la cookie? desde servidor?

    Genial el tema de los SMS

    antes las webs mas facilonas eran losminutos o samsung 😀

  5. Comment por juan | 10/09/10 at 4:49 pm

    hola atodo o atoda bueno renfe anucia que a echo via nueva para cota las distacia de las persona pos todo eso mentira en baza granada estamo esperado ace ya 20 año y todavia no an tocado nada nose como son capase promete que van a pone el tren si luega esa palabla sevan son todo uno felso

Se han cerrado los comentarios