Armoris日記 CVE-2020-14092編

今回はTwitterでの情報収集中にCVE-2020-14092*1に関するTwitterのツイートを発見したので、今回の日記は、これを取り上げます。
ツイート発見時には、まだPoC*2は公開されていなかったため、技術的知見・調査スキル向上を兼ねて実際のコードを見ながら自ら調査をしてみました。

CVE-2020-14092の概要

WordPressプラグインであるPayment Form For Paypal ProのVer. 1.1.64以下でSQLインジェクションが可能になるというものです。
脆弱性に関する情報はこちらに詳しくまとめられています。

調査してみました

まず脆弱性が修正されたバージョンである1.1.65と脆弱性修正前の1.1.64で差分を確認して、どの部分に問題があったのかを確認します。

画像は、以前Armoris日記で紹介したdiffコマンドを使用して比較してみたものです。結果は一部省略しています。

$ diff -u -r 1.1.64 1.1.65
diff -u -r 1.1.64/README.txt 1.1.65/README.txt
--- 1.1.64/README.txt   2020-04-06 10:22:04.000000000 +0900
+++ 1.1.65/README.txt   2020-06-14 09:36:50.000000000 +0900
@@ -323,7 +323,10 @@
 = 1.1.64 =
 * WordPress editor block update

+= 1.1.65 =
+* Bug fixes
+
 == Upgrade Notice ==

-= 1.1.64 =
-* WordPress editor block update
\ No newline at end of file
+= 1.1.65 =
+* Bug fixes
\ No newline at end of file
・
・
・

差分を確認するとバージョン1.1.65では特定のファイルに大幅な変更が加えられていることがわかりました。 この部分が脆弱性の原因だと考えられるので(脆弱性があるので修正されているのではないか?)、そのファイルを詳しく分析すると、データベースの操作を行う処理が含まれていることが確認できました。 f:id:Armoris:20200717104144p:plain

今回の脆弱性SQLインジェクションであるため、データベースのクエリー周りを調査してみました。すると、URLに含まれるパラメータの値をそのままデータベースに渡している部分があり、そのコードが今回の原因である可能性が高いと考えました。

実際に脆弱性の再現のためプラグインを導入した環境を用意して(注:隔離された検証用環境です)、不正なパラメータが含まれるURLでアクセスしてみたところ、実際にユーザー情報を含めたデータベースに保存されている情報を不正に閲覧できてしまうことが確認できました。

以下の画面は、実際にブラウザーで不正なパラメーターを用いてデータベースに保存されたユーザー情報を表示した際の出力結果です。 f:id:Armoris:20200715185104p:plain 以下は実際に用意したデータベースにSQLインジェクションで実行したのと同じSQL文を実行した結果。

+----+------------+------------------------------------+---------------+-------------------+----------------------------+---------------------+-----------------------------------------------+-------------+--------------+
| ID | user_login | user_pass                          | user_nicename | user_email        | user_url                   | user_registered     | user_activation_key                           | user_status | display_name |
+----+------------+------------------------------------+---------------+-------------------+----------------------------+---------------------+-----------------------------------------------+-------------+--------------+
|  1 | admin      | $P$B8UCCMBwHiw1PV7rhJX/9JvOlhM53p/ | admin         | admin@admin.local | http://172.20.100.120:6014 | 2020-07-15 03:19:19 |                                               |           0 | admin        |
|  2 | USER       | $P$BaHDWUrgO/fvZMU4tAG9.Jj5nCNbhi/ | user          | user@user.local   |                            | 2020-07-15 03:49:52 |                                               |           0 | USER         |
|  3 | Subscriber | $P$BK0wIIW7Zbfjv.IbClX4LaZ3vkXWmt0 | subscriber    | s@s.local         |                            | 2020-07-15 03:50:22 | 1594785022:$P$BN7PmFJN83JE7SU7sKgxTlqbnbkDqs/ |           0 | Subscriber   |
+----+------------+------------------------------------+---------------+-------------------+----------------------------+---------------------+-----------------------------------------------+-------------+--------------+

調査してみて

