Opened 14 years ago
Closed 14 years ago
#652 closed defect (fixed)
外部ブログのタイトルが過剰にエスケープされている
Reported by: | ogawa | Owned by: | ebihara |
---|---|---|---|
Priority: | minor | Milestone: | OpenPNE2.8beta7 |
Component: | core【OpenPNEコア部分】 | Version: | |
Keywords: | Cc: |
Description
OpenPNE 2.8beta5 で再現。(OpenPNE2.6.6.2 では正常)
- h_diary_list_all → ×(過剰)
- fh_diary_list → ×(過剰)
- h_home → ○(OK)
Change History (20)
comment:1 Changed 14 years ago by
Owner: | changed from takanashi to ebihara |
---|---|
Status: | new → assigned |
comment:5 Changed 14 years ago by
外部ブログのタイトルが過剰にエスケープされる箇所の一覧は以下です。
- h_home
- 自分の最新ブログは「&」のみが過剰にエスケープされる(「&」と表示される)
- マイフレンド最新Blog
- お気に入り最新Blog
- f_home
- 最新Blog
- page_h_diary_list_friend
- マイフレンド最新Blog
- page_h_bookmark_diary_blog_list
- お気に入り最新Blog
- page_fh_diary_list
- *のBlog
- page_h_diary_list_all
- 最新Blog一覧
これらすべての過剰なエスケープを修正します。
comment:7 Changed 14 years ago by
どうもDBにRSSのキャッシュをインサートする段階でエスケープするようになったことが原因のようです。これもSimplePieのバージョンアップによる影響でしょうね。
出力前のエスケープをしないようにすることで対応することも可能ですが、セキュリティ上問題があります。
ということで、まずはインサート前のエスケープ箇所の調査から入りたいと思います。
comment:11 Changed 14 years ago by
Owner: | changed from ebihara to ogawa |
---|---|
Status: | assigned → new |
r2680でリリースブランチにコミットしました。ご確認ください。
comment:12 Changed 14 years ago by
Owner: | changed from ogawa to ebihara |
---|
h_homeの自分の最新ブログは挙動が違ったようですが、こちらは修正の必要はないのでしょうか?
また、このチケットのコメントでリストしてもらった時点では「過剰にエスケープされる箇所」のリストになっていましたが、「過剰にエスケープされていなかった箇所」があったらそこはXSS脆弱になってしまうと思うのですが、そういう箇所はありましたか?
comment:13 Changed 14 years ago by
1.h_homeの自分の最新ブログの挙動の違いについて
この箇所のみ、テンプレート側で t_truncate修飾子を使用していることが原因です。
smarty_modifier_t_truncate のなかでエスケープした文字を元に戻すという処理を行っていますが、元に戻したあとのテキストを再びエスケープするところがうまく行っていないようです。これについてはまた調査・対処の必要があるかと思います。
これって、もしかしたらXSSになりうるのではないでしょうか。
2.「過剰にエスケープされていなかった箇所」について
僕個人では、そういった箇所はなかったように記憶していますが、正確性に乏しいです。
これについては調査します。
comment:14 Changed 14 years ago by
2.「過剰にエスケープされていなかった箇所」について の調査結果です。
結論から言うと、h_homeの自分の最新ブログが心配な感じですね。他は大丈夫そうです。
これからh_homeの自分の最新ブログについて詳しく調査します。
調査方法
- c_rss_cache テーブルを参照している関数を洗い出し
- db_rss_*
- db_bookmark_blog_list
- その関数の返り値をアサインしている箇所をリストアップ
- アサインされた変数を使用しているすべての箇所で、エスケープが適切に行われているかどうかを確認
調査結果
fh_diary_list
- $c_rss_cache_list(*のBlog)
- 適切なエスケープ
h_diary_list_all
- $c_rss_cache_list(最新Blog一覧)
- 適切なエスケープ
h_diary_list_friend
- $c_rss_cache_list(マイフレンド最新Blog)
- 適切なエスケープ
h_home
- $c_rss_cache_list(マイフレンド最新Blog)
- 適切なエスケープ
- $c_blog_list(自分の最新ブログ)
- ({$item.subject|t_truncate:40})
- &のみ正しいエスケープ?
- XSS脆弱性の可能性?
- $bookmark_blog_list(お気に入り最新Blog)
- 適切なエスケープ
h_prof, f_home
- $c_rss_cache_list(最新Blog)
- 適切なエスケープ
h_bookmark_diary_blog_list
- $bookmark_blog_list(お気に入り最新Blog)
- 適切なエスケープ
comment:15 Changed 14 years ago by
「1.h_homeの自分の最新ブログの挙動の違いについて」の調査結果です。
h_homeの自分の最新ブログについては、エスケープされたデータがDBに入っていた状態でも正しくエスケープされていました(&以外)。
これだとエスケープされていないデータをDBに入れるように修正した際(r2680)にXSS脆弱性が起こりうるのではと思いましたが、修正前と同じように適切にエスケープされていました(&も正常にエスケープされています)。
smarty_modifier_t_truncateの処理におかしい部分があるような気がしますが、r2680の修正後には特に問題は見受けられません。
んー、どうしましょうか。
comment:16 Changed 14 years ago by
Owner: | changed from ebihara to ogawa |
---|---|
Status: | new → assigned |
確認します。
comment:17 Changed 14 years ago by
Owner: | changed from ogawa to ebihara |
---|---|
Status: | assigned → new |
完了とします。
comment:18 Changed 14 years ago by
Resolution: | → fixed |
---|---|
Status: | new → closed |
comment:19 Changed 14 years ago by
Resolution: | fixed |
---|---|
Status: | closed → reopened |
外部ブログに
!"#$%&'()*+,-./:;<=>?@[\]_`{|}
というタイトルの記事を投稿したところ、h_diary_list_allにて
!"#$%&'()*+,-./:;<=>?@[\]_`{|}
となり、 ' が過剰にエスケープされました
comment:20 Changed 14 years ago by
Resolution: | → fixed |
---|---|
Status: | reopened → closed |
「'」が過剰にエスケープされる件、修正しました。
- 2.8系 r2875
やります。