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:
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:
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?
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.