SCW图标
英雄背景无分隔线
博客

Technique de codage sécurisée : le comportement par défaut des bibliothèques Zip peut entraîner l'exécution de code à distance

皮特-德-克雷默
发表于 2017 年 11 月 13 日
最后更新于 2026年3月8日

Cette semaine, nous allons parler du comportement par défaut des bibliothèques Zip. Si vous êtes développeur d'applications, il est fort probable que vous l'ayez déjà utilisé. La plupart des ressources téléchargées sur Internet sont au format zip, ce qui est logique ; les données compressées sont plus petites, elles se téléchargent donc plus rapidement et consomment moins de bande passante.

Si vous voulez des exemples plus concrets : des textures pour les jeux, des modules linguistiques pour la saisie automatique sur les claviers,... De nombreuses ressources ne sont pas automatiquement intégrées à l'application mais téléchargées ultérieurement.

Mais soyez prudent lorsque vous utilisez cette fonctionnalité, car les noms de fichiers des archives zip peuvent contenir des informations de traversée de chemin. Une fois extrait, cela entraînera la création de fichiers en dehors du répertoire prévu. Cela est souvent fait dans le but de remplacer des fichiers existants.

Zip档案

Supposons que nous ayons une archive zip contenant les deux fichiers suivants :

fichier1
.. /fichier2

Lorsque cette archive est extraite, le fichier1 est extrait là où nous nous attendons à ce qu'il soit, dans le répertoire de décompression. Cependant, le fichier 2 a été écrit un répertoire plus haut que celui où nous avons demandé à la bibliothèque zip d'extraire l'archive.

Attention donc, si votre bibliothèque zip ne prend pas soin de gérer correctement ce cas, elle permettra à un attaquant d'écrire un fichier arbitraire dans le système. Vérifiez toujours si votre bibliothèque est sécurisée, cette règle empirique est valable pour toutes les bibliothèques, mais vous devez en particulier vérifier le comportement par défaut de votre bibliothèque zip pour ces types de fichiers.

Démontrons les conséquences lorsque ce cas n'est pas correctement traité sous Android. Sous Android, la bibliothèque Java Zip (java.util.zip) est utilisée, la bibliothèque permet par défaut de parcourir les chemins comme expliqué ci-dessus.

Le format exécutable Dalvik d'Android (.dex) limite le nombre de classes qu'un seul fichier peut avoir. Les applications qui ont besoin de plus de classes peuvent utiliser la bibliothèque MultiDEX Support qui a été ajoutée depuis le niveau d'API 21 (Android 5.0 Lollipop). Cette bibliothèque enregistre les fichiers .dex secondaires dans le répertoire de données de l'application, ce répertoire est accessible en écriture par l'utilisateur de l'application et ce code sera chargé et exécuté lorsque le fichier .dex sera nécessaire.

Cela signifie qu'un attaquant peut modifier le fichier .dex en le remplaçant à l'aide d'une archive zip malveillante et, pire encore, ce fichier sera chargé et exécuté, ce qui entraînera une vulnérabilité d'exécution de code à distance. Il ne s'agit pas simplement d'un exemple théorique, mais cela a été démontré sur l'application My Talking Tom, qui compte plus de 100 millions de téléchargements sur l'App Store. Voici une vidéo de l'exploit qui a été présentée à Black Hat.

谈话的汤姆

Vérifiez toujours le comportement de votre bibliothèque zip afin d'être conscient de ses insécurités. Si vous ne pouvez pas désactiver la traversée de chemin dans votre bibliothèque zip, assurez-vous de valider le nom de chaque entrée avant de l'extraire. Le nom doit être canonique et le chemin obtenu doit se trouver dans le répertoire dans lequel vous souhaitez extraire l'archive. Pendant que nous y sommes, vous devriez également vérifier la taille totale des archives extraites pour éviter les bombes zippées, mais ce billet sera publié pendant encore une semaine.

Si tu veux relever quelques défis lors de la traversée d'un chemin ou si vous souhaitez tester vos compétences en matière de codage sécurisé, consultez notre plateforme.

