Logotipo de Zephyrnet

Windows 11 también es vulnerable a la fuga de datos de imágenes "aCropalypse"

Fecha:

Justo ayer, escribimos sobre un error en los teléfonos Google Pixel, aparentemente ahora parcheado, con consecuencias potencialmente peligrosas.

Los buscadores de errores, comprensiblemente emocionados (y preocupados) por lo que habían encontrado, decidieron seguir el principio BWAIN al máximo, convirtiéndolo en un Error con un nombre impresionante: acropalipsis.

En caso de que te lo estés preguntando, la palabra apocalipsis literalmente significa cualquier tipo de revelación, pero generalmente se usa para referirse al texto bíblico conocido como el Apocalipsis de San Juan, que retrata el fin del mundo.

Por lo tanto, su significado metafórico, en palabras del New Oxford American Dictionary, es "un evento que involucra destrucción o daño en una escala asombrosa o catastrófica".

No estamos muy convencidos de que este error merezca un nombre tan apocalíptico, ahhhh, pero estamos dispuestos a admitir que en un mundo donde increíble puede significar "bastante bueno", el nombre es probablemente aceptable, si no del todo intachable.

El “Cultivo” en “aCropalypse”

La parte de "recortar" del nombre proviene de la actividad que es más probable que desencadene el error, denominada CVE-2023-20136 en su encarnación de Google: recortar fotos o capturas de pantalla para eliminar partes sensibles o no deseadas antes de compartirlas.

En términos generales, puede imaginar que si toma, digamos, una captura de pantalla de 1080 × 1980 de la pantalla completa de su teléfono, probablemente no quiera publicar la imagen completa en línea o enviarla completa a un amigo.

La mayoría de la gente preferiría recortar al menos la parte superior de la captura de pantalla, eliminando así detalles como el nombre de su proveedor de telefonía móvil, la fecha y la hora.

Y si estuviera capturando, por ejemplo, un correo electrónico o una publicación en las redes sociales en medio de una lista, seguramente querrá ocultar los correos electrónicos o las publicaciones que aparecen justo encima o justo debajo de la parte de interés.

Incluso después de recortar la imagen, es posible que también desee redactar partes de ella (una palabra de la jerga que significa ocultar o censurar parte de un documento), por ejemplo, colocando un cuadro negro sobre el nombre del remitente, la dirección de correo electrónico, el número de teléfono o lo que sea. .

En cualquier caso, puede suponer que si corta partes del original, oscurece algunos detalles con bloques de color sólido (que se comprimen mucho más fácilmente que los datos de una imagen normal) y guarda la nueva imagen sobre la anterior...

…que la nueva imagen seguramente sería más pequeña, posiblemente mucho más pequeña, que la original.

¡Por todas las cosas que dejaste fuera!

Pero eso no es lo que sucedió en los teléfonos Google Pixel, al menos hasta la actualización de seguridad de Android de marzo de 2023.

Sobrescrito pero no truncado

El nuevo archivo de imagen, más pequeño, se escribiría sobre el inicio del anterior, pero el tamaño del archivo seguiría siendo el mismo, y los datos ahora redundantes y no deseados al final del archivo original permanecerían donde estaban.

Si enviaste ese archivo a otra persona y lo abrieron con una herramienta de visualización o edición de imágenes convencional, su software leería el archivo hasta que llegara a un fragmento de datos que dijera: “Eso es todo; puede detenerse ahora e ignorar cualquier dato final en el archivo”.

En otras palabras, la falla de codificación que provocó que se dejaran datos no deseados al final del archivo generalmente no provocaría ningún error obvio, lo que presumiblemente explica por qué el error no se detectó hasta hace poco.

Pero si el destinatario lo abriera con una herramienta de software más curiosa, como un editor hexadecimal o un editor de imágenes ingeniosamente modificado, desde unos pocos bytes hasta una gran cantidad de la imagen original aún estaría allí, más allá del final oficial. marcador de imagen, esperando ser explorado y potencialmente expuesto.

La mayoría de las capturas de pantalla se guardan como archivos PNG, abreviatura de gráficos de red portátilesy se comprimen internamente usando un algoritmo de compresión conocido comúnmente como desinflar.

Por lo tanto, los datos sobrantes no se ven obviamente como filas y columnas de píxeles, y no se pueden descomprimir directamente con las herramientas de desempaquetado convencionales, que considerarán que el flujo de datos comprimidos está corrupto, lo cual es, y generalmente se negará. para intentar desempaquetarlo en absoluto.

