3 Punkte von GN⁺ 2025-12-24 | 1 Kommentare | Auf WhatsApp teilen
  • Eine Python-Bibliothek, die unsachgemäße Schwärzungen in PDF-Dokumenten automatisch erkennt und Fälle identifiziert, in denen Text lediglich mit schwarzen Rechtecken überdeckt wurde
  • Entwickelt vom Free Law Project, um ein wiederkehrendes Problem zu lösen, das beim Sammeln von Millionen von PDFs entdeckt wurde
  • Kann über die Kommandozeile oder aus Python-Code heraus ausgeführt werden und gibt die Ergebnisse als JSON oder Python-Objekte zurück
  • Verwendet intern PyMuPDF, um Rechtecke, Text und Farbinformationen in PDFs zu analysieren und zu bestimmen, ob eine Schwärzung tatsächlich Text verbirgt
  • Besonders nützlich als automatisches Prüfwerkzeug zum Schutz vor der Offenlegung personenbezogener Daten in Rechtsdokumenten oder öffentlich zugänglichen Materialien

Überblick

  • x-ray ist eine Python-Bibliothek zur Erkennung fehlerhafter Schwärzungen (redactions) in PDF-Dateien
    • Wenn der Benutzer einen PDF-Pfad angibt, findet das Tool Bereiche, in denen die Schwärzung nicht korrekt durchgeführt wurde
    • Das Ergebnis wird im JSON-Format pro Seite ausgegeben und enthält Koordinaten (bbox) sowie den Text (text) des betreffenden Bereichs

Hintergrund der Entwicklung

  • Das Free Law Project stieß beim Sammeln von Millionen von PDFs auf zahlreiche Dokumente mit nicht korrekt durchgeführten Schwärzungen
    • Einige Nutzer verwendeten schwarze Rechtecke oder Hervorhebungen, um Text zu überdecken, anstatt ihn tatsächlich zu löschen
    • In solchen Fällen wird der Originaltext unverändert offengelegt, sobald man den Text unter dem Rechteck auswählt
  • Um die Häufigkeit dieses Problems zu erfassen, wurde das Tool x-ray entwickelt

Verwendung

  • Installation
    • Installation mit pip install x-ray oder uv add x-ray
  • Ausführung über die Kommandozeile
    • Mit xray path/to/file.pdf wird das Tool ausgeführt und gibt ein JSON-Ergebnis aus
    • Bei Eingabe einer URL wird die entfernte PDF heruntergeladen und anschließend geprüft
    • Um mehrere URLs auf einmal zu prüfen, kann xargs -n 1 xray < urls.txt verwendet werden
  • Verwendung in Python-Code
    • xray.inspect("file.pdf") gibt das Ergebnis als Python-Objekt zurück
    • Ist der Eingabewert ein String, wird er als lokale Datei behandelt; beginnt er mit https://, als URL; bei bytes als PDF im Speicher
    • Wird ein Dateipfad als Typ bytes übergeben, funktioniert dies nicht

Funktionsweise

  • Intern wird PyMuPDF zur Analyse der PDF verwendet
    1. Suche nach Rechtecken (rectangle) in der PDF
    2. Suche nach Zeichen (letter) an derselben Position
    3. Rendern des Rechtecks als Bild
    4. Ist das Rechteck mit einer einzigen Farbe gefüllt, wird es als fehlerhafte Schwärzung eingestuft
  • Da die PDF-Struktur komplex ist, ist eine perfekte Erkennung schwierig, das Tool wird jedoch laufend verbessert
  • Das Projekt wird durch Spenden und Sponsoring getragen

Beiträge und Veröffentlichung

  • Über die Issues-Liste auf GitHub lassen sich nicht unterstützte Fälle oder Verbesserungswünsche prüfen
  • Vor dem ersten Beitrag ist die Unterzeichnung eines Contributor License Agreement (CLA) erforderlich
  • Die Veröffentlichung ist über GitHub Actions automatisiert; für eine manuelle Veröffentlichung wird der Befehl poetry publish --build verwendet

