
このリポジトリには、脆弱性を引き起こす実証コード(PoC)のみが含まれています。
その後、この脆弱性に対する完全なエクスプロイトを作成しました。詳細は以下のリンクにあります。
https://github.com/farazsth98/chronomaly

この PoC は、getpid システムコールによる CPU 時間の消費方法に大きく依存します。
そのため、この PoC を可能な限りシステムに依存しないようにしました。つまり、getpid システムコールが私のシステムよりも大幅に多くの(または少ない)時間を消費する環境でも動作するはずです。
これは、Linux カーネルの POSIX CPU タイマー実装における競合状態の脆弱性である CVE-2025-38352 の PoC です。2025年9月の Android セキュリティ情報では、この脆弱性が限定的かつ標的型の悪用に使用されたことが言及されています。
これは LTS 6.12.33 向けに書かれており、カーネル設定で を無効にする必要があります。また、Android カーネルが使用している設定に合わせて、完全なプリエンプション()も有効にしました。
CONFIG_POSIX_CPU_TIMERS_TASK_WORKCONFIG_PREEMPT=yレースに勝利すると、struct k_itimer の use-after-free に至ります。
テスト環境のセットアップ方法の詳細については、上記のブログ記事、特に「Testing Environment TL;DR」セクションを参照してください。
注: この PoC を動作させるためにパッチは不要です(以前の PoC で 500ms の mdelay が必要だったため、ここに記載しています 😅)。
私の環境では、この PoC は常に100回以内のリトライで発火しました(実際には60回を超えたことはありません)。信頼性はいくつかの箇所で改善できると思いますが、それは後で対応します。
profiler_patch.diff ファイルには、handle_posix_cpu_timers() にプロファイリングコードを適用するパッチが含まれています。これは、firing リストの反復処理に使用される実行時間を出力するため、レースウィンドウを拡張する方法を探るのに役立ちます。こちら を参照してください。
付属の Makefile でコンパイルし、/poc で実行するだけです。
プロファイラを実行したい場合は、PoC と同じ方法でコンパイルしてください。
質問があれば、Twitter やその他の場所で気軽に連絡してください。