SlideShare a Scribd company logo
cybozu.com Security Challenge
に参加したんです。
何度も心が折れそうになったよ
自己紹介
Twitter:abend@number3to4

Webアプリケーションのセキュリティをメインでやってます。
お酒を飲むことも仕事の一環。
cybozu.com Security Challengeって
サイボウズ株式会社が開催した脆弱性発見コンテストで、2013年11月11日から
11月25日に開かれたイベント。賞金のあるイベントで、多くのメディアにも取り
上
げられていた。
参加してみることに
軽いタッチで参加し、いろいろ思い知る。

理想と現実のギャップを
対象サイトって
脆弱性発見コンテストの対象は、サイボウズ社が実際にサービス提供をしている
クラウドサービスであるkintoneなどに対して、約100名の参加者が脆弱性調査を
行った。

ただ、実際に行った環境は、本番環境(一般利用者が使っている環境)ではなく、
コンテストのために各参加者に用意された環境に対して実施した。
脆弱性が存在していた場合にデータ破損などにつながる可能性があるため、
テスト環境など本番環境以外で実施することが非常に重要。
まず、何をしたのか1
対象サイトであるkintoneを触ったことがないので、まずはどういう機能があるの
か
見て回った。その際に、local proxy経由でアクセスし、パラメータ構成なども確
認
した。

kitoneはコミュニケーションツールのクラウドサービスで、追加アプリを用いて議
事録
管理や顧客管理など様々な用途に対応できる汎用性の高いサービス。ゴルフの
スコアを管理するための追加アプリなど多岐にわたっていた。
まず、何をしたのか2
「スペース」というグルーピングを行える機能があり、その中でメンバ間のメッ
セージ
を取得するためのリクエストだったと思う。
POST https://xxx.cybozu-dev.com/k/api/space/thread/list.json?_lc=ja_JP&_ref=https%3A%2F%2Fxxxp.cybozu-dev.
com%2Fk%2F%23%2Fspace%2F2 HTTP/1.1
Accept: */*
Content-Type: application/json
Referer: https://xxx.cybozu-dev.com/k/#/space/2
Accept-Language: ja-JP
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)
Host: xxx.cybozu-dev.com
Content-Length: 94
DNT: 1
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: __ctc=1.72.6.193.1384262328491586; KINTONE_DOMAIN=b9hyn5nihlidh79mii5p; JSESSIONID=B772B
F9D65DF3BB0A7318B6D934B2015
{"spaceId":"2","needMetadata":true,"__REQUEST_TOKEN__":"cbc160c1-7ba2-4066-9181-5d7340e2ae4d"}

対象サイトはJSONで、トークンと思われるパラメータが存在していることがわか
る。
全部ではないが、こんな程度の確認を全体的に行った。
まず、何をしたのか3
ある程度、見たから診断を開始することに。

XSSやSQL Injectionなどのパターンを
サンプリングし、試してみたがしっかり
ブロックされており、すごい防御が固い。
まず、何をしたのか4
いろいろと追い詰められたので方向性をかえて、アクセス制御や機能不備を探
す
ことに。
まず、何をしたのか5
本来は操作・参照できない状態をどんどん作っていき、権限のないユーザで
片っ端から試行するということを繰り返した。

減ったライフを増やすきっかけをどうにか発見
発見した脆弱性って1
発見した脆弱性は、「特定のHTTPリクエストを送信することで、非公開のスペー
スの
参加メンバーの情報を取得できる脆弱性」。
発見した脆弱性って2
非公開のスペースは、権限のない利用者からは(当然)アクセスできない仕様で
す。

参加メンバをユーザ「test1」のみにしたスペースを作成。
発見した脆弱性って3
権限のないユーザ「test3」から、該当スペースのIDを指定し、情報を参照するリ
クエストを送付すると、こんなレスポンスが。
{"result":{"groups":[],"orgs":[],"users":[{"birthDate":null,"callto":"","code":"test1","ctime":"201
3-11-11T12:03:07Z","dateTimeLocale":null,"description":"","email":"","employeeNumber":"",
"employeeType":null,"entityType":"USER","extendedData":null,"extensionNumber":"","form
attedDescription":"","givenName":"test1","givenNameReading":"","id":"1","ignorePassword
Expire":false,"initials":null,"isAdmin":true,
一部抜粋

こんな情報が取得可能だった。
・ 該当するスペースに参加しているメンバ
・ 該当するスペースの管理者
・ 有効なスペースであるかどうか
(削除されたスペースは管理者情報が出力されない)
発見した脆弱性って4
スペースに参加する際のリクエストを送信することで、どのスペースが制限され
た
IDで、どのスペースが削除されたIDか分かるよっていう追加情報も報告。
参加可能なスペースの場合のレスポンス
{"result":{},"success":true}
制限されたスペースの場合のレスポンス
{"message":"権限がありません。","id":"1505999166-1606038267","code":"CB_
NO02","messageType":"text","success":false}
削除されたスペースの場合のレスポンス
{"message":"指定されたスペース(id: 6)が見つかりません。削除されている可
能性があります。","id":"1505999166-1606050508","code":"OC_NO01","messa
geType":"text","success":false}

レスポンスの差異から、どういうスペースなのか判断ができる。
まとめ
1件だけ見つけることができたが、全体的にセキュアなサイトだった。

何度も心を折られてた。

ただ、仕事で診断するのとは、違う楽しさもあった。
また、ぜひ参加したいです。

More Related Content

Cybozu.com security challengeに参加したよ