1 points par GN⁺ 2025-02-08 | 1 commentaires | Partager sur WhatsApp
  • LinuxPDF est une démo qui exécute une VM Linux à l’intérieur d’un PDF, en intégrant dans le document l’écran de la VM ainsi qu’une interface de saisie au clavier
  • L’environnement d’exécution est limité aux navigateurs basés sur Chromium, ce qui rend son fonctionnement peu probable dans d’autres environnements PDF
  • Les entrées clavier peuvent être envoyées à la VM en cliquant sur les boutons de touches à l’écran ou en tapant directement dans le champ de saisie en haut
  • Les touches proposées incluent Esc, Tab, Enter, Shift, Ctrl, Alt, les flèches, Home/End, PgUp/PgDn, F1~F12, ainsi que les touches numériques et alphabétiques
  • Les utilisateurs qui veulent examiner l’implémentation peuvent consulter le code source dans le dépôt GitHub linuxpdf

Démo d’une VM Linux dans un PDF

  • LinuxPDF est une démo qui exécute une VM Linux à l’intérieur d’un document PDF
  • L’environnement de fonctionnement est limité aux navigateurs basés sur Chromium
  • L’écran affiche le texte Loading..., qui indique l’état de chargement de la VM

Envoyer des entrées clavier à la VM

  • Il existe deux méthodes de saisie
    • cliquer sur les boutons de touches affichés à l’écran
    • taper directement dans le champ Type here for keyboard inputs.
  • La touche actuellement pressée peut être vérifiée dans la zone Pressed:

Disposition des touches disponibles

  • Touches de contrôle et touches spéciales
    • Esc, Tab, Caps, Enter, Shift, RShift, Ctrl, Alt, Space, Menu
    • Home, Ins, Del, End, PgUp, PgDn
  • Flèches et touches de fonction
    • ^, <, v, >
    • de F1 à F12
  • Saisie standard
    • chiffres 1~0, -, =
    • touches alphabétiques QWERTY
    • [, ], ;, ', ,, ., /, \\, `

Code source

1 commentaires

 
GN⁺ 2025-02-08
Commentaires Hacker News
  • Ça ne fonctionne pas et le document ne réagit pas. Pour référence, j’ai utilisé une imprimante HP DeskJet 2820e

    • Il faudrait sans doute le ressaisir dans le scanner à chaque fois, en entourant la bonne touche à chaque scan
    • Le PDF a en fait une fonction permettant de définir séparément quels éléments afficher à l’écran et imprimer (Optional Content)
  • Ces derniers jours, « exécuter Linux dans un PDF » et « la façon de donner un PDF à un LLM » ont chacun fait parler d’eux, et si les gens commencent à brancher toutes sortes de parseurs et évaluateurs de PDF à des LLM, il pourrait y avoir des possibilités de hack assez intéressantes

    • On pourrait exécuter Linux dans le LLM pour détourner des ressources de calcul, puis s’en servir pour entraîner le LLM ou miner du Bitcoin
    • Les PDF ont toujours été un vecteur d’attaque très attractif. La plupart des gens les voient simplement comme des documents texte et ignorent qu’on peut y intégrer facilement du code exécutable
      En y ajoutant le fait que des lecteurs populaires comme Acrobat ont un nombre effroyable de vulnérabilités, cela devient une porte d’entrée parfaite pour pirater une entreprise
  • C’est un billet qui avait été posté il y a quelques jours : https://news.ycombinator.com/item?id=42891937
    Le dépôt contient aussi des explications et des informations sur le fonctionnement des mécanismes internes

  • Le voilà enfin. Ça faisait trop longtemps que je plaisantais en disant : « Je vais mettre Linux.js dans un PDF, pour exécuter Linux dans un PDF dans un navigateur dans Linux dans un PDF dans un navigateur dans Linux »

    • Pas exactement. Ce PDF ne peut toujours pas ouvrir un navigateur !
  • Faire ça en JavaScript donne un peu l’impression de tricher. Je me demande si quelque chose de similaire serait possible en PostScript

    • C’est possible, mais pas dans un PDF. Un PDF ne prend en charge qu’un sous-ensemble non Turing-complet de PostScript, car les concepteurs du PDF estimaient qu’intégrer un langage Turing-complet dans un format de document poserait des problèmes de performance
      Plus tard, ils ont changé d’avis et ont ajouté la prise en charge de JavaScript
    • Du point de vue du calcul, c’est possible. PostScript dispose des opérations arithmétiques sur entiers nécessaires à l’émulation d’un CPU x86, ainsi que de chaînes d’octets modifiables bien adaptées pour servir de mémoire d’émulation
    • Il existe en PostScript zmachine.ps, un interpréteur ZMachine permettant de jouer à des jeux d’aventure textuels
      Il existe bien sûr aussi un moteur d’échecs et un morpion en PostScript, et avec assez de patience on pourrait probablement même faire tourner des jeux NES, même s’il faudrait peut-être beaucoup manipuler la pile
  • On peut enfin exécuter rm -rf / dans un PDF

    • PostScript prend ça en charge avec l’opération "shredpage"
  • Si vous en copiez 10 sur une clé USB, vous pouvez profiter d’un cluster Kubernetes portable
    https://news.ycombinator.com/item?id=42681039

  • VirusTotal remonte au moins 3 détections, mais je ne sais pas trop si c’est significatif
    ClamAV: Js.Trojan.Obfus-48
    Cylance: Unsafe
    Google: Detected

  • Il suffit de définir pdfjs.enableScripting sur false dans le about:config de Firefox

  • Mais au fait, existe-t-il aussi un éditeur PDF pour Linux capable d’exécuter Linux dans un PDF ? Ça ne se charge pas dans Evince

    • Le seul endroit où j’ai réussi à le faire tourner, c’est Chrome. Ça ne marche pas dans Adobe Reader, Firefox, Evince, etc.
      Ce genre de « coder dans un PDF » semble presque toujours viser Chrome comme environnement d’exécution. Je ne sais pas s’il y a une raison, par exemple parce que Chrome autoriserait davantage d’exécution de code dans les documents