Hacking TouchaTag/TikiTag: RFIDIOt

TOP meneame.net

Izquierda, lector de touchatag. Derecha, etiqueta touchatag Mifare UltralightHará como una semana ojeando rfidiot.org lei que Adam Laurie (el creador de RFIDIOt) había estado jugando con un lector nuevo que además se podia conseguir baratito, compatible hasta cierto punto con las herramientas que se publica en su web y es esta ultima parte de cierta compatibilidad la que me llamó la atención, por lo que me decidí a comprarlo. En cuanto me ha llegado esta mañana me he puesto a jugar con el lector, etiquetas y tarjetas que tenía por aqui, descubriendo varias cosillas cuanto menos interesantes.

Touchatag se trata de un servicio gratuito hasta el momento que pretende enlazar objetos de la vida real con internet, y para eso vende un lector RFID y etiquetas que se pegan a los objetos.

El funcionamiento consiste en que tras definir una accion en la pagina web, por cada objeto que pasamos con una pegatina RFID de touchatag por el lector el servicio que corre en nuestro ordenador leerá el número de serie de la etiqueta, lo mandará por internet al servidor de touchatag y este responderá con una acción definida en la cabecera HTTP Location.

Las acciones solo pueden definirse en su página web, y es necesario instalarse un servicio que está en constante contacto con la página web a través de una conexión segura SSL. No existe manera de definir acciones localmente, por lo que es imprescindible que el ordenador esté conectado a internet, además de tener que guardar nuestros datos y acciones en un servidor ajeno (ya sabeis, el gran hermano…).

Se puede leer mas sobre el lector y las pegatinas de touchatag aqui.

Lo preocupante es cuando encuentras fallos de seguridad concernientes a los datos personales, como expongo a continuación.

Poniendo en marcha RFIDIOt en Mac OS X Leopard

Quien no conozca RFIDIOt, es el acrónimo de Radio Frecuency IDentity Input Output Tools y se trata de un proyecto personal de Adam Laurie, un consultor de seguridad Inglés. Este hombre ha publicado un extenso trabajo tanto de investigación sobre RFID como desarrollado unas potentes herramientas de manejo de lectores/grabadores RFID que son exactamente las que voy a emplear.

Para la instalación de las herramientas no hay que comerse mucho el coco, solamente hay que descargarlas de su web y descomprimirlas en donde mas nos guste.

En Mac OS X 10.5.6 (mi versión) no hay que instalar drivers ni nada pues ya viene con pcscd (demonio PC/SC) que se encarga de comunicarse con el lector que cumple dicho estandard y que se inicia automáticamente al conectar cualquier lector de tarjetas inteligentes como el que proporciona Touchatag.

Lo único que hay que configurar en RFIDIOt es el archivo RFIDIOtconfig.py, parámetro readernum= 1 y cambiarlo a 0.

Trasteando con el lector y RFIDIOt

Para averigurar que tipo de chips son las etiquetas que se emplean en Touchatag:

karman@Usagi RFIDIOt-0.1x $ ./isotype.py
isotype v0.1k (using RFIDIOt v0.1x)
Reader: PCSC ACS ACR 38U-CCID 00 00
(Firmware: ACR122U102,  SAM Serial: (censored),  SAM ID: (censored))

ID: 00000000000000
Tag is MIFARE Ultralight

Por lo que sabemos que cada pegatina es una Mifare Ultralight, un pequeño chip sin cifrado aplicado que contiene 512 bits de memoria, de los cuales 384 son usables (48 bytes). Siguiendo con el trasteo, pruebo a leer el contenido de la etiqueta:

karman@Usagi RFIDIOt-0.1x $ ./readtag.py
readtag v0.1d (using RFIDIOt v0.1x)
Reader: PCSC ACS ACR 38U-CCID 00 00
(Firmware: ACR122U102,  SAM Serial: (censored),  SAM ID: (censored))

ID: 00000000000000
Data:
Block 00: 04F46911912125801548FF7FE1100600 ..i..!%..H……
Block 01: 912125801548FF7FE1100600031DD101 .!%..H……….
Block 02: 1548FF7FE1100600031DD10119550174 .H………..U.t
Block 03: E1100600031DD101195501747461672E ………U.ttag.
Block 04: 031DD101195501747461672E62652F6D …..U.ttag.be/m
Block 05: 195501747461672E62652F6D2F303446 .U.ttag.be/m/000
Block 06: 7461672E62652F6D2F30344634363939 tag.be/m/0000000
Block 07: 62652F6D2F3034463436393931323132 be/m/00000000000
Block 08: 2F303446343639393132313235383020 /00000000000000
Block 09: 34363939313231323538302059D36A35 00000000000 Y.j5
Block 0a: 313231323538302059D36A35F0FC71CF 0000000 Y.j5..q.
Block 0b: 3538302059D36A35F0FC71CFEDDF5698 000 Y.j5..q…V.
Block 0c: 59D36A35F0FC71CFEDDF569800000000 Y.j5..q…V…..
Block 0d: F0FC71CFEDDF56980000000004F46911 ..q…V…….i.
Block 0e: EDDF56980000000004F4691191212580 ..V…….i..!%.
Block 0f: 0000000004F46911912125801548FF7F ……i..!%..H..

Observando un poco los datos decodificados en ASCII.. no parece eso una url? algo como ‘ttag.be/m/00000000000000‘…

Si entramos en dicha url nos redireccionará a una pagina web diciendonos que el tag ‘0×00000000000000′ no tiene aún función asignada:

