Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
pfsense-api-enroll-json-ssh — pfSense Plus MIM API ツールキット b4acd7ca - 高 - リモート - 権限の残留 - example-add-devices.py JSON から SSH へ | Kitploit
ツール/GitHubGitHub/abraxas/pfsense-api-enroll-json-ssh
脆弱性分析コード分析エクスプロイトネットワークセキュリティペネトレーションテストコマンド&コントロール論文と研究レッドチーミングラボと実践
GitHubabraxas/pfsense-api-enroll-json-ssh

pfsense-api-enroll-json-ssh

pfSense Plus MIM API ツールキット b4acd7ca - 高 - リモート - 権限の残留 - example-add-devices.py JSON から SSH へ

リポジトリを見る
1日前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

Abraxas Labs - pfsense-api-enroll-json-ssh

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  pfsense-api-enroll-json-ssh

pfsense-api-enroll-json-ssh

クラス: 特権の残留 到達範囲: リモート

pfSense Plus MIM API ツールキット (b4acd7ca) - Netgate

example-add-devices.py は、SSH 経由で各 pfSense Plus デバイスに Nexus コントローラーを登録するための、文書化された方法です。これは GET /mim/controller/identity を json.dumps し、" のみを置換した後、そのブロブを二重引用符で囲まれた curl -d POSIX スクリプトに二度 .format します。Paramiko の exec_command は、pfsense_addresses 内のすべてのアドレスで、SSHUSER(サンプルのデフォルトは admin)としてスクリプトを実行します。

json.dumps と replace('"', '\\"') の組み合わせにより、引用符は閉じられたままになります。$()、バッククォート、${...} は JSON のメタ文字ではありません。これらは、まだ開いている二重引用符付きの -d 文字列内で生き続けます。OpenSSH の exec はシェルです。これが残留です。

これはサードパーティの CE REST パッケージではありません。これは pfSense Plus Nexus マルチインスタンス管理 コントローラー用の公式 OpenAPI クライアントとサンプルです。私が Plus を構成したのではありません。ラボは、固定された補間とモックの /var/run/pfnet-controller.sock です。

IDCVE はまだなし
クラス特権の残留(コントローラー JSON から登録 SSH へ)
到達範囲リモート(サンプルが verify_ssl=False を設定している間の CONTROLLER_URL へのオンパス、または ControllerSummary 文字列フィールドの書き込み者)
CWECWE-78
CVSSHigh: 8.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
製品Netgate/pfsense-api(Plus MIM ツールキット)
影響を受けるもの公開 main b4acd7ca21dbca739a530403a1f62a7440f7726f の example-add-devices.py
認証オペレーターが文書化されたサンプルを実行します。攻撃者はオンパスであるか、サマリー文字列を書き込むことができます。コントローラーへのログインは依然として最初に行われます。
ライセンスGNU Affero GPL v3.0
ラボ127.0.0.1:19101 のみ。Plus イメージはありません。

Nexus MIM 残留シリーズのパート 1。関連項目: enroll-autoadd、unix-sock-noauth、example-ssl-verify(G9 はオンパスのピアがこの JSON をどのように形成するかです)、fleet-jwt、export-key-get。

攻撃者ができること

残留とは、まだ開いている二重引用符付きの -d 文字列内でのコマンド置換です。json.dumps と引用符パスにより、文字列は閉じられたままになります。$()、バッククォート、${...} は生き残り、OpenSSH がスクリプトを exec するときに SSHUSER として実行されます。

完全性

手法シンク権限ラボ実証または推測
ControllerSummary の文字列フィールドに $()(またはバッククォート / ${...})を入れ、オペレーターに example-add-devices.py を実行させるcontroller_info.replace('"', '\\"') → device_script.format(...) → sshclient.exec_command(device_script)(example-add-devices.py 約104-161行)pfsense_addresses 内の各アドレス上で SSHUSER としてのシェル(サンプルのデフォルトは admin、pfSense の admin SSH は通常 root 相当)補間についてラボ実証済み: INJECT vpn_listenaddr=$(printf %s PFSENSE-API-ENROLL-JSON-SSH-WITNESS >/oracle/witness) がクォートのみのエスケープを生き延び(dollar-paren-survived=yes)、witness を書き込んだ(inject-oracle=yes)。Paramiko/SSH 自体はこの compose には含まれない。
サンプルが verify_ssl=False を使用している間の GET /api/mim/controller/identity に対する TLS MITM同じ ControllerSummary のパース、続いて同じスクリプト同じシェル。ControllerSummary の全フィールドは str または Unset であるため、型としてパースできる MITM JSON ボディで十分。サンプルからの推測(example-add-devices.py のログイン Client と AuthenticatedClient はどちらも verify_ssl=False を設定)。ラボは summary オブジェクトを直接 POST する。関連: example-ssl-verify。
コントローラー上の name または vpn_listenaddr に置換文字を書き込み、次の enroll を待つ同じシンクオペレーターが次にサンプルを実行したときの同じシェル推測。これらのフィールドの事前書き込みが必要(すでにコントローラー管理者、または unix-sock-noauth の関連レポート)。
同じシェル、ControllerSummary.additional_properties 経由の追加キー同じダンプに追加の MITM キーが含まれる(to_dict は from_dict の後に残りをコピーする)追加フィールドが -d に、そしてシェルに流れ込むto_dict からの推測。ラボは vpn_listenaddr 経由でのみ注入する。

