2026年5月11日、GitHubはアドバイザリーGHSA-6rmh-7xcm-cpxjを公開し、CVE-2026-44338として追跡されているPraisonAI(約7,100のGitHubスターを持つオープンソースのマルチエージェントオーケストレーションフレームワーク)向けの脆弱性を発表しました。レガシーのapi_server.pyエントリーポイントはデフォルトで認証が無効化された状態で配布され、2つのエンドポイントGET /agentsとPOST /chatが任意の呼び出し元に公開されていました。
アドバイザリーが公開されてから3時間44分以内に、CVE-Detector/1.0として識別されるスキャナーがインターネット上に公開されている脆弱なエンドポイントをプローブしていました。アドバイザリーは13:56 UTC に公開されました。最初の標的型リクエストは同日17:40 UTCに到達しました。
Sysdig脅威研究チーム(TRT)は、複数のクラウドプロバイダー間で初期警告システムのフリートを運用し、アドバイザリー公開から悪用までの遅延時間を測定しています。PraisonAIの脆弱性アドバイザリー公開後の急速な悪用は、より広範な傾向の最新の例です:過去数ヶ月間、Sysdig TRTは公開からわずか数時間以内に悪用されるCVEが増加していることを観察しています。同様のパターンは、最近のMarimo、LMDeploy、およびLangflow CVEで観察されています。
Zero Day Clockで示されているように、AIは攻撃者がパッチをリバースエンジニアリングし、それらが対処する脆弱性を特定し、数分以内に機能的なエクスプロイトを生成することを可能にしています。証拠は、急速な悪用がもはや異常値ではなく、新興の常態であることを示唆しています。
以下の調査は、CVE-2026-44338の悪用に関するSysdig TRTの観察、関連する検出、および推奨されるアクションを検証しています。
タイムライン
|
時刻(UTC) |
イベント |
|---|---|
|
2026年5月11日、13:56:16 |
GHSA-6rmh-7xcm-cpxjが公開され、CVE-2026-44338が割り当てられました |
|
2026年5月11日、17:32:50 |
146.190.133.49からの最初の接触:汎用的な偵察(/、/.env、/admin) |
|
2026年5月11日、17:40:53 |
ソースIPがPraisonAI固有のエンドポイントに転換(/praisonai/version.txt、/docs、/api/agents/config、/api/agents) |
|
2026年5月11日、17:40:55 |
146.190.133.49からのGET /agents、User-Agent CVE-Detector/1.0 |
|
2026年5月11日、17:41:32 |
2番目のGET /agentsプローブ |
アドバイザリー公開から文書化された脆弱なパスに対する最初の標的型リクエストまでの時間は、3時間44分39秒でした。
PraisonAIの脆弱性
PraisonAIはsrc/praisonai/api_server.pyというレガシーのFlaskベースのAPIサーバーを配布しており、AUTH_ENABLED = FalseとAUTH_TOKEN = Noneをハードコードしています。check_auth()ヘルパーは認証が無効化されるたびにTrueを返すため、2つの「保護された」ルートは設計により安全に失敗します:
GET /agentsはエージェント定義ファイル名とエージェントのリストを含む、設定されたエージェントメタデータを返します。POST /chatはメッセージキーを含むJSON本体を受け入れ、PraisonAI(agent_file=”agents.yaml”).run()を実行します。送信されたメッセージ値は無視され、設定されたワークフローが呼び出し元が送信するコマンドに関わらず実行されます。
影響を受けるバージョン
|
範囲 |
ステータス |
|---|---|
|
≥ 2.5.6、≤ 4.6.33 |
脆弱 |
|
4.6.34 |
公開時点では、最新のPyPiリリースは4.6.33であり、その当時のすべてのインストールが脆弱でした。
Sysdig TRTが観察したもの
146.190.133.49(DigitalOcean USのIPアドレス)からのアクティビティは、対話的な探索ではなく、パッケージ化されたスキャナープロファイルに従いました。8分間隔で2つのパスが実行され、それぞれ約50秒間に約70個のリクエストをプッシュしました。最初のパスは汎用公開パスを一掃し(/.env、/admin、/users/sign_in、/eval、/calculate、/Gemfile.lock)、2番目のパスはAIエージェントサーフェスに絞られ、具体的には:
|
パスクラス |
サンプルパス |
|---|---|
|
FastAPIフィンガープリント |
GET /docs、GET /openapi.json、GET /swagger.json |
|
PraisonAIバージョンフィンガープリント |
GET /praisonai/version.txt、GET /pyproject.toml、GET /poetry.lock |
|
APIサーバーエンドポイント列挙(CVE-2026-44338) |
/api/agents/config、/api/agents、/api/v1/agents、/api/tasks、/api/tools、/agents |
|
MCPサーバーエンドポイント列挙 |
GET+POST on /api/mcp/config、/api/mcp/servers、/api/mcp/list、/api/mcp/status、/mcp/config、/api/v1/mcp、/api/tools/config |
CVE-2026-44338に直接一致したプローブは、Authorizationヘッダーなしの単一のGET /agentsであり、User-Agent CVE-Detector/1.0でした。そのリクエストは本体{"agent_file":"agents.yaml","agents":[...]}を含む200 OKを返し、認証回避が成功したことを確認しました。
スキャナーはどちらのパスでもPOST /chatを送信しませんでした。上記の目撃したパターンは検証ステップと一致しています:エージェントリストの列挙、認証回避が機能することの確認、ホストをエクスプロイト可能としてログに記録、そして移動。フォローアップツールは通常別個です。
次のステップ
これは典型的なリモートコード実行(RCE)ではありません:正常にフィンガープリントされたインスタンスに対するPOST /chatは単一のリクエストであり、影響は完全にオペレーターのagents.yamlがどのようにスクリプトされているかに依存します。
ハンドラーは送信されたメッセージを解析しません。代わりに、単にPraisonAI(agent_file="agents.yaml").run()を呼び出します。そのワークフローがどのように設定されているかに関わらず、認証されていない呼び出し元はしばしばそれを任意にトリガーできます。典型的な本番環境では、一般的に以下のことが見られます:
|
フェーズ |
結果 |
|---|---|
|
モデルAPIクォータ消費 |
設定されたワークフローはオペレーターのアカウントでOpenAI、Anthropic、Bedrock、または別のLLMプロバイダーへの呼び出しを行います。ボットネットからPOST /chatをループする攻撃者はオペレーターのクォータを消費し、それに対して課金します。最小限の努力で最高額の結果。 |
|
エージェントツール実行 |
PraisonAIワークフローは一般的にエージェントに対して、code_interpreter、ファイルI/O、ウェブフェッチ、シェル、またはHTTPリクエストツールへのアクセスを許可します。各/chatコールは、オペレーターが接続したサイドエフェクトを生成するツールを含む、完全なエージェントグラフを呼び出します。ファイルを書き込んだり、内部データセットから外挿したり、Slackメッセージを送信したり、ダウンストリームワークフローをトリガーできます。 |
|
設定開示 |
GET /agentsはエージェントファイル名とエージェントリストを返します。ワークフローによって生成されたデバッグログまたはエラーレスポンスと組み合わせると、攻撃者はオペレーターのエージェント設計、プロンプト、およびツール接続をマップできます。 |
回避自体は任意のコード実行ではありません。しかし、それはオペレーターが何か有用なことを行うために故意に公開したワークフロー形式から認証を削除するため、影響の上限はそのワークフローが行うことが許可されているすべてです。
侵害の指標
|
フィールド |
値 |
|---|---|
|
ソースIP |
146.190.133.49(AS14061、DigitalOcean LLC、米国) |
|
User-Agent |
CVE-Detector/1.0(このソースから他のUAは観察されていません) |
CVE-Detector/1.0文字列は防御者にとって操作上の有用な示唆です。任意のホストの任意のログに表示される同じUser-Agentは、どのエンドポイントにヒットしたかに関わらず、既知のCVE標的スキャナーとして扱われるべきです。
検出
アップグレードが可能になるまで、ネットワークレイヤー監視はこのクラスのトラフィックを明確に捉えます。回避はアプリケーションログに認証欠落信号を残さないためです。認証されていないリクエストが成功しても、合法的なリクエストと同じに見えます。検出は周辺で発生する必要があります:
AuthorizationヘッダーとUser-Agent CVE-Detector/1.0がないGET /agentsとPOST /chat用のWAFまたはログ検出ルールを設定します。- Pythonパッケージフィンガープリントパス(/pyproject.toml、/poetry.lock、/praisonai/version.txt、/requirements.txt)へのアクセスをチェックします。
PraisonAIを実行しているFalco計測ホストの場合、/chatがトリガーしたワークフローの悪用後のフットプリントは、設定されたツールが実行するもの:Pythonが部分プロセスを生成し、エージェントプロセスからのネットワーク出力、および作業ディレクトリの外のファイル書き込みです。予期しない子プロセスと解釈プロセスからのアウトバウンドネットワーク用の既存ルールは第2段階のアクティビティをキャッチしますが、回避自体はキャッチしません。
推奨事項
- PraisonAI 4.6.34以降にアップグレードします。
- レガシーapi_server.pyエントリーポイントから移行します。より新しいPraisonAIはデフォルトで127.0.0.1にバインドし、
--api-keyをサポートします。 - 既存のデプロイメントを監査します。サンプルAPIデプロイメントYAMLから起動されたインスタンスはhost: 0.0.0.0と
auth_enabled: falseを継承します。生成された設定はオペレーターに警告しません。 - トークンレスAPIが開発のために本当に必要な場合は、ループバックまたはプライベートネットワークにバインドします。そしてマルチエージェントフレームワークでインターネットに:8080を公開しないでください—絶対に。
- 2026年5月11日以降のモデルプロバイダーの請求を監査します。
- agents.yamlで参照されるすべての認証情報をローテーションします。
結論
CVE-2026-44338自体が深刻な懸念事項ですが、この悪用の背後には、より広範な傾向が迫っています。開発グレードのAPIサーバーでのデフォルトで認証が無効化されることは既知のアンチパターンであり、影響の上限は設定されたワークフローが何をするかによって制限されます。
しかし、より広範な懸念は2026年のアドバイザリー公開から悪用までの遅延時間の操作上の現実です。CVE-Detector/1.0というラベルが付いたツールがアドバイザリー公開からわずか3時間44分以内に、7,100未満のスターを持つプロジェクトで、インターネット上に公開されているAIエージェントインフラをこの特定のCVEについてプローブしていました。
敵のツールはAIおよびエージェントエコシステム全体にスケールしています—サイズに関わらず、家庭的な名前だけではなく—そしてデフォルトで認証されていない状態を配布するプロジェクトの操作上の仮定は、公開と活発な悪用の間のウィンドウが一桁時間で測定されることです。ランタイムセキュリティは、防御者が実時間で急速な脆弱性悪用を検出および対応する最も効果的なアプローチのままです。
クラウド検出と対応

