Acropalypse : récupérer des données après le chunk IEND d'un PNG
Quand une application recadre une capture d’écran et sauvegarde le résultat par-dessus le fichier original, le nouveau fichier devrait avoir exactement la taille du nouveau contenu. Si l’application écrit sans tronquer le fichier, les octets de l’image originale restent présents après la fin logique du PNG. exiftool révèle cette anomalie en signalant des données après le chunk IEND.
Le format PNG et le chunk IEND
Section intitulée « Le format PNG et le chunk IEND »Un fichier PNG est structuré en blocs appelés chunks. Chaque chunk porte un type sur 4 octets, une longueur, des données, et un CRC. La séquence est fixe et se termine toujours par le chunk IEND :
PNG Signature (8 octets)IHDR chunk — dimensions, profondeur de couleur, mode de compression...IDAT chunks — données image compressées (DEFLATE)...IEND chunk — marqueur de fin, toujours vide (longueur = 0)Tout ce qui se trouve après IEND est ignoré par les décodeurs PNG. Un fichier valide ne devrait rien contenir après ce marqueur. Sa présence indique que le fichier a été écrasé sans être tronqué.
La vulnérabilité
Section intitulée « La vulnérabilité »CVE-2023-21036 — Google Pixel Markup
Section intitulée « CVE-2023-21036 — Google Pixel Markup »Découverte en mars 2023 par David Buchanan et Simon Aarons, la vulnérabilité touche l’outil d’annotation de captures d’écran des smartphones Pixel (« Markup »). Lorsqu’une capture est recadrée et sauvegardée, l’application appelle open() avec les flags O_WRONLY | O_CREAT sans O_TRUNC. Le nouveau contenu est écrit depuis le début du fichier, mais la taille du fichier sur le système n’est pas réduite. Les octets de l’image originale persistent au-delà du nouveau IEND.
CVE-2023-28303 — Windows Snipping Tool et Snip & Sketch
Section intitulée « CVE-2023-28303 — Windows Snipping Tool et Snip & Sketch »Le même comportement affecte le Snipping Tool de Windows 11 et Windows 10. Quand une capture est recadrée depuis l’interface de l’outil et sauvegardée par-dessus le fichier original, le fichier résultant contient les données de l’image recadrée suivies des données brutes de l’image d’origine.
Microsoft a publié un correctif le 14 mars 2023 (KB5023706 pour Windows 11 22H2).
Ce qui rend la récupération possible
Section intitulée « Ce qui rend la récupération possible »Les données image dans un PNG sont compressées avec DEFLATE. Les blocs DEFLATE ont une structure connue : ils commencent par des bits de contrôle identifiables. L’outil de récupération localise le début du flux DEFLATE dans les octets résiduels et tente de le décompresser pour reconstruire l’image originale.
La quantité de données récupérables dépend de la taille du recadrage. Si l’image recadrée est beaucoup plus petite que l’originale, la majorité du contenu d’origine est préservée dans le fichier.
Détecter l’anomalie avec exiftool
Section intitulée « Détecter l’anomalie avec exiftool »exiftool Capture.PNGSi des données persistent après IEND, exiftool le signale explicitement :
Warning : [minor] Trailer data after PNG IEND chunkFile Size : 1.2 MBLa taille affichée dépasse ce que l’image visible devrait occuper. C’est le premier indicateur.
Pour quantifier le surplus :
# Taille totale du fichierls -lh Capture.PNG
# Offset du chunk IENDexiftool -v Capture.PNG | grep IENDRécupérer l’image avec Acropalypse-Multi-Tool
Section intitulée « Récupérer l’image avec Acropalypse-Multi-Tool »L’outil Acropalypse-Multi-Tool propose une interface graphique qui prend en charge plusieurs applications sources (Pixel Markup, Windows Snipping Tool, etc.) et tente la reconstruction automatique.
Installation
Section intitulée « Installation »git clone https://github.com/frankthetank-music/Acropalypse-Multi-Toolcd Acropalypse-Multi-Tool
python3 -m venv venvsource venv/bin/activate
pip install -r requirements.txtSi pip install -r requirements.txt échoue (dépendances incompatibles selon la version de Python), installer les dépendances manuellement :
pip install "Pillow>=10.0.0"pip install sv_ttkLancement
Section intitulée « Lancement »python gui.pyL’interface demande :
- Le fichier PNG à analyser
- Le type d’appareil ou d’application source (Pixel 3, Pixel 7, Windows, etc.). Ce paramètre conditionne les dimensions de l’image originale que l’outil tente de reconstituer
- Les dimensions de l’écran d’origine si elles sont connues
L’outil tente de localiser le flux DEFLATE résiduel, de le décompresser, et de produire une image reconstruite. Le résultat est une image partielle ou complète de ce que contenait le fichier avant le recadrage.
Ce qu’on peut récupérer
Section intitulée « Ce qu’on peut récupérer »La vulnérabilité est particulièrement intéressante sur des captures partagées publiquement après recadrage, notamment sur des plateformes comme Discord ou Twitter (qui conservent les métadonnées et les octets du fichier original).
Les données récupérables peuvent contenir :
- Le contenu masqué par le recadrage : une URL, un nom d’utilisateur, un token, une adresse
- Des informations système visibles dans la barre des tâches ou les notifications au moment de la capture
- Des données de formulaires présentes dans la capture originale avant que la zone sensible soit retirée
Identifier les fichiers potentiellement affectés
Section intitulée « Identifier les fichiers potentiellement affectés »Pour chercher des PNG présentant l’anomalie dans un répertoire :
exiftool -r -Warning ./captures/ 2>/dev/null | grep -B2 "Trailer data after PNG IEND"L’option -r traite les sous-dossiers récursivement.
À retenir
Section intitulée « À retenir »Recadrer une capture d’écran avec un outil affecté par Acropalypse ne supprime pas les données masquées : elles restent dans le fichier, après le chunk IEND, invisibles pour les visionneuses d’images mais accessibles en lecture binaire. La présence de données après IEND est détectable en une commande avec exiftool. Si le fichier doit être partagé, l’export vers un nouveau fichier (plutôt que l’écrasement de l’original) garantit que seul le contenu visible est transmis.