Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
gha-lab-ed7a1740c4 — セキュリティ研究ラボ: NationalSecurityAgency/emissary の固定スナップショットに対する GHSA-3g6g-gq4r-xjm9 / CVE-2026-35580 (GitHub Actions workflow_dispatch 入力シェルインジェクション) の管理された再現 | Kitploit
ツール/GitHubGitHub/pvharmo2/gha-lab-ed7a1740c4
脆弱性分析エクスプロイト学習と教育厳選リソース
GitHubpvharmo2/gha-lab-ed7a1740c4

gha-lab-ed7a1740c4

セキュリティ研究ラボ: NationalSecurityAgency/emissary の固定スナップショットに対する GHSA-3g6g-gq4r-xjm9 / CVE-2026-35580 (GitHub Actions workflow_dispatch 入力シェルインジェクション) の管理された再現

リポジトリを見る
3時間34分前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

自動生成された研究アーティファクト — 上流プロジェクトではありません。

このリポジトリは、ラヴァル大学の修士論文のために、公開されたGitHub Actionsワークフローの脆弱性を再現する目的で自動化ハーネスによって構築された使い捨てラボです。これは NationalSecurityAgency/emissary のコミット 898488b489615581ea66d17954742c8e4ffb0323(2026-01-09)の逐語的スナップショットであり、そのプロジェクト自身のライセンスの下で再配布されており、そのライセンスファイルはこのスナップショットに変更なしで含まれています。

上流プロジェクトは関与しておらず、決して標的にはなりません。ここで研究されている脆弱性はすでに公開されています。このリポジトリ内のすべてのシークレットと変数はランダムに生成されたダミー値であり、実際の認証情報は存在しません。アクション参照とランナーイメージは、2026-01-09時点で解決されたものに固定されています。スナップショットに加えられたすべての変更については、ハーネス出力の pinning.md を参照してください。

質問や異議がある場合: [email protected]


Emissary Dark Knight - some code just wants to watch the core burn

License Maven Central Java CI with Maven

CodeQL
Lint Codebase

目次

  • はじめに
  • 最小要件
  • はじめに
  • お問い合わせ

はじめに

Emissaryは、P2Pベースのデータ駆動型ワークフローエンジンであり、異種混在の、場合によっては広く分散された多層P2Pコンピューティングリソースネットワーク上で動作します。ワークフローの旅程は従来のワークフローエンジンのように事前に計画されるのではなく、データについてより多くの情報が判明するにつれて発見されます。Emissaryのワークフローには通常、ユーザーの操作はなく、データは完了状態に達するまで目標指向の方法で処理されます。

Emissaryは高度に設定可能ですが、この基本実装ではほとんど何も行いません。このフレームワークのユーザーは、emissary.core.IBaseDataObject ペイロードに対して処理を実行する emissary.place.ServiceProviderPlace を拡張するクラスを提供することが期待されています。

さまざまな処理が可能であり、ワークフローは段階的に管理されます。例: STUDY、ID、COORDINATE、 TRANSFORM、ANALYZE、IO、 REVIEW。

ワークフローの指示を担当するクラスは、emissary.core.MobileAgent とそれから派生したクラスであり、関連するペイロードオブジェクトのセットのワークフローを通る経路を管理します。また、emissary.directory.DirectoryPlace は利用可能なサービス、そのコストと品質を管理し、P2Pネットワークの接続を維持します。

GitHub PagesでホストされているMavenサイトとJavadoc: https://code.nsa.gov/emissary/

最小要件

  • LinuxまたはMacOSXオペレーティングシステム
  • JDK 11
  • Apache Maven 3.6.3+

はじめに

必要なコンポーネントのインストール、ソースコードの取得、Emissaryのビルドと実行に関する情報については、DEVELOPING.md ガイドをお読みください。

ビルド

Emissaryをコンパイル、テスト、パッケージ化するには mvn clean package を実行します。

root@kitploit:~
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  9.132 s
[INFO] Finished at: 2022-01-10T22:31:05Z
[INFO] ------------------------------------------------------------------------

実行

Emissaryにはすべてを実行するbashスクリプトが1つあります。これはEmissaryの最上位ディレクトリにあります。このスクリプトは、さまざまな機能を処理するための複数の Picocli コマンドを持つ emissary.Emissary クラスを実行します。

引数なし

emissary スクリプトを引数なしで実行すると、すべての設定サブコマンドの一覧と簡単な説明が表示されます。

root@kitploit:~
./emissary

ヘルプ

./emissary help を実行すると、引数なしで実行した場合と同じ出力が得られます。コマンドのより詳細な情報を確認したい場合は、helpの後にコマンド名を追加してください。たとえば、server コマンドの説明付きのすべての引数を確認するには、次を実行します:

root@kitploit:~
./emissary help server

共通パラメータ

残りのコマンドにはすべて (-b または --projectBase) 引数があり、設定できますが、PROJECT_BASEと一致している必要があります。

