Aunque nunca hayas utilizado una, probablemente sepas lo que es (o era) una videograbadora. Era la forma en que grabábamos y veíamos vídeos en casa en la época en que el vídeo digital almacenado en discos duros era un privilegio absurdamente caro de las grandes empresas, normalmente las cadenas de televisión.
Los casetes eran pequeños recipientes de plástico que contenían dos carretes y una larga tira de cinta de grabación magnética (algo así como un disco duro de la vieja escuela), pero con la superficie magnética dispuesta en una larga tira de de cinta de plástico, de 12,7 mm de ancho y unos 100 m de largo por cada hora de grabación.
Datos sobrantes revelados al final
Pocos programas de TV tenían exactamente la duración de una cinta, así que, cuando grababas un programa, normalmente te quedaba al menos un poco de cinta al final del carrete, que estaría en blanco.
Cuando volvías a ver, por ejemplo, un programa de 45 minutos grabado en una cinta E-60, te quedaban 15 minutos de vídeo borroso (lo que se conoce como “estática”) si dejabas la cinta en marcha cuando terminaba el programa, hasta que el vídeo detectaba el final de la bobina y rebobinaba el casete para la próxima vez.
A menos, claro, que tú (o el amigo que te había prestado la cinta) la hubieras utilizado antes y hubieras grabado algo de más de 45 minutos, en cuyo caso acabarías viendo la última parte de lo que hubiera quedado de la vez anterior, y cuando ésta terminara, lo que se hubiera grabado la vez anterior, o la anterior, y así sucesivamente.
Ya te haces una idea.
El corte nunca era muy limpio, porque la videograbadora solía perder el rastro de la señal de vídeo cuando terminaba la primera grabación, y reproducía un batiburrillo de líneas inclinadas, fotogramas parciales que saltaban por la pantalla, manchas de color borrosas y una mezcla extraña y confusa de diferentes bandas sonoras.
Al menos durante un tiempo.
Sin embargo, lo normal era que el VCR se “realineara” con los datos sobrantes de la grabación anterior, se resincronizara con el antiguo flujo de vídeo y desapareciera el desordenado e ininteligible sinsentido de la pantalla.
Estarías en la cola de un programa de TV desconocido, viendo la grabación de unas vacaciones o algún otro tipo de vídeo casero, la mayor parte del cual (¡pero no todo!) se había perdido al volver a grabarlo.
En realidad, a menos que borraras primero toda la cinta, antes de grabar sobre ella, casi siempre dejarías al final algún contenido previo inesperado, y quizá no deseado.
aCropalypse
Pues bien, un investigador de ciberseguridad del Reino Unido llamado David Buchanan acaba de publicar un artículo sobre un fallo de este tipo en la herramienta de edición de imágenes de los teléfonos Pixel de Google.
Al parecer, el software infractor se conoce como Markup, y te permite tomar fotos o capturas de pantalla que ya están en tu teléfono, y recortarlas o editarlas para eliminar detalles no deseados antes de enviarlas a tus amigos o subirlas a servicios en línea.
Por ejemplo, puede que quieras recortar a alguien de la foto para satisfacer su petición de que no se comparta su cara, o bloquear un nombre de usuario o ID de cuenta en una captura de pantalla de software, u ocultar el número de casa de alguien para no revelar su dirección.
Como puedes imaginar, sobre todo cuando recortas una foto para reducir su tamaño, el archivo de imagen resultante suele acabar siendo más pequeño que el que estás sustituyendo.
Markup, aparentemente, se ocuparía de las imágenes más pequeñas que la anterior escribiendo la nueva imagen sobre la antigua (como tu padre o tu abuelo grabando el partido de fútbol de esta semana sobre el partido en la cinta de VCR de la semana pasada), y luego truncando el archivo de imagen a su nuevo tamaño, más corto.
Los datos antiguos (el final del partido de fútbol de la semana pasada, en nuestra analogía del VCR) permanecerían en el dispositivo de almacenamiento, pero ya no formarían parte del archivo digital que contiene la nueva imagen.
En otras palabras, cuando abrieras el nuevo archivo, no tendrías el problema del VCR de que el contenido sobrante de la imagen estuviera incluido en él, porque el sistema operativo sabía que debía dejar de leer (o copiar) el archivo en el punto correcto.
Por tanto, los datos sobrantes no podrían filtrarse accidentalmente si enviaras el nuevo archivo a otra persona, o lo subieras a un servicio en la nube.
Un atacante normalmente necesitaría acceso físico a tu teléfono, necesitaría saber cómo desbloquearlo y obtener privilegios de root, y ser capaz de hacer una imagen forense de bajo nivel de los datos no utilizados para recuperar cualquier cosa borrada previamente.
Excepto por el error
¿Truncar o no truncar?
Según descubrió Buchanan, la función de programación Java que Markup utilizaba para “abrir el archivo existente en modo truncar” (lo que significa que los datos no utilizados que quedaran después de terminar de reescribirlos se recortarían del final del archivo), se cambió, al parecer hace unos dos años, a “abrir en modo reescribir sin truncar al terminar”.
En otras palabras, si abrieras el archivo antiguo y escribieras un solo byte al principio antes de cerrarlo, el nuevo archivo no tendría un byte y el resto se recortaría, como cabría esperar, sino que sería el archivo antiguo, en su totalidad, con solo el primer byte cambiado.
El resto estaría intacto, ¡nada que ver con lo que se pretendía!
Como descubrió Buchanan, aunque los datos sobrantes de la versión anterior de la imagen estaban incompletos, se dejarían en paz si se abriera el archivo con un visor de imágenes normal (que leería todo lo que necesitara e ignoraría lo que sobraba al final).No obstante, podías extraer los datos sobrantes de la imagen y, a menudo, darles algún sentido, aunque acabaras con un flujo de datos comprimidos que empezaba a medio camino de un bloque comprimido.
Al igual que esas cintas de vídeo, en las que el reproductor de vídeo puede no ser capaz de sincronizarse con la grabación sobrante inmediatamente, un programa de descompresión de archivos PNG especialmente escrito puede no ser capaz de dar sentido a los primeros trozos de los datos sobrantes, pero a menudo puede reconstruir bloques de la imagen anterior que siguieron más tarde.
Como en aquellas cintas de vídeo, en las que la parte sobrante podía no valer gran cosa por sí sola, nunca podías estar seguro de lo que se había dejado atrás, y cualquiera que indagara en tus archivos podía a veces tener suerte con los trozos que conseguía reconstruir.
Eso significa que podrían descubrir fragmentos de imágenes del final de la versión anterior que eran exactamente lo que pretendías eliminar.
Hablando en términos generales, cuanto más hubieras recortado y reducido el archivo original, más datos sobrantes quedarían, y mayor sería la probabilidad de que parte de ellos fueran justo lo que no querías compartir.
¿Qué hacer?
- Parchear ya. Al parecer, Google ha parcheado el programa Markup en la actualización de seguridad de Android de marzo de 2023. Puedes rastrear esta corrección de errores con el identificador CVE-2023-20136.
- Revisa las imágenes que ya has compartido. No puedes corregir las imágenes que ya has recortado y compartido. Pero puedes eliminarlas o sustituirlas por imágenes reeditadas creadas con la versión parcheada de Markup.
- Considera la posibilidad de editar imágenes críticas para la seguridad de forma conservadora en tu portátil. Los formatos de archivo como PNG también pueden incluir comentarios y los llamados metadatos (por ejemplo, información sobre la ubicación o detalles de la cámara) que nunca tuviste intención de compartir, por no conservar inadvertidamente los píxeles sobrantes de antes.
Las herramientas de edición de imágenes de línea de comandos, como ImageMagick o GraphicsMagick, y las de código abierto, como GNU Image Manipulation Program, te permiten convertir las imágenes editadas en formatos en los que controlas el contenido con precisión.
Por ejemplo, los archivos RGB sin procesar solo incluyen los valores de color de cada píxel de la imagen, sin cabeceras, metadatos, campos de comentarios u otra información o píxeles extraños.
Los archivos RGB pueden ser enormes, porque no hay compresión para ahorrar espacio, pero eso significa que no pierdes calidad de imagen en la conversión, aunque sí pierdes todos y cada uno de los datos que no forman parte directamente de la imagen que te interesa.
Así pues, transcodificar una imagen a formato RGB y luego volverla a pasar, digamos, a PNG, es una forma de asegurarte de que creas un archivo totalmente nuevo que no “sabe” nada de dónde ni cómo se creó la imagen original, ni de qué datos ahora eliminados podría haber contenido anteriormente.