3 poin oleh GN⁺ 2025-12-24 | 1 komentar | Bagikan ke WhatsApp
  • Library Python untuk secara otomatis menemukan penyensoran yang tidak tepat pada dokumen PDF, dengan mengidentifikasi kasus ketika teks hanya ditutupi persegi panjang hitam
  • Dikembangkan oleh Free Law Project untuk mengatasi masalah berulang yang ditemukan saat mengumpulkan jutaan PDF
  • Dapat dijalankan dari baris perintah atau kode Python, dan mengembalikan hasil dalam bentuk JSON atau objek Python
  • Secara internal menggunakan PyMuPDF untuk menganalisis persegi panjang, teks, dan informasi warna pada PDF guna menentukan apakah penyensoran benar-benar menyembunyikan teks
  • Sangat bernilai sebagai alat verifikasi otomatis untuk mencegah kebocoran informasi pribadi pada dokumen hukum atau materi publik

Gambaran umum

  • x-ray adalah library Python untuk mendeteksi redaction yang salah di dalam file PDF
    • Saat pengguna memasukkan path PDF, alat ini menemukan area yang penyensorannya tidak dilakukan dengan benar
    • Hasilnya dikeluarkan dalam format JSON per halaman, mencakup koordinat (bbox) dan teks (text) pada area tersebut

Latar belakang pengembangan

  • Free Law Project menemukan banyak dokumen dengan penyensoran yang tidak dilakukan dengan benar saat mengumpulkan jutaan PDF
    • Sebagian pengguna menutupi teks dengan persegi panjang hitam atau highlight tanpa benar-benar menghapus teksnya
    • Dalam kasus ini, saat teks di bawah persegi panjang dipilih, isi aslinya tetap terlihat
    Iklan
  • Untuk memahami seberapa sering masalah ini terjadi, alat x-ray dibuat

Cara penggunaan

  • Instalasi
    • Dapat diinstal dengan perintah pip install x-ray atau uv add x-ray
  • Menjalankan dari baris perintah
    • Jalankan dalam bentuk xray path/to/file.pdf untuk menghasilkan keluaran JSON
    • Jika URL dimasukkan, PDF jarak jauh akan diunduh lalu diperiksa
    • Untuk memeriksa beberapa URL sekaligus, gunakan xargs -n 1 xray < urls.txt
  • Penggunaan dalam kode Python
    • Memanggil xray.inspect("file.pdf") akan mengembalikan hasil sebagai objek Python
    • Jika nilai masukan berupa string, diperlakukan sebagai file lokal; jika diawali https://, diperlakukan sebagai URL; jika bytes, diperlakukan sebagai PDF di memori
    • Jika path file diberikan sebagai tipe bytes, itu tidak akan berfungsi
Iklan

Cara kerja

  • Secara internal menganalisis PDF menggunakan PyMuPDF
    1. Mencari rectangle di dalam PDF
    2. Mencari letter pada posisi yang sama
    3. Merender persegi panjang sebagai gambar
    4. Jika persegi panjang terisi satu warna, maka dianggap sebagai penyensoran yang salah
  • Karena struktur PDF kompleks, deteksi yang sempurna sulit dilakukan, tetapi perbaikan terus berlanjut
  • Proyek ini dipelihara melalui donasi dan sponsor

Kontribusi dan rilis

  • Daftar issues di GitHub dapat digunakan untuk memeriksa kasus yang belum didukung atau permintaan perbaikan
  • Sebelum kontribusi pertama, perlu menandatangani Contributor License Agreement (CLA)
  • Rilis diotomatisasi melalui GitHub Actions, dan untuk rilis manual gunakan perintah poetry publish --build

Lisensi

  • Dirilis dengan lisensi BSD, sehingga dapat diintegrasikan secara bebas ke proyek lain
  • Pull Request dan usulan fitur disambut, dan perubahan juga dapat dilakukan langsung melalui antarmuka web GitHub

