Hola!!
Como puse en un post anterior aqui merito mismo en mi blog, estaba revisando unas cosas sobre Google Music, por casualidad, causalidad o como lo quieran llamar encontre lo que a mi parecer son unos fallos de seguridad, yo como niño bueno, los reporte a Google, pero ellos me contestaron que naranjas dulces, que no es fallo de seguridad :(, por lo que si ellos dicen que no es nada malo, entonces puedo liberarlo y empezar a hacer herramientas para eso, pues es 100% legal y no es un fallo de seguridad :D (al final pongo lo que me contestaron :P)
El diagrama del fallo (segun yo) es el que pongo a continuación (no soy un experto en diagramas, digan que hice una imagen, generalmente lo explicaría con texto! xD)
Por pasos:
1.- es lo normal, user y pass para ingresar a gmail
2.- te setean cookies en el navegador para que puedas ingresar a tus servicios de google
3.- en music.google.com buscas la cancion que tu quieras
En este punto (4) esta lo interesante...
4.- se genera el streaming
Primero, en la base de datos de Google MUsic estan varias tablas, las cuales listo a continuación:
[table] ARTWORK
AlbumId
LocalLocation
[table] KEEPON
KeepOnId
ListId
AlbumId
ArtistId
DateAdded
[table] LISTITEMS
Id
ListId
MusicSourceAccount
MusicSourceId
ClientPosition
ServerPosition
SourceAccount
SourceId
[table] LISTITEM_TOMBSTONES
Mi tabla aqui esta vacia
[table] LISTS
Id
Name
SourceAccount
SourceId
_sync_version
_sync_dirty
MediaStoreId
ListType
ListArtworkLocation
[table] LIST_TOMBSTONES
Mi tabla aqui esta vacia
[table] MUSIC
Id
SourceAccount
SourceId
SourcePath
Size
FileType
FileDate
LocalCopyPath
LocalCopyType
PlayCount
LastPlayDate
Title
Album
Artist
AlbumArtist
AlbumArtistOrigin
Composer
Genre
Year
Duration
TrackCount
TrackNumber
DiscCount
DiscNumber
Compilation
BitRate
AlbumArtLocation
SongId
AlbumId
AlbumArtistId
GenreId
CanonicalName
CanonicalAlbum
CanonicalAlbumArtist
CanonicalGenre
_sync_dirty
_sync_version
LocalCopySize
TrackType
LocalCopyBitrate
ArtistOrigin
ArtistId
CanonicalArtist
Rating
StoreId
StoreAlbumId
[table] RECENT
RecentId
ItemDate
RecentListId
RecentAlbumId
[table] RINGTONES
Vacia
[table] SHOULDKEEPON
MusicId
KeepOnId
[table] _sync_state
_id
account_name
account_type
data
[table] _sync_state_metadata
version
[table] android_metadata
locale
La por ahorita nos interesa (no digo que las demás no tengan cosas buenas, por ejemplo la de _sync_state nos guarda los datos de logueo :P encriptados claro) es la de MUSIC
En esta tabla nos guarda la lista de todas las canciones (yo apenas tengo 11,482 :P) que tenemos dentro de nuestra cuenta de Google Music, el campos SourceId nos guarda un valor como este:
251c2c68-0340-37b0-9f1f-cf424f808f58
En realidad este es el principal campo que nos importa, los demas son solo para hacer mas "fancy" todo esto (despues verán por que :P)
Al ver los headers enviados/recibidos con HttpLiveHeaders (no, no me pagan publicidad), podremos ver algo como esto:
https://music.google.com/music/play?u=0&songid=2fafbe9b-db96-3624-97e6-7e52e3e3b463&pt=e => de ahora en adelante UNO
GET /music/play?u=0&songid=2fafbe9b-db96-3624-97e6-7e52e3e3b463&pt=e HTTP/1.1
y de ahi obtenemos una respuesta de la siguiente forma:
http://t.doc-0-0-sj.sj.googleusercontent.com/stream/105?id=6a523ee5f96bad0e&itag=25&source=skyjam&o=07065478407166026385&ip=0.0.0.0&ipbits=0&expire=1328258623&sparams=id,itag,source,o,ip,ipbits,expire&signature=7A0C93172AB4B8E0657927ACF5D04E610E64D01C.3BDF980C824B97C35F3CB8238434E39ADFC83AE&key=sj2 => de ahora en adelante DOS
Si se dan cuenta el id principal de UNO no aparece ya en DOS, pero! ya tenemos un link valido para que podamos escuchar nuestra musiquita! :D
Hasta este momento llega el punto 6 del diagrama (espero hayan seguido mediante el relato el punto 5 y 6 xD)
Hace tiempo vi a DOS, y lo que hice, fue enviarselo a un amigo para que verificara si el podía escuchar la cancion que yo escuchaba en ese momento, como era de esperarse, nos regresa un error 403 (si es que ya entraron a DOS), por lo cual yo en ese momento dije: CLAP CLAP valida de forma genial nuestros datos y tenemos privacidad hasta en nuestra música!
Al analizar la base de datos vi una imagen que se podía abrir desde cualquier sitio, como lo explique en mi post anterior, por lo que segui tratando de escuchar ese link de música desde otro dispositivo.
Al abrirlo con Chrome la musica empezo a escucharse, por lo que probe de nuevo dando f5 y me dio un 403! Raro que pueda escucharlo un momento si y otro no, creo yo.
Haciendo mas pruebas, vi en el link que tiene un timestamp que recibe la variable de expires, el link caduca generalmente cada 30 segundos aproximadamente, osea, en otras palabras es visible para quien sea durante 30 segundos!!!!
"
Google lo que respondio fue esto:
Hey,
Thanks for your email! I've talked with the Music team and they've
confirmed this is expected behaviour. Since the link is only valid for a
short period of time, there isn't much potential for abuse.
Also, the URL is unguessable so an attacker can't obtain a valid link
without some other vulnerability. If you do find a way for an attacker to
generate or obtain a valid link without the victim knowing, then this
would be considered a vulnerability.
Cheers,
XXXXXXX
"
Me parece genial, igual y como lo mencionan ellos, puede que no sea un bug de seguridad, pero creo yo, que si subo un archivo personal a un servicio con contraseña, este tiene que ser visible solo para mi no? si no para que me logueo en mi cuenta de GMusic para escuchar musica, mejor solo hacer un servicio que ponga mi usuario y me de la lista de canciones que tengo disponibles!
Ah bueno, ahi es cuando llegaron mas ideas:
1.- Hacer un script para descargar MI música por lotes en caso de que la necesite
Si! es que google music una vez que la subes te fregaste y no puedes descargarla por lotes, a menos que sea desde android y des click en disponible sin coneccion, y te lo guarda como 1.mp3 2.mp3, etc, etc, no te da el nombre, ni titulo, ni disco, si estan en los metadatos pues ya fregaste y lo puedes visualizar asi en winamp o el reproductor de su eleccion (aunque sea por consola kof kof @hecky jeje :P).
Entonces aqui entra en nuestro auxilio las tablas de google nuevamente, dentro de MUSIC vamos a utilizar el campo Title, Album, Artist que son los que contienen la informacion de nuestro archivo musical.
Estoy en el desarrollo de esto, en cuanto quede les explicare paso a paso con naranjas y manzanas (por que hay muchos usuarios no experimentados que quieren hacer esto) para que lo puedan hacer :D
2.- Este punto creo yo es el peor para google y lo explico a continuación:
Cada cuenta de google music puede almacenar 20 mil canciones, ok, creo 10 cuentas, podre almacenar 200,000 canciones, wow eso suena genial! ahora, que tal si X persona puede descargar una de esas canciones con el ancho de banda de google? en descarga directa? por lotes? en por lotes me refiero a discos completos, canciones seleccionadas, incluso artistas completos (discografias) que esten en algunas de esas 10 cuentas de Google!?
A mi parecer sería genial!!!
No se meteria en problemas legales google? Megaupload, segun todos el culpable fue la compañia, siendo que realmente los culpables (creo yo, de manera muy personal claro) fuimos nosotros, piratebay y demas empresas donde hay alojamiento con Copyright no se han metido en problemas?
Obvio, esto es pensando que el servicio crecería muy rapido, pero, siendo un servicio tan eficaz yo creo que si lo haría, cuando hice musicindexof.com solo ponia links en descarga directa y en un mes alcanzo un PR de 4 (si, en un mes de cuando se registro, abrio y transcurrieron 30 dias), y en ese entonces NO existia (o yo no usaba al menos) twitter, asi que la difusion sería mas rapida creo yo.
La idea es esta:
Hacer un script, primero, tendra la base de datos de las 5 cuentas, esto con cualquier gestor de DB es lo de menos, tendra los datos importantes arriba mencionados, "osease" el ID y nombre, artista, album y cuenta de google (esto esta en el campo SourceAccount de la tabla MUSIC) con eso al principio es mas que suficiente, nuestro script se loguea a nuestra cuenta 1 de google, guarda las cookies y repite el mismo paso con la cuenta 2,3,4,etc, de ahi ya estamos autentificados, ahora el usuario hace una busqueda de la cancion juanito con el artista perez, si esta en la base de datos regresa un link valido por 30 segundos para descargar, escuchar online, etc, etc.
Creo que este es el post mas largo que he escrito, hay muchas mas ideas, pero por mientras termino el post aqui, por que creo que ya se cansaron de leer (si es que llegaron hasta aqui claro).
PD. Esperen el script para descargar por lotes de Google Music, lo tendre por estos dias :D
PD. Gracias por leer la nota completa si es que lo hiciste!
PD. Te gusto? retuitealo! :D
PD. Creo que ya no hay más
PD. Si se siguen preguntando como consegui los campos de Google Music, en su android rooteado vayan aqui: /data/data/com.google.android.music/databases/music.db copienla y usen un gestor de sqlite, si no saben como, esperen y vean los siguientes posts :D
Saludos malignos }:)) ... ah caray, no, no, ese es otro blog!
jajajajajajaajajajajajajaja
Saludos!
Komtec1 :D
Como puse en un post anterior aqui merito mismo en mi blog, estaba revisando unas cosas sobre Google Music, por casualidad, causalidad o como lo quieran llamar encontre lo que a mi parecer son unos fallos de seguridad, yo como niño bueno, los reporte a Google, pero ellos me contestaron que naranjas dulces, que no es fallo de seguridad :(, por lo que si ellos dicen que no es nada malo, entonces puedo liberarlo y empezar a hacer herramientas para eso, pues es 100% legal y no es un fallo de seguridad :D (al final pongo lo que me contestaron :P)
El diagrama del fallo (segun yo) es el que pongo a continuación (no soy un experto en diagramas, digan que hice una imagen, generalmente lo explicaría con texto! xD)
Por pasos:
1.- es lo normal, user y pass para ingresar a gmail
2.- te setean cookies en el navegador para que puedas ingresar a tus servicios de google
3.- en music.google.com buscas la cancion que tu quieras
En este punto (4) esta lo interesante...
4.- se genera el streaming
Primero, en la base de datos de Google MUsic estan varias tablas, las cuales listo a continuación:
[table] ARTWORK
AlbumId
LocalLocation
[table] KEEPON
KeepOnId
ListId
AlbumId
ArtistId
DateAdded
[table] LISTITEMS
Id
ListId
MusicSourceAccount
MusicSourceId
ClientPosition
ServerPosition
SourceAccount
SourceId
[table] LISTITEM_TOMBSTONES
Mi tabla aqui esta vacia
[table] LISTS
Id
Name
SourceAccount
SourceId
_sync_version
_sync_dirty
MediaStoreId
ListType
ListArtworkLocation
[table] LIST_TOMBSTONES
Mi tabla aqui esta vacia
[table] MUSIC
Id
SourceAccount
SourceId
SourcePath
Size
FileType
FileDate
LocalCopyPath
LocalCopyType
PlayCount
LastPlayDate
Title
Album
Artist
AlbumArtist
AlbumArtistOrigin
Composer
Genre
Year
Duration
TrackCount
TrackNumber
DiscCount
DiscNumber
Compilation
BitRate
AlbumArtLocation
SongId
AlbumId
AlbumArtistId
GenreId
CanonicalName
CanonicalAlbum
CanonicalAlbumArtist
CanonicalGenre
_sync_dirty
_sync_version
LocalCopySize
TrackType
LocalCopyBitrate
ArtistOrigin
ArtistId
CanonicalArtist
Rating
StoreId
StoreAlbumId
[table] RECENT
RecentId
ItemDate
RecentListId
RecentAlbumId
[table] RINGTONES
Vacia
[table] SHOULDKEEPON
MusicId
KeepOnId
[table] _sync_state
_id
account_name
account_type
data
[table] _sync_state_metadata
version
[table] android_metadata
locale
La por ahorita nos interesa (no digo que las demás no tengan cosas buenas, por ejemplo la de _sync_state nos guarda los datos de logueo :P encriptados claro) es la de MUSIC
En esta tabla nos guarda la lista de todas las canciones (yo apenas tengo 11,482 :P) que tenemos dentro de nuestra cuenta de Google Music, el campos SourceId nos guarda un valor como este:
251c2c68-0340-37b0-9f1f-cf424f808f58
En realidad este es el principal campo que nos importa, los demas son solo para hacer mas "fancy" todo esto (despues verán por que :P)
Al ver los headers enviados/recibidos con HttpLiveHeaders (no, no me pagan publicidad), podremos ver algo como esto:
https://music.google.com/music/play?u=0&songid=2fafbe9b-db96-3624-97e6-7e52e3e3b463&pt=e => de ahora en adelante UNO
GET /music/play?u=0&songid=2fafbe9b-db96-3624-97e6-7e52e3e3b463&pt=e HTTP/1.1
y de ahi obtenemos una respuesta de la siguiente forma:
http://t.doc-0-0-sj.sj.googleusercontent.com/stream/105?id=6a523ee5f96bad0e&itag=25&source=skyjam&o=07065478407166026385&ip=0.0.0.0&ipbits=0&expire=1328258623&sparams=id,itag,source,o,ip,ipbits,expire&signature=7A0C93172AB4B8E0657927ACF5D04E610E64D01C.3BDF980C824B97C35F3CB8238434E39ADFC83AE&key=sj2 => de ahora en adelante DOS
Si se dan cuenta el id principal de UNO no aparece ya en DOS, pero! ya tenemos un link valido para que podamos escuchar nuestra musiquita! :D
Hasta este momento llega el punto 6 del diagrama (espero hayan seguido mediante el relato el punto 5 y 6 xD)
Hace tiempo vi a DOS, y lo que hice, fue enviarselo a un amigo para que verificara si el podía escuchar la cancion que yo escuchaba en ese momento, como era de esperarse, nos regresa un error 403 (si es que ya entraron a DOS), por lo cual yo en ese momento dije: CLAP CLAP valida de forma genial nuestros datos y tenemos privacidad hasta en nuestra música!
Al analizar la base de datos vi una imagen que se podía abrir desde cualquier sitio, como lo explique en mi post anterior, por lo que segui tratando de escuchar ese link de música desde otro dispositivo.
Al abrirlo con Chrome la musica empezo a escucharse, por lo que probe de nuevo dando f5 y me dio un 403! Raro que pueda escucharlo un momento si y otro no, creo yo.
Haciendo mas pruebas, vi en el link que tiene un timestamp que recibe la variable de expires, el link caduca generalmente cada 30 segundos aproximadamente, osea, en otras palabras es visible para quien sea durante 30 segundos!!!!
"
Google lo que respondio fue esto:
Hey,
Thanks for your email! I've talked with the Music team and they've
confirmed this is expected behaviour. Since the link is only valid for a
short period of time, there isn't much potential for abuse.
Also, the URL is unguessable so an attacker can't obtain a valid link
without some other vulnerability. If you do find a way for an attacker to
generate or obtain a valid link without the victim knowing, then this
would be considered a vulnerability.
Cheers,
XXXXXXX
"
Me parece genial, igual y como lo mencionan ellos, puede que no sea un bug de seguridad, pero creo yo, que si subo un archivo personal a un servicio con contraseña, este tiene que ser visible solo para mi no? si no para que me logueo en mi cuenta de GMusic para escuchar musica, mejor solo hacer un servicio que ponga mi usuario y me de la lista de canciones que tengo disponibles!
Ah bueno, ahi es cuando llegaron mas ideas:
1.- Hacer un script para descargar MI música por lotes en caso de que la necesite
Si! es que google music una vez que la subes te fregaste y no puedes descargarla por lotes, a menos que sea desde android y des click en disponible sin coneccion, y te lo guarda como 1.mp3 2.mp3, etc, etc, no te da el nombre, ni titulo, ni disco, si estan en los metadatos pues ya fregaste y lo puedes visualizar asi en winamp o el reproductor de su eleccion (aunque sea por consola kof kof @hecky jeje :P).
Entonces aqui entra en nuestro auxilio las tablas de google nuevamente, dentro de MUSIC vamos a utilizar el campo Title, Album, Artist que son los que contienen la informacion de nuestro archivo musical.
Estoy en el desarrollo de esto, en cuanto quede les explicare paso a paso con naranjas y manzanas (por que hay muchos usuarios no experimentados que quieren hacer esto) para que lo puedan hacer :D
2.- Este punto creo yo es el peor para google y lo explico a continuación:
Cada cuenta de google music puede almacenar 20 mil canciones, ok, creo 10 cuentas, podre almacenar 200,000 canciones, wow eso suena genial! ahora, que tal si X persona puede descargar una de esas canciones con el ancho de banda de google? en descarga directa? por lotes? en por lotes me refiero a discos completos, canciones seleccionadas, incluso artistas completos (discografias) que esten en algunas de esas 10 cuentas de Google!?
A mi parecer sería genial!!!
No se meteria en problemas legales google? Megaupload, segun todos el culpable fue la compañia, siendo que realmente los culpables (creo yo, de manera muy personal claro) fuimos nosotros, piratebay y demas empresas donde hay alojamiento con Copyright no se han metido en problemas?
Obvio, esto es pensando que el servicio crecería muy rapido, pero, siendo un servicio tan eficaz yo creo que si lo haría, cuando hice musicindexof.com solo ponia links en descarga directa y en un mes alcanzo un PR de 4 (si, en un mes de cuando se registro, abrio y transcurrieron 30 dias), y en ese entonces NO existia (o yo no usaba al menos) twitter, asi que la difusion sería mas rapida creo yo.
La idea es esta:
Hacer un script, primero, tendra la base de datos de las 5 cuentas, esto con cualquier gestor de DB es lo de menos, tendra los datos importantes arriba mencionados, "osease" el ID y nombre, artista, album y cuenta de google (esto esta en el campo SourceAccount de la tabla MUSIC) con eso al principio es mas que suficiente, nuestro script se loguea a nuestra cuenta 1 de google, guarda las cookies y repite el mismo paso con la cuenta 2,3,4,etc, de ahi ya estamos autentificados, ahora el usuario hace una busqueda de la cancion juanito con el artista perez, si esta en la base de datos regresa un link valido por 30 segundos para descargar, escuchar online, etc, etc.
Creo que este es el post mas largo que he escrito, hay muchas mas ideas, pero por mientras termino el post aqui, por que creo que ya se cansaron de leer (si es que llegaron hasta aqui claro).
PD. Esperen el script para descargar por lotes de Google Music, lo tendre por estos dias :D
PD. Gracias por leer la nota completa si es que lo hiciste!
PD. Te gusto? retuitealo! :D
PD. Creo que ya no hay más
PD. Si se siguen preguntando como consegui los campos de Google Music, en su android rooteado vayan aqui: /data/data/com.google.android.music/databases/music.db copienla y usen un gestor de sqlite, si no saben como, esperen y vean los siguientes posts :D
Saludos malignos }:)) ... ah caray, no, no, ese es otro blog!
jajajajajajaajajajajajajaja
Saludos!
Komtec1 :D
Comentarios
Felicitaciones :3