À la prochaine, et n'oubliez pas, code sécurisé ou pas de code !

- Nous pouvons injecter un fichier dans un zip dont le nom est préfixé par un nombre arbitraire de «../»
- Si la bibliothèque zip ne prend pas soin de gérer correctement ce cas, cela nous permettrait d'écrire en dehors du répertoire d'extraction prévu
- Si le fichier zip n'est pas fiable, cela donne à l'attaquant une vulnérabilité d'écriture arbitraire

https://www.blackhat.com/docs/ldn-15/materials/london-15-Welton-Abusing-Android-Apps-And-Gaining-Remote-Code-Execution.pdf

显示资源
显示资源

Nous pouvons injecter un fichier dans un zip dont le nom est préfixé par un

您想了解更多吗?

Chercheur en sécurité des applications - Ingénieur R&D - Candidat au doctorat

了解更多

Secure Code Warrior 在整个软件开发周期中保障代码安全,并营造将网络安全置于首位的企业文化。无论您是应用安全负责人、开发人员、信息安全主管,还是其他任何参与安全工作的人员,我们都能协助您的组织降低不安全代码带来的风险。

预约演示
分享到:
领英品牌社交x 标志
作者
皮特-德-克雷默
发表于2017年11月13日

Chercheur en sécurité des applications - Ingénieur R&D - Candidat au doctorat

分享到:
领英品牌社交x 标志

Cette semaine, nous allons parler du comportement par défaut des bibliothèques Zip. Si vous êtes développeur d'applications, il est fort probable que vous l'ayez déjà utilisé. La plupart des ressources téléchargées sur Internet sont au format zip, ce qui est logique ; les données compressées sont plus petites, elles se téléchargent donc plus rapidement et consomment moins de bande passante.

Si vous voulez des exemples plus concrets : des textures pour les jeux, des modules linguistiques pour la saisie automatique sur les claviers,... De nombreuses ressources ne sont pas automatiquement intégrées à l'application mais téléchargées ultérieurement.

Mais soyez prudent lorsque vous utilisez cette fonctionnalité, car les noms de fichiers des archives zip peuvent contenir des informations de traversée de chemin. Une fois extrait, cela entraînera la création de fichiers en dehors du répertoire prévu. Cela est souvent fait dans le but de remplacer des fichiers existants.

Zip档案

Supposons que nous ayons une archive zip contenant les deux fichiers suivants :

fichier1
.. /fichier2

Lorsque cette archive est extraite, le fichier1 est extrait là où nous nous attendons à ce qu'il soit, dans le répertoire de décompression. Cependant, le fichier 2 a été écrit un répertoire plus haut que celui où nous avons demandé à la bibliothèque zip d'extraire l'archive.

Attention donc, si votre bibliothèque zip ne prend pas soin de gérer correctement ce cas, elle permettra à un attaquant d'écrire un fichier arbitraire dans le système. Vérifiez toujours si votre bibliothèque est sécurisée, cette règle empirique est valable pour toutes les bibliothèques, mais vous devez en particulier vérifier le comportement par défaut de votre bibliothèque zip pour ces types de fichiers.

Démontrons les conséquences lorsque ce cas n'est pas correctement traité sous Android. Sous Android, la bibliothèque Java Zip (java.util.zip) est utilisée, la bibliothèque permet par défaut de parcourir les chemins comme expliqué ci-dessus.

Le format exécutable Dalvik d'Android (.dex) limite le nombre de classes qu'un seul fichier peut avoir. Les applications qui ont besoin de plus de classes peuvent utiliser la bibliothèque MultiDEX Support qui a été ajoutée depuis le niveau d'API 21 (Android 5.0 Lollipop). Cette bibliothèque enregistre les fichiers .dex secondaires dans le répertoire de données de l'application, ce répertoire est accessible en écriture par l'utilisateur de l'application et ce code sera chargé et exécuté lorsque le fichier .dex sera nécessaire.