1 komentar

 
GN⁺ 2025-12-24
Komentar Hacker News
  • Saat bekerja di Free Law Project, kami menangani banyak proyek kompleks yang berlangsung bertahun-tahun, tetapi proyek X-ray ini adalah kasus yang paling ramai dibicarakan
    X-ray dibuat untuk menganalisis jutaan dokumen di CourtListener, sekaligus untuk menyadarkan orang akan masalah ini
    Kami menganalisis jutaan dokumen dalam hitungan menit dengan S3 batch job, tetapi bagian yang benar-benar sulit yaitu merapikan hasil dan melaporkannya masih tersisa

    • Menurut riset keamanan PDF dari Argelius Labs, ada serangan glyph spacing yang memungkinkan panjang kata diperkirakan hanya dari panjang bagian yang ditutupi kotak hitam
      Saya juga penasaran apakah X-ray memanfaatkan kebocoran metrik font seperti ini
    • Jika kerning font dan reproduksi hingga level piksel memungkinkan, sepertinya kata-kata bisa ditebak dengan cukup akurat
      Misalnya, oioioi dan oooiii memiliki lebar yang berbeda tergantung fontnya
  • Saya baru melihat sekitar 10% dari file yang dirilis hari ini, dan misalnya EFTA00037069.pdf memiliki pointer /Prev, jadi versi sebelumnya ikut tertanam di dalam PDF
    Ini memang revisi kecil, tetapi kemungkinan besar file lain juga mengandung hal serupa
    Ini bisa diperiksa langsung dengan perintah qpdf --show-object=trailer
    Saya rasa pengeditan yang berantakan seperti ini mungkin bukan sekadar kesalahan, melainkan disengaja

    • Setelah saya cek sendiri, riwayat revisi file tersebut ternyata hanya berupa penambahan nomor di tiap halaman
      Dokumen aslinya sudah merupakan dokumen yang sepenuhnya di-flatten
    • Tidak mengherankan kalau orang-orang yang diberi tugas ini bahkan tidak memahami panduan dasar
    • Kenyataannya, pekerjaan redaction ini sering diserahkan ke sembarang orang, jadi kemungkinan besar masalahnya adalah kurangnya pengalaman
  • Semakin dipikirkan, informasi kerning font tampaknya bisa menjadi kelemahan besar dalam redaction
    Hanya dari posisi teks di sekitar kotak hitam, panjang dan bentuk kata yang disembunyikan bisa diperkirakan
    Jika algoritme rendering-nya diketahui, mungkin saja teks aslinya bisa diduga lewat brute-force
    Saya penasaran apakah ada yang pernah meneliti masalah ini

    • Akan bagus jika ada font yang secara otomatis mengacak kerning
      Jadi, bahkan untuk kata yang sama, jaraknya akan berbeda di tiap dokumen
    • Belakangan ini juga ada kasus informasi diekstrak dari sesi chat terenkripsi LLM melalui analisis ukuran paket dan timing
      Itu semacam serangan side-channel, dan mirip dengan masalah ini
    • Ini tergantung pada panjang dan tingkat ketertebakan redaction-nya
      Jika pendek dan secara konteks hanya mungkin “yes” atau “no”, menebaknya akan mudah, tetapi nama atau kalimat panjang jauh lebih sulit
  • Sangat disayangkan PDF masih begitu luas dipakai, padahal sebagai dokumen digital format ini tetap punya terlalu banyak cacat mendasar

  • Pertanyaan sederhana, tapi saya penasaran apa sebenarnya tujuan redaction dalam publikasi dokumen seperti ini
    Saya juga tadinya tidak paham mengapa anonimitas harus dipertahankan
    (Setelah diedit) masuk akal setelah memikirkan bahwa orang yang tidak bersalah juga bisa ikut tercantum

    • Secara hukum, yang boleh disunting hanya identitas korban, penyelidikan yang sedang berjalan, materi eksploitasi seksual anak, dan informasi terkait keamanan nasional
      Menyunting demi mencegah kerusakan reputasi atau alasan politik itu dilarang
      Namun ada kekhawatiran besar bahwa redaction yang dilakukan di lapangan tidak mengikuti standar ini
    • WikiLeaks mengambil posisi bahwa yang perlu disunting hanyalah informasi yang bisa menyebabkan bahaya fisik bagi seseorang
      Misalnya, jika koordinat GPS yang dipublikasikan bisa memicu risiko pengeboman
    • Para korban menyatakan bahwa mereka tidak menginginkan redaction jika itu dimaksudkan untuk melindungi pelaku
      Pertanggungjawaban dianggap lebih penting
    • Tujuannya adalah melindungi identitas korban, saksi, dan pemberi informasi
    • File investigasi jangka panjang sering berisi laporan palsu atau informasi keliru, jadi privasi orang yang tidak bersalah perlu dilindungi
      Tetapi kasus kali ini terlalu penting sehingga publikasinya tak terelakkan
  • Saat merilis PDF yang sudah di-redact, rasanya prosedur dasarnya adalah menggambar kotak hitam lalu merasterkannya menjadi gambar 🤷

    • Saya menjalankan bisnis terkait anti-screenshot, dan kegagalan redaction seperti ini benar-benar sering terjadi
      Menutupinya dengan kotak hitam saja tidak berarti datanya hilang
      Di lingkungan compliance, saya sering melihat kesalahpahaman seperti ini
    • Tetapi dalam beberapa kasus, ada persyaratan agar dokumen tetap bisa dicari, jadi konversi ke gambar tidak selalu memungkinkan
  • Jika Adobe Pro digunakan dengan benar, isi PDF bisa dihapus permanen (redact)
    Kasus ini hanyalah kesalahan amatir karena tidak benar-benar paham menggunakan editor PDF
    Ini akibat mengabaikan prosedur yang sudah dipakai ribuan pengacara dan staf hukum selama puluhan tahun
    Dulu caranya adalah menarik garis hitam di atas kertas lalu memakai hasil cetaknya sebagai versi final, dan tampaknya pekerjaan ini dilakukan dengan pola pikir dari era itu

    • Mungkin mereka menganggap PDF seperti kertas lalu merasa cukup dengan menutupinya memakai kotak hitam
      Karena pemilihan teks terblokir, mereka mungkin salah mengira isinya sudah tersembunyi
      Atau bisa juga sengaja dibuat seperti ini lalu berpura-pura itu kesalahan
    • Pengacara atau penyidik pemerintah federal AS mendapat pelatihan redaction yang sangat ketat
      Karena itu, banyak yang melihat kejadian ini bukan sebagai kesalahan biasa, melainkan malicious compliance yang disengaja
  • Yang mengejutkan, informasi yang di-redact tetap terlihat bahkan di PDF viewer browser
    Di Brave (Linux), buka dokumen ini, lalu salin baris pertama paragraf 90, maka teks yang ditutupi akan ikut tertempel apa adanya

    • Jenis redaction yang salah seperti inilah contoh paling khas yang bisa dideteksi oleh X-ray
  • Menarik melihat konsep ediscovery (pengungkapan bukti elektronik) mulai menyebar hingga ke masyarakat umum

  • Orang-orang di industri teknologi akan terkejut jika tahu betapa buta teknologinya banyak orang di bidang nonteknis
    Ini mengingatkan pada masa ketika staf IT diperlakukan seperti dewa mahatahu di perusahaan