BandaAncha

  • 🔍 en 📰 artículos ⏎
  • 🔍 en 💬 foros ⏎
  • 🔍 en 👇 este 💬 foro ⏎
  • 🔍 en 👇 este 💬 tema ⏎
Regístrate Regístrate Identifícate Identifícate
🗞️

Vulnerabilidad Acropalypse en terminales Pixel permite recuperar la imagen completa a partir de un recorte

Bramante
8

Simons Aarons, asegura en su cuenta de Twitter haber descubierto lo que podría ser una muy seria vulnerabilidad que afecta a la herramienta de edición de imágenes que integra Google en sus terminales Pixel.

Según este usuario, la informacíon descartada al recortar una imagen usando la citada herramienta, puede ser fácilmente recuperada y la imagen inicial, restaurada.

La información acerca de la vulnerabilidad es aún incierta pero ya existe una demo donde podemos probarlo por nosotros mismos: acropalypse.

Hasta el momento (y hasta donde yo sé), Google no se ha pronunciado al respecto.


Actualización: Como comenta el compañero @skgsergio, ya se han publicado más detalles de la vulnerabilidad.

skgsergio
2

Pues va a ser la risa, vete a saber cuánto atrás en el tiempo se remonta este fallo, pero lo mandado, mandado está, no hay parche posible…

Es una gran cagada. Supongo que tiene que ser similar (no tengo un pixel ni se cómo es la utilidad de serie para editar capturas) a las funciones de Google Photo que editas una imagen y aunque la guardes puedes dar a editar y deshacer las ediciones (cortes, ajustes, …) que se quedará en los metadatos del fichero.

🗨️ 1
Bramante

vete a saber cuánto atrás en el tiempo se remonta este fallo

Hablan de 6 años.

lhacc

También es patético es que aplicaciones como Discord (la que sale en la captura) no recodifiquen las imágenes entrantes. Y si sale una vulnerabilidad en libjpeg qué hacen, ¿cierran el servicio?

skgsergio
23

Aquí está la información técnica detallada: da.vidbuchanan.co.uk/blog/exploiting-acr…palypse.html

A modo de resumen simplificando e intentando que sea sencillo de entender:

El problema es un bug o un cambio la API de ficheros de Android. Este bug causa que al guardar la versión recortada de la imagen reabre el mismo fichero en modo escritura sin borrado del contenido original (lo que se llama truncado y lo normal en POSIX y como era en Android hasta 10 es que la apertura de escritura sea con truncado por defecto), con lo cual la nueva imagen es más pequeña y como no hubo truncado se mantuvo el resto de bytes del fichero.

Un ejemplo visual, supongamos que tenemos un fichero llamado img.png con contenido: X0 X1 X2 X3 X4 X5 X6 X7 X8 X9

Y ahora lo sobreescribimos para que contenga Y0 Y1 Y2 abriéndolo como escritura y escribiendo el nuevo contenido: open('img.png', 'w').write('Y0 Y1 Y2')

Ahora lo que esperarías es que img.png contenga Y0 Y1 Y2 sin embargo debido al bug en la API de Android lo que tiene img.png es Y0 Y1 Y2 X3 X4 X5 X6 X7 X8 X9

Las cabeceras de PNG y el ZLIB subyacente así como la primera parte de la imagen original están rotas ya que los primeros bytes están sobreescritos por la nueva imagen recortada (en el ejemplo X0 X1 X2 se han perdido), sin embargo extrayendo los bytes restantes del fichero original (en el ejemplo X3 X4 X5 X6 X7 X8 X9) y con conocimiento del formato consiguen ir extrayendo los bloques PNG y arreglar las cabeceras para recuperar parcialmente el fichero original.

Las recuperaciones siempre se ve que la parte superior de la imagen está en negro o de colorines sin sentido y esto es los bytes que han sido sobreescritos por la versión recortada. Por lo tanto cuanto más cortes (cuanto más pequeña sea la imagen resultante de tu corte) más información de la original es recuperable.

🗨️ 3
lhacc
1

Muy buena explicación.

Me gustaría reincidir en lo que dije más arriba. Si alguna vez tenéis que montar una app, una web, etc. nunca transmitáis contenido subido por un usuario a otro usuario sin haberlo recodificado. Puede contener datos innecesarios (como esta basurilla al final del archivo, o metadatos exif, o perfiles de color, o…), exploits, etc.

