ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Opened 12 years ago

Closed 12 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 12 years ago by ebihara

Owner: changed from takanashi to ebihara
Status: newassigned

やります。

comment:2 Changed 12 years ago by ebihara

h_homeでも「&」のみ「&」と過剰にエスケープされた状態になります。

comment:3 Changed 12 years ago by ebihara

h_homeの「マイフレンド最新Blog」ではすべて過剰にエスケープされた状態になります。

comment:4 Changed 12 years ago by ebihara

お気に入りも過剰ですね。

再現箇所を調査してリストアップします。

comment:5 Changed 12 years ago by ebihara

外部ブログのタイトルが過剰にエスケープされる箇所の一覧は以下です。

  • h_home
    • 自分の最新ブログは「&」のみが過剰にエスケープされる(「&amp」と表示される)
    • マイフレンド最新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:6 Changed 12 years ago by ebihara

追加。

  • page_h_prof
    • 最新Blog

comment:7 Changed 12 years ago by ebihara

どうもDBにRSSのキャッシュをインサートする段階でエスケープするようになったことが原因のようです。これもSimplePieのバージョンアップによる影響でしょうね。

出力前のエスケープをしないようにすることで対応することも可能ですが、セキュリティ上問題があります。

ということで、まずはインサート前のエスケープ箇所の調査から入りたいと思います。

comment:8 Changed 12 years ago by ogawa

OKです。DB内のデータはエスケープされていない状態になるよう修正してください。

comment:9 Changed 12 years ago by ogawa

Milestone: OpenPNE2.8beta6OpenPNE2.8beta7

beta7 へ持ち越します。

comment:10 Changed 12 years ago by ebihara

r2679で個人用ブランチにコミットしました。

マージしてみて問題がなければ、リリースブランチにコミットします。

comment:11 Changed 12 years ago by ebihara

Owner: changed from ebihara to ogawa
Status: assignednew

r2680でリリースブランチにコミットしました。ご確認ください。

comment:12 Changed 12 years ago by ogawa

Owner: changed from ogawa to ebihara

h_homeの自分の最新ブログは挙動が違ったようですが、こちらは修正の必要はないのでしょうか?

また、このチケットのコメントでリストしてもらった時点では「過剰にエスケープされる箇所」のリストになっていましたが、「過剰にエスケープされていなかった箇所」があったらそこはXSS脆弱になってしまうと思うのですが、そういう箇所はありましたか?

comment:13 Changed 12 years ago by ebihara

1.h_homeの自分の最新ブログの挙動の違いについて

この箇所のみ、テンプレート側で t_truncate修飾子を使用していることが原因です。

smarty_modifier_t_truncate のなかでエスケープした文字を元に戻すという処理を行っていますが、元に戻したあとのテキストを再びエスケープするところがうまく行っていないようです。これについてはまた調査・対処の必要があるかと思います。

これって、もしかしたらXSSになりうるのではないでしょうか。

2.「過剰にエスケープされていなかった箇所」について

僕個人では、そういった箇所はなかったように記憶していますが、正確性に乏しいです。

これについては調査します。

comment:14 Changed 12 years ago by ebihara

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 12 years ago by ebihara

「1.h_homeの自分の最新ブログの挙動の違いについて」の調査結果です。

h_homeの自分の最新ブログについては、エスケープされたデータがDBに入っていた状態でも正しくエスケープされていました(&以外)。

これだとエスケープされていないデータをDBに入れるように修正した際(r2680)にXSS脆弱性が起こりうるのではと思いましたが、修正前と同じように適切にエスケープされていました(&も正常にエスケープされています)。

smarty_modifier_t_truncateの処理におかしい部分があるような気がしますが、r2680の修正後には特に問題は見受けられません。

んー、どうしましょうか。

comment:16 Changed 12 years ago by ogawa

Owner: changed from ebihara to ogawa
Status: newassigned

確認します。

comment:17 Changed 12 years ago by ogawa

Owner: changed from ogawa to ebihara
Status: assignednew

完了とします。

comment:18 Changed 12 years ago by ogawa

Resolution: fixed
Status: newclosed

comment:19 Changed 12 years ago by kiwa

Resolution: fixed
Status: closedreopened

外部ブログに

!"#$%&'()*+,-./:;<=>?@[\]_`{|}


というタイトルの記事を投稿したところ、h_diary_list_allにて

!"#$%&&#039;()*+,-./:;<=>?@[\]_`{|}

となり、 ' が過剰にエスケープされました

comment:20 Changed 12 years ago by ogawa

Resolution: fixed
Status: reopenedclosed

「'」が過剰にエスケープされる件、修正しました。

Note: See TracTickets for help on using tickets.