mp3gain は安全か: 既知の脆弱性、修正済みのビルド、メモリ安全な代替

更新 · mp3rgain v3.16.2

結論

どのビルドを使っているかによります。 mp3gain 1.6.2 と同梱コードには 21 件の CVE が公開されており、ほぼすべてが、細工された音声ファイルで起こるメモリ関連の不具合です。Debian と Ubuntu のパッケージは修正済みです。SourceForge の Windows 版と Chocolatey のパッケージは未修正で、修正を含む公式リリースは出ていません。aacgain は、どの配布元でも修正されていません。 mp3rgain は Rust で書かれた別のプログラムで、これらのコードを一切共有していません。

mp3gain はマルウェアではありません。自分で CD から取り込んだファイルに使う限り、現実的なリスクは小さいと考えられます。問題になるのは、ダウンロードしたファイルや共有フォルダ、他人が作ったライブラリなど、出どころを自分で管理していないファイルを開く場合です。このページでは、わかっていること、修正済みのビルド、mp3rgain の違いと、その主張の限界をまとめます。

脆弱性のある場所

ほとんどが次の 2 か所にあります。

  • 同梱の MP3 デコーダー。 mp3gain は解析用に、mpg123 の mpglib を古い時点で分岐させたもの (mpglibDBL) を同梱しています。mpg123 本体には長年セキュリティ修正が入っていますが、この分岐には入っていません。1.6.x 以降はシステムの libmpg123 を使ってビルドでき、その場合はこれらを避けられますが、Windows 版や多くのパッケージは同梱コードを使っています。
  • APE タグの処理。 mp3gain 独自のタグを読み書きする apetag.c に、複数のバッファオーバーフローがあります。

デコーダーと解析

CVE年種類(原文)場所
CVE-2003-05772003Denial of service (invalid bitrate)common.c
CVE-2004-08052004Buffer overflowlayer2.c
CVE-2004-09912004Buffer overflow (MPEG header)mpglib
CVE-2006-16552006Heap overflow (multiple)layer3.c
CVE-2017-129122017Buffer over-readlayer3.c
CVE-2017-144062017NULL pointer dereferenceinterface.c
CVE-2017-144072017Stack buffer over-readgain_analysis.c
CVE-2017-144082017Buffer over-readlayer3.c
CVE-2017-144092017Buffer overflow (CVSS 7.8, high)layer3.c
CVE-2017-144102017Read access violationlayer3.c
CVE-2017-144112017Stack buffer overflowinterface.c
CVE-2017-144122017Invalid memory writeinterface.c
CVE-2017-98722017Buffer over-readlayer3.c
CVE-2018-107762018Segfault, denial of servicecommon.c
CVE-2018-107782018Read access violationlayer3.c
CVE-2020-153592020Stack overflow (code execution)Local variable overflow
CVE-2021-340852021Out-of-bounds read, memory corruption (CVSS 9.8, critical)layer3.c

CVE-2020-15359 は VDA Labs がファザーの Mayhem で発見したもので、約 6,000 件のテストケースから約 1,600 件のクラッシュが報告されました。その一部は、コード実行につながりうるポインタの上書きでした。

APE タグ

CVE年種類(原文)場所
CVE-2017-129112017Stack memory corruptionapetag.c
CVE-2018-107772018Buffer overflowapetag.c
CVE-2019-183592019Buffer over-read (CVSS 5.5, medium)apetag.c
CVE-2023-493562023Stack buffer overflow (CVSS 7.5, high)apetag.c

この 4 件は、2025-11-01 にメンテナーが Debian と openSUSE のパッチをソースリポジトリに適用して修正されました。ただしその後リリースは出ていないため、配布済みのバイナリや、1.6.2 のリリースからビルドされたパッケージには含まれていません。

修正済みの mp3gain はどれか

修正を含む公式リリースがないため、対応は配布元ごとに異なります。2025 年 11 月時点の状況です。

入手元バージョン修正備考
Debian、Ubuntu (apt)1.6.2-3済み最も網羅的なパッチ。システムの libmpg123 を使用
openSUSE1.6.2一部2020 年にセキュリティ更新
Fedora1.6.2一部一部の CVE を Bugzilla で追跡
Homebrew1.6.2なしlibmpg123 を使うためデコーダーの CVE は避けられるが、APE タグの修正はなし
Arch Linux (AUR)1.6.2なし公式リポジトリから削除済み。ユーザーによる管理
Chocolatey1.5.2なし2014 年以降更新なし。古いデコーダーを同梱
SourceForge(Windows 版)1.2.5(安定版)なし2004 年頃のバイナリ。上記すべての CVE の影響を受ける

