- 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
- Busca rectángulos (rectangle) dentro del PDF
- Busca caracteres (letter) en la misma ubicación
- Renderiza el rectángulo como imagen
- 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
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
Me pregunto si X-ray también aprovecha este tipo de filtración de métricas tipográficas
Por ejemplo,
oioioiyoooiiitienen anchos distintos según la fuenteSolo revisé alrededor del 10% de los archivos publicados hoy, pero por ejemplo
EFTA00037069.pdftiene un puntero/Prev, así que una versión anterior está incluida dentro del PDFEs una modificación menor, pero es muy probable que haya otros archivos igual
Se puede comprobar directamente con el comando
qpdf --show-object=trailerCreo que esta edición desastrosa podría ser intencional y no un simple error
El original ya era un documento completamente flattened
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
Así, incluso la misma palabra tendría un espaciado distinto en cada documento
Es una especie de ataque de canal lateral, parecido a este problema
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
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
Por ejemplo, cuando divulgar coordenadas GPS podría crear riesgo de bombardeo
Que lo más importante es la rendición de cuentas
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 🤷
Cubrir algo con un recuadro negro no hace que los datos desaparezcan
En entornos de compliance se ve mucho este tipo de malentendido
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
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
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
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