🍽️

脆弱性スキャナ「Nikto」の「dishwasher(食器洗い機)」プラグインは何を検査しているのか

2023/04/15に公開

はじめに

NiktoはWebサーバ向けの脆弱性スキャナです。

https://github.com/sullo/nikto

検査(スキャン)項目ごとにプラグインが存在しており、ソースコード上では「/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

とはいえ、なぜ幅広い脆弱性を検出するツールであるniktoに対して、このような特定の食器洗い機の脆弱性を検出するプラグインが含まれているのかは不明のままですが、一旦このプラグインが何なのかは理解できたので良しとします。
(本当に食器洗い機だったとは・・・)

以下、当プラグイン追加時のプルリクエストです。
なぜこの脆弱性を追加するのかといった記述は見つけられませんでした。
https://github.com/sullo/nikto/pull/463

Hits

Discussion