
自動生成された研究アーティファクト — 上流プロジェクトではありません。
このリポジトリは、ラヴァル大学の修士論文のために、公開されたGitHub Actionsワークフローの脆弱性を再現する目的で自動化ハーネスによって構築された使い捨てラボです。これは
NationalSecurityAgency/emissaryのコミット898488b489615581ea66d17954742c8e4ffb0323(2026-01-09)の逐語的スナップショットであり、そのプロジェクト自身のライセンスの下で再配布されており、そのライセンスファイルはこのスナップショットに変更なしで含まれています。上流プロジェクトは関与しておらず、決して標的にはなりません。ここで研究されている脆弱性はすでに公開されています。このリポジトリ内のすべてのシークレットと変数はランダムに生成されたダミー値であり、実際の認証情報は存在しません。アクション参照とランナーイメージは、2026-01-09時点で解決されたものに固定されています。スナップショットに加えられたすべての変更については、ハーネス出力の
pinning.mdを参照してください。質問や異議がある場合: [email protected]

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ネットワークの接続を維持します。
必要なコンポーネントのインストール、ソースコードの取得、Emissaryのビルドと実行に関する情報については、DEVELOPING.md ガイドをお読みください。
Emissaryをコンパイル、テスト、パッケージ化するには mvn clean package を実行します。
[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 スクリプトを引数なしで実行すると、すべての設定サブコマンドの一覧と簡単な説明が表示されます。
./emissary
./emissary help を実行すると、引数なしで実行した場合と同じ出力が得られます。コマンドのより詳細な情報を確認したい場合は、helpの後にコマンド名を追加してください。たとえば、server コマンドの説明付きのすべての引数を確認するには、次を実行します:
./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 で制御できます。実行例は次のとおりです。
./emissary server -a 2
追加の設定なしで、http://localhost:8001 で起動します。そのURLにブラウザでアクセスすると、target/config/jetty-users.propertiesで定義されているユーザー名とパスワード(emissaryとemissary123)を入力する必要があります。
デフォルトのPickUpPlaceは、target/data/InputData からファイルを読み取るように設定されています。そのディレクトリにファイルをコピーすると、Emissaryがそれらを処理するのを確認できます。toUpperとtoLowerのみが設定されているため、出力はそれほど面白くないことに注意してください。
サービスが作業を受け取るのを停止します
./emissary server --pause
一時停止されたサービスが作業を受け取れるようにします
./emissary server --unpause
リフレッシュ可能なサービスを無効化します。これは、ServiceProviderRefreshablePlaceを無効化するダウンタイムなしのアプローチである「軽い」リフレッシュです。プレースがDirectoryPlaceから取得されると、DirectoryPlaceとNamespaceには同じキーが使用されてプレースが再作成されますが、コンフィギュレータが再ロードされ、プレースはその設定のサブセットを再ロードできます。
./emissary server --invalidate
サービスの強制リフレッシュ。これは「ハード」リフレッシュであり、サーバーは一時停止され、MobileAgentがドレインされるのを待ちます。サーバーが完全にアイドル状態になると、すべてのServiceProviderRefreshablePlaceの既存キーがDirectoryPlaceとNamespaceから削除され、プレースが完全に再作成されます。これにより、サービス名、プロキシ、拒否リストなどの変更が可能になります。その後、サーバーは処理を再開するために一時停止解除されます。リフレッシュ中に障害が発生するとサーバーが悪い状態になる可能性があるため、サーバーはシャットダウンされます。
./emissary server --refresh
サービスをシャットダウンします
./emissary server --stop
サービスを強制的にシャットダウンします
./emissary server --kill
agentsコマンドは、設定されたホストのMobileAgentの数と、それらのエージェントが何をしているかを表示します。デフォルトではポートは9001ですが、-p または --port で変更できます。上記のserverコマンドで8001で実行していると仮定して、次を試してください:
./emissary agents -p 8001
Poolは、ノードのエージェントの折りたたまれたビューです。これもデフォルトでポート9001を使用します。上記で起動したスタンドアロンサーバーに対して実行するには、次を実行します
./emissary pool -p 8001
このコマンドは、すべてのノードのよりわかりやすいビューを提供するため、クラスターでより有用です。
Envコマンドは、サーバーが実行されている必要があります。サーバーにPROJECT_BASEやBIN_DIRなどのいくつかの設定値を要求します。引数なしでは、フォーマットされていないjsonレスポンスをダンプします。
./emissary env
ただし、bashでソースできるレスポンスをダンプすることもできます。
./emissary env --bashable
Emissaryサーバーの起動は実際にこのエンドポイントを呼び出し、設定された変数で $PROJECT_BASE}/env.sh をダンプします。これは、シェルスクリプトが source $PROJECT_BASE}/env.sh を実行して、他の場所で設定を気にすることなくそれらの変数を利用できるようにするためです。