脆弱性スキャナ「Nikto」の「dishwasher(食器洗い機)」プラグインは何を検査しているのか
はじめに
NiktoはWebサーバ向けの脆弱性スキャナです。
検査(スキャン)項目ごとにプラグインが存在しており、ソースコード上では「/program/plugins/
」配下に各プラグインが置かれています。
nikto/program/plugins at nikto-2.1.6 · sullo/nikto
Niktoのプラグイン一覧
指定可能なプラグイン一覧は以下のコマンドで確認することができます。
$ nikto -list-plugins
主に以下のようなプラグインが用意されています。
プラグイン名 | フルネーム | 説明 |
---|---|---|
apache_expect_xss | Apache Expect XSS | Expect ヘッダでウェブサーバーにクロスサイトスクリプティングの脆弱性があるかどうかをチェック |
apacheusers | Apache Users | Webサーバーから直接ユーザー名を列挙できるかどうかをチェック |
auth | Guess authentication | 認証レルムの推測を試みる |
cgi | CGI | 使用可能なCGIディレクトリを列挙 |
clientaccesspolicy | clientaccesspolicy.xml | クライアントアクセスファイルが存在するかどうか、またワイルドカードエントリーを含むかどうかをチェック |
content_search | Content Search | 検索結果のコンテンツから、興味深い文字列を探索 |
cookies | HTTP Cookie Internal IP | HTTPリクエストから返されたCookieから、内部のIPアドレスを探索 |
dictionary | Dictionary attack | 一般的に知られているディレクトリ/ファイルへの辞書攻撃を試みる |
dir_traversal | Directory Traversal | アプリケーション/サーバーにディレクトリトラバーサルの脆弱性がないかチェック |
dishwasher | dishwasher | dishwasher のディレクトリトラバーサルの脆弱性をチェック |
docker_registry | docker_registry | Dockerレジストリを探索 |
domino | IBM/Lotus Domino Specific Tests | IBM/Louts Domino 固有のテストを実行し、認証なしでアクセスできるDomino固有のファイルやサーバーのバージョンを特定 |
drupal | Drupal Specific Tests | Drupal に特化したテストの一部を実行 |
embedded | Embedded Detection | ホストが組み込みサーバーであるかどうかをチェック |
favicon | Favicon | Webサーバーのファビコンを既知のファビコンと照合 |
fileops | File Operations | 結果をテキストファイルに保存 |
headers | HTTP Headers | HTTPリクエストから返されたヘッダーに対して、さまざまなチェック |
httpoptions | HTTP Options | サーバーから返されたHTTPオプションに対して、さまざまなチェック |
ms10_070 | ms10-070 Check | MS10-070 の確認 |
msgs | Server Messages | サーバーのバージョンを既知の問題と照合 |
multiple_index | Multiple Index | 複数のインデックスファイルの有無を確認 |
negotiate | Negotiate | mod_negotiation MultiViews を確認 |
origin_reflection | CORS Origin Reflection | Access-Control-Allow-Origin ヘッダで、指定したOriginヘッダが反映されるかどうかを確認 |
outdated | Outdated | Webサーバーが最新版であるかどうかを確認 |
parked | Parked Detection | ドメインがレジストラや広告の場所にパークされているかどうかを確認 |
paths | Path Search | リンクパスを見て、変数の入力に役立てる |
put_del_test | Put/Delete test | PUT および DELETE HTTP メソッドでファイルのアップロードと削除を試みる |
report_csv | CSV reports | CSV レポートを作成 |
report_html | Report as HTML | HTMLレポートを作成 |
report_json | JSON reports | JSONレポートを作成 |
report_nbe | NBE reports | NBE(Nessus BackEnd)レポートを作成 |
report_sqlg | Generic SQL reports | 汎用データベースへのSQLの挿入 |
report_text | Text reports | テキストレポートを作成 |
report_xml | Report as XML | XML レポートを作成 |
robots | Robots | 「robots.txt」ファイル内に何かがあるかどうかをチェックし、他のスクリプトに渡すための他のパスがないか分析 |
shellshock | shellshock | bashの「shellshock」脆弱性を探索 |
siebel | Siebel Checks | インストールされたSiebelアプリケーションに対して、一連のチェック |
sitefiles | Site Files | サイトのIP/名前から興味深いファイルを探索 |
ssl | SSL and cert checks | SSL/証明書のチェック |
strutshock | strutshock | 「strutshock」脆弱性を探索 |
tests | Nikto Tests | Niktoの標準テスト |
dishwasher(食器洗い機)?
ここから本記事の本題に入ります。
Niktoには「dishwasher (食器洗い機)」という名前だけでは何を検査するのかイマイチ分からないプラグインがあります。
dishwasher プラグインの実行
まずはこのプラグインを指定した場合に、どのようなリクエストを送信するか確認してみます。
「-Plugins <プラグイン名>
」をオプションに指定することで、指定したプラグインの検査のみを実行するようにできます。
(複数のプラグインを指定する場合は「-Plugins <プラグイン名>;<プラグイン名>
」のようにセミコロンを区切り文字として指定します。)
それでは、以下のコマンド実行してみます。
$ ./nikto.pl -host <TARGET URL> -Plugins dishwasher
すると、スキャン対象のアクセスログには以下のようなログが見つかります。
これが dishwasher プラグインが送信するリクエストです。
xxx.yyy.zzz.123 - - [15/Apr/2023:20:57:06 +0900] "GET /../../../../../../../../../../../../etc/shadow HTTP/1.1" 400 157 "-" "-" "-" [-]
プラグインの内容
一応プラグインの内容も確認してみます。
nikto/nikto_dishwasher.plugin at nikto-2.1.6 · sullo/nikto
以下のコードがプラグインの抜粋です。
# 送信シグネチャ
my $path = "/../../../../../../../../../../../../etc/shadow";
# リクエスト送信
my ($res, $content, $error, $request, $response) = nfetch($mark, $path, "GET", "", "", "", "dishwasher");
# 脆弱性有無の確認
if (($response->{'server'} =~ 'PST10 WebServer') && ($content =~ 'root:\$1\$.*')) {
add_vulnerability($mark, "$path: Site appears vulnerable to the dishwasher directory traversal vulnerability.", 999951, 0, "GET", $path, $request, $response);
}
コードを見ると検出条件は以下の2つに当てはまるものとなっています。
- レスポンスヘッダに「Server: PST10 WebServer」ヘッダが存在する
- 「/etc/shadow」の取得可能である
結論
このプラグインがどのような脆弱性を検出するのか調べたところ、「Miele Professional PG 8528」という食器洗い機で発見されたパストラバーサル(CVE-2017-7240)を検出するプラグインでした。
以下の画像がその食器洗い機。
(引用:Miele Reinigungs- und Desinfektionsautomat PG 8528)
- ミーレ社による脆弱性に関する声明:Press releases
- 日本語情報:JVNDB-2017-002683 - JVN iPedia - 脆弱性対策情報データベース
- NVD:NVD - CVE-2017-7240
とはいえ、なぜ幅広い脆弱性を検出するツールであるniktoに対して、このような特定の食器洗い機の脆弱性を検出するプラグインが含まれているのかは不明のままですが、一旦このプラグインが何なのかは理解できたので良しとします。
(本当に食器洗い機だったとは・・・)
以下、当プラグイン追加時のプルリクエストです。
なぜこの脆弱性を追加するのかといった記述は見つけられませんでした。
Discussion