web-dev-qa-db-fra.com

Risques de sécurité d'utilisation de FFMPEG dans le cadre du service Web

Je travaille sur un service Web utilisant FFMPEG sur le backend pour le traitement des fichiers multimédia téléchargés par l'utilisateur. Je donne aux utilisateurs quelques options pour personnaliser la manière dont leurs vidéos sont traitées, ce qui est essentiellement paramétrant la commande FFMPEG.

Je prévois d'exécuter FFMPEG dans un environnement dockerisé, éventuellement avec un nouveau conteneur Docker par exécution. Quoi qu'il en soit, cet environnement pourrait être utilisé pour exécuter du code arbitraire et avoir accès à certains de mes secrets.

Au-delà d'une injection de ligne de commande, existe-t-il d'autres préoccupations de sécurité à considérer ici?

Edit :

Une mise à jour sur ma situation. J'exécute FFMPEG à l'intérieur d'un conteneur Docker avec réseautage désactivé et en passant les fichiers d'entrée et de sortie via un répertoire partagé.

La commande ci-dessous fait ce qui suit:

  • Met le fichier d'entrée dans un répertoire partagé avec le conteneur
  • Exécute FFMPEG à l'intérieur du conteneur avec toutes les options passées
  • Placette le fichier de sortie dans le répertoire partagé hôte, où l'hôte le copiera ensuite à son emplacement de stockage final.

Commander:

docker run -v <TEMP_DIR_ON_Host>:/temp/ --network none \
    jrottenberg/ffmpeg -stats \
    -i /temp/<INPUT_FILE> \
    <FFMPEG_OPTIONS> \
    /temp/<OUTPUT_FILE>

Quelques notes:

  • TEMP_DIR_ON_HOST est un répertoire à usage unique pour une conversion
  • Ffmpeg_options sont nettoyés, mais pourraient potentiellement contenir une injection
  • Je ne suis pas verrouillé dans l'image Jrottenberg/FFMPEG, je pourrais effectuer une copie ou au moins verrouiller jusqu'à une version particulière.

Je pense que la désactivation de la mise en réseau et de limiter l'accès des fichiers extérieures réduit considérablement le risque même si des commandes malveillantes sont injectées d'une manière ou d'une autre. Y a-t-il des risques majeurs au-delà des ressources gaspillées?

7
leros

Oui, il existe des risques de sécurité, surtout si vous autorisez des formats arbitraires. FFMPEG prend en charge une grande variété de formats, à la fois populaires et obscurs, pour la vidéo, l'audio et les images. Toute vulnérabilité dans les décodeurs pour l'un des nombreux formats pourrait être exploité pour obtenir une exécution de code arbitraire. Cela devient encore plus susceptible de donner au fait que FFMPEG est écrit en C, qui n'est pas mémoire en sécurité et est optimisé pour la rapidité au lieu de la sécurité. Vous devez supposer que toute entrée non approuvée transmise à FFMPEG peut être utilisée pour obtenir une exécution de code arbitraire complète dans le contexte du processus d'exécution et construire votre modèle de menace autour de cela.

Vous pouvez faire quelques choses pour atténuer les risques potentiels en plus de Docker durcissant :

  • SECCOMP SANDBOXING - Activez SECCOMP dans Docker de limiter les systèmes SysCalls qui peuvent être effectués. Un syscall, ou un appel système, est l'interface utilisée par les utilisateursPace pour communiquer avec le noyau. Certains systèmes SysCalls sont complexes et peuvent être insécurieux, ouvrant des bugs dans le noyau à l'exploitation.

  • formats / codecs - Désactiver les décodeurs non utilisés pour réduire la surface d'attaque du décodeur. De nombreux formats, ou formats avec des fonctionnalités obscures, ont des décodeurs de mauvaise qualité qui ne sont pas contrôlés régulièrement pour des bugs. Alors que le décodeur opus est probable une qualité acceptable, qu'en est-il G.726 ?

  • limites de ressources - restreindre les ressources que tout processus de FFMPEG peut utiliser. Les ressources peuvent non seulement être utilisées pour DOS le système, mais peuvent être nécessaires pour exploiter d'autres vulnérabilités pour élever des privilèges, par exemple certains types de débordements entier nécessitant des allocations de mémoire importantes.

  • Contrôles d'accès obligatoires - Utilisez un Mac tel que Apparmor ou SELINUX pour restreindre les accès et protéger les objets sensibles, même dans le cas d'une évasion de docker. Vous pouvez également utiliser un Mac pour limiter les connexions réseau, car aucune raison pour laquelle FFMPEG doit télécharger ou télécharger des données.

  • durcissement du compilateur - Utilisez le durcissement lorsque vous construisez FFMPEG, ou téléchargez une version durcie. Le durcissement du compilateur comme la tarte, le SSP et FORCY_SOURCE peuvent rendre les vulnérabilités plus difficiles à exploiter. La tarte est particulièrement importante, car elle permet au système d'exploitation de tirer pleinement parti de l'ASLR.

7
forest