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:
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í.
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…