3 puntos por GN⁺ 2025-12-24 | 1 comentarios | Compartir por WhatsApp
  • Una biblioteca de Python que encuentra automáticamente redacciones inadecuadas en documentos PDF, identificando casos en los que el texto solo está cubierto por un rectángulo negro
  • Desarrollada por Free Law Project para resolver un problema recurrente detectado mientras recopilaban millones de PDF
  • Puede ejecutarse desde la línea de comandos o desde código Python, y devuelve resultados en forma de JSON u objetos de Python
  • Internamente usa PyMuPDF para analizar rectángulos, texto y colores del PDF, y determinar si la redacción realmente oculta el texto
  • Tiene alto valor como herramienta de verificación automática para evitar la exposición de datos personales en documentos legales o materiales públicos

Descripción general

  • x-ray es una biblioteca de Python para detectar redacciones incorrectas en archivos PDF
    • Cuando el usuario ingresa la ruta de un PDF, encuentra las áreas donde la redacción no se hizo correctamente
    • El resultado se muestra en formato JSON por página, incluyendo las coordenadas (bbox) y el texto (text) de esa área

Contexto de desarrollo

  • Free Law Project encontró numerosos documentos con redacciones mal hechas mientras recopilaba millones de PDF
    • Algunas personas cubrían el texto con rectángulos negros o resaltados en lugar de eliminarlo
    • En esos casos, si se selecciona el texto debajo del rectángulo, el contenido original queda expuesto tal cual
  • Para medir la frecuencia de este problema, crearon la herramienta x-ray

Cómo usarlo

  • Instalación
    • Se puede instalar con pip install x-ray o uv add x-ray
  • Ejecución desde la línea de comandos
    • Si se ejecuta como xray path/to/file.pdf, imprime el resultado en JSON
    • Si se ingresa una URL, descarga el PDF remoto y luego realiza la inspección
    • Para inspeccionar varias URL a la vez, usa xargs -n 1 xray < urls.txt
  • Uso dentro de código Python
    • Al llamar xray.inspect("file.pdf"), devuelve el resultado como objeto de Python
    • Si el valor de entrada es una cadena, se trata como archivo local; si empieza con https://, como URL; y si es bytes, como un PDF en memoria
    • Si se pasa una ruta de archivo en tipo bytes, no funcionará

Cómo funciona

  • Internamente analiza el PDF usando PyMuPDF
    1. Busca rectángulos (rectangle) dentro del PDF
    2. Busca caracteres (letter) en la misma ubicación
    3. Renderiza el rectángulo como imagen
    4. Si el rectángulo está relleno con un solo color, se considera una redacción incorrecta
  • Debido a la complejidad de la estructura de los PDF, la detección perfecta es difícil, pero el proyecto sigue mejorando continuamente
  • El proyecto se mantiene mediante donaciones y patrocinio

Contribución y publicación

  • En la lista de issues de GitHub se pueden revisar casos aún no soportados o solicitudes de mejora
  • Antes de la primera contribución, es necesario firmar el Contributor License Agreement (CLA)
  • La publicación está automatizada con GitHub Actions, y para una publicación manual se usa el comando poetry publish --build

Licencia

  • Se distribuye bajo la licencia BSD, por lo que puede integrarse libremente en otros proyectos
  • Se aceptan Pull Requests y propuestas de funciones, y también se puede editar directamente desde la interfaz web de GitHub

