jewel polisher

最近自分たちのプロジェクトが依存する gem 関連で何かが起きて対応が必要だったことが続いたのでメモっておく。

rails-html-sanitizer 0.4.0

CVE-2018-3741 対応。これは依存が多いので追うのがちょっとめんどかった。情報としては以下の issue が非常によくまとまっていたので置いておく。

github.com

libxml2 <- nokogiri <- loofah <- rails-html-sanitizer という依存関係で、大本は libxml2 の脆弱性
属性に HTML コメントとして解釈できそうな文字列が含まれたときに適切にサニタイズしないことがあるように読めた。1

これはかなり前に報告済み2 だがlibxml2 では修正されてないっぽい? とりあえず loofah 側ではこれを対応できるようにpublic なメソッドをはやしてくれている。

https://github.com/flavorjones/loofah/commit/56e95a6696b1e17a242eb8ebbbab64d613c4f1fe

rails-html-sanitizer はそれを使うようにした、という感じ

https://github.com/rails/rails-html-sanitizer/commit/f3ba1a839a35f2ba7f941c15e239a1cb379d56ae

該当コミットで追加されたテストケースを対応前のバージョンで走らせたらこんなだった。

  def test_uri_escaping_of_href_attr_in_a_tag_in_white_list_sanitizer
    html = %{<a href='examp<!--" unsafeattr=foo()>-->le.com'>test</a>}

    text = white_list_sanitize(html)

    assert_equal %{<a href="examp<!--%22%20unsafeattr=foo()>-->le.com">test</a>}, text
  end

# -"<a href=\"examp<!--%22%20unsafeattr=foo()>-->le.com\">test</a>"
# +"<a href=\"examp<!--\" unsafeattr=foo()>-->le.com\">test</a>"

対応としては普通に update すればおk

mysql2 0.5.0 リリース

リリースされたのだが Rails5 で mysql のバージョンをうまく制限していないと以下のコードで死ぬ。

https://github.com/rails/rails/blob/a0c43ce39b6b2ff2cd8f7fee07f809f34cad9b5b/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb#L4

gem "mysql2", ">= 0.3.18", "< 0.5"

普通にしてると mysql2@0.5.0 が入ってきて「バージョンを満たす gem がない」などのエラーになる

対応は簡単で mysql2 のバージョンを固定しておけばよい。Railsと同様に "< 0.5" をつけておけばよいだろう。

現在の stable の先っちょでは対応済みっぽい3github.com

0.5.0 対応して大丈夫か、という判断があるので 5-1-stable ではバージョン指定で対応するかと思ったけど普通にゆるめてくれましたね。ありがたや。


普段自分の仕事内容を思い出そうとしても、こういう活動は忘れがちなので残しておいた。
アプリケーションというのは、機能を追加すれば複雑性が増すし、何もしなくても部品のメンテが必要である。
Rails バージョンアップなどの目立つものもあるが、目立たないこういったところで追随する努力も必要であるし意味のある仕事なんだぞと自戒をこめて書いておく。


  1. 同僚は https://github.com/GNOME/libxml2/blob/960f0e275616cadc29671a218d7fb9b69eb35588/HTMLtree.c#L714-L718 から a タグの href, action, src, name 属性のみかな?と言っていたが検証していない

  2. 2016-08-11 18:29 とのこと。 https://bugzilla.gnome.org/show_bug.cgi?id=769760 をみると “Can I ask again that the libxml2 maintainers consider addressing this issue?” などと言われているのが見える

  3. ライフサイクルよくわからんけど 5-0-stable には backport されてなくて気になる(のでコメントしている)