Advisory4 min

Lecture de fichiers arbitraires et RCE dans Piwigo

Jonathan Chambre

Par Jonathan Chambre

Publié le 18 juillet 2026

Read in English
Bulletin de sécurité
Produit
Piwigo
Sévérité
High
Versions affectées
≤ 16.3.0
Version corrigée
16.4.0

Introduction

Piwigo est une application web open source de gestion et de partage de photos. Elle est utilisée par des particuliers, des associations et des organisations pour héberger des galeries, gérer des albums et administrer les droits d'accès aux médias.

Description

Nous avons identifié une vulnérabilité à haut risque dans Piwigo, affectant les versions jusqu'à la 16.3.0 incluse. La validation des fichiers téléversés est insuffisante lorsque les images sont traitées par la bibliothèque Imagick : un fichier dont le contenu réel ne correspond pas à l'extension annoncée est tout de même interprété par ImageMagick.

Un utilisateur disposant de privilèges d'administration peut ainsi lire des fichiers arbitraires du serveur et, selon la configuration d'ImageMagick, écrire des fichiers et obtenir une exécution de code à distance.

ÉlémentValeur
CVECVE-2026-85750
GHSAGHSA-j9q6-q52g-g8jw
CWECWE-20 : Improper Input Validation
Score CVSS 3.17.2 (High)
VecteurCVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H

Chronologie

DateDescription
03/05/2026Publication de Piwigo 16.4.0, qui corrige la vulnérabilité
18/07/2026Publication de l'advisory GHSA-j9q6-q52g-g8jw sur le dépôt GitHub de Piwigo

Détails techniques

Confusion de format

ImageMagick ne se fie pas à l'extension d'un fichier : il détermine le format à traiter à partir du contenu. Si l'application ne vérifie pas elle-même que le fichier téléversé est bien une image du type attendu, un attaquant peut transmettre un document SVG sous un nom en .png. Imagick l'interprète alors comme du SVG, avec tout ce que ce format permet : références à des ressources externes ou locales, et appels à d'autres coders d'ImageMagick.

Lecture de fichiers arbitraires

Le fichier suivant, nommé par exemple image.png, contient en réalité un SVG. Son élément image référence le fichier local /etc/passwd via le pseudo-protocole text: d'ImageMagick, qui rend le contenu d'un fichier texte sous forme d'image.

<svg width="1000" height="1000" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg">
  <image xlink:href="text:/etc/passwd" width="1000" height="1000" />
</svg>

Une fois ce fichier téléversé, la miniature ou la version redimensionnée générée par Piwigo affiche le contenu de /etc/passwd. Tout fichier lisible par l'utilisateur du serveur web peut être exfiltré de la même manière : fichiers de configuration, identifiants de base de données, clés.

Vers l'exécution de code

ImageMagick prend également en charge le Magick Scripting Language (MSL), un format XML qui décrit une suite d'opérations : lecture d'une ressource, transformation, puis écriture du résultat sur disque. Lorsque le coder MSL est accessible, un SVG malveillant peut y faire appel et écrire un fichier à l'emplacement choisi par l'attaquant. Si cet emplacement est servi et interprété par le serveur web, par exemple un fichier PHP dans l'arborescence de Piwigo, l'écriture se transforme en exécution de code à distance.

La faisabilité de cette seconde étape dépend de la version d'ImageMagick et de sa politique de sécurité (policy.xml).

Impact

  • Lecture de fichiers locaux du serveur
  • Écriture de fichiers sur le serveur
  • Exécution de code à distance, selon la configuration d'ImageMagick

Remédiation

La vulnérabilité est corrigée dans la version 16.4.0 de Piwigo. Nous recommandons de mettre à jour toute instance vers cette version ou une version ultérieure.

En complément, et pour les instances qui ne peuvent pas être mises à jour immédiatement, nous recommandons :

  • de valider strictement le type des fichiers téléversés, à partir du type MIME réel et des magic bytes, et non de l'extension ;
  • de nettoyer les fichiers SVG acceptés afin d'en retirer les éléments dangereux et les références à des ressources ;
  • de durcir la politique de sécurité d'ImageMagick (policy.xml) pour désactiver les coders dangereux, en particulier SVG, MSL et TEXT.
<policymap>
  <policy domain="coder" rights="none" pattern="{SVG,MSVG,MSL,TEXT,URL,HTTP,HTTPS}" />
  <policy domain="path" rights="none" pattern="@*" />
</policymap>

Ressources

Continuer la lecture

Parlez-nous de votre projet.

Discutons ensemble de vos besoins et attentes pour vous proposer un service sur mesure.