マルチメディアのセキュリティに関する考慮事項
データフロー図
この図は、信頼できないメディアソースを安全に扱うためにQt Multimedia で採用されている、高レベルのデータ処理要素を示しています。

前提条件
Qt の他の部分と同様に、Qt Multimedia は、実行環境が正しく設定されており、侵害されていないことを前提としています。特に、プロセス環境、ライブラリやプラグインが読み込まれる検索パス、およびインストールされているハードウェアデコードドライバは、攻撃者ではなく、アプリケーションを展開する者によって管理されているものと想定されます。Qt Shared Security Model で説明されているように、すでに安全性が損なわれているプロセス環境を必要とする攻撃は、Qt のセキュリティ責任の範囲外となります。
メディアコンテンツ自体は、この前提の対象外です。メディアデータおよびそれを参照するURLは、信頼できない入力として扱われ、本ページの残りの部分で取り上げます。「信頼できないデータの取り扱い」も参照してください。
したがって、以下のポイントの一部は、Qt Multimedia がそれらを防御するためではなく、それらがアプリケーション開発者の責任であり、アプリケーションの展開時に考慮する必要があるため、ここに挙げられています。
リスク
理論上、アプリケーションがユーザーによる信頼できないメディアソースの再生を許可しており、かつ攻撃者が上の図に示されたいずれかの要素の脆弱性を把握している場合、攻撃者はその脆弱性を引き起こすメディアソースを作成し、意図された方法でアプリケーションに提供することが可能です。
以下のリスクは、Qt Shared Security Model で定義された役割に従い、対処の責任者が誰であるかによってグループ分けされています。
Qt が対処するリスク
- Qt Multimedia に同梱されているサードパーティ製ライブラリの脆弱性。Qt Multimedia は、侵害されたサードパーティ製ライブラリの拡散を阻止しようとはしないため、これらのライブラリを最新の状態に保つことがアプリケーションを保護することになります。私たちは、同梱しているライブラリに対して報告された脆弱性を追跡し、パッチリリースが利用可能になり次第更新を行い、自ら発見した不具合をアップストリームプロジェクトに報告しています。
- Qt Multimedia 独自のデータフロー要素に存在する欠陥で、未定義の挙動を引き起こす可能性があるもの。最も注意が必要な領域は、ネイティブおよびバックエンドのメディアフレームのデータレイアウト処理です。私たちは確立されたセキュアコーディングの慣行に従い、このコードを手動および自動テストで網羅し、さらにQt Multimedia に対して内部でファズテストを実施して、これらのテストでは検出できない欠陥を見つけ出しています。
アプリケーション開発者が対処すべきリスク
- いくつかのQt Multimedia API は、ソースまたは宛先として URL を受け取り、アプリケーションに代わってファイルシステムまたはネットワークへのアクセスを実行します。これには、QMediaPlayer::setSource 、QAudioDecoder::setSource 、QSoundEffect::setSource 、およびQMediaRecorder::setOutputLocation が含まれます。したがって、検証されていない URL をこれらの API に渡すと、その URL を制御する者が、どのファイルが読み書きされるか、どのホストに接続されるかを決定できるようになります。
- GStreamer メディアバックエンドでは、QGStreamerVideoSource またはQMediaPlayer に悪意のあるカスタム GStreamer パイプライン記述を渡し ます。GStreamer パイプライン記述を適切に前処理および検証できない限り、Qt Multimedia を使用して信頼できない GStreamer メディアパイプラインを実行しないことを強く推奨します。
- メディアバックエンドは、そのプラグインが実際に読み込める場合にのみ使用されます。FFmpegメディアバックエンドはFFmpegライブラリに対して動的にリンクされるため、それらのバイナリがアプリケーションと共にデプロイされていない場合、またはプラグインの読み込み時に動的リンカーによって解決できない場合、Qt Multimedia は警告なしに利用可能な別のバックエンドにフォールバックします。 残りのバックエンドは、文書化された優先順位ではなく、プラグインが列挙されている順序で試されます。そのため、デプロイメント上のミスにより、そのアプリケーションに対してテストされたことのないバックエンドで動作してしまう可能性があります。バックエンドがまったく読み込めない場合、機能するのはQMediaDevices 、QAudioDevice 、QSoundEffect 、QAudioSink 、およびQAudioSource のみとなります。
動作環境に起因するリスク
これらのリスクは、Qt Multimedia 自体ではなく、アプリケーションが実行される環境に起因するものであり、Qt Multimedia ではこれらを検出することも防止することもできません。アプリケーションの開発者は、アプリケーションの展開時にこれらのリスクを考慮する必要があります。
- 環境設定の誤りや、ハードウェアデコード用ドライバの設定ミス。環境が正しく設定されており、ハードウェアデコード用ドライバが適切にインストールされ、最新の状態であることを確認してください。
- Qt Multimedia は実行時にメディアバックエンドを選択しますが、この選択は「バックエンドの変更」で説明されているように、
QT_MEDIA_BACKEND環境変数によって上書き可能です。 したがって、アプリケーションプロセスの環境に影響を与えることができる者であれば誰でも、アプリケーションを開発およびテストしたときとは異なるメディアバックエンドでアプリケーションを実行させることができ、その結果、サポートされるフォーマットやプロトコルが異なり、攻撃対象領域も異なってしまう可能性があります。
影響
上記の問題が悪用されると、以下のセキュリティ上の影響が生じる可能性があります。
- 未定義の挙動。実際には、メモリリーク、アプリケーションのクラッシュ、またはフリーズにつながります。
- 攻撃者がヒープ破損を意図的に制御できる場合、リモートコード実行が可能となる可能性があります。
m3uのような、プレイリストエントリで異なるプロトコルの使用を許可するメディア形式の場合、設定が誤っていると、攻撃者がファイルシステムを読み取ったり、任意のネットワークホストに接続したりできる可能性があります。デフォルトでは、潜在的に危険なプロトコルは拒否リストに登録されていますが、この動作は以下のいずれかを通じて変更可能です:- 環境設定。FFmpeg メディアバックエンドで許可されるネットワークプロトコルの設定については、「Configuring allowed network protocolsfor the FFmpeg media backend」を参照してください。
- GStreamer カスタムパイプライン。詳細については、Qt Multimedia の GStreamer バックエンドに関する注意事項(QGStreamerVideoSource )およびGStreamer パイプラインの説明ドキュメントを参照してください。
- Qt Multimedia に同梱されているもの以外のメディアバックエンド。メディアバックエンドは実行時にプラグインとして読み込まれるため、アプリケーションのプラグイン検索パスにあるバックエンドプラグイン、またはライブラリ検索パスにある置換されたFFmpegバイナリは、上記のデフォルト設定ではなく、ビルド時に指定されたプロトコル制限を適用します。
なお、メディア形式によっては、有効なメディアソースであっても、必ずしも関連するメディア標準に厳密に準拠しているとは限りません。また、ソースが破損したり無効になったりする方法も数多く存在します。Qt Multimedia およびサードパーティ製ライブラリに対して、それぞれのコミュニティによって手動および自動のテストが実施されていますが、不正な形式のメディアソースのすべてが正しく処理されることを保証することはできません。 高度なセキュリティ要件を持つアプリケーションを開発する際は、この制限を考慮に入れてください。
緩和策
- アプリケーション自体から発信されていない URL はすべて信頼できない入力として扱い、Qt Multimedia に渡す前に検証を行ってください。拒否する URL スキームやホストの拒否リスト(denylist)よりも、許可する URL スキームやホストの許可リスト(allowlist)を採用することを推奨します。アプリケーションがすでにメディアデータを保有している場合、または自身で取得できる場合、QMediaPlayer::setSourceDevice を使用することで、データの読み取り方法をアプリケーションが制御し続けることができます。
- メディアバックエンドが使用を許可されるプロトコルを制限してください。FFmpeg メディアバックエンドについては、「FFmpeg の詳細設定」の「許可されるネットワークプロトコルの設定」を参照してください。
- デプロイされたアプリケーションが使用できるメディアバックエンドを制御します。アプリケーションが必要とするメディアバックエンドプラグインのみをデプロイすることが、ここでの効果的な制御手段となります。これにより、
QT_MEDIA_BACKENDが選択できる他のプラグインがなくなるためです。 なお、デフォルトのバックエンドを変更するだけでは不十分である点に注意してください。QT_MEDIA_BACKENDはデフォルト設定よりも優先され、Qt Multimedia 自体をソースからビルドする際に-default-media-backendコンフィギュレーションオプションで設定されたデフォルト設定よりも優先されます。 - デプロイメントテストの一環として、アプリケーションが意図したメディアバックエンド上で実際に動作することを確認してください。「
qt.multimedia.plugin」ロギングカテゴリには、どのバックエンドが読み込まれたか、およびその前にどのプラグインの読み込みに失敗したかが記録されます。 - Qt Multimedia Qt Online Installer
avcodecavutil、 、 、 、および に対して動的にリンクされています。したがって、アプリケーション開発者やエンドユーザーは、Qtのパッチリリースを待つことなく、FFmpegの脆弱性に対処するために、これらのライブラリのバイナリ互換性のある独自のビルド(つまり、同じFFmpegメジャーバージョンのビルド)を展開することができます。avformatswscaleswresample
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.