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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2025-44203 — CVE-2025-44203 用エクスプロイト。HotelDruid 3.0.0/3.0.7 の競合状態を標的とし、管理者認証情報を漏えいさせ、サービス拒否を引き起こします。オフラインでのパスワード復元用ブルートフォーススクリプトが含まれています。 | Kitploit
ツール/GitHubGitHub/ivant7d3/cve-2025-44203
パスワードクラッキング脆弱性分析エクスプロイトウェブアプリケーション悪用情報収集
GitHubivant7d3/cve-2025-44203

CVE-2025-44203

CVE-2025-44203 用エクスプロイト。HotelDruid 3.0.0/3.0.7 の競合状態を標的とし、管理者認証情報を漏えいさせ、サービス拒否を引き起こします。オフラインでのパスワード復元用ブルートフォーススクリプトが含まれています。

リポジトリを見る
62ヶ月前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2025-44203: HotelDruid 3.0.0 / 3.0.7 機密情報の開示および DoS

概要

HotelDruid 3.0.0 および 3.0.7 には、セットアップ完了前に到達可能な creadb.php セットアップエンドポイントに競合状態があります。影響は 2 つあり、どちらも同じ敗北した競合に起因します: 機密情報の開示(冗長な SQL エラーメッセージによる)とサービス拒否(DoS)です。

一度に多数の POST リクエストを送信することで、攻撃者は競合状態を引き起こし、管理者ユーザー名、パスワードハッシュ、ソルトを含む機密データをレスポンスから読み取ることができます。Debian パッケージの設定時に選択したパスワードが弱い場合、その後オフラインでワードリストにより復元できる可能性があります。

攻撃が成功すると、管理者はインストール中に設定した資格情報でログインできなくなります(サービス拒否)。

影響

  • 情報開示: 管理者のユーザー名、パスワードハッシュ、ソルトが HTTP レスポンスに表示されます。
  • サービス拒否: 攻撃が成功するとセットアップが破損し、管理者はログインできなくなります。復旧には HotelDruid の再インストールが必要です。

デモ

  • HotelDruid 3.0.0: 動画
  • HotelDruid 3.0.7: 動画

前提条件と信頼性

  • リモートの攻撃者がこのエンドポイントに到達するには、Debian パッケージのオプション「Restrict HotelDruid access to localhost?」がインストール時に「No」に設定されている必要があります。それ以外の場合、ホストマシン自身だけがエンドポイントに到達できます。
  • この攻撃は常に成功するわけではなく、失敗した場合は再試行できません。通常のセットアップが完了するとウィンドウが閉じるため、新しいインストールが必要です。
  • リソースは大きく影響します。成功した実行は、CPU 2 コア、RAM 2 GB の小さな VM 上でのものでした。4 コア以上、RAM 4 GB 以上のマシンでは、リクエストが速すぎて重なり合わないため、すべての試行が失敗しました。
  • スクリプトを編集してすべてのレスポンスを出力すると、ユーザー名だけしか復元できないことがあります。その理由は根本原因セクションで説明します。
  • 3.0.0 および 3.0.7 でテスト済みです。他のバージョンも影響を受ける可能性があります。

根本原因

Debian パッケージは、セットアップが完了するまで creadb.php をログインなしで到達可能なままにし、パッケージデフォルトの C_UTILIZZA_SEMPRE_DEFAULTS="AUTO" により、リクエストのたびにデータベース作成全体を再実行します。このルーチンは、100 を超える SQL ステートメント(テーブルの作成とデータ投入)をロックなしで発行するため、同時に届いた複数のリクエストが同じ処理を同時に実行します。これが競合状態です。

遅い、またはビジーなマシンでは、並行実行が重なり、SQLite データベース上で衝突します。あるリクエストがテーブルと行の作成を開始すると、後続のリクエストのステートメントは、行が既に存在する、別の書き込みによってデータベースがロックされているなど、さまざまな理由で大量に失敗します。失敗のたびに、HotelDruid のクエリラッパー esegui_query() は失敗したステートメント全体を HTTP レスポンスに出力します。つまり、1 つのレスポンスに多数の SQL エラーが含まれ、そのうちの 1 つに管理アカウントの機密情報が含まれることになります。

root@kitploit:~
update ...utenti set password = '<hash>', salt = '<salt>', tipo_pass = '5' where idutenti = '1'

