デバッグモードが活性化されたDjango, Laravel Framework使用のウェブページのAPI Key漏えい

# １．はじめに
Django（ジャンゴ）はPythonで実装されており、MVC（Model-View-Controller）デザインパターンを従うオープンソース・ウェブ・フレームワークです。ウェブ開発にて煩雑な要素を改めて開発せず、自体機能だけで速やかな開発ができるという長所があります。そんなDjangoにデバッグモードが活性化されると、ウェブアプリケーションのDBアカウント及びパスワード、そしてAPIキーがネットでそのまま漏えいされてしまいます。

これはつまり、Instagram,PBS, MozillaのようにDjangoを用いて開発されたウェブサイトを通じて個人情報や重要な文書ファイル等を手軽に奪取できることを意味します。

今日はSecurity OSINT検索エンジンでのDjangoやLaravel等のウェブアプリケーションとそれに関わるキーワード検索を通じてクレデンシャル（Credential）情報漏れの深刻さを調べてみます。

# ２．クレデンシャル（Credential）とは
クレデンシャル（Credential）の辞書上の意味は「資格証明」で、通常では特定の人がその資格を持っているかを証明する手法を表します。あらゆる身分証と証明書などがCredentialに含まれます。

しかし、クラウド環境や Facebook、Twitter、Line などのように Access Key ID/Secret Key を持って、ソーシャル認証に使われる Oauth でもクレデンシャルという用語を使用します。

最近、クレデンシャルは認証に関するキーだけではなく、クラウド内部のVPC網のIP情報などを包括的に称するに用いられます。

# ３．検索で「Access Key情報」を探す
Security OSINT検索エンジンであらゆる認証に関する情報（Access Key, Secret Access Key）等のキーワードを検索すると、度々Credential情報が漏えいされているケースを見られます。特に、Oauth認証やRESTfull API Credential情報が漏えいされているリスクも少なくありません。
* Access Key ID：一般ウェブサイトのIDのようなもの。略してAccess Key（アクセスキー）と呼ぶ。
* Secret Access Key：一般ウェブサイトのパスワードのようなもの。略してSecret Key（シークレットキー）と呼ぶ。

例えば、アマゾンクラウドで使用するAccess Keyのタイプは下のように構成されます。
![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003594/913ce5ab-98c0-3ae6-304c-cdc00f92ec51.png)
また、バケットページ検索で認証に関する情報を見つけられます。バケット（Bucket）とは貯蔵庫を表すもので、クラウドサービスでのバケットは主にストレージ（Storage）を意味します。このバケットにアクセスできる場合はファイルサーバーへ入り込んで公開されていないファイルを抜き取ることもできる問題があります。まずは、「READ_BUCKET_NAME」を入力し、読み取りモードができる Bucket キーワードを検索してみました。
* https://www.criminalip.io/ja/asset/search?query=%E2%80%9CREAD_BUCKET_NAME%E2%80%9D

上の検索フィルターで検索した結果の中で、「NAVERCloud VOD Service TBD」 というサイトが24ヶ所検索されます。おそらく、Naver Cloud ユーザーのためのバケットアップロードデモページだと考えられます。

ここで問題になるのは、HTML テキストにファイルアップロードテストで使われるデモ用の Endpointドメイン・アドレスと Access Key ID、Access Secret Key が漏えいされていることです。このように隠されているべきの Secret Key までフロントエンドに漏えいされているサイトがかなり多いです。
![002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003594/5ae2ad9f-a3c5-8cfc-1e83-943d6b8ea1a5.png)

# ４．検索で「デバッグモード」のサイトを探す
PHP ベースのララベル フレームワーク（Laravel Framework）や Python 言語で開発されたジャンゴ（Django）ウェブ アプリケーション フレームワークはすべて利便性のために、デバッグ モード（Debug Mode）を提供します。

ジャンゴ（Django）で開発されたウェブ サイトに Debug モードが活性化されたら、エラーが起こる際、エラーメッセージに敏感な情報を漏洩する問題が発生しますが、これはジャンゴとララベルのフレームワーク両方に同じく発生する症状です。

キーワード「DisallowedHost at」（Djangoのフレームワーク）で検索すると、Djangoの活性化されているサイトを検索できます。
* https://www.criminalip.io/ja/asset/search?query=%E2%80%9CDisallowedHost+at+%E2%80%9C

