Tarayıcıda bir PDF açıyorsunuz içinde terminal var ve komut çalıştırabiliyorsunuz.
Adobe’nin spec’i JavaScript execution destekliyor. Viewer bunu implement ederse PDF içine yerleştirilmiş js kodu çalışabiliyor. Yani PDF bir doküman değil aslında bir çalışma ortamı olarak da kullanılabiliyor. PDF tabanlı saldırılarda bu özellik yıllarca aktif olarak kullanılıyor. linuxpdf tam da bunu exploit ediyor.
Ading2210, Emscripten kullanarak Linux kernelini WebAssembly’e compile etmiş. Ortaya çıkan WASM binaryi PDF’in içine gömülüyor. PDF açıldığında JavaScript engine bu WASM’ı çalıştırıyor siz de bir terminal görüyorsunuz.
ls, cat, echo
gibi komutlar çalışıyor.
Gerçek bir shell deneyimi.
Tabii sınırlamaları da var. Her PDF viewer bunu açamıyor çünkü hepsi js execution desteklemiyor. Chrome’un built-in viewer’ı izole davranıyor ve WASM desteği tam değil. Demo için Chromium veya Firefox öneriliyor.
Bir de performans meselesi var. Her tuş vuruşunda WASM runtime üzerinden geçiyor yani gerçek bir terminal gibi hızlı olamıyor.
Güvenlik açısından bakınca projenin ortaya koyduğu şey önemli. PDF’lerin JavaScript çalıştırabilmesi eski bir risk ama “bunun içinde tam bir işletim sistemi çalışabilir” seviyesine ulaşınca farklı görünüyor tabii. Pratikte zararlı bir PDF’in ne kadar sofistike olabileceğini düşünmek için güzel bir referans noktası olabilir.

Projenin kaynak kodu GitHub’da mevcut. Demo PDF dosyası indirmeden tarayıcıda açılıyor.
Kaynak:
https://github.com/ading2210/linuxpdf
Demo:
https://linux.doompdf.dev/