3 points par GN⁺ 2025-12-24 | 1 commentaires | Partager sur WhatsApp
  • Bibliothèque Python qui détecte automatiquement les masquages inadéquats dans les documents PDF, en identifiant les cas où le texte est simplement recouvert par un rectangle noir
  • Développée par Free Law Project pour résoudre un problème récurrent découvert lors de la collecte de millions de PDF
  • Peut être exécutée en ligne de commande ou depuis du code Python, avec des résultats renvoyés sous forme de JSON ou d’objets Python
  • Utilise en interne PyMuPDF pour analyser les rectangles, le texte et les couleurs d’un PDF afin de déterminer si le masquage cache réellement le texte
  • Outil de vérification automatique à forte valeur pour empêcher l’exposition de données personnelles dans des documents juridiques ou des publications publiques

Aperçu

  • x-ray est une bibliothèque Python qui détecte les redactions incorrectes dans les fichiers PDF
    • Lorsque l’utilisateur fournit le chemin d’un PDF, elle repère les zones où le masquage n’a pas été correctement appliqué
    • Les résultats sont renvoyés en JSON, page par page, avec les coordonnées (bbox) et le texte (text) de chaque zone

Contexte de développement

  • Free Law Project a découvert de nombreux documents dont le masquage était mal effectué lors de la collecte de millions de PDF
    • Certains utilisateurs, au lieu de supprimer le texte, utilisaient simplement des rectangles noirs ou des surlignages pour le recouvrir
    • Dans ce cas, il suffit de sélectionner le texte sous le rectangle pour voir apparaître le contenu original
  • L’outil x-ray a été créé pour mesurer la fréquence de ce problème

Utilisation

  • Installation
    • Installation possible avec pip install x-ray ou uv add x-ray
  • Exécution en ligne de commande
    • Exécuter xray path/to/file.pdf pour obtenir un résultat en JSON
    • Si une URL est fournie, le PDF distant est téléchargé puis analysé
    • Pour analyser plusieurs URL en une seule fois, utiliser xargs -n 1 xray < urls.txt
  • Utilisation dans du code Python
    • L’appel à xray.inspect("file.pdf") renvoie le résultat sous forme d’objet Python
    • Si l’entrée est une chaîne, elle est traitée comme un fichier local ; si elle commence par https://, comme une URL ; si c’est un bytes, comme un PDF en mémoire
    • Le passage d’un chemin de fichier en type bytes ne fonctionne pas

Principe de fonctionnement

  • Le PDF est analysé en interne avec PyMuPDF
    1. Recherche des rectangles dans le PDF
    2. Recherche des lettres à la même position
    3. Rendu du rectangle sous forme d’image
    4. Si le rectangle est rempli d’une seule couleur, il est considéré comme un masquage incorrect
  • La structure des PDF étant complexe, une détection parfaite est difficile, mais le projet continue de s’améliorer
  • Le projet est maintenu grâce aux dons et au soutien

Contribution et publication

  • La liste des issues sur GitHub permet de consulter les cas non pris en charge ou les demandes d’amélioration
  • Avant une première contribution, il faut signer un Contributor License Agreement (CLA)
  • La publication est automatisée via GitHub Actions ; pour une publication manuelle, utiliser la commande poetry publish --build

Licence

  • Publié sous licence BSD, le projet peut être librement intégré à d’autres projets
  • Les Pull Requests et propositions de fonctionnalités sont les bienvenues, et des modifications peuvent être faites directement via l’interface web de GitHub