![003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003594/e774cced-08f6-cfea-2770-d90387da6465.png)
![004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003594/856009f3-ea60-1c58-9679-3b9ca348123c.png)
Djangoのウェブアプリケーションで漏えいされる HTTP リクエスト ヘッダ 情報には今まで話した APIキーだけではなく、その上に認証に関する Admin アカウント及びパスワード情報、データベースのアカウント情報も含まれています。
![005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003594/b4ea635a-e0c0-5a56-3bf3-0000a9244810.png)
Django以外のプラットフォームLaravel（ララベル）を対しても検索ができ、Laravelのデバッグモードが活性化されているサイトを検索するには次の検索フィルターを参考できます。

「title: "Whoops! There was an error"」
* https://www.criminalip.io/ja/asset/search?query=title%3A+%22Whoops%21+There+was+an+error%22
![006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003594/f3abc561-4820-bd5a-9d0f-4f11343093b2.png)
検索されたサイトはすべてララベル・デバッグモードが活性化されている IP アドレスで、ここにアクセスすると、エラーメッセージへ API キー情報、DB アカウント及びパスワード情報が漏えいされます。
![007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003594/6f175c59-44ea-156c-4195-4ec5366801ee.png)

# ５．APIキー全てがtxtファイル状態で漏えいされている場合
キーワード「APIKEY.txt」で検索すると、面白いことを見つけられます。
* https://www.criminalip.io/ja/asset/search?query=APIKey.txt
![008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003594/3e5e95d1-b139-55e7-785b-2b2d4caa70c8.png)
このサイトへアクセスすると、下のように表し、ここだけを見ると、何の目的のサイトかわかりにくいです。しかし、ウェブサイトのソースをみると、話は変わります。
![009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003594/09959379-666e-ef91-5d97-dac403decc64.png)
ウェブサイトのソースコードをみると、このサイトは firebase のデータベースを使用していることがわかります。そして、firebase Configuration に firebase SDK を使用する際、発行された API Key、AuthDomain、AppID 情報が漏えいされています。
![010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003594/f99d6453-88f6-132d-4b04-d3394fa5e847.png)
その他にも中国の RESTfull API で見られるサイトも見つかり、管理者（Admin）の Access Token ハッシュ値が漏えいされていました。
![011.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003594/0b192080-2d98-6ff5-be49-c047836e7b71.png)
Criminal IP の検索結果には度々 Credential 情報が含まれている HTML ファイルが発見されるが、この HTML ファイルは主にテストまたは、間違いで残られた場合が多いです。

下記2枚の画像は、アマゾン・クラウド・サービス（AWS）の IAM メーターデータが含まれている HTML ファイルや DynamoDB AWS Key がある HTML ファイルを発見した場合です。
### 1) HTMLファイル IAMメータデータの内容で、その中にはユーザーアカウント（User Account）に関する情報が含まれている
![012.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003594/2a5df380-d570-8abc-d085-3eb77de36474.png)
### 2) アマゾン・クラウド・サービス（AWS）の代表的なNoSQLサーバーの一つであるDynamoDBで生成されたHTMLファイルにAccess Key IDとSecret Key等のCredential情報が漏えいされる
キーワード ▶ 「dynamoDB Admin」
* https://www.criminalip.io/ja/asset/search?query=%E2%80%9CDynamoDB+Admin%E2%80%9D
![013.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003594/e026ec56-f5a2-f800-d78b-789b19a92a79.png)
![014.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003594/c2c80436-66a9-5bae-188b-3761a24fef3e.png)

# 6. おわりに
クラウド・ネイティブ技術を用いて開発チームの生産性は驚くほど向上しています。しかし、生産性にフォーカスを合わせすぎて、セキュリティは後回しされているのではないかという懸念の声が高まっています。クラウド ネイティブ技術で最も多く使用されている APIキー がこのように漏えいされている姿はこのような声を裏付けます。

データベースが漏えいされている姿はただ、個人情報の漏えいだけではなく、「書き込み」 権限がある場合、データベースを造作することもできます。過去にはデータベースの ID/パスワードのようなアカウント管理にはセキュリティにフォーカスが合わせられていたが、クラウド時代の現在は APIキー でも「書き込み」権限がある場合が存在し、 APIキー１つで個人情報漏れまたは、造作までもできます。

速く進化するクラウド関連の技術に、果たして、エンジニアたちはセキュリティに関する部分にも同様についていっているかを綿密にチェックする必要があります。クラウド時代はこのように小さくて単純な設定エラーのような間違いで重要な情報がネットにさらされ、これによる個人とビジネス両方へ大きな被害を及ぼす大事故につながられることを心に刻むべきです。