Pero desinflar la compresión generalmente comprime sus datos de entrada como una secuencia de bloques, mirando hacia atrás solo hasta cierto punto en la entrada de texto repetido (32 Kbytes como máximo, para coincidencias de 258 bytes como máximo) para reducir la cantidad de memoria necesaria para ejecutar el algoritmo .

Esas restricciones no se deben sólo al hecho de que el formato se remonta a la Los 1990s, cuando el espacio de la memoria era mucho más preciado que hoy.

Al "resincronizar" el compresor de forma regular, también reduce el riesgo de perder absolutamente todo en un archivo comprimido si se corrompieran solo unos pocos bytes al principio.

La reconstrucción sustancial puede ser posible

Esto significa que los archivos de imágenes almacenados en formato PNG comprimido a menudo se pueden reconstruir sustancialmente, incluso si se sobrescriben o destruyen partes considerables del original.

Y si está hablando de fragmentos de imágenes que se pueden reconstruir a partir de un archivo que se ha recortado o redactado...

… claramente existe la posibilidad de que los datos sobrantes al final, que se suponía que debían cortarse, contengan porciones de imágenes recuperables ¡Revelando las mismas partes que pretendías eliminar permanentemente de la imagen!

Sin duda, podría tener suerte: si la imagen se almacena fila por fila (de modo que los datos de la parte superior de la imagen estén cerca del inicio del archivo y la parte inferior esté al final), y usted recorta la parte superior de la imagen, probablemente terminará con una nueva imagen que consiste en la mitad inferior de la imagen anterior en la parte "oficial" del archivo, y la mitad inferior repetida en los datos sobrantes que se suponía que eran cortado pero no lo estaba.

Pero si recorta la parte inferior de la imagen, el nuevo archivo tendrá la parte superior antigua "oficialmente" recodificada y escrita sobre el inicio, y la mitad inferior recortada de la imagen. dejado atrás exactamente donde estaba antes, en el final no oficial del nuevo archivo, a la espera de ser extraído por un atacante.

Windows 11 también afectado

Bueno, el trato es que este problema de que los archivos no se truncan cuando se reemplazan con una nueva versión también se aplica en Windows 11, donde el Snipping Tool, como la aplicación Google Pixel Markup, te permitirá recortar una imagen sin recortar correctamente el archivo en el que está guardada.

Por ejemplo, aquí hay un archivo PNG que creamos con GIMP y guardamos con un conjunto mínimo de encabezados y sin compresión:

El archivo tiene 320x200 píxeles de datos RGB de 8 bits (tres bytes por píxel), por lo que el archivo tiene una longitud de 320x200x3 bytes (192,000 192,590), más unos pocos cientos de bytes de encabezado y otros metadatos limitados, para un tamaño total de XNUMX XNUMX bytes .

En el volcado hexadecimal ilustrativo a continuación, puede ver que los datos tienen una longitud de 0x20F04E bytes, que es 192,590 en decimal:

Luego lo recortamos tan pequeño como lo permite la herramienta Recortes (48 × 48 píxeles parece ser el mínimo) y lo guardamos sobre sí mismo, ¡pero el archivo "nuevo" terminó con el mismo tamaño que el archivo sin comprimir de 320 × 200!

En el volcado hexadecimal a continuación, la parte resaltada en rosa en la parte superior es la totalidad de lo que se supone que contiene el archivo recortado, con una longitud de 0xBD bytes, o 189 en decimal.

Los nuevos datos concluyen con una IEND bloque de datos, que es donde debería terminar el nuevo archivo, pero puede ver que continúa con los datos sobrantes de antes, y finalmente termina con un duplicado pero ahora redundante IEND bloque que se ha transferido del archivo anterior, junto con casi todos sus datos de imagen:

Cuando usamos el Guardar botón para escribirlo con un nuevo nombre de archivo, el archivo comprimido de 48 × 48 efectivamente salió con solo 189 bytes de largo.

Observe cómo los datos del archivo coinciden con los 189 bytes resaltados en rosa en la imagen anterior:

El error, por lo tanto, es que guardar un archivo sobre un nombre de archivo existente no trunca primero el archivo antiguo y no crea un archivo nuevo con el tamaño esperado.