Lizenz

  • Veröffentlicht unter der BSD-Lizenz und damit frei in andere Projekte integrierbar
  • Pull Requests und Funktionsvorschläge sind willkommen; Änderungen können direkt über die GitHub-Weboberfläche vorgenommen werden

1 Kommentare

 
GN⁺ 2025-12-24
Hacker-News-Kommentare
  • Während meiner Arbeit beim Free Law Project habe ich viele komplexe Projekte über mehrere Jahre hinweg gemacht, aber dieses X-ray-Projekt war der Fall, der am meisten Aufmerksamkeit bekommen hat
    Wir haben X-ray gebaut, um Millionen von Dokumenten in CourtListener zu analysieren und die Menschen auf dieses Problem aufmerksam zu machen
    Mit einem S3-Batch-Job konnten wir Millionen von Dokumenten in wenigen Minuten analysieren, aber der wirklich schwierige Teil – die Ergebnisse aufzubereiten und zu berichten – steht noch aus

    • Laut der PDF-Sicherheitsforschung von Argelius Labs ist ein Glyph-Spacing-Angriff möglich, bei dem sich allein aus der Länge eines mit einem schwarzen Balken verdeckten Abschnitts die Wortlänge abschätzen lässt
      Ich frage mich, ob X-ray auch solche Lecks in Font-Metriken ausnutzt
    • Wenn sich Kerning und die Darstellung auf Pixelebene reproduzieren lassen, könnte man Wörter wohl ziemlich genau erraten
      Zum Beispiel haben oioioi und oooiii je nach Schriftart unterschiedliche Breiten
  • Ich habe mir heute nur etwa 10 % der veröffentlichten Dateien angesehen, aber zum Beispiel enthält EFTA00037069.pdf einen /Prev-Pointer, sodass eine frühere Version im PDF selbst eingebettet ist
    Das ist nur eine kleine Änderung, aber vermutlich gibt es das auch in anderen Dateien
    Mit dem Befehl qpdf --show-object=trailer kann man das selbst prüfen
    Ich glaube, dass diese chaotische Bearbeitung eher Absicht als ein Versehen sein könnte

    • Ich habe es selbst geprüft, und die Änderungshistorie dieser Datei bestand lediglich darin, dass auf jeder Seite Nummern hinzugefügt wurden
      Das Original war bereits ein vollständig geflattetes Dokument
    • Es überrascht mich nicht, dass die Leute, die so etwas übernehmen, nicht einmal die grundlegenden Richtlinien kennen
    • In der Praxis wird offenbar einfach irgendwer mit der Redaktion/Schwärzung beauftragt, daher ist mangelnde Erfahrung vermutlich das Problem
  • Je mehr ich darüber nachdenke, desto mehr scheint die Kerning-Information von Fonts eine große Schwachstelle bei Redaktionen zu sein
    Schon aus der Position des Textes um den schwarzen Balken herum lassen sich Länge und Form des verdeckten Wortes abschätzen
    Wenn man den Rendering-Algorithmus kennt, könnte man den tatsächlichen Text vielleicht sogar per Brute Force herleiten
    Ich frage mich, ob jemand dieses Problem schon erforscht hat

    • Es wäre gut, eine Schriftart mit automatisch zufällig variierendem Kerning zu haben
      Dann würden selbst identische Wörter in jedem Dokument unterschiedlich gesetzt
    • Kürzlich gab es auch Fälle, in denen aus verschlüsselten Chat-Sitzungen von LLMs über Analyse von Paketgrößen und Timing Informationen gewonnen wurden
      Eine Art Side-Channel-Angriff, also ähnlich wie hier
    • Es hängt von der Länge und Vorhersagbarkeit der Schwärzung ab
      Wenn sie kurz ist und kontextuell praktisch nur „yes“ oder „no“ infrage kommt, ist sie leicht zu erraten, aber Namen oder lange Sätze sind deutlich schwieriger
  • Es ist bedauerlich, dass PDF trotz so vieler grundlegender Mängel als digitales Dokumentformat immer noch so weit verbreitet ist

  • Eine einfache Frage: Was genau ist eigentlich der Zweck von Schwärzungen bei solchen Dokumentenveröffentlichungen?
    Ich habe auch nicht verstanden, warum Anonymität gewahrt werden muss
    (Nach der Bearbeitung) Wenn man bedenkt, dass auch Unschuldige betroffen sein können, ist es nachvollziehbar

    • Rechtlich dürfen nur Identitäten von Opfern, laufende Ermittlungen, Material zum sexuellen Missbrauch von Kindern und Informationen zur nationalen Sicherheit geschwärzt werden
      Schwärzungen aus Gründen des Reputationsschutzes oder aus politischen Motiven sind verboten
      Es gibt jedoch große Sorgen, dass tatsächliche Schwärzungen diese Maßstäbe nicht einhalten
    • WikiLeaks vertrat den Standpunkt, nur Informationen zu schwärzen, die zu körperlichem Schaden für Personen führen könnten
      Zum Beispiel wenn veröffentlichte GPS-Koordinaten ein Bombardierungsrisiko auslösen könnten
    • Opfer sagen, dass sie keine Schwärzungen wollen, wenn diese dem Schutz der Täter dienen
      Rechenschaft sei wichtiger
    • Der Zweck ist der Schutz der Identität von Opfern, Zeugen und Hinweisgebern
    • In Akten aus langjährigen Ermittlungen gibt es viele falsche Hinweise oder Falschmeldungen, daher muss die Privatsphäre unschuldiger Menschen geschützt werden
      Aber dieser Fall ist so bedeutend, dass eine Veröffentlichung unvermeidlich ist
  • Wenn man ein geschwärztes PDF veröffentlicht, sollte das Standardverfahren doch sein, schwarze Rechtecke zu zeichnen und dann als Bild zu rastern 🤷

    • Ich betreibe ein Geschäft im Bereich Anti-Screenshot, und solche Redaktionsfehler sind wirklich häufig
      Nur einen schwarzen Balken darüberzulegen bedeutet nicht, dass die Daten verschwunden sind
      Dieses Missverständnis sieht man im Compliance-Umfeld ständig
    • In manchen Fällen gibt es aber Anforderungen, dass ein Dokument durchsuchbar bleiben muss, daher ist eine Umwandlung in ein Bild nicht immer möglich
  • Mit Adobe Pro kann man PDF-Inhalte bei korrekter Nutzung dauerhaft löschen (redact)
    Dieser Fall war einfach ein amateurhafter Fehler, weil jemand einen PDF-Editor nicht richtig bedienen konnte
    Das Ergebnis ist, dass ein Verfahren ignoriert wurde, das Tausende Anwälte und Kanzleimitarbeiter seit Jahrzehnten nutzen
    Früher zog man schwarze Linien auf Papier und verwendete den Ausdruck als Endfassung; vermutlich wurde hier noch mit genau dieser Denkweise gearbeitet

    • Möglicherweise wurde das PDF wie Papier behandelt und einfach mit schwarzen Kästen überdeckt
      Weil sich der Text dann nicht mehr auswählen ließ, dachte man vielleicht, er sei wirklich verborgen
      Oder es war absichtlich so gemacht, um es anschließend wie einen Versehentlichen Fehler aussehen zu lassen
    • Anwälte oder Ermittler der US-Bundesregierung werden gründlich in Redaktions-/Schwärzungsverfahren geschult
      Deshalb sehen viele darin keinen simplen Fehler, sondern absichtliche böswillige Befolgung (malicious compliance)
  • Überraschenderweise sind die geschwärzten Informationen sogar im PDF-Viewer des Browsers sichtbar
    Wenn man in Brave (Linux) dieses Dokument öffnet und in Absatz 90 die erste Zeile kopiert, wird der geschwärzte Text unverändert eingefügt

    • Diese Art von fehlerhafter Schwärzung ist ein typischer Fall, den X-ray erkennen kann
  • Es ist interessant zu sehen, wie sich das Konzept von ediscovery (elektronische Beweisoffenlegung) bis in die breite Öffentlichkeit verbreitet

  • Menschen aus der Tech-Branche wären überrascht, wie technisch unkundig viele Leute außerhalb technischer Bereiche sind
    Das erinnert an die Zeiten, in denen die IT-Abteilung im Unternehmen noch als allwissender und allmächtiger Gott galt