Cela signifie qu'un attaquant peut modifier le fichier .dex en le remplaçant à l'aide d'une archive zip malveillante et, pire encore, ce fichier sera chargé et exécuté, ce qui entraînera une vulnérabilité d'exécution de code à distance. Il ne s'agit pas simplement d'un exemple théorique, mais cela a été démontré sur l'application My Talking Tom, qui compte plus de 100 millions de téléchargements sur l'App Store. Voici une vidéo de l'exploit qui a été présentée à Black Hat.

谈话的汤姆

Vérifiez toujours le comportement de votre bibliothèque zip afin d'être conscient de ses insécurités. Si vous ne pouvez pas désactiver la traversée de chemin dans votre bibliothèque zip, assurez-vous de valider le nom de chaque entrée avant de l'extraire. Le nom doit être canonique et le chemin obtenu doit se trouver dans le répertoire dans lequel vous souhaitez extraire l'archive. Pendant que nous y sommes, vous devriez également vérifier la taille totale des archives extraites pour éviter les bombes zippées, mais ce billet sera publié pendant encore une semaine.

Si tu veux relever quelques défis lors de la traversée d'un chemin ou si vous souhaitez tester vos compétences en matière de codage sécurisé, consultez notre plateforme.

À la prochaine, et n'oubliez pas, code sécurisé ou pas de code !

- Nous pouvons injecter un fichier dans un zip dont le nom est préfixé par un nombre arbitraire de «../»
- Si la bibliothèque zip ne prend pas soin de gérer correctement ce cas, cela nous permettrait d'écrire en dehors du répertoire d'extraction prévu
- Si le fichier zip n'est pas fiable, cela donne à l'attaquant une vulnérabilité d'écriture arbitraire

https://www.blackhat.com/docs/ldn-15/materials/london-15-Welton-Abusing-Android-Apps-And-Gaining-Remote-Code-Execution.pdf

显示资源
显示资源

请填写以下表格以下载报告

我们希望获得您的授权,以便向您发送有关我们产品和/或安全编码相关主题的信息。我们将始终以最高标准谨慎处理您的个人数据,绝不会将其出售给其他企业用于营销目的。

提交
scw 成功图标
SCW 错误图标
要提交表单,请启用「Analytics」Cookie。完成操作后,请随时将其重新禁用。

Cette semaine, nous allons parler du comportement par défaut des bibliothèques Zip. Si vous êtes développeur d'applications, il est fort probable que vous l'ayez déjà utilisé. La plupart des ressources téléchargées sur Internet sont au format zip, ce qui est logique ; les données compressées sont plus petites, elles se téléchargent donc plus rapidement et consomment moins de bande passante.

Si vous voulez des exemples plus concrets : des textures pour les jeux, des modules linguistiques pour la saisie automatique sur les claviers,... De nombreuses ressources ne sont pas automatiquement intégrées à l'application mais téléchargées ultérieurement.

Mais soyez prudent lorsque vous utilisez cette fonctionnalité, car les noms de fichiers des archives zip peuvent contenir des informations de traversée de chemin. Une fois extrait, cela entraînera la création de fichiers en dehors du répertoire prévu. Cela est souvent fait dans le but de remplacer des fichiers existants.

Zip档案

Supposons que nous ayons une archive zip contenant les deux fichiers suivants :

fichier1
.. /fichier2

Lorsque cette archive est extraite, le fichier1 est extrait là où nous nous attendons à ce qu'il soit, dans le répertoire de décompression. Cependant, le fichier 2 a été écrit un répertoire plus haut que celui où nous avons demandé à la bibliothèque zip d'extraire l'archive.

Attention donc, si votre bibliothèque zip ne prend pas soin de gérer correctement ce cas, elle permettra à un attaquant d'écrire un fichier arbitraire dans le système. Vérifiez toujours si votre bibliothèque est sécurisée, cette règle empirique est valable pour toutes les bibliothèques, mais vous devez en particulier vérifier le comportement par défaut de votre bibliothèque zip pour ces types de fichiers.

Démontrons les conséquences lorsque ce cas n'est pas correctement traité sous Android. Sous Android, la bibliothèque Java Zip (java.util.zip) est utilisée, la bibliothèque permet par défaut de parcourir les chemins comme expliqué ci-dessus.

