新年の抱負:ステージでデモアプリをハッキングするときに、セキュリティトークンを表示しない
2022年1月12日
0 分で読めます新年には伝統的に抱負を立てます。仕事など、良いことをもっとする一方で、やめたいこともあります。後者について考えた結果、2022年の抱負は、ステージ上のデモなどでアプリケーションをハッキングしているときに、うっかり機密情報をさらしてしまうのを防ぐことにしました.
ずいぶん具体的な新年の抱負に聞こえるかもしれませんが、その背景には、セキュリティにまつわる恐ろしい体験談があります。
J-Fall 2021でデモアプリをハッキング
2021年11月4日は、オランダ最大のJavaカンファレンスJ-Fallの開催日でした。Netherlands Java User Group(NLJUG)が毎年開催しており、理事の一人である私は、パンデミックが始まって以来、久しぶりに対面イベントが開かれることを嬉しく思っていました。また、このカンファレンスでJavaセキュリティに関するテーマについて講演することになり、Javaのデシリアライゼーションに関するセキュリティ問題を取り上げました。
この講演の一環として、デシリアライゼーションのガジェットチェーンを使ってアプリケーションをハッキングしました。任意コード実行(ACE)でアプリケーションをハッキングする方法を示すために作られた、Commons Collections 3.1ライブラリの有名な攻撃チェーンを使いました。ysoserialでガジェットチェーンを設定し、ハッキングするデモアプリケーションにもそのライブラリが含まれていたため、準備は簡単でした。ここまでは順調でしたが、問題はここからです……
ステージ上でAPIシークレットトークンを公開
実行しようとしていたACEは、私のマシンでenvコマンドを実行し、その出力をコンソールに表示するものでした。このコマンドになじみのない方のために説明すると、ホストマシンの環境変数を表示します。アプリケーションのハッキングをデモするときは、デモ用ノートPCで専用のユーザーを使うことがよくあります。Dockerコンテナを使うこともありますが、今回はそうしませんでした。
今回は、普段の開発にも使っているノートPCのメイン環境でハッキングを実行しました。そのため、環境変数にはGitHubトークンなどのAPIトークンも含まれていました。それが、大きな映画館のスクリーンに映し出されてしまったのです。???
最初はそのことに気づかず、ステージでの講演とデモにすっかり集中していました。しかし終了後、会場にいた参加者の一人、Nils Breunese(@breun)が近づいてきて、「セキュリティの専門家として、これを面白がってくれるといいんだけど」と言い、携帯電話で次の写真を見せてくれました。

最初は何が起きたのか、すぐには理解できませんでした。しかし、彼は状況を説明し、私のGitHubアクセストークンを使って、私のWebサイトにコードをコミットしたのです。何が起きたのかを理解すると、恥ずかしさと安堵が同時にこみ上げました。彼のちょっとしたいたずらで済んだからよかったものの、もっと深刻な事態になっていた可能性もあります。すぐに環境変数に設定されていたすべてのトークンを無効化し、Webサイトを修正しました。Nilsのコミットは取り消さず、新しいコミットで修正することにしました。J-Failの教訓として、今もそのコミットは残っています。

J-Fall 2021で講演を終えた直後、Nilsから何が起きたのかを聞いたとき。
自分自身をハッキングせず、デモアプリだけをハッキングしよう
幸い、この出来事は人に話せる面白いエピソードになりました。思いやりとユーモアのセンスを持つNilsに感謝しています。私にとっては、自分が人に説いていることを実践しなければならないという戒めにもなりました。ステージでセキュリティについて話し、アプリケーションをハッキングしている最中に、自分が侵害されるのは本当に痛いものです。だからこそ、何をしているか、そしてそれが他人にどう見えるかに注意すべきだと伝えたいです。Snykが提供するツールなど、アプリケーション向けのツールは役立ちますが、うっかりミスまでは防げません。セキュリティの専門家でさえ、こうしたミスをします。意識して行動し、アプリケーションを本番環境に公開したり、ステージでデモしたりする前に、出力内容を確認しましょう。
2022年の新年の抱負は、デモやプレゼンテーションでアプリケーションをハッキングする際に、機密情報を漏えいさせないことです!このことを親切に気づかせてくれたNilsに感謝しています。皆さん、よい2022年を!


