CVE-2025-43300 : Corruption mémoire dans le traitement d'images DNG sur iOS/macOS
Présentation
CVE-2025-43300 est une vulnérabilité critique de corruption mémoire dans le framework de traitement d'images d'Apple qui affecte iOS 18.6.1 et les systèmes macOS. La vulnérabilité réside dans le code de décompression JPEG Lossless de RawCamera.bundle, déclenchée par des incohérences entre les métadonnées TIFF et les paramètres du flux JPEG dans les fichiers DNG.
Détails de la vulnérabilité
Cause racine
La vulnérabilité provient d'une incohérence métadonnées/flux dans les fichiers DNG (Digital Negative) :
- Les métadonnées SamplesPerPixel dans les en‑têtes TIFF indiquent les composantes de couleur attendues
- Le nombre de composantes SOF3 dans les flux JPEG Lossless spécifie les composantes réelles des données
- Lorsque ces valeurs diffèrent, l'allocation et le traitement deviennent désalignés
Flux de corruption mémoire
1. L'analyseur lit SamplesPerPixel depuis les métadonnées TIFF (par ex. 2 composantes)
2. Le système alloue un tampon : largeur × hauteur × 2 composantes
3. Le décodeur JPEG lit le nombre de composantes SOF3 (par ex. 1 composante)
4. Le décodeur écrit des données sur la base d'hypothèses incohérentes
5. Un débordement de tampon se produit lorsque plus de données sont écrites que ce qui a été alloué
Vecteur d'attaque
- Vulnérabilité zero‑click : aucune interaction utilisateur requise
- Traitement automatique : déclenchée par la visualisation, l'importation ou la réception de fichiers DNG
- Impact multiplateforme : affecte à la fois les systèmes iOS et macOS
- Corruption mémoire : peut entraîner des plantages d'application ou une exécution de code potentielle
Présentation des outils
Ce dépôt contient deux outils Python pour analyser et reproduire CVE-2025-43300 :
1. Analyseur de vulnérabilité DNG (dng_vulnerability_analyzer.py)
Objectif : Analyse la structure d'un fichier DNG pour identifier les conditions de vulnérabilité
Fonctionnalités clés :
- Analyse la structure du fichier TIFF/DNG, y compris les IFD et SubIFD
- Localise les balises de métadonnées SamplesPerPixel
- Identifie les marqueurs SOF3 JPEG Lossless et les nombres de composantes
- Détecte les incohérences métadonnées/flux
- Signale les décalages exacts en octets pour la modification
Utilisation :
python3 dng_vulnerability_analyzer.py <fichier.dng>
Sortie :
- Analyse de la structure du fichier
- Emplacements et valeurs des balises de métadonnées
- Informations sur les composantes du flux JPEG
- Évaluation de la vulnérabilité
- Décalages spécifiques pour la création d'une POC
2. Modificateur hexadécimal sécurisé (hex_modifier.py)
Objectif : Crée des fichiers de preuve de concept en modifiant en toute sécurité des octets spécifiques
Fonctionnalités clés :
- Vérifie les valeurs d'octets attendues avant modification
- Crée des hachages SHA256 pour le suivi des fichiers
- Génère des rapports de différences binaires
- Implémente des contrôles de sécurité pour éviter la corruption accidentelle
- Prend en charge la création manuelle et automatisée de POC
Utilisation :
# Créer une POC en utilisant des décalages vulnérables connus
python3 hex_modifier.py create-poc <entree.dng>
# Modification manuelle d'octets
python3 hex_modifier.py modify <entree.dng> <decalage> <ancien_octet> <nouvel_octet> <sortie.dng>
# Générer un rapport de différences
python3 hex_modifier.py diff <original.dng> <modifie.dng>
Processus de création d'une POC
Étape 1 : Analyser le fichier cible
python3 dng_vulnerability_analyzer.py IMGP0847.DNG
Cela identifie :
- L'emplacement des métadonnées SamplesPerPixel
- Les emplacements du nombre de composantes SOF3 JPEG
- Les valeurs actuelles et les modifications suggérées
Étape 2 : Créer un échantillon vulnérable
La POC nécessite deux modifications d'octets spécifiques :
- Augmenter les métadonnées SamplesPerPixel (généralement de 1 à 2)
- Diminuer le nombre de composantes SOF3 (généralement de 2 à 1)
python3 hex_modifier.py create-poc IMGP0847.DNG
Étape 3 : Vérifier la POC
python3 dng_vulnerability_analyzer.py vuln_poc_IMGP0847.dng
Confirme que l'incohérence existe et que la vulnérabilité est déclenchée.
Pourquoi la POC fonctionne
Mécanisme technique
-
Phase d'allocation :
- L'analyseur d'image lit SamplesPerPixel = 2
- Alloue un tampon pour 2 composantes de données de pixels
- Taille du tampon = largeur_image × hauteur_image × 2
-
Phase de traitement :
- Le décodeur JPEG Lossless rencontre SOF3 avec 1 composante
- La logique d'analyse devient confuse quant à la taille réelle par rapport à la taille attendue des données
- Tente d'écrire des données sur la base d'hypothèses incohérentes
-
Corruption mémoire :
- Plus de données écrites dans le tampon que ce qui a été alloué
- Le débordement de tampon corrompt les régions mémoire adjacentes
- Entraîne un plantage de l'application ou une exécution de code potentielle
Les fichiers DNG utilisent le format conteneur TIFF avec des flux JPEG Lossless intégrés :
- Les métadonnées TIFF décrivent les propriétés de l'image et les informations de couleur
- Les flux JPEG contiennent les données de pixels compressées
- Une relation de confiance existe entre les métadonnées et le contenu du flux
- Une lacune de validation permet à des valeurs incohérentes d'atteindre le code de traitement
Évaluation de l'impact
Gravité : Critique
- Score CVSS : Élevé (zero‑click, corruption mémoire, large impact)
- Systèmes affectés : iOS 18.6.1, systèmes macOS avec traitement d'images similaire
- Vecteur d'attaque : Transfert de fichier réseau/local
- Interaction utilisateur : Aucune requise
- Périmètre : Tous les appareils traitant des fichiers DNG
Scénarios réels
- Pièces jointes d'email avec fichiers DNG
- Transferts AirDrop
- Synchronisation de photos dans le cloud
- Téléchargements web d'échantillons de photographes
- Partage de médias dans les applications de messagerie
Atténuations et correctifs
Réponse du fournisseur
- Corrigé dans iOS 18.6.2 : Apple a implémenté une validation appropriée des métadonnées
- Mises à jour macOS : Correctifs similaires appliqués au traitement d'images de macOS
- Cause racine : Ajout de contrôles de cohérence entre les métadonnées et les paramètres du flux
Atténuations recommandées
- Mettre à jour les systèmes : Installer iOS 18.6.2 ou ultérieur
- Validation des entrées : Vérifier la cohérence des métadonnées dans les analyseurs personnalisés
- Contrôle des limites : Implémenter une validation stricte de la taille des tampons
- Fuzzing : Test régulier des analyseurs de format de fichier
Structure du fichier et détails techniques
Structure TIFF/DNG
En‑tête TIFF → Chaîne IFD → SubIFD → Données d'image
├── Balises de métadonnées (SamplesPerPixel, Compression, etc.)
├── Flux JPEG Lossless (marqueurs SOF3)
└── Données de pixels (compressées)
Emplacements clés de la vulnérabilité
- Balise SamplesPerPixel : Balise TIFF 0x0115 dans les structures IFD
- Marqueurs SOF3 : Début de trame JPEG Lossless (0xFFC3)
- Nombre de composantes : Décalage +9 octets depuis le marqueur SOF3
- Discordance critique : Lorsque la valeur de la balise ≠ nombre de composantes
Directives de test
Environnement de test sûr
- Utiliser des systèmes isolés : Machines virtuelles ou dispositifs de test dédiés
- Créer des instantanés : Avant de tester les fichiers POC
- Surveiller les plantages : Vérifier les logs système et les rapports de plantage
- Isolement réseau : Empêcher le partage involontaire de fichiers
Comportement attendu
- Systèmes vulnérables : Plantage de l'application, erreurs de corruption mémoire
- Systèmes corrigés : Gestion d'erreur élégante ou traitement correct
- Indicateurs dans les logs : Violations d'accès mémoire, fautes de segmentation
Références techniques
- Spécification TIFF 6.0 : Structure des balises et format IFD
- Spécification DNG : Format Adobe Digital Negative
- Norme JPEG : Compression sans perte (ITU-T T.87)
Recherche en sécurité
- Techniques de corruption mémoire : Fondamentaux du débordement de tampon
- Fuzzing de format de fichier : Découverte automatisée de vulnérabilités
- Sécurité des analyseurs : Bonnes pratiques de validation des entrées
Avertissement : Cette recherche est fournie à des fins éducatives et de défense uniquement. Les utilisateurs sont responsables du respect des lois applicables et des directives éthiques.
NOTE
Le crash prend environ 1 à 3 minutes pour être déclenché. Amusez‑vous bien.
Et pour la POC, vous pouvez exécuter open vuln_file.dng pour ouvrir le fichier ou simplement le prévisualiser et il sera exécuté.