Le format exécutable Dalvik d'Android (.dex) limite le nombre de classes qu'un seul fichier peut avoir. Les applications qui ont besoin de plus de classes peuvent utiliser la bibliothèque MultiDEX Support qui a été ajoutée depuis le niveau d'API 21 (Android 5.0 Lollipop). Cette bibliothèque enregistre les fichiers .dex secondaires dans le répertoire de données de l'application, ce répertoire est accessible en écriture par l'utilisateur de l'application et ce code sera chargé et exécuté lorsque le fichier .dex sera nécessaire.

Cela signifie qu'un attaquant peut modifier le fichier .dex en le remplaçant à l'aide d'une archive zip malveillante et, pire encore, ce fichier sera chargé et exécuté, ce qui entraînera une vulnérabilité d'exécution de code à distance. Il ne s'agit pas simplement d'un exemple théorique, mais cela a été démontré sur l'application My Talking Tom, qui compte plus de 100 millions de téléchargements sur l'App Store. Voici une vidéo de l'exploit qui a été présentée à Black Hat.

谈话的汤姆

Vérifiez toujours le comportement de votre bibliothèque zip afin d'être conscient de ses insécurités. Si vous ne pouvez pas désactiver la traversée de chemin dans votre bibliothèque zip, assurez-vous de valider le nom de chaque entrée avant de l'extraire. Le nom doit être canonique et le chemin obtenu doit se trouver dans le répertoire dans lequel vous souhaitez extraire l'archive. Pendant que nous y sommes, vous devriez également vérifier la taille totale des archives extraites pour éviter les bombes zippées, mais ce billet sera publié pendant encore une semaine.

Si tu veux relever quelques défis lors de la traversée d'un chemin ou si vous souhaitez tester vos compétences en matière de codage sécurisé, consultez notre plateforme.

À la prochaine, et n'oubliez pas, code sécurisé ou pas de code !

- Nous pouvons injecter un fichier dans un zip dont le nom est préfixé par un nombre arbitraire de «../»
- Si la bibliothèque zip ne prend pas soin de gérer correctement ce cas, cela nous permettrait d'écrire en dehors du répertoire d'extraction prévu
- Si le fichier zip n'est pas fiable, cela donne à l'attaquant une vulnérabilité d'écriture arbitraire

https://www.blackhat.com/docs/ldn-15/materials/london-15-Welton-Abusing-Android-Apps-And-Gaining-Remote-Code-Execution.pdf

查看网络研讨会
开始
了解更多

点击下方链接,下载此资源的PDF文件。

Secure Code Warrior 在整个软件开发周期中保障代码安全,并营造将网络安全置于首位的企业文化。无论您是应用安全负责人、开发人员、信息安全主管,还是其他任何参与安全工作的人员,我们都能协助您的组织降低不安全代码带来的风险。

显示报告预约演示
下载PDF文件
显示资源
分享到:
领英品牌社交x 标志
您想了解更多吗?

分享到:
领英品牌社交x 标志
作者
皮特-德-克雷默
发表于2017年11月13日

Chercheur en sécurité des applications - Ingénieur R&D - Candidat au doctorat

分享到:
领英品牌社交x 标志

Cette semaine, nous allons parler du comportement par défaut des bibliothèques Zip. Si vous êtes développeur d'applications, il est fort probable que vous l'ayez déjà utilisé. La plupart des ressources téléchargées sur Internet sont au format zip, ce qui est logique ; les données compressées sont plus petites, elles se téléchargent donc plus rapidement et consomment moins de bande passante.

Si vous voulez des exemples plus concrets : des textures pour les jeux, des modules linguistiques pour la saisie automatique sur les claviers,... De nombreuses ressources ne sont pas automatiquement intégrées à l'application mais téléchargées ultérieurement.

Mais soyez prudent lorsque vous utilisez cette fonctionnalité, car les noms de fichiers des archives zip peuvent contenir des informations de traversée de chemin. Une fois extrait, cela entraînera la création de fichiers en dehors du répertoire prévu. Cela est souvent fait dans le but de remplacer des fichiers existants.

Zip档案