1 comentarios

 
GN⁺ 2025-12-24
Comentarios en Hacker News
  • Trabajando en Free Law Project he participado en muchos proyectos complejos de varios años, pero este proyecto X-ray ha sido el caso que más atención ha generado
    Creamos X-ray para analizar millones de documentos de CourtListener, y el objetivo era alertar a la gente sobre este problema
    Analizamos millones de documentos en unos minutos con un trabajo por lotes en S3, pero la parte realmente difícil de organizar y reportar los resultados todavía sigue pendiente

    • Según la investigación de seguridad de PDF de Argelius Labs, es posible un ataque de espaciado de glifos que permite estimar la longitud de las palabras solo a partir de la longitud de la parte cubierta con un recuadro negro
      Me pregunto si X-ray también aprovecha este tipo de filtración de métricas tipográficas
    • Si fuera posible reproducir el kerning de la fuente y el renderizado a nivel de píxel, parecería posible adivinar palabras con bastante precisión
      Por ejemplo, oioioi y oooiii tienen anchos distintos según la fuente
  • Solo revisé alrededor del 10% de los archivos publicados hoy, pero por ejemplo EFTA00037069.pdf tiene un puntero /Prev, así que una versión anterior está incluida dentro del PDF
    Es una modificación menor, pero es muy probable que haya otros archivos igual
    Se puede comprobar directamente con el comando qpdf --show-object=trailer
    Creo que esta edición desastrosa podría ser intencional y no un simple error

    • Lo comprobé yo mismo, y el historial de cambios de ese archivo era simplemente la adición de numeración en cada página
      El original ya era un documento completamente flattened
    • No sorprende que la gente encargada de esto ni siquiera conozca lineamientos básicos
    • En la práctica, parece que ponen a cualquiera a hacer el trabajo de redaction, así que probablemente el problema sea la falta de experiencia
  • Cuanto más lo pienso, más me parece que la información de kerning puede ser una gran vulnerabilidad para la redaction
    Solo con la posición del texto alrededor del recuadro negro se puede estimar la longitud y la forma de la palabra oculta
    Si se conoce el algoritmo de renderizado, incluso parecería posible inferir el texto real por fuerza bruta
    Me pregunto si alguien ha investigado este problema

    • Estaría bien que existiera una fuente que ajustara el kerning aleatoriamente de forma automática
      Así, incluso la misma palabra tendría un espaciado distinto en cada documento
    • Últimamente también ha habido casos de extracción de información en sesiones de chat cifradas de LLM mediante análisis del tamaño y el tiempo de los paquetes
      Es una especie de ataque de canal lateral, parecido a este problema
    • Depende de la longitud y de qué tan predecible sea la redaction
      Si es corta y por contexto se limita a algo como “yes” o “no”, puede adivinarse fácilmente, pero nombres o frases largas son mucho más difíciles
  • Da pena que el PDF siga usándose tanto aunque todavía tenga demasiados defectos fundamentales como documento digital

  • Es una pregunta simple, pero me pregunto cuál es exactamente el propósito de la redaction en una divulgación de documentos como esta
    Tampoco entendía por qué había que mantener el anonimato
    (Editado) Pensándolo mejor, tiene sentido porque también puede involucrar a personas inocentes

    • Legalmente, solo pueden ocultarse identidades de víctimas, investigaciones en curso, material de explotación sexual infantil e información relacionada con seguridad nacional
      Está prohibido ocultar información por daño reputacional o motivos políticos
      Pero hay mucha preocupación de que la redaction real no esté respetando esos criterios
    • WikiLeaks tenía la postura de ocultar solo información que pudiera derivar en daño físico a personas
      Por ejemplo, cuando divulgar coordenadas GPS podría crear riesgo de bombardeo
    • Las víctimas han dicho que no quieren redactions si son para proteger a los agresores
      Que lo más importante es la rendición de cuentas
    • El objetivo es proteger la identidad de víctimas, testigos e informantes
    • Los expedientes de investigaciones largas suelen contener muchas denuncias falsas o información errónea, así que es necesario proteger la privacidad de personas inocentes
      Pero este caso es tan importante que la publicación parece inevitable
  • Al publicar un PDF redactado, parecería que el procedimiento básico debería ser dibujar rectángulos negros y rasterizarlo como imagen 🤷

    • Yo manejo un negocio relacionado con anti-screenshot, y este tipo de fallas de redaction son realmente comunes
      Cubrir algo con un recuadro negro no hace que los datos desaparezcan
      En entornos de compliance se ve mucho este tipo de malentendido
    • Pero en algunos casos existen requisitos de que el documento debe seguir siendo buscable, así que no siempre es posible convertirlo en imagen
  • Si se usa correctamente Adobe Pro, sí puede eliminar permanentemente (redact) el contenido de un PDF
    Lo de este caso fue simplemente un error amateur por no saber usar bien un editor de PDF
    Es el resultado de ignorar procedimientos que miles de abogados y asistentes legales han usado durante décadas
    Antes se hacía trazando líneas negras sobre papel y usando la copia impresa como versión final, y probablemente trabajaron con esa mentalidad de otra época

    • Puede que hayan pensado en el PDF como si fuera papel y creyeran que bastaba con poner un simple recuadro negro encima
      Como ya no se podía seleccionar el texto, quizá asumieron que estaba oculto
      O tal vez lo hicieron así a propósito para luego fingir que fue un error
    • Los abogados e investigadores del gobierno federal de EE. UU. reciben una capacitación muy rigurosa sobre redaction
      Por eso muchos ven esto no como un error simple, sino como una obediencia maliciosa (malicious compliance) intencional
  • Sorprendentemente, la información redactada también se ve en el visor de PDF del navegador
    Si abres este documento en Brave (Linux) y copias la primera línea del párrafo 90, el texto oculto se pega tal cual

    • Este tipo de redaction mal hecha es un ejemplo representativo de lo que X-ray puede detectar
  • Es interesante ver cómo el concepto de ediscovery (descubrimiento electrónico de evidencia) ya se está extendiendo hasta el público general

  • La gente del sector tecnológico se sorprendería al ver cuán analfabetas tecnológicamente son muchas personas fuera del área
    Hace recordar la época en que el personal de TI era tratado en la empresa como un dios todopoderoso