セキュリティ
セキュリティの脆弱性は、脆弱性の報告ガイドに記載されているプロセスを介して報告してください。TruffleRubyを含め、GraalVMプロジェクトのセキュリティに関する問題を報告するための具体的なガイドラインは、SECURITYファイルを参照してください。
MRIの脆弱性
MRIに対して報告された脆弱性は、Rubyの設計や、TruffleRubyがMRIと共有するコードに該当する場合があります。報告されたMRIの脆弱性をここにリストし、MRIではどのようにしてその脆弱性を軽減したか、何かによってその軽減策がテストされているかどうか、およびTruffleRubyではどのようにして軽減したかを記載します。古い報告の詳細を把握することは非常に困難である場合が多いため、従来の脆弱性をすべて調査したわけではありません。
MRIのWebサイトに掲載されている詳細と相互参照してください。
番号 | 説明 | 相手方の軽減策 | テスト | TruffleRubyの軽減策 |
---|---|---|---|---|
CVE-2022-28739 | StringからFloatへの変換でのバッファ・オーバーラン | Javaセマンティクスのため、該当なし | ||
CVE-2022-28738 | Regexpコンパイルで二重開放 | Javaセマンティクスのため、該当なし | ||
CVE-2021-41819 | CGI::Cookie.parseのCookie接頭辞スプーフィング | 修正 | テスト | 同じ |
CVE-2021-41817 | 日付での正規表現サービス拒否の脆弱性(ReDoS) | 修正 | テスト | TRegexのため、該当なし |
CVE-2021-41816 | CGI.escape_htmlでバッファ・オーバーラン | 修正 | テスト | 該当なし。CGI.escape_htmlのRuby定義を使用します |
CVE-2021-31810 | Net::FTPでのFTP PASV応答の信頼の脆弱性 | 修正 | テスト | 同じ |
CVE-2021-32066 | Net::IMAPでのStartTLSストリップの脆弱性 | 修正 | テスト | 同じ |
CVE-2021-31799 | RDocでのコマンド・インジェクションの脆弱性 | バックポートの修正 | テスト | 同じ |
CVE-2021-28966 | Windows上の一時ファイル内のパス・トラバーサル | tmpdir.rb内のパスのサニタイズ | test/mri/tests/test_tmpdir.rb 内 |
tmpdir.rb内のパスのサニタイズ |
CVE-2021-28965 | REXMLのXMLラウンドトリップの脆弱性 | REXML 3.2.5への更新 | ruby/rexml内 | REXML 3.2.5への更新 |
CVE-2020-10663 | JSONにおける安全でないオブジェクト作成の脆弱性(追加修正) | 修正 | 仕様 | TruffleRubyで使用しているPure RubyバージョンのJSONは安全である |
CVE-2019-16255 | Shell#[]およびShell#testのコード・インジェクションの脆弱性 | 修正 | MRIテスト | 同じ |
CVE-2019-16254 | WEBrickにおけるHTTPレスポンスの分割(追加修正) | 修正 | MRIテスト | 同じ |
CVE-2019-15845 | File.fnmatchおよびFile.fnmatch?のNULインジェクションの脆弱性 | 修正 | MRIテスト | NULバイトのチェック |
CVE-2019-16201 | WEBrickのDigestアクセス認証の正規表現サービス拒否の脆弱性 | 修正 | MRIテスト | 同じ |
CVE-2012-6708 | RDocにおける複数のjQueryの脆弱性 | jquery.jsの削除 | 該当なし | 同じ |
CVE-2015-9251 | RDocにおける複数のjQueryの脆弱性 | jquery.jsの削除 | 該当なし | 同じ |
CVE-2019-8320 | tar の解凍時にsymlinkを使用してディレクトリを削除する |
展開されたパスのチェック | MRIのtest/rubygems/test_gem_package.rb でテスト済 |
同じパッチを適用済 |
CVE-2019-8321 | verbose におけるエスケープ・シーケンス・インジェクション |
メッセージのサニタイズ | ruby/spec :security でテスト済 |
同じパッチを適用済 |
CVE-2019-8322 | gem owner におけるエスケープ・シーケンス・インジェクション |
メッセージのサニタイズ | ruby/spec :security でテスト済 |
同じパッチを適用済 |
CVE-2019-8323 | APIレスポンスの処理におけるエスケープ・シーケンス・インジェクションの脆弱性 | メッセージのサニタイズ | ruby/spec :security でテスト済 |
同じパッチを適用済 |
CVE-2019-8324 | 悪意のあるgemのインストールにより、任意のコードが実行される可能性がある | インストール前チェックより前にgemを検証 | MRIのtest/rubygems/test_gem_installer.rb でテスト済 |
同じパッチを適用済 |
CVE-2019-8325 | エラーにおけるエスケープ・シーケンス・インジェクション | エラー・メッセージのサニタイズ | ruby/spec :security でテスト済 |
同じパッチを適用済 |
CVE-2018-16395 | OpenSSL::X509::Name の等価性チェックが正しく機能しない |
|||
CVE-2018-16396 | 一部のディレクティブを使用するArray#pack およびString#unpack で汚染フラグが伝播されない |
追加の汚染処理 | ruby/spec :security でテスト済 |
追加の汚染処理 |
CVE-2018-6914 | tempfile およびtmpdir におけるディレクトリ走査を伴う意図しないファイルおよびディレクトリ作成 |
パスのサニタイズ | ruby/spec :security でテスト済 |
パスのサニタイズ |
CVE-2018-8779 | UNIXServer およびUNIXSocket における有害なNULバイトによる意図しないソケット作成 |
NULバイトのチェック | ruby/spec :security でテスト済 |
NULバイトのチェック |
CVE-2018-8780 | Dir における有害なNULバイトによる意図しないディレクトリ走査 |
NULバイトのチェック | ruby/spec :security でテスト済 |
NULバイトのチェック |
CVE-2018-8777 | WEBrickにおける大きいリクエストによるDoS | ヘッダー長のロジック | MRIのtest/webrick/test_httpserver.rb でテスト済 |
同じ軽減策を適用済 |
CVE-2017-17742 | WEBrickにおけるHTTPレスポンスの分割 | 無効なヘッダーのロジック | ruby/spec :security でテスト済 |
同じ軽減策を適用済 |
CVE-2018-8778 | String#unpackにおけるバッファ・アンダーリード | 範囲チェック | ruby/spec :security でテスト済 |
範囲チェック |
CVE-2017-17405 | Net::FTP におけるコマンド・インジェクションの脆弱性 |
コマンド内のパスを一般的なIOコマンドではなくパスとして明示的に扱う | MRIのtest/net/ftp/test_ftp.rb でテスト済 |
同じ軽減策を適用済 |
CVE-2017-10784 | WEBrickのBasic認証におけるエスケープ・シーケンス・インジェクションの脆弱性 | ログの適切なエスケープ | MRIのtest/webrick/test_httpauth.rb でテスト済 |
同じ軽減策を適用済 |
CVE-2017-0898 | Kernel.sprintf におけるバッファ・アンダーランの脆弱性 |
|||
CVE-2017-14033 | OpenSSLのASN1デコードにおけるバッファ・アンダーランの脆弱性 | |||
CVE-2017-14064 | JSONの生成時におけるヒープ暴露の脆弱性 | |||
CVE-2017-0902、CVE-2017-0899、CVE-2017-0900、CVE-2017-0901 | RubyGemsにおける複数の脆弱性 | |||
CVE-2015-7551 | FiddleおよびDLにおける汚染された文字列の安全でない使用(CVE-2009-5147に対する軽減策で修正した問題の再発) | 追加の汚染チェック | MRIのtest/mri/tests/fiddle/test_handle.rb でテスト済 |
$SAFE をサポートしておらず、DL モジュールはRuby 2.2.0で削除されたため、該当しない |
CVE-2015-1855 | Ruby OpenSSLホスト名検証 | |||
CVE-2014-8090 | 別のサービス拒否XML展開 | |||
CVE-2014-8080 | サービス拒否XML展開 | ruby/spec :security でテスト済 |
||
なし | ext/opensslのデフォルト設定の変更 | |||
CVE-2014-2734 | 脆弱性の係争 | |||
CVE-2014-0160 | TLSのハートビート拡張機能におけるOpenSSLの重大な脆弱性 | |||
CVE-2014-2525 | YAMLのURIエスケープ解析におけるヒープ・オーバーフロー | |||
CVE-2013-4164 | 浮動小数点解析におけるヒープ・オーバーフロー | ruby/spec :security でテスト済 |
||
CVE-2013-4073 | SSLクライアントにおけるホスト名チェック・バイパスの脆弱性 | |||
CVE-2013-2065 | RubyのDLおよびFiddleにおけるオブジェクト汚染バイパス | 追加の汚染チェック | MRIのtest/mri/tests/fiddle/test_func.rb でテスト済 |
$SAFE をサポートしておらず、DL モジュールはRuby 2.2.0で削除されたため、該当しない |
CVE-2013-1821 | REXMLにおけるエンティティ展開によるDoS脆弱性 | |||
CVE-2013-0269 | JSONにおけるサービス拒否と安全でないオブジェクト作成の脆弱性 | |||
CVE-2013-0256 | rdoc によって生成されたRDocドキュメントのXSS脆弱性の悪用 |
|||
CVE-2012-5371 | ruby 1.9のハッシュフラッディングDoS脆弱性 | |||
CVE-2012-4522 | 不正なNUL文字の挿入による意図しないファイル作成 | |||
CVE-2012-4464、CVE-2012-4466 | Exception#to_s /NameError#to_s に関する$SAFE回避の脆弱性 |
$SAFE をサポートしていないため、該当しない |
||
なし | RubyGemsのセキュリティ修正: リモート・リポジトリのSSLサーバー検証の失敗 | |||
CVE-2011-3389 | Ruby OpenSSLモジュールのセキュリティ修正: TLS BEAST攻撃の防止策として0/n分割を許可 | |||
CVE-2011-4815 | Rubyのハッシュ・アルゴリズムに関するサービス拒否攻撃を発見(CVE-2011-4838、CVE-2012-5370、CVE-2012-5372を相互参照) | プロセス開始時間を組み込むことにより、ハッシュが非決定的になる | ruby/spec :security でテスト済 |
/dev/urandom からのシードを組み込むことにより、ハッシュが非決定的になる |
なし | 例外メソッドが$SAFE をバイパスできる |
$SAFE をサポートしていないため、該当しない |
||
なし | FileUtilsがsymlink競合攻撃に対して脆弱である | |||
CVE-2010-0541 | WEBrickにおけるXSS | |||
なし | ARGF.inplace_mode= におけるバッファ・オーバーラン |
|||
なし | WEBrickにエスケープ・シーケンス・インジェクションの脆弱性がある | |||
CVE-2009-5147 | DL::dlopen により、汚染された名前のライブラリが開く |
追加の汚染チェック | DL モジュールは最新のRubyには存在しない |
$SAFE をサポートしておらず、DL モジュールはRuby 2.2.0で削除されたため、該当しない |
CVE-2009-4124 | String におけるヒープ・オーバーフロー |
|||
なし | BigDecimal におけるDoS脆弱性 |
|||
なし | REXML におけるDoS脆弱性 |
|||
CVE-2008-1447 | Rubyにおける複数の脆弱性 | |||
CVE-2008-2662、CVE-2008-2663、CVE-2008-2725、CVE-2008-2726、CVE-2008-2664、CVE-2008-1891 | 任意のコードが実行される脆弱性 | |||
なし | WEBrickのファイル・アクセスの脆弱性 | |||
なし | Net::HTTPS の脆弱性 |
|||
JVN#84798830 | CGIライブラリにおける別のDoS脆弱性 | |||
CVE-2006-5467 | CGIライブラリにおけるDoS脆弱性 | |||
VU#160012 | セーフ・レベル設定におけるRubyの脆弱性 | $SAFE をサポートしていないため、該当しない |
JRubyの脆弱性
TruffleRubyはJRubyのコードを使用するため、JRubyに対して報告された脆弱性がTruffleRubyに該当する場合があります。
番号 | 説明 | 相手方の軽減策 | テスト | TruffleRubyの軽減策 |
---|---|---|---|---|
CVE-2012-5370 | JRubyでは、ハッシュ衝突を予測どおりにトリガーする機能を適切に制限することなくハッシュ値が計算される(CVE-2011-4815、CVE-2011-4838、CVE-2012-5372を相互参照) | プロセス開始時間を組み込むことにより、ハッシュが非決定的になる | ruby/spec :security でテスト済 |
/dev/urandom からのシードを組み込むことにより、ハッシュが非決定的になる |
CVE-2011-4838 | 1.6.5.1より前のJRubyでは、ハッシュ衝突を予測どおりにトリガーする機能を制限することなくハッシュ値が計算される(CVE-2011-4815、CVE-2012-5370、CVE-2012-5372を相互参照) | プロセス開始時間を組み込むことにより、ハッシュが非決定的になる | ruby/spec :security でテスト済 |
/dev/urandom からのシードを組み込むことにより、ハッシュが非決定的になる |
Rubiniusの脆弱性
TruffleRubyはRubiniusのコードを使用するため、Rubiniusに対して報告された脆弱性がTruffleRubyに該当する場合があります。
番号 | 説明 | 相手方の軽減策 | テスト | TruffleRubyの軽減策 |
---|---|---|---|---|
CVE-2012-5372 | Rubiniusでは、ハッシュ衝突を予測どおりにトリガーする機能を適切に制限することなくハッシュ値が計算される(CVE-2011-4815、CVE-2011-4838、CVE-2012-5370を相互参照) | /dev/urandom からの出力を組み込むことにより、ハッシュが非決定的になる |
ruby/spec :security でテスト済 |
/dev/urandom からのシードを組み込むことにより、ハッシュが非決定的になる |
Java依存性の脆弱性
JONI
既知の脆弱性はありません。
JCodings
番号 | 説明 | 相手方の軽減策 | テスト | TruffleRubyの軽減策 |
---|---|---|---|---|
CVE-2010-1330 | 1.4.1より前のJRubyの正規表現エンジンでは、$KCODE が'u' に設定されている場合、UTF-8文字の直後の文字が正しく処理されない |
正規表現操作の実行時にUTF-8エンコーディングのバイト・シーケンスをチェックする | ruby/spec :security でテスト済 |
同じ軽減策を適用済 |
その他の依存性の脆弱性
zlib
既知の脆弱性はありませんが、システムのzlib
に脆弱性が存在する可能性があることを考慮してください。
libssl
システムのlibssl
に脆弱性が存在する可能性があることを考慮してください。
FFI
番号 | 説明 | 相手方の軽減策 | テスト | TruffleRubyの軽減策 |
---|---|---|---|---|
CVE-2018-1000201 | ライブラリ名にSymbol が使用されている場合、WindowsでDLLロードの問題がハイジャックされる可能性がある |
ffi_lib でSymbolをStringと同様に扱う |
この脆弱性を修正したFFIのバージョンを使用することにより、同じ軽減策を適用済 |
ハッシングに関するノート
TruffleRubyは、/dev/urandom
からのシードによるMurmurHash2
ハッシングを使用します。他のハッシュ・アルゴリズムを使用するように構成することはできません。TruffleRubyは文字列のハッシングにはJavaのハッシュ・アルゴリズム(その後、さらにMurmurHash2
)を使用します。