Joven hacker sonriendo

Hackeamos su software

cero falsos positivos

Inteligencia experta + Tecnología especializada
DXST - SAST - IAST - SCA - DevSecOps
Caja blanca - Caja gris - Caja negra
Atacando Aplicaciones Web, APIs, Apps Móviles,
Cliente Servidor, Servidores, Redes, Dispositivos IoT
IoT SCI: Sistemas de Control Industrial

Remover Metadatos de Imágenes

Nuestros ethical hackers explican cómo evitar vulnerabilidades de seguridad mediante la programación segura en Java al remover los metadatos de las imágenes. La información sensible puede filtrarse a través de los metadatos presentes en imágenes y fotografías.

Necesidad

Remover metadatos de imágenes en Java.

Contexto

A continuación se describen las circunstancias bajo las cuales la siguiente solución tiene sentido:

  1. Se está desarrollando una aplicación en Java.

  2. La aplicación utiliza imágenes o fotografías.

  3. Se requiere remover metadatos en imágenes.

Solución

Cuando se captura una fotografía o se guarda una imagen ésta normalmente contiene metadatos. Los metadatos proporcionan información adicional sobre la imagen, como fecha de captura (para el caso de una fotografía), tamaño en pixeles, información sobre el dispositivo con el que se tomó (marca, modelo, etc.), última fecha de modificación, ubicación geográfica entre muchos otros datos. Un ejemplo de esto son las cabeceras EXIF (Exchangeable Image Format) presente en los formatos JPG, TIFF, RIFF y WAVE [2]. Esta información es utilizada para permitir el ordenamiento de las imágenes de acuerdo a un criterio específico. Sin embargo, también puede ser utilizada con fines maliciosos por los ciberdelincuentes. Debido a esto, una práctica muy recomendada es eliminar los metadatos antes de compartir imágenes con terceras partes. En este artículo nos enfocaremos en cómo remover los metadatos de las imágenes haciendo uso del lenguaje de programación Java. Para ello debemos seguir los siguientes pasos:

  1. En el caso de Java podremos eliminar los metadatos utilizando la biblioteca ImageIO. Para ello, incluiremos las librerías java.io, java.imageio y java.awt.image para el tratamiento de imágenes. Posteriormente definimos la clase Metadata como se muestra a continuación:

    CleanImg.java
    1
    2
    3
    4
    import java.io.*;
    import javax.imageio.*;
    import java.awt.image.*;
    public class Metadata {
    
  2. Desarrollamos el método main donde llamamos al método removeMetadata y capturamos los errores posibles con una sentencia try - catch:

1
2
3
4
5
6
7
  public static void main(String[] args) {
    try {
      removeMetadata("ski.jpg", "jpg");
    }
    catch (IOException e) {
     System.err.println("I/O Exception");
    }
  1. El método removeMetadata se encarga de leer la imagen pixel por pixel, sin tener en cuenta cualquier otro tipo de dato, por lo que es una función segura al momento de eliminar información extra contenida en la imagen.

  2. Este método recibe dos parámetros, el primero es la ruta donde se encuentra alojada la imagen, y el segundo el tipo de imagen.

    1
    2
      public static void removeMetadata(String imagePath, String imageType)
        throws IOException {
    
  3. Se lee la imagen con el método read de la clase image y se vuelve a guardar. Esto permite sobrescribir la imagen, eliminando todos los metadatos:

    1
    2
    3
    4
        BufferedImage image = ImageIO.read(new File(imagePath));
        ImageIO.write(image, imageType, new File(imagePath));
      }
    }
    



Haz un comentario

Estado de los servicios - Términos de Uso