Posted by usa on 28 Mar 2018
Ruby の標準添付ライブラリである socket のメソッド UNIXServer.open
で、ソケット名として指定された文字列中に NUL 文字を挿入しておくことによって、意図しないパス名でソケットが生成されうるという脆弱性が発見されました。
また、同じく UNIXSocket.open
メソッドにおいても、ソケット名として指定された文字列に NUL 文字を挿入しておくことによって、意図しないパス名のソケットにアクセスしうるという脆弱性も発見されました。
この脆弱性は、CVE-2018-8779 として登録されています。
詳細
標準添付ライブラリ socket のメソッド UNIXServer.open
では、第 1 引数で生成するソケットのパス名を指定します。この際、指定されたパス名中に NUL 文字 (\0
) が含まれていた場合、NUL 文字直前でパス名が完結しているとみなして、そのパス名でソケットを生成していました。このため、外部からの入力を UNIXServer.open
に与えていた場合、その妥当性をスクリプトで確認していたとしても、意図しないパス名でソケットが生成されうる場合がありました。
また、同様に、UNIXSocket.open
においても、第 1 引数でアクセスするソケットのパス名を指定します。この際にも、指定されたパス名中に NUL 文字が含まれていた場合、UNIXServer.open
と同様にその直前でパス名が完結しているとみなしてそのパス名でソケットにアクセスしていました。このため、外部からの入力を UNIXSocket.open
に与えていた場合、その妥当性をスクリプトで確認していたとしても、意図しないパス名のソケットにアクセスしうる場合がありました。
この問題の影響を受けるバージョンの Ruby のユーザーは、速やかに問題の修正されたバージョンに更新してください。
影響を受けるバージョン
- Ruby 2.2.9 以前の全ての Ruby 2.2 系列
- Ruby 2.3.6 以前の全ての Ruby 2.3 系列
- Ruby 2.4.3 以前の全ての Ruby 2.4 系列
- Ruby 2.5.0
- Ruby 2.6.0-preview1
- revision 62991 より前の開発版
クレジット
この脆弱性情報は、ooooooo_q 氏によって報告されました。
更新履歴
- 2018-03-28 23:00:00 (JST) 初版