La respuesta corta es que sí, una imagen puede contener malware y eso puede comprometer tu dispositivo.
Esto puede parecer misterioso: «Sólo estoy mirando valores de color, ¿cómo puede ser eso malware? No estoy ejecutando nada…». La razón es que la mayoría de los formatos de imagen modernos están fuertemente interpretados – una pieza de código que pretende mostrar la imagen leerá a través del archivo y procesará lo que encuentra allí de varias maneras. En algunos casos esto es simplemente descompresión, pero en otros casos hay formas de incrustar instrucciones más sofisticadas en los archivos de tipo imagen.
Cada vez que un intérprete intenta leer un conjunto de instrucciones, está ejecutando efectivamente algo. Cada vez que se ejecuta algo desde una fuente que no es de confianza, existe un riesgo de malware. Este tipo de exploits se remonta a los Metafiles de Windows de hace años, pero hemos visto exploits similares durante mucho tiempo sin que haya un final a la vista.
Otra técnica relacionada implica las clásicas técnicas de desbordamiento de búfer: decirle al intérprete que la imagen contiene X bytes de datos, pero luego tener realmente la imagen con Y bytes de datos. Si el intérprete no tiene cuidado, los Y bytes de datos podrían desbordar el búfer que el intérprete creó para ello y potencialmente causar la ejecución de código malicioso. Un exploit de este tipo apareció recientemente, el 14 de febrero, que aprovecha SetDIBitsToDevice para provocar un desbordamiento. Pero ha habido fallas similares en las bibliotecas de medios de Android – Stagefright para nombrar un ejemplo famoso.
Así que no es tanto la imagen que es una preocupación, es el intérprete que está leyendo el archivo. Estos tienen que ser casi perfectos (lo cual es realmente muy difícil) para evitar todo tipo de ataques. Así que parchea, parchea, parchea y ten cuidado con lo que pinchas.