今回は実際にコードを見てそこから調査を行ったおかげで、このプラグインが書かれた言語である「PHP」の関数や変数の書き方などについて学ぶいい機会になりました。また、自分でコードを見ながら調査することでプラグインの構造もよくわかり、知識の引き出しが増えたと思います。安全な検証用環境を構築して、脆弱性をコードから構造的に調査することで、サイバーセキュリティースキルのレベルアップになるかもしれないと感じました。(個人の意見です)

*1:CVEとは情報セキュリティにおける脆弱性や、インシデントについて固有の名前や番号を付与し、リスト化したもの

*2:PoCとは検証やデモンストレーションという意味で、この場合脆弱性の検証コードを指します

Armoris日記 diffコマンド編

皆さんは、ファイルの古いバージョンと新しいバージョンの変更箇所について、確認したいと思ったことはありませんか?
特に、ソースコードのどの部分が変更されているのかわかると作業が捗りますよね。

今回はそんなときに覚えておくと便利なコマンドを紹介します。

ファイルの差分を確認したい...

実はファイルの差分を確認する方法はいくつかあり、例えばVS Codeや、専用ツールなどがあります。
f:id:Armoris:20200709103029p:plain:w200
しかしLinuxなどのCUI環境や、検証環境などで手軽に差分を取得したい場合があります。
そこで、今回はdiffコマンドを使用して簡単にファイル差分を取得する方法を紹介します。

今回各種オプションに関しての詳しい説明はしません。

diffコマンドを使う

以下二つのファイルについて差分を表示する

  • ファイル1
password
p
pass

hoge
  • ファイル2
password
AA
pass

huga

  • 基本の使い方
$ diff ABC.text DEF.text
2c2
< p
---
> AA
5c5
< hoge
---
> huga
  • これだけでは結果が見にくいのでオプションをつけて実行する
$ diff -u ABC.text DEF.text
--- ABC.text    2020-07-09 13:21:22.000000000 +0900
+++ DEF.text    2020-07-09 13:21:42.000000000 +0900
@@ -1,5 +1,5 @@
 password
-p
+AA
 pass

-hoge
+huga

このオプションをつけることで、結果がGitHubの差分表示に近くなるためわかりやすいと感じる人も多いと思います。


  • ファイルの差分を左右に並べて比較したい場合のオプション
$ diff -y ABC.text DEF.text
password                                                        password
p                                                             | AA
pass                                                            pass

hoge                                                          | huga
  • これに-Wオプションを追加することで横幅の指定も可能になります。
$ diff -y -W 30 ABC.text DEF.text
password        password
p             | AA
pass            pass

hoge          | huga

こうするとぱっと見てどのあたりが変更されたかがわかりやすくなると思います。


最後にプロジェクトファイルなどディレクトリを比較して差分を取りたい場合は-rオプションが使用できます。

$ diff -r ABC/ DEF/
diff -r ABC/ABC.txt DEF/ABC.txt
2c2
< p
---
> AA
5c5
< hoge
---
> huga
diff -r ABC/hoge/hoge.txt DEF/hoge/hoge.txt
2d1
<
3a3
>
diff -r ABC/test.txt DEF/test.txt
3,4d2
< test test
<
5a4,5
>
> test test

再帰的にサブディレクトリも比較してくれる。


今回は私が普段よく使うオプションに絞って紹介しましたが、他にも便利なオプションが多くあります。
また、manコマンドを使用して$ man diffとすることで詳しい使い方を見ることができます。
f:id:Armoris:20200709103038p:plain:w200
また、一見難しく感じてしまうかもしれませんが、コマンドは実際に使うことで慣れていきます。是非一度他のオプションも調べて使ってみてください。

Armoris日記 仕事で思うこと...

このブログは、3月までN高等学校に潜んでいた株式会社Armorisの社員が、日頃の業務で発見したことや、得られた様々な知見を広く皆さんと共有することを目的として開設しました(予定)。
とりとめのないことを書き連ねることもあるかもしれませんが、何かのお役に立つことがあれば、うれしく思います。

問題を作る時に気をつけていること

今回も技術ネタではなく、普段CTF用の問題を考える際に気をつけていることを書こうと思います。

