J'essaye d'intégrer une image au format png dans un document PDF avec ImageMagick : convert image.png document.pdf.
Cette fois-ci, ça ne fonctionne pas : convert-im6.q16: attempt to perform an operation not allowed by the security policy 'PDF' @ error/constitute.c/IsCoderAuthorized/408.
Réponse sur StackOverflow : suite à une vulnérabilité dans Ghostscript, et en attendant le correctif, l'une des mesures de mitigation consistait à désactiver le traitement de scripts PostScript lorsqu'on utilise ImageMagick en ajoutant des lignes dans /etc/ImageMagick-6/policy.xml. Si l'on a un Ghostscript à jour (gs --version >= 9.24), on pourrait désactiver la restriction visant PDF en commentant la ligne « <policy domain="coder" rights="none" pattern="PDF" /> » dans la configuration d'ImageMagick. La solution fonctionne, mais les risques ne sont pas précisés et l'histoire (c'est lié à la vulnérabilité X) ne colle pas avec la réalité de ce qui s'est passé dans Debian.
Allons plus loin et découvrons quelques outils et horreurs de l'écosystème Debian.
Plusieurs points me font tiquer : la vulnérabilité date de 2018, Debian stable embarque une version corrigée de Ghostscript depuis septembre 2018[*] a minima, et je pouvais encore convertir vers PDF il y a quelques mois. Conclusion : la configuration d'ImageMagick a été changée récemment. Quand ? Pourquoi puisque Ghostscript été corrigé à date ?
ls -lh /etc/ImageMagick-6/policy.xml affiche le 25 juin 2020 comme date de dernière modification. Si tu l'as modifié avant de penser à faire un ls, tu peux vérifier l'horodatage dans le paquet binaire. (Quand le temps aura passé, il faudra récupérer la version dont je parle, 6.9.10.23+dfsg-2.1+deb10u1, depuis les archives des paquets Debian). Pour savoir que le fichier /etc/ImageMagick-6/policy.xml provient du paquet logiciel imagemagick-6-common : apt-file search /etc/ImageMagick-6/policy.xml ou dpkg -S /etc/ImageMagick-6/policy.xml.
Ça ne prouve pas que la modification est apparue dans la version 6.9.10.23+dfsg-2.1+deb10u1 ? Il suffit de récupérer la version précédente, 6.9.10.23+dfsg-2.1, du paquet logiciel dans les archives de paquet de Debian. Le paquet date de mai 2019 et le fichier policy.xml ne contient pas les changements.
J'aurais voulu utiliser git pour retrouver l'info, mais : 1) le dépôt Debian d'ImageMagick n'a pas de branche ni tag pour la version 6.9.10.23+dfsg-2.1+deb10u1 (c'est probablement normal : il s'agit d'une version publiée par l'équipe sécurité de Debian, pas par les mainteneurs Debian d'ImageMagick), ni pour la version 6.9.10.23+dfsg-2.1 ni pour la version 6.9.10.23+dfsg-2 et les tags de version 6.9.10-23 et 6.9.10.23-dfsg-1 ne contiennent pas les modifications de policy.xml. La version upstream ne contient pas non plus la modification. On trouve l'adresse du dépôt git Debian depuis la page du Package Tracker dédiée à ImageMagick. On trouve le dépôt officiel / upstream avec un moteur de recherche (ou dans les commits du dépôt Debian si l'on a l'œil et de la chance).
Cette date de modification de policy.xml, 25 juin 2020, apparaît dans le journal des changements du paquet (/usr/share/doc/imagemagick-6-common/changelog.Debian.gz ou lien « Debian Changelog » dans la page dédiée au paquet) : tout plein de vulnérabilités ont été corrigées ce jour-là. Les bulletins de sécurité Debian associés sont le DSA-4712-1 et le DSA-4715-1 [**]. L'identifiant CVE de la vulnérabilité mentionnée sur StackOverflow n'est pas mentionné dans la liste (et pour cause, elle a été corrigée + elle concerne un autre logiciel, Ghotscript).
On remarque que les vulnérabilités corrigées ce jour-là (25 juin 2020) ont été enregistrés en 2019 dans le CVE… Ça fait long la correction de la vulnérabilité. :O Il est donc plus probable que le changement dans le fichier policy.xml d'ImageMagick soit une mesure préventive afin de tenter de mitiger, à l'avance, les vulnérabilités liées à des logiciels tiers dont Ghostscript. Dans Debian stable, il y a actuellement 36 vulnérabilités non-corrigées dans ImageMagick.
Sur un serveur web avec du contenu dynamique exposé sur Internet, je pense qu'il ne faut pas désactiver les restrictions définies dans policy.xml.
En revanche, sur mon ordinateur de bureau, je peux désactiver la restriction PDF sereinement en la commentant avec <!-- --> (c'est comme ça qu'on commente en XML…) : 1) je ne télécharge pas n'importe quoi depuis n'importe où, que ce soit sur le web ou par email ou Jabber ou… ; 2) dans mon gestionnaire de fichiers, je désactive l'indexation et la prévisualisation des fichiers, qui sont toutes deux susceptibles de faire exécuter du PostScript dangereux dans mon dos.
Bref, ce n'est pas simple faire court sans dire nawak / faire des raccourcis et ce n'est pas simple non plus d'approcher la vérité dans un écosystème aussi vaste que Debian…
[*] Comment sais-je que Ghostscript n'est plus vulnérable depuis septembre 2018 ? Je cherche le numéro de CVE, donné sur StackOverflow, dans le Security Tracker de Debian (champ de recherche tout en bas). Je trouve le numéro du bulletin de sécurité Debian : DSA-4294-1. Je consulte les archives de la liste de diffusion debian-security-announce (si t'es l'admin d'un parc de machines Debian, je te conseille de t'y abonner) ou je cherche dans le dépôt git du security tracker de Debian (fonctionnalité « blame » pour identifier le commit qui a ajouté telle ligne dans tel fichier). Dans les deux cas, je trouve que la vulnérabilité CVE-2018-16509 dans Ghostscript a été corrigée le 16 septembre 2018.
[**] Même raisonnement qu'au point précédent pour trouver ces bulletins de sécurité Debian.