この問題は Plack::Middleware::Session::Cookie 0.22以降で対策されました
→ https://gist.github.com/miyagawa/2b8764af908a0dacd43d http://search.cpan.org/~miyagawa/Plack-Middleware-Session/lib/Plack/Middleware/Session/Cookie.pm
事例 → https://speakerdeck.com/mala/how-to-hack-metacpan-dot-org
信頼できないデータを Storable::thaw に渡した場合、任意のコード実行ができることが知られています。
- http://perl5.git.perl.org/perl.git/commit/664f237a84176c09b20b62dbfe64dd736a7ce05e
- http://www.masteringperl.org/2012/12/the-storable-security-problem/
cookie経由でStorable::thawが呼ばれるモジュールがいくつか報告されています。
DESTROYで自動実行されるコードを通じて、ある程度自由に任意のコードを実行することが出来ます。
- ファイルの削除 : 一時ファイルや一時ディレクトリを名前を指定して消せるもの
- ファイルの書き込み : autosaveやautoflush機能を通じて任意のファイル名に書き込みが出来るもの
今のところ、任意のPerlモジュールを生成可能であると確認できているのは、HTTP::CookiesとDBI::ProfileDumperを組み合わせた方法です。
Plack::Middleware::Session::Cookie ではsecretの指定が可能になっていますが、デフォルトではsecretが未設定になっています。 あるいはsecretが漏洩した場合に、セッションオブジェクトの改竄が可能になっています。
secretが未指定のまま動いているプロダクトがいくつかあると思われます。
手元で動作させたmetacpan.orgでは、DBI::ProfileDumperが無かったので任意のコード実行までは試せていませんが、 少なくともテンプレートファイルの書き換えが出来ることを確認しました。
Plack::Middleware::Session::Cookieでは、下記のいずれかの(あるいは全部)対応が必要ではないかと思います
- secretの指定を必須にする
- シリアライザを変更する
- 危険であるとドキュメントに記述する