これが、このエクスプロイトが成功を検出する仕組みです。レスポンス内で set password を検索します。これは、その正確なステートメントがエコーされた場合にのみ出現し、creadb.php の通常の出力では決して出現しません。

ロックアウトも同じ失敗に起因します。管理者行は最初に tipo_pass='n' で挿入され、上記の UPDATE だけがそれを動作するアカウント(tipo_pass='5' かつパスワード設定済み)に変えます。UPDATE の直後に実行されるコードは、それが成功したかどうかを決して確認しません。ログインを有効にする abilita_login ファイルを作成し、管理者の資格情報を保持していた ini.php を削除し、その後 ultimo_accesso を書き込んで、セットアップを完全に終了します。したがって、UPDATE が競合に負けると、アカウントは tipo_pass='n' のままになり、ログインページは正しいパスワードでも常に拒否します。一方、ログインは有効になり、資格情報ファイルは失われます。その時点で、再インストールなしに戻る方法はありません。

このため、情報漏えいの成功とロックアウトは実際には同じイベントです。どちらも、その 1 つの UPDATE が競合に負けたときに発生します。ユーザー名だけが得られた場合、それは、パスワード UPDATE がまだ成功している間に、より前のステートメントが衝突したことを意味し、したがってロックアウトは発生しません。

再現

攻撃者マシンからターゲットに対してエクスプロイトを実行します:

root@kitploit:~
python3 exploit.py 192.168.1.1

ここで、192.168.1.1 は HotelDruid が実行されているマシンの IP アドレスです。

成功した場合は、ワードリストとともに brute.py を使用して平文パスワードの復元を試みます。brute.py を開き、取得したソルトを salt に、取得したハッシュを final_hash に設定してから実行します:

root@kitploit:~
python3 brute.py rockyou.txt

ここで、rockyou.txt はワードリストです。

正しいユーザー名とパスワードを使用しても、あなたはログインできず、管理者も同様です。復元したパスワードは正しいのですが、成功した競合によってアカウントが tipo_pass='n' のままになっているため、ログインページはそれを拒否します。根本原因セクションを参照してください。

修正

この脆弱性は HotelDruid 3.0.8 で修正されました。チェンジログ はこちらです。"CVE-2025-44203" を検索するだけで見つかります。

そこで使用されるロックヘルパー(crea_lock_file()、ブロッキング flock(LOCK_EX))は、バージョン 3.0.7 ですでに存在し、コードの他の部分で使用されていました。しかし、creadb.php はそれを呼び出したことがありませんでした。パッチは次の 2 つのことを行います:

  1. セットアップルーチンの周囲で排他ロックを取得するため、同時に到着したリクエストは競合せずに順番を待ちます。この修正は、creadb.php で最終的にそのヘルパーを呼び出すことで実装されています。管理者プロビジョニングの直前にロックを取得し、その後 distruggi_lock_file() で解放します。これを機能させているのは、ロック取得直後のチェックです。最初に進入したリクエストが、ロックを保持したまま ini.php を削除し、すべてのリクエストがプロビジョニングの前に ini.php が存在するかどうかを再確認するため、後ろに並んだリクエストはロックを取得し、ファイルが既に存在しないことを確認して、ブロック全体をスキップします。2 番目のリクエストが実行される頃にはセットアップは完了しており、何も行われません。

  2. 2 つの管理者 UPDATE クエリにサイレントフラグを渡すため、そのうちの 1 つが失敗しても、資格情報がレスポンスに出力されなくなります。この修正は、ユーザー名を設定するクエリとパスワードとソルトを設定するクエリの 2 つの esegui_query() 呼び出しに、2 番目の引数 1 を追加することで実装されています。このフラグは、クエリが失敗したときにクエリラッパーに何も出力しないよう指示します。エラーはサーバーログに記録されますが、そうでなければ失敗したステートメント(ハッシュとソルトを含む)をページに出力していたであろう echo はスキップされます。

root@kitploit:~
creadb.php:

879: esegui_query("update $tableutenti set nome_utente = '".aggslashdb($admin)."' where idutenti = '1'",1);

897: esegui_query("update $tableutenti set password = '$passw', salt = '$salt', tipo_pass = '5' where idutenti = '1'",1);

参考

  • https://nvd.nist.gov/vuln/detail/CVE-2025-44203
  • https://www.cve.org/CVERecord?id=CVE-2025-44203
  • https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-44203
ツールをダウンロード