Bramante

Ya va enseñando la patita y no pinta bien.

Gran explicación.

Josh

Da gusto leer comentarios así. Ya lo he entendido ejej

Jav9i

Esperemos que esto luego no salte a otras marcas.

Desde el total desconocimiento, no es un poco chapuza la manera en la que se recortan las imágenes? Digo, guardar la imagen como una nueva ase me hace más lógico.

🗨️ 5
skgsergio
1

Sobreescribir el fichero es una operación super común en muchos sitios, no tiene nada de raro. Abres fichero, editas y guardas sobre el mismo fichero. ¿No haces eso constantemente en Word, Excel, Photoshop, …?

El problema es un cambio a nivel de API del sistema operativo que ha cambiado el funcionamiento usual (tradicional en POSIX, y no se si en Windows) de que si abres un fichero para solo escritura (lo que hacen los softwares al dar a salvar/guardar) primero se vacía el fichero (truncado) y luego se escribe por el funcionamiento de si me abres como solo escritura me meto en modo escritura sin ese vaciado (sin ese truncado).

No es una chapuza de como se recortan, es una cagada de Google y Android.

¿A otras marcas les afecta? Puede afectar a multitud de softwares a partir de Android 10 si no indican el flag especifico de truncado al abrir el fichero para escritura (w , write, vs wt, write and truncate), de hecho en la issue de Android se referencian varios issues con distintos softwares que al escribir de nuevo ficheros mas pequeños se í por quedar bytes colgantes al no haber truncado.

🗨️ 4
Jav9i

Yo si recorto me guarda a un archivo nuevo manteniendo el original, pero si recorto al momento de sacar me guarda solo el recorte, que ni idea si llega a guardar el archivo entero, que es lo mas probable que pase, guardo entero y luego recorto.

🗨️ 1
skgsergio
1

En ese recorte al momento de sacar la captura es donde se produce el problema, primero guarda entero y luego sobreescribe. Si tu herramienta usa PNG y usa de la misma forma que los Pixel la API entonces sería vulnerable.

naveganteperdido
1

lo que hay que mirar es el tamaño del fichero resultante, si editas un fichero de 10MB le quitas buena parte y al guardarlo sigue ocupando 10MB entonces cagada

🗨️ 1
skgsergio

Exacto ya que al no truncar se queda en el mismo tamaño original en vez de con el nuevo tamaño menor.

obmultimedia1

Entonces la imagen no se recorta realmente sino que se esconden esas partes visualmente y en los metadatos sigue existiendo esa informacion.

🗨️ 2
skgsergio
1

No exactamente, no es un modo de funcionamiento intencionado lo que está pasando. Es un bug no es una preservación intencionada en metadatos.

naveganteperdido

no, el archivo sin editar ocupa 10 megas, se edita y se eliminan partes de la imagen y se guarda, el recorte que se quiere guardar ocupa 2 megas, por lo que se sobreescriben los primeros 2 megas del archivo y los otros 8 megas quedan intactos, quedando un archivo de 10 megas

no es que haya un protocolo que conozca la existencia de toda la informacion pero elija mostrar solo una parte, sino que hay un archivo que contiene mas informacion de la que sus metadatos informan debido a un error de quien programo la herramienta, y esta informacion extra que los metadatos desconocen se puede recuperar

Ketekojo

En Samsung NO SE SI PASA, pero si he notado esto de guardar el recorte de la imagen… más adelante PUEDES VOLVER AL ORIGINAL… ergo… la imagen ORIGINAL sigue ahí guardada. Yo, en esto casos de guardar recortes, siempre elijo GUARDAR COMO COPIA y me evito estos problemas.

🗨️ 2
skgsergio

Si, pero en ese caso es diferente, guardan de forma transparente la version original y editada, eso por ejemplo lo hace Google Photos. Pero al compartir no se envía la original.

naveganteperdido

en el caso de este bug no puedes volver a la imagen original, puedes volver a algo muy parecido ( dependiendo de como de grande fuera el recorte )

skgsergio

Parece que en Windows tenemos exactamente la misma vulnerabilidad con la utilidad de recorte de capturas… Un código completamente diferente, un OS completamente diferente y misma vulnerabilidad, no hacer truncate.

twitter.com/David3141593/status/1638222624084951040

🗨️ 1