ruby-jp Slackの#security
板で知り、つい先ほど公式情報も出ました。
- commit: Add CVE-2020-15169 for actionview · rubysec/ruby-advisory-db@69f3974
- リリース情報: Rails 5.2.4.4 and 6.0.3.3 have been released | Riding Rails
詳しくは上のrubysec/ruby-advisory-dbまたは公式情報をご覧ください。
HTML安全でない文字列が、見つからない訳文キー(
html
という名前、または_html
で終わる名前)のデフォルトとして渡されると、デフォルトの文字列が誤ってHTML安全とマークされ、エスケープされない。
脆弱なコードは以下の例のようになっている可能性がある。
同コミットより大意
<%# welcome_html 訳文が現在のロケールで定義されてない %>
<%= t("welcome_html", default: untrusted_user_controlled_string) %>
<%# title.html 訳文と missing.html 訳文がいずれも現在のロケールで定義されていない %>
<%= t("title.html", default: [:"missing.html", untrusted_user_controlled_string]) %>
修正されたバージョンは以下のとおりです。
- "~> 5.2.4, >= 5.2.4.4"
- ">= 6.0.3.3"
api: translate
-- ActionView::Helpers::TranslationHelper
事情により該当バージョンにアップデートできない場合は、以下のようにデフォルトの訳文をhtml_escape
(エイリアスはh
)で明示的にエスケープすることで回避できるとのことです。
<%= t("welcome_html", default: h(untrusted_user_controlled_string)) %>
オレオレRailsアプリも更新しました↓。
$ bundle exec rails s
=> Booting Puma
=> Rails 5.2.4.4 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 4.3.6 (ruby 2.7.1-p83), codename: Mysterious Traveller
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://127.0.0.1:3000
* Listening on tcp://[::1]:3000
Use Ctrl-C to stop