1 commentaires

 
GN⁺ 2025-12-24
Commentaires sur Hacker News
  • En travaillant au Free Law Project, j’ai participé à de nombreux projets complexes sur plusieurs années, mais ce projet X-ray est de loin celui qui a suscité le plus d’attention
    Nous avons créé X-ray pour analyser des millions de documents de CourtListener, avec l’objectif d’alerter le public sur ce problème
    Nous avons analysé des millions de documents en quelques minutes avec un job batch S3, mais la vraie partie difficile — trier les résultats et faire le reporting — reste encore à faire

    • Selon la recherche d’Argelius Labs sur la sécurité des PDF, il serait possible de mener une attaque par espacement des glyphes permettant d’estimer la longueur d’un mot rien qu’à partir de la longueur de la zone noire
      Je me demande si X-ray exploite aussi ce type de fuite liée aux métriques de police
    • Si le kerning de la police et le rendu au pixel près sont reproductibles, il semble possible de deviner les mots avec une assez bonne précision
      Par exemple, oioioi et oooiii n’ont pas la même largeur selon la police
  • Je n’ai regardé qu’environ 10 % des fichiers publiés aujourd’hui, mais par exemple EFTA00037069.pdf contient un pointeur /Prev, ce qui signifie qu’une version précédente est incluse dans le PDF
    C’est une modification mineure, mais il est probable que d’autres fichiers soient dans le même cas
    On peut le vérifier directement avec la commande qpdf --show-object=trailer
    Je pense que ce type d’édition bâclée pourrait être intentionnel plutôt qu’accidentel

    • Après vérification, l’historique des modifications de ce fichier se limitait simplement à l’ajout d’une numérotation sur chaque page
      L’original était déjà un document aplati
    • Il n’est pas étonnant que les personnes chargées de ce travail ne connaissent même pas les consignes de base
    • En pratique, ils confient ce travail de caviardage à n’importe qui, donc le problème vient probablement d’un manque d’expérience
  • Plus j’y pense, plus les informations de kerning me semblent être une faiblesse majeure du caviardage
    La seule position du texte autour d’un rectangle noir peut permettre d’estimer la longueur et la forme du mot masqué
    Si l’on connaît l’algorithme de rendu, on pourrait peut-être même retrouver le texte réel par brute force
    Je me demande si quelqu’un a déjà étudié ce problème

    • Il serait bien d’avoir une police qui randomise automatiquement le kerning
      De cette façon, l’espacement varierait d’un document à l’autre même pour le même mot
    • Récemment, il y a aussi eu des cas d’extraction d’informations à partir de l’analyse de la taille et du timing des paquets dans des sessions de chat chiffrées avec des LLM
      C’est une forme d’attaque par canal auxiliaire, assez similaire à ce problème
    • Tout dépend de la longueur du caviardage et de sa prévisibilité
      Si c’est court et que le contexte limite les possibilités à « yes » ou « no », c’est facile à deviner, mais des noms ou de longues phrases sont bien plus difficiles
  • C’est dommage que les PDF restent encore aussi largement utilisés alors qu’ils ont toujours trop de défauts fondamentaux en tant que documents numériques

  • Question toute simple : dans ce type de publication de documents, quel est exactement l’objectif du caviardage ?
    Je ne comprenais pas non plus pourquoi il fallait préserver l’anonymat
    (Après réflexion) en pensant au fait que des personnes innocentes peuvent aussi être concernées, ça devient compréhensible

    • Juridiquement, seuls l’identité des victimes, les enquêtes en cours, les contenus pédopornographiques et les informations liées à la sécurité nationale peuvent être masqués
      Il est interdit de masquer des éléments pour des raisons de réputation ou des motifs politiques
      Mais beaucoup craignent que le caviardage réel ne respecte pas ces critères
    • WikiLeaks avait pour principe de ne masquer que les informations susceptibles d’entraîner un préjudice physique pour des personnes
      Par exemple, si la publication de coordonnées GPS pouvait entraîner un risque de bombardement
    • Les victimes disent qu’elles ne veulent pas d’un caviardage destiné à protéger les auteurs
      Selon elles, la mise en cause des responsabilités est plus importante
    • Le but est de protéger l’identité des victimes, des témoins et des informateurs
    • Dans les dossiers d’enquêtes de longue durée, il y a beaucoup de fausses dénonciations ou d’informations erronées, donc il faut protéger la vie privée de personnes innocentes
      Mais dans cette affaire, l’importance du dossier rendait la publication inévitable
  • Lorsqu’on publie un PDF caviardé, la procédure de base devrait probablement être de dessiner des rectangles noirs puis de rastériser le document en image 🤷

    • Je dirige une activité liée à l’anti-screenshot, et ce type d’échec de caviardage est extrêmement fréquent
      Recouvrir simplement avec un rectangle noir ne supprime pas les données
      On voit souvent ce malentendu dans les environnements de conformité
    • Mais dans certains cas, il existe des exigences imposant que le document reste interrogeable, donc une conversion en image n’est pas toujours possible
  • Si l’on utilise correctement Adobe Pro, il est possible de supprimer définitivement (redact) le contenu d’un PDF
    Dans cette affaire, il s’agit simplement d’une erreur d’amateur due à une mauvaise utilisation d’un éditeur PDF
    C’est le résultat du non-respect d’une procédure utilisée depuis des décennies par des milliers d’avocats et de juristes
    Autrefois, on traçait des barres noires sur papier puis on utilisait l’impression comme version finale ; ils ont probablement travaillé avec cet état d’esprit

    • Ils ont peut-être considéré le PDF comme du papier et pensé qu’il suffisait de poser un simple rectangle noir par-dessus
      Comme la sélection du texte était bloquée, ils ont pu croire que le contenu était bien masqué
      Ou alors c’était peut-être une manière délibérée de faire semblant à une erreur involontaire
    • Les avocats et enquêteurs du gouvernement fédéral américain reçoivent une formation rigoureuse au caviardage
      C’est pourquoi beaucoup considèrent qu’il ne s’agit pas d’une simple erreur, mais d’une forme de malicious compliance intentionnelle
  • Fait surprenant, on peut aussi voir les informations caviardées dans le lecteur PDF du navigateur
    Dans Brave (Linux), si l’on ouvre ce document puis qu’on copie la première ligne du paragraphe 90, le texte masqué est collé tel quel

    • Ce type de caviardage défectueux est justement un cas typique que X-ray peut détecter
  • C’est intéressant de voir le concept d’ediscovery (production électronique de preuves) se diffuser jusque dans le grand public

  • Les gens de la tech seraient surpris s’ils réalisaient à quel point beaucoup de personnes hors du secteur sont illettrées numériquement
    Ça rappelle l’époque où l’IT de l’entreprise était considérée comme un dieu tout-puissant