15
cybozu.com Security Challenge にににににににににににににににににににににに

Cybozu.com security challengeに参加したよ

Embed Size (px)

Citation preview

Page 1: Cybozu.com  security challengeに参加したよ

cybozu.com Security Challengeに参加したんです。何度も心が折れそうになったよ

Page 2: Cybozu.com  security challengeに参加したよ

自己紹介Twitter:abend@number3to4

Webアプリケーションのセキュリティをメインでやってます。お酒を飲むことも仕事の一環。

Page 3: Cybozu.com  security challengeに参加したよ

cybozu.com Security Challengeってサイボウズ株式会社が開催した脆弱性発見コンテストで、 2013年 11月 11日から11月 25日に開かれたイベント。賞金のあるイベントで、多くのメディアにも取り上げられていた。

Page 4: Cybozu.com  security challengeに参加したよ

参加してみることに軽いタッチで参加し、いろいろ思い知る。

理想と現実のギャップを

Page 5: Cybozu.com  security challengeに参加したよ

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

ただ、実際に行った環境は、本番環境(一般利用者が使っている環境)ではなく、コンテストのために各参加者に用意された環境に対して実施した。

脆弱性が存在していた場合にデータ破損などにつながる可能性があるため、テスト環境など本番環境以外で実施することが非常に重要。

Page 6: Cybozu.com  security challengeに参加したよ

まず、何をしたのか1対象サイトである kintoneを触ったことがないので、まずはどういう機能があるのか見て回った。その際に、 local proxy経由でアクセスし、パラメータ構成なども確認した。

kitoneはコミュニケーションツールのクラウドサービスで、追加アプリを用いて議事録管理や顧客管理など様々な用途に対応できる汎用性の高いサービス。ゴルフのスコアを管理するための追加アプリなど多岐にわたっていた。

Page 7: Cybozu.com  security challengeに参加したよ

まず、何をしたのか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.1Accept: */*Content-Type: application/jsonReferer: https://xxx.cybozu-dev.com/k/#/space/2Accept-Language: ja-JPAccept-Encoding: gzip, deflateUser-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)Host: xxx.cybozu-dev.comContent-Length: 94DNT: 1Connection: Keep-AliveCache-Control: no-cacheCookie: __ctc=1.72.6.193.1384262328491586; KINTONE_DOMAIN=b9hyn5nihlidh79mii5p; JSES-SIONID=B772BF9D65DF3BB0A7318B6D934B2015

{"spaceId":"2","needMetadata":true,"__REQUEST_TOKEN__":"cbc160c1-7ba2-4066-9181-5d7340e2ae4d"}

対象サイトは JSONで、トークンと思われるパラメータが存在していることがわかる。全部ではないが、こんな程度の確認を全体的に行った。

Page 8: Cybozu.com  security challengeに参加したよ

まず、何をしたのか3ある程度、見たから診断を開始することに。

XSSや SQL Injectionなどのパターンをサンプリングし、試してみたがしっかりブロックされており、すごい防御が固い。

Page 9: Cybozu.com  security challengeに参加したよ

まず、何をしたのか4いろいろと追い詰められたので方向性をかえて、アクセス制御や機能不備を探すことに。

Page 10: Cybozu.com  security challengeに参加したよ

まず、何をしたのか5

減ったライフを増やすきっかけをどうにか発見

本来は操作・参照できない状態をどんどん作っていき、権限のないユーザで片っ端から試行するということを繰り返した。

Page 11: Cybozu.com  security challengeに参加したよ

発見した脆弱性って1発見した脆弱性は、「特定の HTTPリクエストを送信することで、非公開のスペースの参加メンバーの情報を取得できる脆弱性」。

Page 12: Cybozu.com  security challengeに参加したよ

発見した脆弱性って2

非公開のスペースは、権限のない利用者からは(当然)アクセスできない仕様です。

参加メンバをユーザ「 test1」のみにしたスペースを作成。

Page 13: Cybozu.com  security challengeに参加したよ

発見した脆弱性って3権限のないユーザ「 test3」から、該当スペースの IDを指定し、情報を参照するリクエストを送付すると、こんなレスポンスが。

{"result":{"groups":[],"orgs":[],"users":[{"birthDate":null,"callto":"","code":"test1","ctime":"2013-11-11T12:03:07Z","dateTimeLocale":null,"description":"","email":"","employeeNumber":"","employeeType":null,"entityType":"USER","extendedData":null,"extensionNumber":"","formattedDescription":"","givenName":"test1","givenNameReading":"","id":"1","ignorePasswordExpire":false,"initials":null,"isAdmin":true,一部抜粋

・ 該当するスペースに参加しているメンバ・ 該当するスペースの管理者・ 有効なスペースであるかどうか (削除されたスペースは管理者情報が出力されない)

こんな情報が取得可能だった。

Page 14: Cybozu.com  security challengeに参加したよ

発見した脆弱性って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","messageType":"text","success":false}レスポンスの差異から、どういうスペースなのか判断ができる。

Page 15: Cybozu.com  security challengeに参加したよ

まとめ1件だけ見つけることができたが、全体的にセキュアなサイトだった。

何度も心を折られてた。

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