GnuPGの脆弱性(CVE-2018-12020)




06/08/2018にGnuPGの脆弱性情報(CVE-2018-12020)が公開されています。今回はこの脆弱性の概要と、各ディストリビューションの対応について簡単にまとめてみます。


こんにちは。SIOS OSSエバンジェリスト/セキュリティ担当の面 和毅です。

06/08/2018にGnuPGの脆弱性情報(CVE-2018-12020)が公開されています。今回はこの脆弱性の概要と、各ディストリビューションの対応について簡単にまとめてみます。



Priority

Important

影響範囲

全てのプラットフォーム上での全てのバージョンのGnuPG

修正方法

GnuPG 2.2.8で修正されています。詳しくは、各ディストリビューションの情報を確認してください。

CVE概要(詳細はCVEのサイトをご確認ください)

  • http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-12020
    • ファイル名のサニタイズミスによるターミナル制御インジェクション、又は検証ステータスの偽造

    • 重要度 - Important

    • OpenPGPプロトコルではオリジナルのファイル名を署名や暗号化されたメッセージに含めることが可能です。復号化と検証を行う際に、GPGツールではファイル名を表示することが出来ます。しかしファイル名を表示する際にサニタイズを行っていなかったため、ファイル名に改行やコントロールキャラクタを含めることが出来ます。これを用いて、ターミナル制御時にインジェクションを行ったり、ステータスメッセージを偽ることが出来ます。これらのステータスメッセージはプログラムによってパースされるため、gpgと組み合わせて使用されている他のメールリーダ等のプログラムにもステータスを偽ることが出来ます。

  • 回避策その他

    • もしアプリケーションがGPGMEを用いてるときは、そのアプリケーションは安全です。幸いなことに、殆どの(GpgOL, KMail等の)最新のメールリーダはGPGMEを使用しています。

      Muttを用いてる場合には、"set crypt_use_gpgme"を使うようにしてください。

    • GnuPGのステータスを出力しているバアは"--status-fd"を用いてファイルディスクリプタを専用のものにしている場合には安全です。専用のファイルディスクリプタはログ出力と共有されていないからです。ログ出力のデフォルトはstderr(2)となっていますが、"--logger-fd"オプションを用いれば違う値に変えられます。

    • GnuPGで"--verbose"を用いない場合にも安全です。ただし、"--verbose"は設定ファイルに含まれているかもしれませんので確認をしてください。最新のバージョンに上げるまでは、"--no-verbose"をオプションに付けることで暫定的な回避策とすることが出来ます。

    • その他の暫定的な回避策としては、ログ出力を他のファイルにリダイレクトすることです。例えば、"--log-file /dev/null"等です。

    • 簡単なテストで、使用しているGnuPGに問題があるかが判定できます。

  • GnuPGに問題があるかの簡単なテスト(一次情報源に載っているものと同じで、手順をわかりやすくしてます)

    パスワードを聞かれると思いますが、パスワードは"abc"です。一次情報源には載ってないので注意です。
    1. 下記をコピペしてファイル(/tmp/abc等)として保存します。

      -----BEGIN PGP MESSAGE-----
      
      jA0EBwMC1pW2pqoYvbXl0p4Bo5z/v7PXy7T1BY/KQxWaE9uTBRbf4no64/+5YYzX
      +BVNqP+82aBFYXEsD9x1vGuYwofQ4m/q/WcQDEPXhRyzU+4yiT3EOuG7sTTaQR3b
      8xAn2Qtpyq5tO7k9CN6dasaXKSduXVmFUqzgU+W9WaTLOKNDFw6FYV3lnOoPtFcX
      rzhh2opkX9Oh/5DUkZ6YmUIX3j/A0z+59/qNO1i2hQ==
      =zswl
      -----END PGP MESSAGE-----
      
    2. 先程保存したファイルをパースして、下記のようにコマンドに食わせます。

      パスワードを聞かれると思いますが、パスワードは"abc"です。

      $ cat /tmp/abc|gpg --no-options -vd 2>&1 | grep '^\[GNUPG:] INJECTED' 
      
    3. 脆弱性がある場合、以下のような出力になります。

      [GNUPG:] INJECTED status line'
      

主なディストリビューションの対応方法

詳細は、各ディストリビューションの提供元にご確認ください


対処方法

各ディストリビューションの案内に従い、アップデートを行ってください。全てのRed Hat製品でパッチが行き渡っているかを確認するには、Red Hat Satelliteを使うと管理が便利でしょう。

Red Hat Satelliteを用いた一般的なErattaの適用は、『Red Hat Satellite 6でerrataを適用してみる』を 参考にして下さい。

また、OSの再起動が発生しますので、pacemakerなどOSSのクラスタ製品LifeKeeperなどの商用のクラスタリング製品を使うとサービス断の時間を最小限にすることが出来ます。

[参考]

https://dev.gnupg.org/T4012

[Announce] [security fix] GnuPG 2.2.8 released (CVE-2018-12020)

セキュリティ系連載案内

前へ

Linux Kernelの脆弱性(CVE-2018-5814)

次へ

OpenSSLの脆弱性 ( CVE-2018-0732 )