偵察

手法シンク権限ラボ実証または推測
登録ワークステーションの stdout を読むprint("CONTROLLER_SUMMARY:", controller_info)コントローラー識別情報 key、Netgard vpn_pubkey / vpn_netkey / リッスンアドレスサンプルの print からの推測。ラボはライブのコントローラーブロブを出力しない。
SSH exec チャネルをスニッフィングまたは MITM するexec_command(device_script) のペイロードは curl の -d JSON各デバイスへのワイヤー上の同じコントローラー識別情報推測。そのチャネル上の AutoAddPolicy は関連レポート。
ガジェット上の CONTROL ケースPOST /case name=control正直な vpn_listenaddr が unix ソケットにそのまま到達するラボ実証済み。 192.0.2.10:51820 がそのまま POST され、オラクルなし(control-clean=yes)。

可用性

手法シンク権限ラボ実証または推測
SSHUSER としての注入コマンド同じ exec_commandpfnet-controller の停止、登録のワイプ、再起動、またはその他の方法でデバイスを MIM から切り離すシェルの副作用としての推測。ラボは witness ファイルを書き込むのみ。

必要条件: 公式サンプルパス(オペレーター enroll)。そのサンプルが実行されていれば、オンパスピアに対して UI:N。コントローラーへのログインは依然として最初に発生する。

pfSense ボックス上の admin としてのシェルは「JWT が php できる」ということではない。それは登録ワークステーションが sh -c を通じてファイアウォールにコントローラーブロブを渡すということである。そこから、整形された JSON がデバイスによって JWT なしで /var/run/pfnet-controller.sock に POST される(unix-sock-noauth)。AutoAddPolicy は、このスクリプトを受け取る SSH ピアがピン留めされていないことを意味する(enroll-autoadd)。G9 verify_ssl=False は、オンパスピアがそもそも JSON を書き込む方法である。

閉じたままの隣接サーフェス

SurfaceWhy
生成されたライブラリのデフォルト verify_ssl=Trueこの残存物はサンプルであり、pfapi.Client のデフォルトではない。
curl -d "..." のクォートブレイクアウトJSON と " の置換により文字列は閉じたまま保たれる(quote-only-escape=yes)。
from_dict / json.dumps を通過した ControllerSummary からの生改行スクリプト分割U+000A が \n になる。
登録ワークステーション上の RCEフォーマットはローカル。シェルはリモートの exec。
Nexus コントローラへの未認証 HTTPSlogin.sync が依然として最初に実行される。
add_controlled_device.syncパース済み JSON を HTTPS に POST する。DeviceIdentity.controller_add を exec することはない。
CONTROL listenaddr$() / バッククォートなし。オラクルを書き込まない。
unix POST ボディ内の INJECT $()展開は curl の前に sh で行われる(inject-meta-reached-unix は fail)。
Paramiko AutoAddPolicy()兄弟パック。これと混在させないこと。
JWT なしのデバイス unix ソケット MIM兄弟パック。
pfSense Plus コントローラ/デーモンこのリポジトリには含まれない。構成されていない。
意図された POST /diag/cmd/php と /diag/cmd/shellすでに管理者である Nexus コンソール。この残存物ではない。
サードパーティ CE REST パッケージ異なる GitHub ツリー。

発見の経緯

私は github.com/Netgate/pfsense-api b4acd7ca21dbca739a530403a1f62a7440f7726f(2026-05-25、Add Snort-3 API definitions)をピン留めした。タグはない。ツリーは OpenAPI 3.0.3(pfapi_openapi.yml、486 パス、755 オペレーション)に加え、生成された Python とサンプルで構成されている。HTTPS コントローラと pfnet-controller は Plus 専用であり、リポジトリには含まれていない。

12 回の探索。Login/JWT、diagnostics、MIM enrollment、client TLS、users/certs、packages、VPN/firewall、OpenAPI security、device IDOR、git/firmware/feeds、さらにすべての生成オペレーションのループバックモック。755/755 の _get_kwargs が 127.0.0.1:55980 に送信された。AuthenticatedClient は常に Bearer を送信した。Client は何も送信しなかった。php/shell を含めて。パスパラメータは ../ をパーセントエンコードする。ライブラリのデフォルトは verify_ssl=True。公式のすべての例は False を設定している。

ツールをダウンロード