私が普段問題を作る時に最も気をつけていることは、「問題文から必要な情報が削がれることを防ぐ」です。

これは、問題の作成者は正答がわかっていて、かつ、解き方もわかっているため、無意識のうちに削ってしまう情報のことです。
「なぜこのような現象が起きてしまうのか」ですが、これは問題作成者の脳内(思考)では、問題文にいくつか特定のキーワードがあれば容易に正答を導き出すことができてしまうので、その結果、もう少し挑戦者に考えてもらえる問題を作ろうとしてしまい、本来挑戦者にとっては正答に到るためにとても重要なキーワードを問題文から無意識のうちに外してしまうからではないかと考えています。

これによって挑戦者は正しいと確信して回答したにもかかわらず、不正解となってしまうため混乱が生じてしまい、結果としてなかなか正答に辿り着けない問題が出来上がってしまうわけです。
f:id:Armoris:20200703143933p:plain:w250
もちろんオープンな場所で行われるCTFや上級者向けとして作成された問題であればそのような問題もあって良いと思いますが、問題に挑戦する参加者のレベルが初心者〜上級者など幅広い場合や、特定の意図をもったトレーニングとして行う場合には、適しているとは言えないと思います。

私はこの問題を解決するために、出来上がった問題を社内の人に実際にやってもらい、その感想を聞いています。
特に、技術系の人以外に解いてもらうことで得られる別視点からの意見も重要だと考えています。 理由は単純で、技術系の人であればある程度説明が足りない場合でも問題文の意図が伝わってしまうことが多いからです。
f:id:Armoris:20200703144238p:plain:w300
以上私が普段問題を作る際に気をつけていることを書いてみました。

実際にできたものを多くの人に触れてもらい、たくさんのフィードバックを受けることは、多面的に物事をとらえることにつながるため、(CTFの)問題作成以外の部分でもとても重要なことだと思います。

Armoris日記 DOJO Lite紹介

このブログは、3月までN高等学校に潜んでいた株式会社Armorisの社員が、日頃の業務で発見したことや、得られた様々な知見を広く皆さんと共有することを目的として開設しました(予定)。
とりとめのないことを書き連ねることもあるかもしれませんが、何かのお役に立つことがあれば、うれしく思います。

Armoris DOJO

今回のArmoris日記はArmoris DOJOについてのお知らせと新サービスの宣伝です。

このたびArmoris@秋葉原にて DOJOを縮小再開しました。
加えて、DOJO Liteという新サービスをリリースしました。

簡単にDOJO Liteのご説明をさせていただきますと、 DOJO Liteとは「セキュリティに必要な問題解決能力の初歩として「正しく聴く」「正しく理解する」「正しく考える」」ことをコンセプトに初心者でも安心してチャレンジできる講座です。
毎回、実際に発生した過去のセキュリティインシデント事案をテーマに、講師による詳細な解説と、講師・受講者間のディスカッションを交えた構成としており、セキュリティにおける大切なポイントや考え方等の基礎を学ぶことができます。

私はこの中でも「正しく理解する」と言う部分が非常に難しいと考えています。

実際に、自分が「正しく理解」していると思っていることでも、実はなんとなく「理解したつもりになっている」に過ぎないと言うことが多々あります。
もし、自分が正しく理解していなければ、人に何かを教える際に間違ったことを教えてしまうことにもなりかねません。
私もそうならないように正しく物事を理解し、DOJO生に伝えていくことができるように頑張っていきたいと思います。

また、DOJO Shotという2日間コースの短期トレーニングやDOJO Ultmateという演習支援プログラムも別途あります。

各種トレーニングの予約など、詳しくは Armoris公式ホームページこちらからご覧になれますので、お気軽にアクセスしてみてください!

Armoris日記 社内Discordにて

このブログは、3月までN高等学校に潜んでいた株式会社Armorisの社員が、日頃の業務で発見したことや、得られた様々な知見を広く皆さんと共有することを目的として開設しました(予定)。
とりとめのないことを書き連ねることもあるかもしれませんが、何かのお役に立つことがあれば、うれしく思います。

今週の社内Discordにて

