Ruby 內建的 `File.fnmatch` 及 `File.fnmatch?` 存在 NUL 字元注入風險。能控制 path 模式參數的攻擊者可利用此風險來繞過路徑匹配。此風險的識別號為 [CVE-2019-15845](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-15845)。

## 細節

Ruby 內建的 `File.fnmatch` 及 `File.fnmatch?` 第一個參數為 path 模式參數。當此參數含有 NUL 字元（`\0`）時，會在 NUL 字元前立即結束匹配。所以接受外來輸入的腳本，攻擊者可以使其匹配到錯誤的路徑。

建議所有使用受影響版本的使用者儘速升級。

## 受影響的版本

* 所有 Ruby 2.3 及更早版本
* Ruby 2.4 系列： Ruby 2.4.7 及更早版本
* Ruby 2.5 系列： Ruby 2.5.6 及更早版本
* Ruby 2.6 系列： Ruby 2.6.4 及更早版本
* Ruby 2.7.0-preview1
* 早於 ruby master commit a0a2640b398cffd351f87d3f6243103add66575b 的全部版本

## 致謝

感謝 [ooooooo_q](https://hackerone.com/ooooooo_q) 發現此問題。

## 歷史

* 最早發佈於 2019-10-01 11:00:00 (UTC)