Supposons que nous ayons une archive zip contenant les deux fichiers suivants :

fichier1
.. /fichier2

Lorsque cette archive est extraite, le fichier1 est extrait là où nous nous attendons à ce qu'il soit, dans le répertoire de décompression. Cependant, le fichier 2 a été écrit un répertoire plus haut que celui où nous avons demandé à la bibliothèque zip d'extraire l'archive.

Attention donc, si votre bibliothèque zip ne prend pas soin de gérer correctement ce cas, elle permettra à un attaquant d'écrire un fichier arbitraire dans le système. Vérifiez toujours si votre bibliothèque est sécurisée, cette règle empirique est valable pour toutes les bibliothèques, mais vous devez en particulier vérifier le comportement par défaut de votre bibliothèque zip pour ces types de fichiers.

Démontrons les conséquences lorsque ce cas n'est pas correctement traité sous Android. Sous Android, la bibliothèque Java Zip (java.util.zip) est utilisée, la bibliothèque permet par défaut de parcourir les chemins comme expliqué ci-dessus.

Le format exécutable Dalvik d'Android (.dex) limite le nombre de classes qu'un seul fichier peut avoir. Les applications qui ont besoin de plus de classes peuvent utiliser la bibliothèque MultiDEX Support qui a été ajoutée depuis le niveau d'API 21 (Android 5.0 Lollipop). Cette bibliothèque enregistre les fichiers .dex secondaires dans le répertoire de données de l'application, ce répertoire est accessible en écriture par l'utilisateur de l'application et ce code sera chargé et exécuté lorsque le fichier .dex sera nécessaire.

Cela signifie qu'un attaquant peut modifier le fichier .dex en le remplaçant à l'aide d'une archive zip malveillante et, pire encore, ce fichier sera chargé et exécuté, ce qui entraînera une vulnérabilité d'exécution de code à distance. Il ne s'agit pas simplement d'un exemple théorique, mais cela a été démontré sur l'application My Talking Tom, qui compte plus de 100 millions de téléchargements sur l'App Store. Voici une vidéo de l'exploit qui a été présentée à Black Hat.

谈话的汤姆

Vérifiez toujours le comportement de votre bibliothèque zip afin d'être conscient de ses insécurités. Si vous ne pouvez pas désactiver la traversée de chemin dans votre bibliothèque zip, assurez-vous de valider le nom de chaque entrée avant de l'extraire. Le nom doit être canonique et le chemin obtenu doit se trouver dans le répertoire dans lequel vous souhaitez extraire l'archive. Pendant que nous y sommes, vous devriez également vérifier la taille totale des archives extraites pour éviter les bombes zippées, mais ce billet sera publié pendant encore une semaine.

Si tu veux relever quelques défis lors de la traversée d'un chemin ou si vous souhaitez tester vos compétences en matière de codage sécurisé, consultez notre plateforme.

À la prochaine, et n'oubliez pas, code sécurisé ou pas de code !

- Nous pouvons injecter un fichier dans un zip dont le nom est préfixé par un nombre arbitraire de «../»
- Si la bibliothèque zip ne prend pas soin de gérer correctement ce cas, cela nous permettrait d'écrire en dehors du répertoire d'extraction prévu
- Si le fichier zip n'est pas fiable, cela donne à l'attaquant une vulnérabilité d'écriture arbitraire

https://www.blackhat.com/docs/ldn-15/materials/london-15-Welton-Abusing-Android-Apps-And-Gaining-Remote-Code-Execution.pdf

目录

下载PDF文件
显示资源
您想了解更多吗?

Chercheur en sécurité des applications - Ingénieur R&D - Candidat au doctorat

了解更多

Secure Code Warrior 在整个软件开发周期中保障代码安全,并营造将网络安全置于首位的企业文化。无论您是应用安全负责人、开发人员、信息安全主管,还是其他任何参与安全工作的人员,我们都能协助您的组织降低不安全代码带来的风险。

预约演示下载
分享到:
领英品牌社交x 标志
资源中心

帮助您入门的资源

更多帖子
资源中心

帮助您入门的资源

更多帖子