configディレクトリはデフォルトで /config に設定されていますが、(-c または --config) で渡すこともできます。gitチェックアウトから実行する場合は、projectBaseとして target を使用してください。開始する前に、target/config内の設定ファイルを自由に変更してください。

ロギングはlogbackによって処理されます。--logbackConfig 引数でカスタムファイルを指定できます。

各コマンドの詳細については、help -c を参照してください。

サーバー(スタンドアロン)

このコマンドはEmissaryサーバーを起動し、設定されているすべてのプレース、ピックアッププレース、ドロップオフフィルタを初期化します。-m または --mode が指定されていない場合は、スタンドアロンモードで起動します。デフォルトでは、MobileAgentの数はマシンのスペックに基づいて計算されます。最近のコンピュータでは、この数は多くなる可能性があります。エージェントの数は -a または --agents で制御できます。実行例は次のとおりです。

root@kitploit:~
./emissary server -a 2

追加の設定なしで、http://localhost:8001 で起動します。そのURLにブラウザでアクセスすると、target/config/jetty-users.propertiesで定義されているユーザー名とパスワード(emissaryとemissary123)を入力する必要があります。

デフォルトのPickUpPlaceは、target/data/InputData からファイルを読み取るように設定されています。そのディレクトリにファイルをコピーすると、Emissaryがそれらを処理するのを確認できます。toUpperとtoLowerのみが設定されているため、出力はそれほど面白くないことに注意してください。

一時停止

サービスが作業を受け取るのを停止します

root@kitploit:~
./emissary server --pause
一時停止解除

一時停止されたサービスが作業を受け取れるようにします

root@kitploit:~
./emissary server --unpause
無効化

リフレッシュ可能なサービスを無効化します。これは、ServiceProviderRefreshablePlaceを無効化するダウンタイムなしのアプローチである「軽い」リフレッシュです。プレースがDirectoryPlaceから取得されると、DirectoryPlaceとNamespaceには同じキーが使用されてプレースが再作成されますが、コンフィギュレータが再ロードされ、プレースはその設定のサブセットを再ロードできます。

root@kitploit:~
./emissary server --invalidate
リフレッシュ

サービスの強制リフレッシュ。これは「ハード」リフレッシュであり、サーバーは一時停止され、MobileAgentがドレインされるのを待ちます。サーバーが完全にアイドル状態になると、すべてのServiceProviderRefreshablePlaceの既存キーがDirectoryPlaceとNamespaceから削除され、プレースが完全に再作成されます。これにより、サービス名、プロキシ、拒否リストなどの変更が可能になります。その後、サーバーは処理を再開するために一時停止解除されます。リフレッシュ中に障害が発生するとサーバーが悪い状態になる可能性があるため、サーバーはシャットダウンされます。

root@kitploit:~
./emissary server --refresh
停止

サービスをシャットダウンします

root@kitploit:~
./emissary server --stop
強制終了

サービスを強制的にシャットダウンします

root@kitploit:~
./emissary server --kill

エージェント(スタンドアロン)

agentsコマンドは、設定されたホストのMobileAgentの数と、それらのエージェントが何をしているかを表示します。デフォルトではポートは9001ですが、-p または --port で変更できます。上記のserverコマンドで8001で実行していると仮定して、次を試してください:

root@kitploit:~
./emissary agents -p 8001

プール(スタンドアロン)

Poolは、ノードのエージェントの折りたたまれたビューです。これもデフォルトでポート9001を使用します。上記で起動したスタンドアロンサーバーに対して実行するには、次を実行します

root@kitploit:~
./emissary pool -p 8001

このコマンドは、すべてのノードのよりわかりやすいビューを提供するため、クラスターでより有用です。

Env

Envコマンドは、サーバーが実行されている必要があります。サーバーにPROJECT_BASEやBIN_DIRなどのいくつかの設定値を要求します。引数なしでは、フォーマットされていないjsonレスポンスをダンプします。

root@kitploit:~
./emissary env

ただし、bashでソースできるレスポンスをダンプすることもできます。

root@kitploit:~
./emissary env --bashable

Emissaryサーバーの起動は実際にこのエンドポイントを呼び出し、設定された変数で $PROJECT_BASE}/env.sh をダンプします。これは、シェルスクリプトが source $PROJECT_BASE}/env.sh を実行して、他の場所で設定を気にすることなくそれらの変数を利用できるようにするためです。

Config

configコマンドを使用すると、指定されたプレース/サービス/クラスの有効な設定を確認できます。Emissaryはフレーバーを使用するため、このコマンドはすべてのフレーバーが適用された後のクラスの結果の設定を表示します。このコマンドは、-h でホスト(デフォルトはlocalhost)、-p でポート(デフォルトは8001)を指定して、実行中のEmissaryノードに接続するために使用できます。ポート8001でローカルに実行されているEmissaryに接続するには、次のいずれかのコマンドが機能します:

