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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
path-auditor — ランタイムlibc関数監査ツール。LD_PRELOADを介してファイルシステムシステムコールをフックし、ファイルアクセスの競合状態やシンボリックリンクの脆弱性を検出します。潜在的な権限昇格パスをログに記録します。 | Kitploit
ツール/GitHubGitHub/google/path-auditor
特権昇格脆弱性分析動的コード分析 (DAST)エクスプロイトファジングバイナリ解析Archived
GitHubgoogle/path-auditor

path-auditor

ランタイムlibc関数監査ツール。LD_PRELOADを介してファイルシステムシステムコールをフックし、ファイルアクセスの競合状態やシンボリックリンクの脆弱性を検出します。潜在的な権限昇格パスをログに記録します。

リポジトリを見る
250385年前Kitploit レビュー済み

人気

すべて見る →

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

すべてのツールを探索

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

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

PathAuditor

PathAuditorは、libc関数を監査することでファイルアクセス関連の脆弱性を発見するためのツールです。

基本的なアイデアは以下の通りです:

  • バイナリによって実行されるファイルシステム関連のlibc関数へのすべての呼び出しを監査します。
  • システムコールで使用されたパスがユーザー書き込み可能かどうかを確認します。その場合、特権のないユーザーがディレクトリやファイルをシンボリックリンクに置き換えている可能性があります。
  • すべての違反を潜在的な脆弱性としてログに記録します。

LD_PRELOADを使用して、すべてのファイルシステム関連のライブラリコールをフックし、遭遇した違反をsyslogに記録しています。

これは公式にサポートされているGoogle製品ではありません。

脆弱性の例

このツールで検出できる脆弱性の例を見てみましょう。 CVE-2019-3461は、/tmpを走査して古いファイルを削除するツールtmpreaperのバグでした。通常はcronジョブとしてrootで実行されます。/tmp外のファイルを削除しないようにするため、ディレクトリがマウントポイントかどうかを確認するために以下のコードを使用していました。

root@kitploit:~
if (S_ISDIR (sb.st_mode)) {
    char *dst;

    if ((dst = malloc(strlen(ent->d_name) + 3)) == NULL)
        message (LOG_FATAL, "malloc failed.\n");
    strcpy(dst, ent->d_name);
    strcat(dst, "/X");
    rename(ent->d_name, dst);
    if (errno == EXDEV) {
        free(dst);
        message (LOG_VERBOSE,
                 "File on different device skipped: `%s/%s'\n",
                 dirname, ent->d_name);
        continue;
    }
    // [...]

要するに、このコードは rename("/tmp/foo", "/tmp/foo/x") を呼び出し、"/tmp/foo" がマウントポイントであれば EXDEV を返します。 PathAuditorは、"/tmp/foo" がroot以外のユーザーによって所有されている場合、この呼び出しを潜在的な脆弱性としてフラグ付けします。 その理由を理解するには、renameシステムコールがカーネルで実行されるときに何が起こるかを考える必要があります(簡略化):

  1. カーネルは最初の引数のパス "/tmp/foo" を辿ります。
  2. カーネルは2番目の引数のパス "/tmp/foo/x" を辿ります。
  3. ソースとターゲットが異なるファイルシステム上にある場合、EXDEVを返します。
  4. それ以外の場合は、ファイルを最初のディレクトリから2番目のディレクトリに移動します。

ここでは "/tmp/foo" が2回解決されるため、競合状態が発生します。ユーザーが制御できる場合、任意の時点で別のファイルに置き換えることができます。 特に、まず "/tmp/foo" がディレクトリであることを確認し、tmpreaperコードの if(S_ISDIR) チェックを通過させます。その後、コードがシステムコールに入る直前にファイルに置き換えます。カーネルが最初の引数を解決するとき、ユーザーが制御する内容のファイルが見えます。 ここで再び置き換え、今度は同じファイルシステム上の任意のディレクトリへのシンボリックリンクに置き換えます。カーネルはパスを2回目に解決し、シンボリックリンクをたどり、制御されたファイルを選択したディレクトリに移動します。

同じファイルシステムという制限があるのは、renameがファイルシステム間で機能しないためです。しかし、一部のLinuxディストリビューションでは、デフォルトで/tmpはルートファイルシステム上の単なるフォルダであり、このバグを使ってファイルを/etc/cronに移動し、rootとして実行される可能性があります。

実行方法

試すには、bazelでlibpath_auditor.soをビルドし、LD_PRELOADを使用してバイナリにロードする必要があります。違反はすべてsyslogに記録されるので、syslogが実行されていることを確認してください。

root@kitploit:~
bazel build //pathauditor/libc:libpath_auditor.so
LD_PRELOAD=/path/to/bazel-bin/pathauditor/libc/libpath_auditor.so cat /tmp/foo/bar
tail /var/log/syslog

これを/etc/ld.so.preloadに追加することで、システム上のすべてのプロセスで実行することも可能です。ただし、これはテストシステムでのみ推奨され、不安定になる可能性があることに注意してください。

クイックスタートとして、このプロジェクトに含まれているDockerコンテナを試すことができます:

root@kitploit:~
docker build -t pathauditor-example .
docker run -it pathauditor-example
# LD_PRELOAD=/pathauditor/bazel-bin/pathauditor/libc/libpath_auditor.so cat /tmp/foo/bar
# cat /var/log/syslog
ツールをダウンロード