Libera tu mente y alcanza tus metas
Vulnerabilidades críticas en bibliotecas ZIP populares en Swift y Flutter
Vulnerabilidades críticas en bibliotecas ZIP populares en Swift y Flutter

Vulnerabilidades críticas en bibliotecas ZIP populares en Swift y Flutter

Investigaciones han revelado graves vulnerabilidades descubiertas en paquetes ZIP que son ampliamente utilizados en Dart (Flutter) y Swift, lo que plantea graves riesgos de seguridad para miles de desarrolladores y aplicaciones.

Los paquetes ZIP son archivos comprimidos que contienen múltiples archivos y directorios, lo que permite a los desarrolladores agrupar convenientemente recursos, bibliotecas y otros componentes necesarios para la funcionalidad de la aplicación. Si bien los paquetes ZIP ofrecen eficiencia y facilidad de uso, también pueden ser una fuente de posibles vulnerabilidades de seguridad que los actores malintencionados pueden aprovechar.

Las vulnerabilidades encontradas son las siguientes:

  • ZIP Path Traversal: también conocido como Zip Slip, es una vulnerabilidad de seguridad que ocurre cuando la aplicación no puede validar los nombres de los archivos de las entradas ZIP durante la extracción. Permite a un atacante extraer archivos en ubicaciones arbitrarias fuera del directorio de extracción, lo que ayuda a sobrescribir datos confidenciales del usuario y, en algunos casos, puede provocar la ejecución de código si un atacante sobrescribe el archivo objeto compartido de una aplicación.
  • Suplantación de nombre de archivo ZIP: en el contexto de los archivos ZIP, hay dos estructuras de datos principales relevantes para los nombres de archivos: la entrada del directorio central y el encabezado del archivo local. Si un analizador, por ejemplo, lee el nombre del archivo del encabezado del archivo local pero luego procede a extraerlo en la ruta del directorio central, se puede suplantar un arechivo.
  • ZIP symlink path traversal: el enlace simbólico ZIP es una característica utilizada en muchas utilidades ZIP y permite que esos enlaces simbólicos apunten a archivos fuera del directorio de extracción. Esto puede suponer un riesgo de seguridad y provocar la sobrescritura de datos confidenciales o archivos de objetos compartidos, lo que podría provocar la ejecución de código.
  • Bomba ZIP: una bomba ZIP es un archivo ZIP de pequeño tamaño que contiene una enorme cantidad de datos comprimidos. Cuando se extrae, se expande hasta convertirse en un archivo enorme o consume recursos excesivos del sistema, lo que puede provocar denegación de servicio (DoS).

Paquetes ZIP a analizar

Archive

Uno de los paquetes de flutter populares para manejar archivos comprimidos es "Archive" de Brendan Duncan. Este paquete implementa formatos de archivo populares de forma nativa en Dart sin tener que pasar por los paquetes nativos específicos de la plataforma como java.util.zip para Android o ZIPFoundation para iOS.

Lenguaje: Dart (Flutter)

Proyecto: https://pub.dev/packages/archive

Flutter_archive

Flutter_Archive es otro paquete de Flutter para archivos comprimidos que funciona exclusivamente con archivos ZIP. Este paquete se basa en el paquete ZIP nativo de Java, java.util.zip, aprovechando MethodChannel de Flutter.

Lenguaje: Dart (Flutter)

Proyecto: https://pub.dev/packages/flutter_archive

ZIPFoundation

ZIPFoundation es una biblioteca para crear, leer y modificar archivos ZIP. Está escrito en Swift y se basa en libcompression de Apple para lograr un alto rendimiento y eficiencia energética.

Lenguaje: Swift

Proyecto: https://github.com/weichsel/ZIPFoundation

ZIP

ZIP es un framework de Swift para comprimir y descomprimir archivos. Sencillo y rápido de usar. Construido sobre minizip.

Lenguaje: Swift

Proyecto: https://github.com/marmelroy/Zip

ZIPArchive (SSZIPArchive)

ZipArchive es una clase sencilla para comprimir y descomprimir archivos en iOS, macOS y tvOS.

Lenguaje: Swift

Proyecto: https://github.com/ZipArchive/ZipArchive

Fuente: Ostorlab