karman@Usagi RFIDIOt-0.1x $ nc -vv ttag.be 80
Connection to ttag.be 80 port [tcp/http] succeeded!
GET /m/00000000000000 HTTP/1.1
Host: ttag.be

HTTP/1.1 302 Moved Temporarily
Date: Tue, 12 May 2009 14:58:10 GMT
Server: Apache-Coyote/1.1
X-Powered-By: Servlet 2.4; JBoss-4.2.3.GA (build: SVNTag=JBoss_4_2_3_GA date=200807181439)/JBossWeb-2.0
Location: http://www.touchatag.com/tikitag-web-extra/message.jsp?message=touchatag no. 0×00000000000000 is an empty touchatag. It does not trigger an action yet.
Content-Length: 0
Connection: close
Content-Type: text/plain; charset=UTF-8

Aqui es donde se puede ver un buen agujero de seguridad. Nos redirige a ‘http://www.touchatag.com/tikitag-web-extra/message.jsp?message=touchatag no. 0×00000000000000 is an empty touchatag. It does not trigger an action yet.‘, que resulta ser un simple javascript que muestra cualquier texto que le pasemos por la variable ‘message‘. Realmente no habría mucho problema si fuese texto parseado para evitar urls malformadas como esta:

http://www.touchatag.com/tikitag-web-extra/message.jsp?message=%3Cscript%3Ealert(‘Esta es tu cookie’);alert(document.cookie);%3C/script%3E

Con esta vulnerabilidad XSS un atacante malintencionado podría entrar en nuestra cuenta de touchatag.com, ver nuestras acciones (y sus datos), nuestros datos, etc. La cosa no acaba aqui.

¿Que sucede si creamos una aplicación, por ejemplo, para llamar por skype? Nos crea una redirección diferente:

karman@Usagi RFIDIOt-0.1x $ nc -vv ttag.be 80
Connection to ttag.be 80 port [tcp/http] succeeded!
GET /m/00000000000000 HTTP/1.1
Host: ttag.be

HTTP/1.1 302 Moved Temporarily
Date: Tue, 12 May 2009 14:55:52 GMT
Server: Apache-Coyote/1.1
X-Powered-By: Servlet 2.4; JBoss-4.2.3.GA (build: SVNTag=JBoss_4_2_3_GA date=200807181439)/JBossWeb-2.0
Location: http://skype:echo123?call
Content-Length: 0
Connection: close
Content-Type: text/plain; charset=UTF-8

Nos redirecciona a una especie de dirección local que le dice al servicio de touchatag de nuestro ordenador que efectue la acción ‘call’ al usuario ‘echo123′ (es un usuario de prueba que tiene skype para probar micrófono y sonido y que previamente he definido en la página touchatag.com para llamarle a él con la etiqueta 0×00000000000000).

De esta forma, si sabemos los números de serie de la etiqueta de alguien (vienen impresos en la parte superior de cada etiqueta) podemos saber que acciones ejecuta y los datos que estas mismas acciones contienen, como urls que visita, contactos de skype a los que llama, etc:

karman@Usagi RFIDIOt-0.1x $ nc -vv ttag.be 80
Connection to ttag.be 80 port [tcp/http] succeeded!
GET /m/00000000000000 HTTP/1.1
Host: ttag.be

HTTP/1.1 302 Moved Temporarily
Date: Tue, 12 May 2009 14:57:32 GMT
Server: Apache-Coyote/1.1
X-Powered-By: Servlet 2.4; JBoss-4.2.3.GA (build: SVNTag=JBoss_4_2_3_GA date=200807181439)/JBossWeb-2.0
Location: http://karman.cc/blog
Content-Length: 0
Connection: close
Content-Type: text/plain; charset=UTF-8

E incluso yendo mas lejos se podría programar un fuerza bruta que obtuviese las acciones de todo el mundo a base de sencillas consultas web como las mostradas, por lo que me atrevería a decir que violan las leyes de protección de datos actuales.

P.D: He aprovechado para averiguar que las tarjetas de transporte de Metro Valencia son Mifare1K, tanto la de plástico como la de cartón.

Update: Recientemente he descubierto que gracias a libnfc se puede usar este lector como grabador también.
<< Volver

527 comments to “Hacking TouchaTag/TikiTag: RFIDIOt”

  1. Comment by *dudux:

    te funciona en script en pytohn de bruteforce.py?

  2. Zen Comment by KaR]V[aN:

    No, parece que el lector usa comandos diferentes y no estan todos totalmente implementados. Ando esperando una actualizacion de RFIDIOt para ver si lo corrigen.

    Tampoco funciona leer una tarjeta mifare normal.

  3. Comment by *dudux:

    si no esta implementado para mifare el mitm tampoco funcioara para mifare

    http://www.proxmark.org/forum/post/1050/#p1050

  4. Zen Comment by KaR]V[aN:

    La página de rfidiot.org sigue sin actualizaciones desde Febrero cuando sacara la pseudocompatibilidad con el lector de touchatag/tikitag :(

  5. Comment by *dudux:

    a ver,si sacan actualizacion,pero por 30 euros vale la pena…….
    aunque karman poco haremos tu y yo con ls 2 sino podemos hacer eso
    hablams
    por cierto tengo un wrt54g pra resucitar,

  6. Comment by uNbAs:

    Menudos perracos ….

    @KaR]V[aN —> No te conozco pero de vez en cuando he visitado tu pagina (cuando jugaba con foneras), buena investigación y buen XSS

    @*dudux —> No digo na y te lo digo too :D no hay mas que decir :D

  7. Zen Comment by KaR]V[aN:

    Ya te lo digo yo: mfcuk :D

Contador