以下は社内で使用しているDiscord上で行われた会話の一部です。一見よくある出来事の様に見えますが、少し考えてみましょう。

K氏
「事務所のプリンターで印刷できません...。印刷しようとするとPCで保留されます!!!」

T氏
『PCのWi-Fiはプリンターと同じネットワークになってますよね?』

K氏
Wi-FiってHOGE-WiFiですよね?今それに繋いでいます。」

T氏
『いや、Wi-FiはHUGA-WiFiですね。HOGE-WiFiだと別ネットワークなので使えないです。』

K氏
「あれ、そうなんですね。」

T氏
『もしかして設定していない!?』

K氏
「いや、接続したら印刷できました!」

今回はどちらも社内のWi-Fiでありその後目的の印刷ができた様ですが、状況が違った場合どうなってしまうでしょうか。
f:id:Armoris:20200618160716p:plain
もし最初に接続されていたWi-Fiが近くのFreeWi-Fiや他社のネットワークで、ネットワーク内にプリンターが接続されていた場合です。
この状況で間違って機密情報等を印刷してしまうと、情報漏洩につながり取り返しのつかないことになってしまうことは、容易に想像できると思います。

実際に同様の状況で情報漏洩が発生したケースも報告されており、一歩間違えれば大きな被害につながります。

今回のケースは、本来接続したかったWi-Fiとは別のアクセスポイントに自動接続されていたことが原因でした。
一度接続したことのあるアクセスポイントに勝手につないでくれる「自動接続機能」は便利な機能ですが、このような事態が起きることもあります。

皆さんも自分が意図したアクセスポイントに接続できているか、念のためチェックする習慣をもつと良いかもしれません。
そうすることで今回の事例だけでなく、不審なWi-Fiに接続してしまい盗聴されるなどのリスクを減らすことができます。

このようなミスを防ぐ方法として、組織内で一定のルールを設けたり、普段から一人一人が意識することなども考えられます。 f:id:Armoris:20200618191416p:plain
最後に外部から見えている日本のプリンターを少し調べてみました。
これが全てではありませんが、309台のプリンターが外部から接続できる状態だとわかります。

また何かあればArmoris日記としてブログにしたいと思います。

※これは一個人の意見です。

Armoris日記 THE First

このブログは、3月までN高等学校に潜んでいた株式会社Armorisの社員が、日頃の業務で発見したことや、得られた様々な知見を広く皆さんと共有することを目的として開設しました(予定)。
とりとめのないことを書き連ねることもあるかもしれませんが、何かのお役に立つことがあれば、とてもうれしく思います。

直近の取り組み

この記事の筆者は、最近、トレーニング用の教材として使うCTF問題を作っています。 CTFについてWikipedia f:id:Armoris:20200610122948p:plain
画像はCTFフレームワークのCTFd

問題の中には作る人の趣味が反映された問題がいくつかあり、例えばある時点のニコニコ動画のバージョンについて調べて答えてもらうと言う問題もあります。

ニコニコ動画とは株式会社ドワンゴが運営する動画サイトのことですが、有名なサイトなので名前を聞いたことがある方も多いと思います。
しかし、このニコニコ動画に面白いバージョン名がついていることを知っている人は少ないのではないでしょうか。

例えば、現在(2020年6月時点)のニコニコ動画のバージョン名は「く」で、過去には「原宿」や「GINZA」と言った名前が使われていました。
実はこのバージョン名、ニコニコ動画の歴史が深く関わっていたりします。 f:id:Armoris:20200610123843j:plain
ニコニコ動画(く)

問題の話に戻しますが、いきなり聞いたこともないサービスについて答えろと言われても、普通は困りますよね。
しかし、「ニコニコ動画 バージョン一覧」というキーワードで、Google検索を駆使して調べるという発想ができれば、この問題は難なく解くことができます。

ですが、もしかしたら「何かあるのでは?」と難しく考え過ぎてしまい、なかなか正解にたどり着けない人もいるかもしれません。
もちろん、これまでITに触れる機会が少なかった方たちにも、この様なクイズ形式の問題を通して、いろいろなツールの使い方や情報収集の方法を知ってもらい、日々の業務や日常生活において役立ててもらえればなと思っています。