attachment_fu プラグインの脆弱性っぽいものについて

報告して修正もしてもらえたのでメモ。


以前 穴があると言ったプラグインは attachment_fu です。READMEに書いてあるような mass assignment

@attachable_file = AttachmentMetadataModel.new(params[:attachable])

を行っている場合、プラグインやサーバの設定にもよりますが最悪 Rails が動いているサーバ上のあらゆるファイルを攻撃者に読み取られてしまいます。

とりあえず、

@attachable_file = AttachmentMetadataModel.new
@attachable_file.uploaded_data = params[:attachable][:uploaded_data]

のように uploaded_data だけに(独自の属性を追加していればそれらもですが)明示的に入力値をセットするよう変更するか、モデルに

attr_accessible :uploaded_data

をつけるようにするなど*1、不用意な mass assignment を避けるよう何らかの対策をしたほうがいいです*2。攻撃コードは書くまでもないので割愛しますが、昨日も書いた通りやっぱり mass assignment がデフォルトで有効なのは危なすぎる気がします。Railsのコミッタほどの人でも対処を忘れるような機能はデフォルト off にしたほうがいいと思うんですが……。

*1:ただし、以前のバージョンに後者の方法を適用するとサムネイル作成で例外が発生します。

*2:修正済みなので最新版に更新でも可ですが、あまりテストされてなさそうなのと、作者の方によると近々 rewrite ブランチのほうにスイッチするそうなので、タイミングとしては微妙かも。