root@kitploit:~
./emissary config --place emissary.place.sample.ToLowerPlace
./emissary config --place emissary.place.sample.ToLowerPlace -h localhost -p 8001

オプションで、--offline を使用してオフラインモードを指定し、ローカルのCONFIG_DIRで指定された設定ファイルを使用できます:

root@kitploit:~
./emissary config --place emissary.place.sample.ToLowerPlace --offline

オフラインモードでは、フレーバーを指定して設定の違いを確認できます:

root@kitploit:~
./emissary config --place emissary.place.sample.ToLowerPlace --offline --flavor STANDALONE,TESTING

これらは有効な設定を確認するのに役立ちますが、詳細モードで実行して、すべての設定ファイルと最終出力を確認することもできます。これは --detailed フラグで制御されます:

root@kitploit:~
./emissary config --place emissary.place.sample.ToLowerPlace --detailed

またはオフラインモードで:

root@kitploit:~
./emissary config --place emissary.place.sample.ToLowerPlace --offline --detailed

サーバー(クラスター)

Emissaryはスタンドアロンでも楽しいですが、実際の作業にはクラスターでの実行がより適切です。クラスターでの実行方法はスタンドアロンと似ていますが、ノードが他のノードに接続するために -m cluster を指定する必要があります。クラスターモードでは、EmissaryはPickUpPlaceの代わりにPickUpClientも起動するため、フィーダーを開始する必要があります。

target/config/peers.cfgを見て、ランデブーピアを確認してください。この場合、3つあります。ポート8001と9001で実行されているノードは単なるEmissaryノードです。ポート7001で実行されているノードはフィーダーです。それでは、2つの異なるターミナルで8001と9001を起動しましょう。

root@kitploit:~
./emissary server -a 2 -m cluster
./emissary server -a 2 -m cluster -p 9001

これらのノードはすべてポート8001、9001、7001を認識しているため、接続を試み続けるとログにエラーが表示されます。

実際のデプロイメントでは、同じノードで複数のEmissaryプロセスを実行しないことに注意してください。ホスト名は -h で設定できます。

フィード(クラスター)

ポート8001と9001でノードを起動したら、フィーダーを開始する必要があります。feedコマンドはデフォルトでポート7001を使用しますが、フィーダーが読み取るディレクトリを設定する必要があります。そのディレクトリにドロップされたファイルはワーカーノードが取得できるようになり、作業はクラスター全体に分散されるはずです。フィードを次のように起動します

root@kitploit:~
mkdir ~/Desktop/feed1
./emissary feed -i ~/Desktop/feed1/

ブラウザで http://localhost:8001、http://localhost:9001、http://localhost:7001 にアクセスして、設定されたプレースを確認できるはずです。~/Desktop/feed1 にファイルをいくつかドロップして、2つのノードがそれらを処理するのを確認してください。処理を開始するまでに少し時間がかかる場合があります。

エージェント(クラスター)

クラスターモードのエージェントは、再びmobileAgentの詳細を表示します。設定したノード(デフォルトではlocalhost:9001)から開始し、認識しているすべてのノードに呼び出して同じ情報を取得します。次のように実行します:

root@kitploit:~
./emissary agents --cluster

プール(クラスター)

クラスターモードのプールも、スタンドアロンのプールと同じことを行います。デフォルトでノード(localhost:9001)から開始し、認識しているすべてのノードに移動して、クラスターの折りたたまれたビューを集約します。次のように実行します

root@kitploit:~
./emissary pool --cluster

トポロジー(クラスター)

トポロジーは、設定されたノード(デフォルトではlocalhost:8001)と通信し、認識しているすべてのノードと通信します。レスポンスはそれらすべてのノードが認識している内容であるため、クラスターのネットワークトポロジーを構築できます。次のように実行します

root@kitploit:~
./emissary topology

SSLでのサーバー実行

キーストアとキーストアパスワードは emissary.client.EmissaryClient-SSL.cfg ファイルにあります。この機能をテストするために使用できるサンプルキーストアがデフォルトで含まれ、設定されています。本番環境でサンプルキーストアを使用することはお勧めしません。独自のキーストアを使用するには、emissary.client.EmissaryClient-SSL.cfg ファイルの設定値を変更してください。

スタンドアロン

root@kitploit:~
./emissary server -p 8443 --ssl --disableSniHostCheck

クラスター

root@kitploit:~
./emissary server -p 8443 --ssl --disableSniHostCheck --mode cluster
./emissary server -p 9443 --ssl --disableSniHostCheck --mode cluster
mkdir ~/Desktop/feed1
./emissary feed -p 7443 --ssl --disableSniHostCheck -i ~/Desktop/feed1/

お問い合わせ

一般的な質問

このプロジェクトに関する質問や懸念がある場合は、次のアドレスまでお問い合わせください: [email protected]

セキュリティに関する質問

セキュリティに関する質問や脆弱性の報告については、SECURITY.md を参照してください。

ツールをダウンロード