Aller au contenu
Blog
Technique5 octobre 2026

Le fichier qui cachait des URL

Un lecteur qui sonde ses fichiers par contenu lira aussi ce qu'on déguise. Un faux .mp3 contenant un manifeste ffconcat pouvait faire ouvrir des URL arbitraires depuis un lecteur local. La parade tient en une option, et la leçon dépasse le cas.

Le revers de la sonde par contenu

AquaTube ouvre ses médias avec FFmpeg, qui identifie un fichier en le sondant : il regarde le contenu, pas l'extension. C'est sa force, et c'est la bonne décision pour un lecteur ; c'est elle qui fait jouer les fichiers mal nommés que d'autres refusent.

La conséquence directe : l'extension ne borne plus rien. Un fichier renommé « chanson.mp3 » qui contient en réalité tout autre chose sera reconnu pour ce qu'il est, et traité comme tel. La capacité qui répare les fichiers honnêtes sert aussi les fichiers déguisés.

Ce qu'un manifeste peut demander

Parmi les formats que FFmpeg reconnaît au contenu, il y a des formats liste : le manifeste ffconcat, les playlists HLS. Leurs entrées ne sont pas du son, ce sont des sources à ouvrir. Y compris des sources réseau.

Le scénario tient en un glisser-déposer : un fichier « audio » déposé sur le pod, sondé, reconnu manifeste, et le lecteur local se met à ouvrir des URL choisies par l'auteur du fichier, depuis la machine de l'utilisateur. Un lecteur de fichiers locaux devenait un client réseau à l'insu de tous. Le trou a été découvert au passage, pendant le chantier décodeur de la v0.16.0 (16 juillet 2026), et le point qui fâche est là : les versions déjà publiées d'AquaTube passaient déjà par FFmpeg pour la vidéo, sans la parade. Le correctif était absent des versions publiées.

Une ligne, une frontière

La parade est une option d'ouverture : `protocol_whitelist=file`. Un lecteur de fichiers locaux n'a besoin que du protocole file ; tout le reste est coupé à la source. Le manifeste déguisé est toujours reconnu, toujours lu, mais chaque source qu'il désigne doit être un fichier local : le pivot vers le réseau n'existe plus.

Le choix de la liste blanche plutôt que la liste noire n'est pas un détail. Une liste noire des protocoles dangereux exige de les connaître tous, aujourd'hui et dans chaque version future de FFmpeg. La liste blanche inverse la charge : elle déclare le seul besoin réel, et l'inconnu est interdit par défaut.

La bonne réponse à une capacité trop large n'est pas d'y renoncer : c'est de la borner à son besoin réel, en liste blanche.

Ce que je retiens

Sonder par contenu reste la bonne décision ; y renoncer aurait réparé la faille en cassant la fonctionnalité. La leçon est ailleurs : toute dépendance puissante embarque des usages qu'on ne lui a pas demandés, et sa configuration par défaut est écrite pour le cas général, pas pour le vôtre.

La question à poser à chaque brique générique qu'on intègre : de quoi a-t-elle besoin pour mon usage précis, et comment je coupe tout le reste. La réponse tient souvent, comme ici, en une option posée au bon endroit, avec un commentaire qui explique ce qu'elle interdit.

La parade est en ligne depuis la version publiée le 16 juillet 2026 : le décodeur n'accepte plus que le protocole fichier. Si vous faites tourner une version antérieure, mettez à jour.