Das finde ich krass. Da kann man offensichtlich in einem PDF ein ganzes Betriebssystem zum Laufen bringen, in dem Fall Linux. Was geht dann noch alles so versteckt in PDFs?
https://hackingpassion.com/linux-inside-pdf/
Ja, das ist wirklich beeindruckend krass – und gleichzeitig ein bisschen verrückt. 😄
Der Trick mit Linux inside a PDF (genauer gesagt das Projekt „LinuxPDF“ von Allen Ding, 2025) funktioniert so:
- Es wird ein kleiner RISC-V-Emulator (basierend auf TinyEMU von Fabrice Bellard) genommen.
- Dieser Emulator wird mit einer alten Emscripten-Version (2019) zu asm.js kompiliert (kein WebAssembly, weil der PDF-JavaScript-Interpreter in modernen Browsern das nicht mehr richtig unterstützt).
- Das asm.js wird direkt in den PDF eingebettet → PDF-JavaScript-Objekte.
- Der Linux-Kernel (sehr minimalistisch) bootet dann emuliert im Browser.
- Die Ausgabe erfolgt als ASCII-Art: Jede „Zeile“ des Terminals ist ein separates Textfeld im PDF.
- Tastatureingabe läuft über PDF-Formularfelder oder Buttons.
Das Ganze läuft nur in Chromium-basierten Browsern (Chrome, Edge, Brave), braucht 30–60 Sekunden zum Booten, ist ~100× langsamer als echtes Linux (Chrome deaktiviert JIT im PDF-JS-Sandbox aus Sicherheitsgründen) und ist ca. 6 MB groß. In Adobe Reader, Firefox & Co. startet es gar nicht.
Das zeigt aber vor allem: PDF ist viel mächtiger (und gefährlicher), als die meisten denken.
Was man sonst noch so „versteckt“ in PDFs unterbringen oder ausführen kann (real existierende Beispiele, sortiert nach Harmlosigkeit → böse):
Harmlose / coole Demos (meist JavaScript-basiert):
- Voll spielbares Doom (DoomPDF, gleicher Autor wie LinuxPDF)
- Tetris (PDFTris, Januar 2025)
- 3D-Modelle drehen und animieren
- Kleine Rechen- oder Physik-Simulationen
- „Easter Eggs“, die bei bestimmten Uhrzeiten / Tastenkombinationen etwas anzeigen
Potenziell nützliche / grenzwertige Sachen:
- PDFs, die per JavaScript HTTP-Requests machen (z. B. Formulardaten heimlich wegschicken)
- PDFs, die erkennen, welchen Monitor / welche Auflösung du hast
- PDFs, die mit dem Dateisystem interagieren (wenn der Reader sehr alte Schwachstellen hat)
Richtig gefährliche / missbräuchliche Möglichkeiten (bekannte Techniken):
- Embedded JavaScript-Exploits → Nutzen von Viewer-Schwachstellen (z. B. CVE-2024-4367 in PDF.js → Firefox + Electron-Apps → nativer Code)
- Polyglot-Dateien (Datei ist gleichzeitig PDF + ZIP / RAR / PHP / EXE / Shell-Skript): Wird als harmloses PDF hochgeladen / geöffnet, aber als anderes Format ausgeführt / extrahiert
- Beispiel: PDF + PHP → Webserver führt PHP-Code aus, wenn er die Datei trotzdem ausführt
- PDF + ZIP → Malware versteckt drin, die bei Entpacken losläuft
- Malicious Payloads in Streams (verschlüsselt / obfuskiert), die bei bestimmten Reader-Versionen ausbrechen
- Dokument-übergreifende Angriffe (PDF lädt externe Ressourcen nach, die dann weiter exploit)
Kurz gesagt: PDFs können quasi ein Mini-Betriebssystem (oder zumindest einen Emulator davon) hosten, solange der Viewer JavaScript ausführt – und fast jeder große PDF-Viewer tut das heutzutage in irgendeiner Form.
Deshalb raten viele Sicherheitsleute inzwischen:
- PDFs aus dem Internet nie mit aktiviertem JavaScript öffnen
- In Chrome/Edge: chrome://flags/#pdfjs.enable-javascript auf Disabled setzen (falls du paranoid bist)
- Oder gleich einen Viewer ohne JS nutzen (z. B. SumatraPDF, mutool, pdfcpu)
Was ist safe? Zum Beispiel MacOS Preview
Ja, macOS Preview gilt in Bezug auf die größten und häufigsten PDF-Gefahren als deutlich sicherer als die meisten anderen gängigen PDF-Viewer (Adobe Reader, Browser-PDF-Viewer, Foxit etc.).
Der wichtigste Grund: Preview unterstützt kein JavaScript in PDFs – und das schon seit vielen Jahren (seit der Einführung von PDFKit durch Apple, nie implementiert aus Sicherheitsgründen).
Das bedeutet konkret:
| Gefahr durch PDFs | macOS Preview (aktuell 2025/2026) | Adobe Acrobat/Reader | Chrome/Edge PDF-Viewer | SumatraPDF / mutool |
|---|---|---|---|---|
| Embedded JavaScript ausführen (z. B. Linux-in-PDF, Doom-in-PDF, Form-Exploits) | Nein – wird komplett ignoriert | Ja (kann deaktiviert werden) | Ja (sandboxed, aber möglich) | Nein |
| JS-basierte RCE-Exploits / Memory-Corruption | Sehr unwahrscheinlich | Häufige CVEs | Möglich (aber sandbox) | Sehr unwahrscheinlich |
| Automatische HTTP-Requests / Daten exfiltrieren | Nein | Möglich | Möglich (eingeschränkt) | Nein |
| Embedded Links / Phishing-Umleitung | Ja (kannst du anklicken) | Ja | Ja | Ja |
| Parser-Bugs / Buffer-Overflows (nicht JS) | Möglich, aber sehr selten | Häufig | Selten | Sehr selten |
| Polyglot-Dateien (PDF + EXE/ZIP/PHP) | Risiko beim Öffnen als anderes Format | Höheres Risiko | Niedrig | Niedrig |
Zusammengefasst:
- Gegen die coolen, aber gefährlichen JS-Demos (wie Linux inside PDF, Tetris, Doom usw.) bist du mit Preview komplett immun – das startet einfach nicht.
- Gegen klassische JS-Exploits, die in den letzten Jahren viele CVEs in Adobe und Browsern ausgelöst haben → sehr sicher.
- Es gibt immer noch Restrisiken:
- Du klickst auf einen bösartigen Link im PDF → Phishing / Malware-Download
- Extrem seltene Parser-Schwachstellen in Apples PDFKit (die letzten bekannten relevanten CVEs lagen Jahre zurück und wurden schnell gepatcht)
- Gatekeeper-Quarantäne-Warnungen bei Downloads ignorieren und trotzdem öffnen
Aktueller Stand (Stand 2026): Es gibt keine bekannten aktiven Exploits oder CVEs, die speziell macOS Preview / PDFKit per JavaScript oder ähnlichem ausnutzen würden. Die meisten PDF-Malware-Kampagnen zielen auf Windows + Adobe oder Browser ab.
Empfehlung für maximale Paranoia (wenn du oft dubiose PDFs bekommst):
- Bleib bei Preview – es ist die sicherste Default-Option auf macOS.
- Deaktiviere das automatische Öffnen in Safari/Chrome (nutze stattdessen „Mit Vorschau öffnen“).
- Bei richtig kritischen/sensiblen PDFs: Öffne sie in einer Sandbox / VM oder mit mutool show / pdfcpu ( Kommandozeile, kein JS, minimaler Parser).
- Gatekeeper und XProtect nie deaktivieren – die fangen viele bösartige Downloads schon vorher ab.
Kurz: Ja – Preview ist relativ safe, vor allem im Vergleich zu allem, was JavaScript ausführt. Für den Alltag auf dem Mac ist es eine der besten Entscheidungen, einfach Preview zu nutzen.