出典: Debian セキュリティトラッカー、Repology、パッチが上流に適用された SourceForge のバグ #62。

aacgain

aacgain は mp3gain に AAC 対応を加えた派生版です。最後のリリースは 2.0.0(2019 年 12 月)、最後のコミットは 2022 年 7 月です。依存ライブラリをすべてソースで同梱しており、どれもセキュリティ更新されていません。同じ mpglibDBL デコーダーと未修正の apetag.c に加えて、それぞれ独自の CVE を持つ faad2 と mp4v2 を含みます。修正済みの aacgain を配布しているディストリビューションはなく、Homebrew は 2023 年 4 月にメンテナンスされていないとして非推奨にしました。

mp3rgain は何が違うか

mp3rgain は修正を当てた派生版ではなく、書き直しです。mp3gain や aacgain とコードを共有していません。

処理mp3gain、aacgainmp3rgain
ゲインの変更ビットストリーム内の global_gain を書き換える (C)同じ方法 (Rust)
解析のためのデコードmpglib または libmpg123、AAC は faad2 (C)Symphonia (Rust)
MP4 コンテナmp4v2 (C)Symphonia と mp3rgain 自身のパーサー (Rust)
APE タグapetag.c (C)mp3rgain 自身の実装 (Rust)

mp3rgain 自身のソース(ライブラリ、コマンドラインツール、デスクトップアプリ)には unsafe ブロックがなく、デコードに使う Symphonia の各クレートにもありません。安全な Rust では、範囲外へのアクセスはメモリを壊すのではなくエラーでプログラムを止め、解放後の使用、ヌル参照、データ競合はコンパイル時に拒否されます。上の CVE のほぼすべてを占めるバッファオーバーフローや範囲外読み取りは、まさにこの仕組みで防がれる種類の不具合です。

ここで主張していないこと。 これは設計の説明であり、検証済みの保証ではありません。CVE の実証ファイルは mp3rgain のテストに含まれておらず、ファジングの仕組みもまだありません。安全な Rust でも通常のバグはなくなりません。壊れたファイルによって mp3rgain がエラーで止まったり、必要以上にメモリを使ったりする可能性はあります。また rayon など一部の依存ライブラリは内部で unsafe を使っています。こうした問題を見つけた場合は 報告 をお願いします。

自分で確かめる

# mp3rgain 自身のコードに unsafe ブロックがないこと(何も表示されません)
grep -rnw unsafe src mp3rgui/src

# 既知の脆弱性を持つ依存ライブラリがないこと(CI でも実行しています)
cargo audit
cargo audit --file mp3rgui/Cargo.lock

配布ファイルには SHA-256 のファイルが付き、v3.16.0 以降は GitHub のビルド来歴証明も付いています。これにより、そのファイルが本リポジトリのリリース用ワークフローで、該当タグからビルドされたことを確認できます。

gh attestation verify mp3rgain-v3.16.2-windows-x86_64.zip --repo M-Igashi/mp3rgain

アプリはネットワーク通信を行わず、利用状況の収集もしません。Windows 版のバイナリにコード署名はありません。macOS 版のアプリは Developer ID で署名され、公証を受けています。

いま mp3gain を使っている方へ

  • Debian や Ubuntu で apt から入れた場合: 修正済みのビルドです。乗り換えは任意です。mp3rgain に替えると、AAC 対応、並列処理、BS.1770 の測定が加わります。
  • Windows で SourceForge や Chocolatey から入れた場合: そのバイナリには修正が一切入っていません。mp3rgui は同じ操作の流れで使える、メンテナンスの続いているアプリで、MP3Gain で調整済みのファイルを元に戻すこともできます。
  • aacgain を使っている場合: 修正済みのビルドはありません。mp3rgain は同じ M4A ファイルを、同じオプションで扱えます。
  • スクリプトやコンテナ、CI で使っている場合: オプション、TSV 出力、undo タグが互換なので、たいていはコマンド名を置き換えるだけで移行できます。

各ディストリビューションの勧告を含む参照元の一覧は、GitHub の docs/security.md(英語)にあります。

次に読む