En pocas palabras, el archivo recortado es parcialmente sobrescrito, en lugar de en realidad reemplazados.

Como se mencionó anteriormente, suponemos que nadie detectó este defecto hasta ahora porque los programas de visualización y edición de imágenes leen hasta el primer IEND etiqueta (puede ver esto en la esquina inferior derecha de la captura de pantalla anterior) e ignore silenciosamente todas las cosas adicionales al final sin informar anomalías o errores.

¿Qué hacer?

  • Si eres usuario de Windows 11. Guarde siempre los archivos recortados creados con la herramienta Recortes con un nuevo nombre de archivo, de modo que no haya contenido original que pueda quedar atrás.
  • Si eres programador. Revise todos los lugares donde cree archivos "nuevos" sobrescribiendo los antiguos para asegurarse de que realmente está truncando los archivos originales cuando los abre para reescribirlos. O solo cree nuevos archivos guardándolos primero en un archivo realmente nuevo (utilice un nombre de archivo único generado de forma segura), luego elimine explícitamente el archivo original y cambie el nombre del nuevo.

Por cierto, probamos Microsoft Paint y, por lo que podemos ver, ese programa creará archivos recortados sin datos sobrantes de antes, ya sea que use Guardar (para reemplazar un archivo existente) o Guardar como (producir uno nuevo).


APRENDA ACERCA DE LOS MODOS DE APERTURA DE ARCHIVOS POR USTED MISMO

Compile este código y ejecútelo.

En Windows, puede usar minimalista-C, nuestra propia compilación seleccionada de los libres Pequeño compilador de C, si no tiene un sistema de desarrollo instalado.

Tiene menos de 500 KBytes de tamaño (!), incluido el código fuente completo, en comparación con los gigabytes de Visual Studio o Clang para Windows.

#incluir #incluir int main(void) { char* az = "ABCDEFGHIJLKMNOPQRSTUVWXYZ"; int fd; // Crear un archivo con AZ // Octal 0666 significa "leer/escribir para todos" // O_CREAT significa crear si es necesario fd = open("blah1.txt",O_WRONLY+O_CREAT,0666); escribir (fd, az, 26); cerrar(fd); // Crear otro archivo con AZ fd = open("blah2.txt",O_WRONLY+O_CREAT,0666); escribir (fd, az, 26); cerrar(fd); // Escribir 10 bytes sin establecer O_TRUNC // Los 16 bytes sobrantes deben permanecer fd = open("blah1.txt",O_WRONLY); escribir(fd,"----------",10); cerrar(fd); // Escribir 10 bytes *con* O_TRUNC establecido // Los datos antiguos sobrantes deben cortarse fd = open("blah2.txt",O_WRONLY+O_TRUNC); escribir(fd,"==========",10); cerrar(fd); devolver 0; }

Tenga en cuenta la diferencia entre abrir un archivo existente para escribir (O_WRONLY) con y sin configurar el O_TRUNC bandera.

Imprime el contenido de blah1.txt y blah2.txt después de ejecutar el programa de prueba:

C:UsersduckCROP> petcc64 -stdinc -stdlib test.c Compilador Tiny C - Copyright (C) 2001-2023 Fabrice Bellard Desmontado por Paul Ducklin para su uso como herramienta de aprendizaje Versión petcc64-0.9.27 [0006] - Genera 64 bits Solo PE -> t1.c -> c:/users/duck/tcc/petccinc/fcntl.h . . . . -> C:/Windows/system32/msvcrt.dll -> C:/Windows/system32/kernel32.dll -------------------------- ----- sección de tamaño de archivo virt 1000 200 2a0 .text 2000 600 1cc .data 3000 800 18 .pdata -------------------------- ----- <- t1.exe (2560 bytes) C:UsersduckCROP> t1.exe C:UsersduckCROP>dir blah*.txt El volumen en la unidad C no tiene etiqueta. El número de serie del volumen es C001-D00D Directorio de C:UsersduckCROP 22/03/2023 07:20 pm 26 blah1.txt 22/03/2023 07:20 pm 10 blah2.txt 2 Archivo(s) 36 bytes C:UsersduckCROP> tipo blah1.txt ----------KLMNOPQRSTUVWXYZ C:UsersduckCROP> escriba blah2.txt ==========
punto_img

Información más reciente

punto_img

Habla con nosotros!

¡Hola! ¿Le puedo ayudar en algo?